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 59e456372 66464: junitlauncher task's fork element now has a new 
optional "java" attribute to allow specifying a different Java installation to 
run the forked tests
59e456372 is described below

commit 59e456372f96b85a7f1a012f607edfc6b8f459bc
Author: Jaikiran Pai <jaiki...@apache.org>
AuthorDate: Thu Mar 2 13:05:24 2023 +0530

    66464: junitlauncher task's fork element now has a new optional "java" 
attribute to allow specifying a different Java installation to run the forked 
tests
---
 WHATSNEW                                           |  8 +++++++
 manual/Tasks/junitlauncher.html                    |  9 ++++++++
 .../testcases/taskdefs/optional/junitlauncher.xml  | 27 ++++++++++++++++++++++
 .../junitlauncher/confined/ForkDefinition.java     | 11 +++++++++
 .../junitlauncher/JUnitLauncherTaskTest.java       | 18 +++++++++++++++
 5 files changed, 73 insertions(+)

diff --git a/WHATSNEW b/WHATSNEW
index 216d69c41..cd2d2bcfc 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -18,6 +18,14 @@ Fixed bugs:
    This is now fixed.
    Bugzilla Report 66468
 
+Other changes:
+--------------
+
+ * <fork> element of the junitlauncher task now has a new optional "java"
+   attribute which can be used to point to a different Java installation
+   for runnning the forked tests.
+   Bugzilla Report 66464
+
 Changes from Ant 1.10.12 TO Ant 1.10.13
 =======================================
 
diff --git a/manual/Tasks/junitlauncher.html b/manual/Tasks/junitlauncher.html
index 0f20648e4..acecdddd5 100644
--- a/manual/Tasks/junitlauncher.html
+++ b/manual/Tasks/junitlauncher.html
@@ -631,6 +631,15 @@ the new JVM instance that will be created to launch the 
tests.
             JVM, is expected to contain the Ant runtime jars</td>
         <td>No. Value defaults to <code>true</code>.</td>
     </tr>
+    <tr>
+        <td>java</td>
+        <td>The command used to launch the forked <code>java</code> process. 
This attribute can be set
+        to point to a different installation of Java than the one that is 
currently being used to
+        run the Ant build
+            <p><em>Since Ant 1.10.14</em></p>
+        </td>
+        <td>No</td>
+    </tr>
 </table>
 
 The <code>fork</code> element allows the following nested elements:
diff --git a/src/etc/testcases/taskdefs/optional/junitlauncher.xml 
b/src/etc/testcases/taskdefs/optional/junitlauncher.xml
index 87b00adf0..1163dc23b 100644
--- a/src/etc/testcases/taskdefs/optional/junitlauncher.xml
+++ b/src/etc/testcases/taskdefs/optional/junitlauncher.xml
@@ -371,5 +371,32 @@
             <listener type="legacy-brief" sendSysOut="true" 
useLegacyReportingName="true"/>
         </junitlauncher>
     </target>
+
+    <target name="test-fork-different-java" depends="init">
+        <!-- create a symlinked file which points to the "java" command
+        and use that symlink to launch the forked JVM -->
+        <property name="different-java" value="${java.io.tmpdir}/foobarjava"/>
+        <delete file="${different-java}"/>
+        <symlink resource="${java.home}/bin/java" link="${different-java}"/>
+
+        <junitlauncher>
+            <classpath refid="test.classpath"/>
+            <test name="org.example.junitlauncher.vintage.ForkedTest" 
outputdir="${output.dir}">
+                <listener classname="org.example.junitlauncher.Tracker"
+                          outputDir="${output.dir}"
+                          resultFile="${test-fork-different-java.tracker}"
+                          if="test-fork-different-java.tracker"/>
+
+                <!-- we just verify that the launch of the forked JVM works 
fine and the test
+                succeeds. There isn't a (easy) way we can actually verify the 
binary that was used
+                to launch the forked JVM -->
+                <fork dir="${basedir}" java="${different-java}">
+                    <sysproperty key="junitlauncher.test.sysprop.one" 
value="forked"/>
+                </fork>
+
+                <listener type="legacy-xml"/>
+            </test>
+        </junitlauncher>
+    </target>
 </project>
 
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ForkDefinition.java
 
b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ForkDefinition.java
index cfa01d4d8..c8a40c6f8 100644
--- 
a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ForkDefinition.java
+++ 
b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ForkDefinition.java
@@ -101,6 +101,17 @@ public class ForkDefinition {
         return this.env;
     }
 
+    /**
+     * The command used to launch {@code java}. This can be a path to the 
{@code java}
+     * binary that will be used to launch the forked {@code java} process.
+     *
+     * @param java Path to the java command
+     * @since Ant 1.10.14
+     */
+    public void setJava(String java) {
+        this.commandLineJava.setVm(java);
+    }
+
     /**
      * Generates a new {@link CommandlineJava} constructed out of the 
configurations set on this
      * {@link ForkDefinition}
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 1c3667222..f3938d48a 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
@@ -22,6 +22,7 @@ import static 
org.example.junitlauncher.Tracker.verifySetupFailed;
 import static org.example.junitlauncher.Tracker.verifySkipped;
 import static org.example.junitlauncher.Tracker.verifySuccess;
 import static org.example.junitlauncher.Tracker.wasTestRun;
+import static org.junit.Assume.assumeTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,6 +34,7 @@ import java.nio.file.Paths;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildFileRule;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.condition.Os;
 import 
org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.JUnitLauncherTask;
 import org.apache.tools.ant.util.LoaderUtils;
 import org.example.junitlauncher.jupiter.JupiterSampleTest;
@@ -480,6 +482,22 @@ public class JUnitLauncherTaskTest {
                 ForkedTest.class.getName(), "testSysProp"));
     }
 
+    /**
+     * Tests that tests launched by the junitlauncher task can use a different 
"java" command
+     * to launch the forked JVM
+     */
+    @Test
+    public void testForkDifferentJava() throws Exception {
+        // the target uses symlink, so we first make sure symlink is available 
on this system
+        assumeTrue("Symlinks not supported on current operating system", 
Os.isFamily("unix"));
+        final String targetName = "test-fork-different-java";
+        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);

Reply via email to