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 <[email protected]>
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);