blob: 7a49817fda41bc7cb1f5749a0baeccb6bf05f695 [file] [log] [blame]
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()][]);
}
}