1ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustpackage test.groupinvocation;
2ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
3ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport org.testng.TestListenerAdapter;
4ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport org.testng.TestNG;
5ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport org.testng.annotations.Test;
6ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport org.testng.xml.XmlSuite;
7ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport org.testng.xml.XmlTest;
8ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
9ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport test.SimpleBaseTest;
10ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
11ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustimport java.util.Arrays;
12ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
13ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust/**
14ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust * Test that <suite> tags can have groups.
15ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust */
16ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust@Test
17ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beustpublic class GroupSuiteTest extends SimpleBaseTest {
18ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
19ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void includeFromSuite0() {
20ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g(), g(), g("a", "b", "c"));
21ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
22ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
23ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void includeFromSuite1() {
24ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g("a"), g(), g("a"));
25ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
26ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
27ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void includeFromSuite2() {
28ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g("a", "b"), g(), g("a", "b"));
29ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
30ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
31ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void excludeFromSuite1() {
32ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g(), g("a"), g("b", "c"));
33ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
34ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
35ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void excludeFromSuite2() {
36ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g(), g("a", "b"), g("c"));
37ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
38ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
39ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  @Test(description = "Include in both suite and test")
40ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void includeTestAndSuite1() {
41ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g("a"), g(), g("b"), g(), g("a", "b"));
42ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
43ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
44ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  @Test(description = "Include in suite, exclude in test")
45ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  public void excludeTestAndSuite2() {
46ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(g(), g("a"), g(), g("a"), g("b", "c"));
47ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
48ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
49ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  private void runWithSuite(String[] suiteGroups, String[] excludedSuiteGroups,
50ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust      String[] methods) {
51ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    runWithSuite(suiteGroups, excludedSuiteGroups, g(), g(), methods);
52ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
53ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
54ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  private void runWithSuite(String[] suiteGroups, String[] excludedSuiteGroups,
55ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust      String[] testGroups, String[] excludedTestGroups,
56ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust      String[] methods) {
57ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    XmlSuite s = createXmlSuite("Groups");
58ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    s.setIncludedGroups(Arrays.asList(suiteGroups));
59ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    s.setExcludedGroups(Arrays.asList(excludedSuiteGroups));
60ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    XmlTest t = createXmlTest(s, "Groups-test", GroupSuiteSampleTest.class.getName());
61ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    t.setIncludedGroups(Arrays.asList(testGroups));
62ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    t.setExcludedGroups(Arrays.asList(excludedTestGroups));
63ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    TestListenerAdapter tla = new TestListenerAdapter();
64ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    TestNG tng = create();
65ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    tng.addListener(tla);
66ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    tng.setXmlSuites(Arrays.asList(new XmlSuite[] { s }));
67ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    tng.run();
68ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
69ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    verifyPassedTests(tla, methods);
70ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
71ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust
72ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  private String[] g(String... groups) {
73ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust    return groups;
74ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust  }
75ba016b8e709f9707040c03a1fef711df9f5cd168Cédric Beust}
76