package test.preserveorder; import org.testng.Assert; import org.testng.TestListenerAdapter; import org.testng.TestNG; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.testng.collections.Lists; import org.testng.xml.XmlClass; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.BaseLogTest; import test.SimpleBaseTest; import java.util.Arrays; import java.util.List; public class PreserveOrderTest extends SimpleBaseTest { @Test public void preserveClassOrder() { String[][] tests = new String[][] { new String[] { "AAA", "B", "C" }, new String[] { "AAA", "C", "B" }, new String[] { "B", "AAA", "C" }, new String[] { "B", "C", "AAA" }, new String[] { "C", "B", "AAA" }, new String[] { "C", "AAA", "B" }, }; for (String[] t : tests) { TestNG tng = create(); // tng.setVerbose(2); XmlSuite s = createXmlSuite("Suite"); String[] fullTestNames = new String[t.length]; for (int i = 0; i < t.length; i++) { fullTestNames[i] = "test.preserveorder." + t[i]; } XmlTest xt = createXmlTest(s, "Test", fullTestNames); xt.setPreserveOrder("true"); // System.out.println(s.toXml()); tng.setXmlSuites(Arrays.asList(s)); tng.run(); // 3 methods per class, 3 classes, so the log should contain 9 calls List<String> log = BaseLogTest.getLog(); Assert.assertEquals(log.size(), 9); // Every slice of 3 logs should belong to the same class in the same // order as in the specified string: AAA.a1, AAA.a2, AAA.a3, B.a1, etc... // Since we're only testing class ordering in this test, we only match // against the class name for (int i = 0; i < t.length; i++) { for (int j = 0; j < 3; j++) { Assert.assertTrue(log.get(j + (3 * i)).startsWith(t[i] + ".")); } } } } @Test public void preserveMethodOrder() { String[][] methods = 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" }, }; for (String[] m : methods) { TestNG tng = create(); // tng.setVerbose(2); XmlSuite s = createXmlSuite("Suite"); String testName = "test.preserveorder.AAA"; XmlTest xt = createXmlTest(s, "Test", testName); addMethods(xt.getXmlClasses().get(0), m); xt.setPreserveOrder("true"); // System.out.println(s.toXml()); tng.setXmlSuites(Arrays.asList(s)); tng.run(); List<String> log = BaseLogTest.getLog(); // System.out.println(log); for (int i = 0; i < log.size(); i++) { if (!log.get(i).endsWith(m[i])) { throw new AssertionError("Expected " + Arrays.asList(m) + " but got " + log); } } } } @Test public void orderShouldBePreservedWithDependencies() { TestNG tng = create(); XmlSuite s = createXmlSuite("PreserveOrder"); XmlTest t = new XmlTest(s); t.getXmlClasses().add(new XmlClass("test.preserveorder.ChuckTest4")); t.getXmlClasses().add(new XmlClass("test.preserveorder.ChuckTest3")); t.setPreserveOrder("true"); tng.setXmlSuites(Arrays.asList(s)); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); verifyPassedTests(tla, "c4TestOne", "c4TestTwo", "c4TestThree", "c3TestOne", "c3TestTwo", "c3TestThree"); } @Test(dataProvider = "dp") public void preserveOrderAnna(String[] classes, String[] expectedMethods) { TestNG tng = create(); XmlSuite s = createXmlSuite("PreserveOrder"); XmlTest t = new XmlTest(s); for (String c : classes) { t.getXmlClasses().add(new XmlClass("test.preserveorder." + c)); } t.setPreserveOrder("true"); tng.setXmlSuites(Arrays.asList(s)); TestListenerAdapter tla = new TestListenerAdapter(); tng.addListener(tla); tng.run(); verifyPassedTests(tla, expectedMethods); } @DataProvider public Object[][] dp() { String[][] classes = new String[][] { { "PrgTest", "SibTest", "EdnTest" }, { "PrgTest", "EdnTest", "SibTest" }, { "SibTest", "PrgTest", "EdnTest" }, { "SibTest", "EdnTest", "PrgTest" }, { "EdnTest", "PrgTest", "SibTest" }, { "EdnTest", "SibTest", "PrgTest" }, }; String[][] expectedMethods = new String[][] { { "prg1", "prg2", "sib1", "sib2", "edn1", "edn2" }, { "prg1", "prg2", "edn1", "edn2", "sib1", "sib2" }, { "sib1", "sib2", "prg1", "prg2", "edn1", "edn2" }, { "sib1", "sib2", "edn1", "edn2", "prg1", "prg2" }, { "edn1", "edn2", "prg1", "prg2", "sib1", "sib2" }, { "edn1", "edn2", "sib1", "sib2", "prg1", "prg2" }, }; List<Object[]> result = Lists.newArrayList(); for (int i = 0; i < classes.length; i++) { Object[] o = new Object[] { classes[i], expectedMethods[i] }; result.add(o); } return result.toArray(new Object[result.size()][]); } }