1package test.interleavedorder;
2
3import org.testng.Assert;
4import org.testng.TestListenerAdapter;
5import org.testng.TestNG;
6import org.testng.annotations.BeforeTest;
7import org.testng.annotations.Test;
8
9import test.BaseTest;
10import testhelper.OutputDirectoryPatch;
11
12import java.util.ArrayList;
13import java.util.List;
14
15
16public class InterleavedInvocationTest extends BaseTest {
17  public static List<String> LOG = new ArrayList<>();
18
19  @BeforeTest
20  public void beforeTest() {
21    LOG = new ArrayList<>();
22  }
23
24  private void verifyInvocation(int number, List<String> log, int index) {
25    Assert.assertEquals(log.get(index), "beforeTestChild" + number + "Class");
26    Assert.assertTrue(("test1".equals(log.get(index + 1)) && "test2".equals(LOG.get(index + 2)))
27        || ("test2".equals(LOG.get(index + 1)) && "test1".equals(LOG.get(index + 2))),
28        "test methods were not invoked correctly");
29    Assert.assertEquals(log.get(index + 3), "afterTestChild" + number + "Class");
30  }
31
32  @Test
33  public void invocationOrder() {
34    TestListenerAdapter tla = new TestListenerAdapter();
35    TestNG testng = new TestNG();
36    testng.setOutputDirectory(OutputDirectoryPatch.getOutputDirectory());
37    testng.setTestClasses(new Class[] { TestChild1.class, TestChild2.class });
38    testng.addListener(tla);
39    testng.setVerbose(0);
40    testng.run();
41
42    Assert.assertEquals(LOG.size(), 8, LOG.toString());
43    int number1 = "beforeTestChild1Class".equals(LOG.get(0)) ? 1 : 2;
44    int number2 = number1 == 1 ? 2 : 1;
45    verifyInvocation(number1, LOG, 0);
46    verifyInvocation(number2, LOG, 4);
47  }
48
49  public static void ppp(String s) {
50    System.out.println("[InterleavedTest] " + s);
51  }
52}
53