// Path: src/test/java/io/github/sskorol/datasuppliers/ExternalDataSuppliers.java
// public class ExternalDataSuppliers {
// 
//     @DataSupplier(transpose = true)
//     public User[] getExternalArrayData() {
//         return new User[]{
//                 new User("user1", "password1"),
//                 new User("user2", "password2")
//         };
//     }
// 
//     @DataSupplier
//     public List<String> getExternalCollectionData() {
//         return asList("data1", "data2");
//     }
// 
//     @DataSupplier
//     public Stream<Long> getExternalStreamData() {
//         return LongStream.range(0, 10)
//                          .filter(i -> i % 2 != 0)
//                          .boxed();
//     }
// 
//     @DataSupplier
//     public double getExternalObjectData() {
//         return 0.1;
//     }
// 
//     @DataSupplier(name = "Password supplier")
//     public String getPasswordFromNamedDataSupplier() {
//         return "qwerty";
//     }
// 
//     @DataSupplier(transpose = true)
//     public Tuple getExternalTupleData() {
//         return Tuple.of("1", 2, 3.0);
//     }
// 
//     @DataProvider
//     public static Iterator<Object[]> getCommonData() {
//         return Stream.of("data").map(d -> new Object[]{d}).iterator();
//     }
// 
//     @DataSupplier
//     public String getClassLevelGlobalData() {
//         return "data1";
//     }
// 
//     @DataSupplier
//     public String getClassLevelLocalData() {
//         return "data2";
//     }
// 
//     @DataSupplier(flatMap = true)
//     public StreamEx externalHashes() {
//         return StreamEx.of(Tuple.of("hash1", "password1"), Tuple.of("hash2", "password2"));
//     }
// }
// 
// Path: src/test/java/io/github/sskorol/entities/User.java
// @Data
// public class User {
// 
//     @FieldName("username")
//     private final String name;
//     private final String password;
// }


import io.github.sskorol.core.DataSupplier;
import io.github.sskorol.datasuppliers.ExternalDataSuppliers;
import io.github.sskorol.entities.User;
import io.vavr.Tuple;
import one.util.streamex.EntryStream;
import one.util.streamex.StreamEx;
import org.testng.annotations.Test;
import static java.util.Arrays.asList;
package io.github.sskorol.testcases;



public class TupleDataSupplierTests {

    @DataSupplier
    public Tuple getCommonTupleData() {
        return Tuple.of("data1", "data2");
    }

    @DataSupplier(transpose = true)
    public Tuple extractCommonTupleData() {
        return Tuple.of(1, new User("name", "password"));
    }

    @DataSupplier(flatMap = true)
    public StreamEx getInternallyExtractedTupleData() {
        var list1 = asList("data1", "data2");
        var list2 = asList("data3", "data4", "data5");
        var minSize = Math.min(list1.size(), list2.size());

        return EntryStream.of(list1)
            .limit(minSize)
            .mapKeyValue((i, val) -> Tuple.of(val, list2.get(i)));
    }

    @Test(dataProvider = "getCommonTupleData")
    public void supplyCommonTupleData(final String ob) {
        // not implemented
    }

    @Test(dataProvider = "extractCommonTupleData")
// Path: src/test/java/io/github/sskorol/datasuppliers/ExternalDataSuppliers.java
// public class ExternalDataSuppliers {
// 
//     @DataSupplier(transpose = true)
//     public User[] getExternalArrayData() {
//         return new User[]{
//                 new User("user1", "password1"),
//                 new User("user2", "password2")
//         };
//     }
// 
//     @DataSupplier
//     public List<String> getExternalCollectionData() {
//         return asList("data1", "data2");
//     }
// 
//     @DataSupplier
//     public Stream<Long> getExternalStreamData() {
//         return LongStream.range(0, 10)
//                          .filter(i -> i % 2 != 0)
//                          .boxed();
//     }
// 
//     @DataSupplier
//     public double getExternalObjectData() {
//         return 0.1;
//     }
// 
//     @DataSupplier(name = "Password supplier")
//     public String getPasswordFromNamedDataSupplier() {
//         return "qwerty";
//     }
// 
//     @DataSupplier(transpose = true)
//     public Tuple getExternalTupleData() {
//         return Tuple.of("1", 2, 3.0);
//     }
// 
//     @DataProvider
//     public static Iterator<Object[]> getCommonData() {
//         return Stream.of("data").map(d -> new Object[]{d}).iterator();
//     }
// 
//     @DataSupplier
//     public String getClassLevelGlobalData() {
//         return "data1";
//     }
// 
//     @DataSupplier
//     public String getClassLevelLocalData() {
//         return "data2";
//     }
// 
//     @DataSupplier(flatMap = true)
//     public StreamEx externalHashes() {
//         return StreamEx.of(Tuple.of("hash1", "password1"), Tuple.of("hash2", "password2"));
//     }
// }
// 
// Path: src/test/java/io/github/sskorol/entities/User.java
// @Data
// public class User {
// 
//     @FieldName("username")
//     private final String name;
//     private final String password;
// }


// Path: src/test/java/io/github/sskorol/testcases/TupleDataSupplierTests.java
import io.github.sskorol.core.DataSupplier;
import io.github.sskorol.datasuppliers.ExternalDataSuppliers;
import io.github.sskorol.entities.User;
import io.vavr.Tuple;
import one.util.streamex.EntryStream;
import one.util.streamex.StreamEx;
import org.testng.annotations.Test;
import static java.util.Arrays.asList;

package io.github.sskorol.testcases;



public class TupleDataSupplierTests {

    @DataSupplier
    public Tuple getCommonTupleData() {
        return Tuple.of("data1", "data2");
    }

    @DataSupplier(transpose = true)
    public Tuple extractCommonTupleData() {
        return Tuple.of(1, new User("name", "password"));
    }

    @DataSupplier(flatMap = true)
    public StreamEx getInternallyExtractedTupleData() {
        var list1 = asList("data1", "data2");
        var list2 = asList("data3", "data4", "data5");
        var minSize = Math.min(list1.size(), list2.size());

        return EntryStream.of(list1)
            .limit(minSize)
            .mapKeyValue((i, val) -> Tuple.of(val, list2.get(i)));
    }

    @Test(dataProvider = "getCommonTupleData")
    public void supplyCommonTupleData(final String ob) {
        // not implemented
    }

    @Test(dataProvider = "extractCommonTupleData")
    public void supplyExtractedTupleData(final int ob, final User user) {