package test.preserveorder; import org.testng.Assert; import org.testng.ITestNGListener; import org.testng.TestNG; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.InvokedMethodNameListener; import test.SimpleBaseTest; import java.util.Arrays; import java.util.Iterator; import static org.assertj.core.api.Assertions.assertThat; public class PreserveOrderTest extends SimpleBaseTest { @DataProvider public static Object[][] dpTests() { return new Class<?>[][] { new Class<?>[] { A.class, B.class, C.class }, new Class<?>[] { A.class, C.class, B.class }, new Class<?>[] { B.class, A.class, C.class }, new Class<?>[] { B.class, C.class, A.class }, new Class<?>[] { C.class, B.class, A.class }, new Class<?>[] { C.class, A.class, B.class } }; } @Test(dataProvider = "dpTests") public void preserveClassOrder(Class<?>[] tests) { TestNG tng = create(); XmlSuite suite = createXmlSuite("Suite"); XmlTest test = createXmlTest(suite, "Test", tests); test.setPreserveOrder(true); tng.setXmlSuites(Arrays.asList(suite)); InvokedMethodNameListener listener = new InvokedMethodNameListener(); tng.addListener((ITestNGListener) listener); tng.run(); assertThat(listener.getInvokedMethodNames()).hasSize(9); Iterator<String> methods = listener.getInvokedMethodNames().iterator(); for (Class<?> testClass : tests) { for (int i = 1; i <= 3; i++) { String methodName = methods.next(); Assert.assertEquals(methodName, testClass.getSimpleName().toLowerCase() + i); } } } @DataProvider public static Object[][] dpMethods() { return new String[][] { new String[] { "a1", "a2", "a3" }, new String[] { "a1", "a3", "a2" }, new String[] { "a2", "a1", "a3" }, new String[] { "a2", "a3", "a1" }, new String[] { "a3", "a2", "a1" }, new String[] { "a3", "a1", "a2" } }; } @Test(dataProvider = "dpMethods") public void preserveMethodOrder(String[] methods) { TestNG tng = create(); XmlSuite suite = createXmlSuite("Suite"); XmlTest test = createXmlTest(suite, "Test", A.class); addMethods(test.getXmlClasses().get(0), methods); test.setPreserveOrder(true); tng.setXmlSuites(Arrays.asList(suite)); InvokedMethodNameListener listener = new InvokedMethodNameListener(); tng.addListener((ITestNGListener) listener); tng.run(); assertThat(listener.getInvokedMethodNames()).containsExactly(methods); } @Test public void orderShouldBePreservedWithDependencies() { TestNG tng = create(); XmlSuite suite = createXmlSuite("PreserveOrder"); XmlTest test = createXmlTest(suite, "Test", Chuck4Sample.class, Chuck3Sample.class); test.setPreserveOrder(true); tng.setXmlSuites(Arrays.asList(suite)); InvokedMethodNameListener listener = new InvokedMethodNameListener(); tng.addListener((ITestNGListener) listener); tng.run(); assertThat(listener.getSucceedMethodNames()).containsExactly( "c4TestOne", "c4TestTwo", "c4TestThree", "c3TestOne", "c3TestTwo", "c3TestThree" ); } @Test(description = "preserve-order on a factory doesn't cause an NPE") public void factoryPreserve() { TestNG tng = create(); XmlSuite suite = createXmlSuite("FactoryPreserve"); XmlTest test = createXmlTest(suite, "Test", ClassSampleFactory.class); test.setPreserveOrder(true); tng.setXmlSuites(Arrays.asList(suite)); tng.run(); } @Test(description = "GITHUB-1122 Use default value for preserve-order") public void preserveOrderValueShouldBeTheDefaultOne() { TestNG tng = create(Issue1122Sample.class); InvokedMethodNameListener listener = new InvokedMethodNameListener(); tng.addListener((ITestNGListener) listener); tng.run(); assertThat(listener.getFailedMethodNames()).isEmpty(); assertThat(listener.getSkippedMethodNames()).isEmpty(); } }