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);