Skip to content

Commit 7fed142

Browse files
Issue #2469 (#2470)
Fix for "Parameters added in XmlTest during AlterSuiteListener not available in SuiteListener" Closes #2469
1 parent d882ce7 commit 7fed142

File tree

4 files changed

+80
-11
lines changed

4 files changed

+80
-11
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
Current
22
Fixed: GITHUB-2467: XmlTest does not copy the xmlClasses during clone (C.V.Aditya)
3+
Fixed: GITHUB-2469: Parameters added in XmlTest during AlterSuiteListener not available in SuiteListener (C.V.Aditya)
34
Fixed: GITHUB-2296: Fix for assertEquals not working for sets as order is not guaranteed. (Prashant Maroti)
45
Fixed: GITHUB-2465: Fix bux where Strings.join returns empty String
56
Fixed: GITHUB-1632: throwing SkipException sets iTestResult status to Failure instead of Skip (Julien Herr & Krishnan Mahadevan)

src/main/java/org/testng/xml/XmlTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,9 @@ public Object clone() {
426426
result.setJUnit(isJUnit());
427427
result.setParallel(getParallel());
428428
result.setVerbose(getVerbose());
429-
result.setParameters(getLocalParameters());
429+
Map<String, String> localParameters = new HashMap<>();
430+
localParameters.putAll(getLocalParameters());
431+
result.setParameters(localParameters);
430432
result.setXmlPackages(getXmlPackages());
431433
result.setTimeOut(getTimeOut());
432434
result.setXmlClasses(getXmlClasses());

src/test/java/test/listeners/AlterSuiteListenerTest.java

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,78 @@
11
package test.listeners;
22

3-
import org.testng.Assert;
4-
import org.testng.IAlterSuiteListener;
5-
import org.testng.TestNG;
3+
import org.testng.*;
64
import org.testng.annotations.Test;
5+
import org.testng.internal.collections.Pair;
76
import org.testng.xml.XmlSuite;
87
import org.testng.xml.XmlTest;
98
import test.SimpleBaseTest;
109

10+
import java.util.ArrayList;
1111
import java.util.Arrays;
1212
import java.util.List;
13+
import java.util.Optional;
1314

1415
public class AlterSuiteListenerTest extends SimpleBaseTest {
1516

1617
public static final String ALTER_SUITE_LISTENER = "AlterSuiteListener";
1718

1819
@Test
1920
public void executionListenerWithXml() {
20-
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterSuiteNameListener.class.getName());
21+
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterSuiteNameListener.class.getName()).second();
2122
Assert.assertEquals(suite.getName(), AlterSuiteNameListener.class.getSimpleName());
2223
}
2324

2425
@Test
2526
public void executionListenerWithoutListener() {
26-
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, null/*Donot add the listener*/);
27+
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class).second();
2728
Assert.assertEquals(suite.getName(), ALTER_SUITE_LISTENER);
2829
}
2930

3031
@Test
3132
public void executionListenerWithXml2() {
32-
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterXmlTestsInSuiteListener.class.getName());
33+
XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterXmlTestsInSuiteListener.class.getName()).second();
3334
Assert.assertEquals(suite.getTests().size(), 2);
3435
}
3536

37+
@Test(description = "GITHUB-2469")
38+
public void executionListenerWithXml3() {
39+
Pair<TestNG, XmlSuite> retObjects = runTest(AlterSuiteListener1SampleTest.class,
40+
AlterXmlTestWithParameterInSuiteListener.class.getName(), AlteredXmlSuiteReadListener.class.getName());
41+
TestNG tng = retObjects.first();
42+
XmlSuite suite = retObjects.second();
43+
Assert.assertEquals(suite.getTests().size(), 2);
44+
List<ISuiteListener> listeners = Optional.ofNullable(tng.getSuiteListeners()).orElse(new ArrayList<>());
45+
Assert.assertFalse(listeners.isEmpty());
46+
for (ISuiteListener iSuiteListener :
47+
listeners) {
48+
if (iSuiteListener instanceof AlteredXmlSuiteReadListener) {
49+
AlteredXmlSuiteReadListener alteredXmlSuiteReadListener = (AlteredXmlSuiteReadListener) iSuiteListener;
50+
XmlSuite xmlSuite = alteredXmlSuiteReadListener.currentSuiteOnStart.getXmlSuite();
51+
List<XmlTest> tests = xmlSuite.getTests();
52+
int i = 1;
53+
for (XmlTest xmlTest:
54+
tests) {
55+
Assert.assertEquals(xmlTest.getParameter("param"), String.valueOf(i));
56+
i++;
57+
}
58+
}
59+
}
60+
}
3661

37-
private XmlSuite runTest(Class<?> listenerClass, String listenerName) {
62+
private Pair<TestNG, XmlSuite> runTest(Class<?> listenerClass, String... listenerNames) {
3863
XmlSuite s = createXmlSuite(ALTER_SUITE_LISTENER);
3964
createXmlTest(s, "Test", listenerClass.getName());
40-
boolean addListener = (listenerName != null);
4165

42-
if (addListener) {
66+
67+
for (String listenerName:
68+
listenerNames) {
4369
s.addListener(listenerName);
4470
}
4571
TestNG tng = create();
4672
tng.setXmlSuites(Arrays.asList(s));
4773
tng.run();
48-
return s;
74+
Pair<TestNG, XmlSuite> returnObj = new Pair<>(tng, s);
75+
return returnObj;
4976
}
5077

5178
public static class AlterSuiteListener1SampleTest {
@@ -78,4 +105,37 @@ public void alter(List<XmlSuite> suites) {
78105
}
79106
}
80107

108+
public static class AlterXmlTestWithParameterInSuiteListener implements IAlterSuiteListener {
109+
110+
@Override
111+
public void alter(List<XmlSuite> suites) {
112+
XmlSuite suite = suites.get(0);
113+
List<XmlTest> tests = suite.getTests();
114+
XmlTest test = tests.get(0);
115+
116+
List<XmlTest> newXmlTests = new ArrayList<>();
117+
XmlTest newXmlTest = (XmlTest) test.clone();
118+
newXmlTest.setName("name_1");
119+
newXmlTest.addParameter("param", "1");
120+
newXmlTests.add(newXmlTest);
121+
122+
newXmlTest = (XmlTest) test.clone();
123+
newXmlTest.setName("name_2");
124+
newXmlTest.addParameter("param", "2");
125+
newXmlTests.add(newXmlTest);
126+
127+
suite.setTests(newXmlTests);
128+
}
129+
}
130+
131+
public static class AlteredXmlSuiteReadListener implements ISuiteListener {
132+
133+
public ISuite currentSuiteOnStart;
134+
135+
@Override
136+
public void onStart(ISuite suite) {
137+
currentSuiteOnStart = suite;
138+
}
139+
}
140+
81141
}

src/test/resources/testng.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,5 +995,11 @@
995995
<class name="test.timeout.github2440.TimeoutWithNoExecutorTest"/>
996996
</classes>
997997
</test>
998+
999+
<test name="GITHUB-2469">
1000+
<classes>
1001+
<class name="test.listeners.AlterSuiteListenerTest"/>
1002+
</classes>
1003+
</test>
9981004
</suite>
9991005

0 commit comments

Comments
 (0)