You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2020/01/11 02:21:06 UTC
[ant] branch master updated: bz-63958 Correctly parse the forked
mode launch definition in cases where a listener element is a sibling of
either test or testclasses element
This is an automated email from the ASF dual-hosted git repository.
jaikiran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ant.git
The following commit(s) were added to refs/heads/master by this push:
new 6a06674 bz-63958 Correctly parse the forked mode launch definition in cases where a listener element is a sibling of either test or testclasses element
6a06674 is described below
commit 6a06674efb82488a398fb5854af251f20e796f8c
Author: Jaikiran Pai <ja...@apache.org>
AuthorDate: Sat Jan 11 07:50:49 2020 +0530
bz-63958 Correctly parse the forked mode launch definition in cases where a listener element is a sibling of either test or testclasses element
---
WHATSNEW | 5 ++++
.../testcases/taskdefs/optional/junitlauncher.xml | 19 ++++++++++++
.../optional/junitlauncher/StandaloneLauncher.java | 34 ++++++++++++----------
.../junitlauncher/confined/ListenerDefinition.java | 8 +++++
.../junitlauncher/JUnitLauncherTaskTest.java | 15 ++++++++++
5 files changed, 65 insertions(+), 16 deletions(-)
diff --git a/WHATSNEW b/WHATSNEW
index bd2d22f..23b8e49 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -29,6 +29,11 @@ Fixed bugs:
* Fixes a potential ConcurrentModificationException in XMLLogger.
Bugzilla Report 63921
+ * Fixes a bug in junitlauncher task in forked mode, where if a listener element
+ was used as a sibling element for either the test or testclasses element,
+ then the forked mode launch would fail.
+ Bugzilla Report 63958
+
Other changes:
--------------
diff --git a/src/etc/testcases/taskdefs/optional/junitlauncher.xml b/src/etc/testcases/taskdefs/optional/junitlauncher.xml
index cb9a541..f86ddc8 100644
--- a/src/etc/testcases/taskdefs/optional/junitlauncher.xml
+++ b/src/etc/testcases/taskdefs/optional/junitlauncher.xml
@@ -351,5 +351,24 @@
</testclasses>
</junitlauncher>
</target>
+
+ <target name="bz-63958">
+ <junitlauncher>
+ <classpath refid="test.classpath"/>
+ <testclasses>
+ <listener classname="org.example.junitlauncher.Tracker"
+ outputDir="${output.dir}"
+ resultFile="${bz-63958.tracker}"
+ if="bz-63958.tracker"/>
+ <fileset dir="${build.classes.dir}">
+ <include name="**/ForkedTest.class"/>
+ </fileset>
+ <fork>
+ <sysproperty key="junitlauncher.test.sysprop.one" value="forked"/>
+ </fork>
+ </testclasses>
+ <listener type="legacy-plain" sendSysOut="true" />
+ </junitlauncher>
+ </target>
</project>
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/StandaloneLauncher.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/StandaloneLauncher.java
index 3f9d99f..9ff6cb8 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/StandaloneLauncher.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/StandaloneLauncher.java
@@ -156,24 +156,26 @@ public class StandaloneLauncher {
if (printSummary != null) {
forkedLaunch.setPrintSummary(Boolean.parseBoolean(printSummary));
}
- reader.nextTag();
- reader.require(START_ELEMENT, null, null);
- final String elementName = reader.getLocalName();
- switch (elementName) {
- case LD_XML_ELM_TEST: {
- forkedLaunch.addTests(Collections.singletonList(SingleTestClass.fromForkedRepresentation(reader)));
- break;
- }
- case LD_XML_ELM_TEST_CLASSES: {
- forkedLaunch.addTests(TestClasses.fromForkedRepresentation(reader));
- break;
- }
- case LD_XML_ELM_LISTENER: {
- forkedLaunch.addListener(ListenerDefinition.fromForkedRepresentation(reader));
- break;
+ int nextTag = reader.nextTag();
+ while (nextTag == START_ELEMENT) {
+ reader.require(START_ELEMENT, null, null);
+ final String elementName = reader.getLocalName();
+ switch (elementName) {
+ case LD_XML_ELM_TEST: {
+ forkedLaunch.addTests(Collections.singletonList(SingleTestClass.fromForkedRepresentation(reader)));
+ break;
+ }
+ case LD_XML_ELM_TEST_CLASSES: {
+ forkedLaunch.addTests(TestClasses.fromForkedRepresentation(reader));
+ break;
+ }
+ case LD_XML_ELM_LISTENER: {
+ forkedLaunch.addListener(ListenerDefinition.fromForkedRepresentation(reader));
+ break;
+ }
}
+ nextTag = reader.nextTag();
}
- reader.nextTag();
reader.require(END_ELEMENT, null, LD_XML_ELM_LAUNCH_DEF);
reader.next();
reader.require(END_DOCUMENT, null, null);
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ListenerDefinition.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ListenerDefinition.java
index 4a1009e..c600e60 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ListenerDefinition.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ListenerDefinition.java
@@ -28,6 +28,7 @@ import javax.xml.stream.XMLStreamWriter;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_CLASS_NAME;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_LISTENER_RESULT_FILE;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_OUTPUT_DIRECTORY;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_SEND_SYS_ERR;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_SEND_SYS_OUT;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LISTENER;
@@ -156,6 +157,9 @@ public class ListenerDefinition {
writer.writeAttribute(LD_XML_ATTR_CLASS_NAME, this.className);
writer.writeAttribute(LD_XML_ATTR_SEND_SYS_ERR, Boolean.toString(this.sendSysErr));
writer.writeAttribute(LD_XML_ATTR_SEND_SYS_OUT, Boolean.toString(this.sendSysOut));
+ if (this.outputDir != null) {
+ writer.writeAttribute(LD_XML_ATTR_OUTPUT_DIRECTORY, this.outputDir);
+ }
if (this.resultFile != null) {
writer.writeAttribute(LD_XML_ATTR_LISTENER_RESULT_FILE, this.resultFile);
}
@@ -175,6 +179,10 @@ public class ListenerDefinition {
if (sendSysOut != null) {
listenerDef.setSendSysOut(Boolean.parseBoolean(sendSysOut));
}
+ final String outputDir = reader.getAttributeValue(null, LD_XML_ATTR_OUTPUT_DIRECTORY);
+ if (outputDir != null) {
+ listenerDef.setOutputDir(outputDir);
+ }
final String resultFile = reader.getAttributeValue(null, LD_XML_ATTR_LISTENER_RESULT_FILE);
if (resultFile != null) {
listenerDef.setResultFile(resultFile);
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junitlauncher/JUnitLauncherTaskTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junitlauncher/JUnitLauncherTaskTest.java
index 56596c5..1c36672 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junitlauncher/JUnitLauncherTaskTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junitlauncher/JUnitLauncherTaskTest.java
@@ -465,6 +465,21 @@ public class JUnitLauncherTaskTest {
Files.deleteIfExists(tracker);
}
+
+ /**
+ * Tests that the forked test works fine when the {@code testclasses} element is used
+ * as a sibling of a {@code listener} element
+ */
+ @Test
+ public void testBz63958() throws Exception {
+ final String targetName = "bz-63958";
+ final Path trackerFile = setupTrackerProperty(targetName);
+ buildRule.executeTarget(targetName);
+
+ Assert.assertTrue("ForkedTest#testSysProp was expected to succeed", verifySuccess(trackerFile,
+ ForkedTest.class.getName(), "testSysProp"));
+ }
+
private Path setupTrackerProperty(final String targetName) {
final String filename = targetName + "-tracker.txt";
buildRule.getProject().setProperty(targetName + ".tracker", filename);