1 package test.preserveorder; 2 3 import org.testng.Assert; 4 import org.testng.TestListenerAdapter; 5 import org.testng.TestNG; 6 import org.testng.annotations.Test; 7 import org.testng.xml.XmlClass; 8 import org.testng.xml.XmlSuite; 9 import org.testng.xml.XmlTest; 10 11 import test.BaseLogTest; 12 import test.SimpleBaseTest; 13 14 import java.util.Arrays; 15 import java.util.List; 16 17 public class PreserveOrderTest extends SimpleBaseTest { 18 19 @Test preserveClassOrder()20 public void preserveClassOrder() { 21 String[][] tests = new String[][] { 22 new String[] { "AAA", "B", "C" }, 23 new String[] { "AAA", "C", "B" }, 24 new String[] { "B", "AAA", "C" }, 25 new String[] { "B", "C", "AAA" }, 26 new String[] { "C", "B", "AAA" }, 27 new String[] { "C", "AAA", "B" }, 28 }; 29 for (String[] t : tests) { 30 TestNG tng = create(); 31 // tng.setVerbose(2); 32 XmlSuite s = createXmlSuite("Suite"); 33 String[] fullTestNames = new String[t.length]; 34 for (int i = 0; i < t.length; i++) { 35 fullTestNames[i] = "test.preserveorder." + t[i]; 36 } 37 XmlTest xt = createXmlTest(s, "Test", fullTestNames); 38 xt.setPreserveOrder("true"); 39 // System.out.println(s.toXml()); 40 tng.setXmlSuites(Arrays.asList(s)); 41 tng.run(); 42 43 // 3 methods per class, 3 classes, so the log should contain 9 calls 44 List<String> log = BaseLogTest.getLog(); 45 Assert.assertEquals(log.size(), 9); 46 47 // Every slice of 3 logs should belong to the same class in the same 48 // order as in the specified string: AAA.a1, AAA.a2, AAA.a3, B.a1, etc... 49 // Since we're only testing class ordering in this test, we only match 50 // against the class name 51 for (int i = 0; i < t.length; i++) { 52 for (int j = 0; j < 3; j++) { 53 Assert.assertTrue(log.get(j + (3 * i)).startsWith(t[i] + ".")); 54 } 55 } 56 } 57 } 58 59 @Test preserveMethodOrder()60 public void preserveMethodOrder() { 61 String[][] methods = new String[][] { 62 new String[] { "a1", "a2", "a3" }, 63 new String[] { "a1", "a3", "a2" }, 64 new String[] { "a2", "a1", "a3" }, 65 new String[] { "a2", "a3", "a1" }, 66 new String[] { "a3", "a2", "a1" }, 67 new String[] { "a3", "a1", "a2" }, 68 }; 69 70 for (String[] m : methods) { 71 TestNG tng = create(); 72 // tng.setVerbose(2); 73 XmlSuite s = createXmlSuite("Suite"); 74 String testName = "test.preserveorder.AAA"; 75 XmlTest xt = createXmlTest(s, "Test", testName); 76 addMethods(xt.getXmlClasses().get(0), m); 77 xt.setPreserveOrder("true"); 78 // System.out.println(s.toXml()); 79 tng.setXmlSuites(Arrays.asList(s)); 80 tng.run(); 81 82 List<String> log = BaseLogTest.getLog(); 83 // System.out.println(log); 84 for (int i = 0; i < log.size(); i++) { 85 if (!log.get(i).endsWith(m[i])) { 86 throw new AssertionError("Expected " + Arrays.asList(m) + " but got " + log); 87 } 88 } 89 } 90 } 91 92 @Test orderShouldBePreservedWithDependencies()93 public void orderShouldBePreservedWithDependencies() { 94 TestNG tng = create(); 95 XmlSuite s = createXmlSuite("PreserveOrder"); 96 XmlTest t = new XmlTest(s); 97 t.getXmlClasses().add(new XmlClass("test.preserveorder.ChuckTest4")); 98 t.getXmlClasses().add(new XmlClass("test.preserveorder.ChuckTest3")); 99 t.setPreserveOrder("true"); 100 tng.setXmlSuites(Arrays.asList(s)); 101 TestListenerAdapter tla = new TestListenerAdapter(); 102 tng.addListener(tla); 103 tng.run(); 104 105 verifyPassedTests(tla, "c4TestOne", "c4TestTwo", "c4TestThree", 106 "c3TestOne", "c3TestTwo", "c3TestThree"); 107 } 108 109 @Test(description = "preserve-order on a factory doesn't cause an NPE") factoryPreserve()110 public void factoryPreserve() { 111 TestNG tng = create(); 112 XmlSuite s = createXmlSuite("FactoryPreserve"); 113 XmlTest t = new XmlTest(s); 114 t.getXmlClasses().add(new XmlClass(TestClassFactory.class.getName())); 115 t.setPreserveOrder("true"); 116 tng.setXmlSuites(Arrays.asList(s)); 117 tng.run(); 118 } 119 } 120