forked from testng-team/testng
/
AlterSuiteListenerTest.java
141 lines (114 loc) · 4.78 KB
/
AlterSuiteListenerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package test.listeners;
import org.testng.*;
import org.testng.annotations.Test;
import org.testng.internal.collections.Pair;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import test.SimpleBaseTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class AlterSuiteListenerTest extends SimpleBaseTest {
public static final String ALTER_SUITE_LISTENER = "AlterSuiteListener";
@Test
public void executionListenerWithXml() {
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterSuiteNameListener.class.getName()).second();
Assert.assertEquals(suite.getName(), AlterSuiteNameListener.class.getSimpleName());
}
@Test
public void executionListenerWithoutListener() {
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class).second();
Assert.assertEquals(suite.getName(), ALTER_SUITE_LISTENER);
}
@Test
public void executionListenerWithXml2() {
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterXmlTestsInSuiteListener.class.getName()).second();
Assert.assertEquals(suite.getTests().size(), 2);
}
@Test(description = "GITHUB-2469")
public void executionListenerWithXml3() {
Pair<TestNG, XmlSuite> retObjects = runTest(AlterSuiteListener1SampleTest.class,
AlterXmlTestWithParameterInSuiteListener.class.getName(), AlteredXmlSuiteReadListener.class.getName());
TestNG tng = retObjects.first();
XmlSuite suite = retObjects.second();
Assert.assertEquals(suite.getTests().size(), 2);
List<ISuiteListener> listeners = Optional.ofNullable(tng.getSuiteListeners()).orElse(new ArrayList<>());
Assert.assertFalse(listeners.isEmpty());
for (ISuiteListener iSuiteListener :
listeners) {
if (iSuiteListener instanceof AlteredXmlSuiteReadListener) {
AlteredXmlSuiteReadListener alteredXmlSuiteReadListener = (AlteredXmlSuiteReadListener) iSuiteListener;
XmlSuite xmlSuite = alteredXmlSuiteReadListener.currentSuiteOnStart.getXmlSuite();
List<XmlTest> tests = xmlSuite.getTests();
int i = 1;
for (XmlTest xmlTest:
tests) {
Assert.assertEquals(xmlTest.getParameter("param"), String.valueOf(i));
i++;
}
}
}
}
private Pair<TestNG, XmlSuite> runTest(Class<?> listenerClass, String... listenerNames) {
XmlSuite s = createXmlSuite(ALTER_SUITE_LISTENER);
createXmlTest(s, "Test", listenerClass.getName());
for (String listenerName:
listenerNames) {
s.addListener(listenerName);
}
TestNG tng = create();
tng.setXmlSuites(Arrays.asList(s));
tng.run();
Pair<TestNG, XmlSuite> returnObj = new Pair<>(tng, s);
return returnObj;
}
public static class AlterSuiteListener1SampleTest {
@Test
public void foo() {
}
}
public static class AlterSuiteNameListener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
suite.setName(getClass().getSimpleName());
}
}
public static class AlterXmlTestsInSuiteListener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
List<XmlTest> tests = suite.getTests();
XmlTest test = tests.get(0);
XmlTest anotherTest = new XmlTest(suite);
anotherTest.setName("foo");
anotherTest.setClasses(test.getClasses());
}
}
public static class AlterXmlTestWithParameterInSuiteListener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
List<XmlTest> tests = suite.getTests();
XmlTest test = tests.get(0);
List<XmlTest> newXmlTests = new ArrayList<>();
XmlTest newXmlTest = (XmlTest) test.clone();
newXmlTest.setName("name_1");
newXmlTest.addParameter("param", "1");
newXmlTests.add(newXmlTest);
newXmlTest = (XmlTest) test.clone();
newXmlTest.setName("name_2");
newXmlTest.addParameter("param", "2");
newXmlTests.add(newXmlTest);
suite.setTests(newXmlTests);
}
}
public static class AlteredXmlSuiteReadListener implements ISuiteListener {
public ISuite currentSuiteOnStart;
@Override
public void onStart(ISuite suite) {
currentSuiteOnStart = suite;
}
}
}