Skip to content

Commit 5834b19

Browse files
committed
Include listeners reference in testng-failed.xml
Closes #2879
1 parent 8b5f4d1 commit 5834b19

File tree

6 files changed

+100
-0
lines changed

6 files changed

+100
-0
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
Current
2+
Fixed: GITHUB-2879: Test listeners specified in parent testng.xml file are not included in testng-failed.xml file (Krishnan Mahadevan)
23
Fixed: GITHUB-2866: TestNG.xml doesn't honour Parallel value of a clone (Krishnan Mahadevan)
34
Fixed: GITHUB-2875: JUnitReportReporter should capture the test case output at the test case level
45
Fixed: GITHUB-2771: After upgrading to TestNG 7.5.0, setting ITestResult.status to FAILURE doesn't fail the test anymore (Julien Herr & Krishnan Mahadevan)

testng-core/src/main/java/org/testng/reporters/FailedReporter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ protected void generateFailureSuite(XmlSuite xmlSuite, ISuite suite, String outp
7777
}
7878

7979
if (null != failedSuite.getTests() && failedSuite.getTests().size() > 0) {
80+
if (xmlSuite.getParentSuite() != null
81+
&& !xmlSuite.getParentSuite().getLocalListeners().isEmpty()) {
82+
List<String> merged =
83+
Lists.merge(failedSuite.getListeners(), xmlSuite.getParentSuite().getListeners());
84+
failedSuite.setListeners(merged);
85+
}
8086
Utils.writeUtf8File(outputDir, TESTNG_FAILED_XML, failedSuite.toXml());
8187
Utils.writeUtf8File(suite.getOutputDirectory(), TESTNG_FAILED_XML, failedSuite.toXml());
8288
}

testng-core/src/test/java/test/reports/FailedReporterTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.nio.file.Path;
99
import java.util.Arrays;
1010
import java.util.Collection;
11+
import java.util.Collections;
1112
import java.util.List;
1213
import java.util.stream.Collectors;
1314
import org.testng.Assert;
@@ -32,9 +33,58 @@
3233
import test.reports.issue2611.TestClassWithBeforeSuiteSample;
3334
import test.reports.issue2611.TestClassWithBeforeTestSample;
3435
import test.reports.issue2611.TestClassWithJustTestMethodsSample;
36+
import test.reports.issue2879.AnotherPrintingListener;
37+
import test.reports.issue2879.PrintingListener;
38+
import test.reports.issue2879.TestClassSample;
3539

3640
public class FailedReporterTest extends SimpleBaseTest {
3741

42+
@Test(description = "GITHUB-2879")
43+
public void ensureParentListenersArePresentInFailedChildSuites() throws IOException {
44+
XmlSuite xmlParentSuite = createXmlSuite("parent_suite");
45+
xmlParentSuite.setListeners(Collections.singletonList(PrintingListener.class.getName()));
46+
XmlSuite xmlSuite = createXmlSuite("2879_suite");
47+
xmlSuite.setParentSuite(xmlParentSuite);
48+
XmlTest xmlChildTest = createXmlTest(xmlSuite, "2879_test");
49+
xmlChildTest.setClasses(Collections.singletonList(new XmlClass(TestClassSample.class)));
50+
xmlParentSuite.getChildSuites().add(xmlSuite);
51+
TestNG tng = create(xmlParentSuite);
52+
Path temp = Files.createTempDirectory("tmp");
53+
tng.setOutputDirectory(temp.toAbsolutePath().toString());
54+
tng.addListener(new FailedReporter());
55+
tng.run();
56+
57+
Collection<XmlSuite> failedSuites =
58+
new Parser(temp.resolve(FailedReporter.TESTNG_FAILED_XML).toAbsolutePath().toString())
59+
.parse();
60+
XmlSuite failedSuite = failedSuites.iterator().next();
61+
assertThat(failedSuite.getListeners()).containsExactly(PrintingListener.class.getName());
62+
}
63+
64+
@Test(description = "GITHUB-2879")
65+
public void ensureParentListenersAreAppendedInFailedChildSuites() throws IOException {
66+
XmlSuite xmlParentSuite = createXmlSuite("parent_suite");
67+
xmlParentSuite.setListeners(Collections.singletonList(PrintingListener.class.getName()));
68+
XmlSuite xmlSuite = createXmlSuite("2879_suite");
69+
xmlSuite.setParentSuite(xmlParentSuite);
70+
xmlSuite.setListeners(Collections.singletonList(AnotherPrintingListener.class.getName()));
71+
XmlTest xmlChildTest = createXmlTest(xmlSuite, "2879_test");
72+
xmlChildTest.setClasses(Collections.singletonList(new XmlClass(TestClassSample.class)));
73+
xmlParentSuite.getChildSuites().add(xmlSuite);
74+
TestNG tng = create(xmlParentSuite);
75+
Path temp = Files.createTempDirectory("tmp");
76+
tng.setOutputDirectory(temp.toAbsolutePath().toString());
77+
tng.addListener(new FailedReporter());
78+
tng.run();
79+
80+
Collection<XmlSuite> failedSuites =
81+
new Parser(temp.resolve(FailedReporter.TESTNG_FAILED_XML).toAbsolutePath().toString())
82+
.parse();
83+
XmlSuite failedSuite = failedSuites.iterator().next();
84+
assertThat(failedSuite.getListeners())
85+
.contains(PrintingListener.class.getName(), AnotherPrintingListener.class.getName());
86+
}
87+
3888
@Test
3989
public void failedFile() throws IOException {
4090
XmlSuite xmlSuite = createXmlSuite("Suite");
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package test.reports.issue2879;
2+
3+
import org.testng.IExecutionListener;
4+
5+
public class AnotherPrintingListener implements IExecutionListener {
6+
7+
@Override
8+
public void onExecutionStart() {}
9+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package test.reports.issue2879;
2+
3+
import org.testng.IInvokedMethod;
4+
import org.testng.IInvokedMethodListener;
5+
import org.testng.ITestResult;
6+
7+
public class PrintingListener implements IInvokedMethodListener {
8+
9+
@Override
10+
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {}
11+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package test.reports.issue2879;
2+
3+
import org.testng.Assert;
4+
import org.testng.annotations.Test;
5+
6+
public class TestClassSample {
7+
8+
@Test
9+
public void passingOne() {}
10+
11+
@Test
12+
public void passingTwo() {}
13+
14+
@Test
15+
public void failingOne() {
16+
Assert.fail();
17+
}
18+
19+
@Test
20+
public void failingTwo() {
21+
Assert.fail();
22+
}
23+
}

0 commit comments

Comments
 (0)