1 package test.factory;
2 
3 import org.testng.Assert;
4 import org.testng.ITestResult;
5 import org.testng.TestListenerAdapter;
6 import org.testng.TestNG;
7 import org.testng.TestNGException;
8 import org.testng.annotations.Test;
9 
10 import test.SimpleBaseTest;
11 
12 import java.util.Iterator;
13 
14 public class FactoryDataProviderTest extends SimpleBaseTest {
15 
16   @Test(description = "Test @Factory(dataProvider) on a local static data provider")
factoryWithLocalDataProvider()17   public void factoryWithLocalDataProvider() {
18     runTest(FactoryDataProviderSampleTest.class, 41, 42);
19   }
20 
21   @Test(description = "Test @Factory(dataProvider) on a data provider in another class")
factoryWithStaticDataProvider()22   public void factoryWithStaticDataProvider() {
23     runTest(FactoryDataProviderStaticSampleTest.class, 43, 44);
24   }
25 
26   @Test(description = "Test @Factory(dataProvider) on a non static data provider with no arg ctor")
factoryWithNonStaticDataProvider()27   public void factoryWithNonStaticDataProvider() {
28     runTest(FactoryDataProviderWithNoArgCtorSampleErrorTest.class, 45, 46);
29   }
30 
31   @Test(expectedExceptions = TestNGException.class,
32       description = "Should fail because the data provider is not static")
factoryWithNonStaticDataProviderShouldFail()33   public void factoryWithNonStaticDataProviderShouldFail() {
34     runTest(FactoryDataProviderStaticSampleErrorTest.class, 43, 44);
35   }
36 
runTest(Class<?> cls, int n1, int n2)37   private void runTest(Class<?> cls, int n1, int n2) {
38     TestNG tng = create(cls);
39     TestListenerAdapter tla = new TestListenerAdapter();
40     tng.addListener(tla);
41     tng.run();
42 
43     Assert.assertEquals(tla.getPassedTests().size(), 2);
44     Iterator<ITestResult> iterator = tla.getPassedTests().iterator();
45     BaseFactory t1 = (BaseFactory) iterator.next().getInstance();
46     BaseFactory t2 = (BaseFactory) iterator.next().getInstance();
47 //    Assert.assertTrue(t1.getN() == n1 || t1.getN() == n2);
48 //    Assert.assertTrue(t2.getN() == n1 || t2.getN() == n2);
49 //    System.out.println("Results:" + t1.getN() + " " + t2.getN());
50     Assert.assertEquals(t1.getN(), n1);
51     Assert.assertEquals(t2.getN(), n2);
52   }
53 }
54