| @@ -67,6 +67,12 @@ Other changes: | |||||
| * added a new <native2asciifilter> filter that can perform non-ASCII | * added a new <native2asciifilter> filter that can perform non-ASCII | ||||
| to Unicode-escape conversions. | to Unicode-escape conversions. | ||||
| * <rmic> defaults to the "forking" compiler on JDK 9+ as the | |||||
| implementation class of rmic is not exported by its containing | |||||
| module and thus not accessible to Ant without applying -XaddExports | |||||
| magic. | |||||
| Bugzilla Report 59860 | |||||
| Changes from Ant 1.9.6 TO Ant 1.9.7 | Changes from Ant 1.9.6 TO Ant 1.9.7 | ||||
| =================================== | =================================== | ||||
| @@ -52,11 +52,13 @@ with the "build.rmic" property, the <code>compiler</code> | |||||
| attribute. or a nested element. | attribute. or a nested element. | ||||
| <a name="compilervalues">Here are the choices</a>:</p> | <a name="compilervalues">Here are the choices</a>:</p> | ||||
| <ul> | <ul> | ||||
| <li>default -the default compiler (kaffe or sun) for the platform. | |||||
| <li>sun (the standard compiler of the JDK)</li> | |||||
| <li>default -the default compiler (kaffe, sun or forking) for the platform. | |||||
| <li>sun (the standard compiler of the JDK < JDK 9)</li> | |||||
| <li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> | <li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> | ||||
| <li>weblogic</li> | <li>weblogic</li> | ||||
| <li>forking - the sun compiler forked into a separate process (since Apache Ant 1.7)</li> | |||||
| <li>forking - the sun compiler forked into a separate process (since | |||||
| Apache Ant 1.7). Starting with Ant 1.9.8 this is the default when | |||||
| running on JDK 9+.</li> | |||||
| <li>xnew - the sun compiler forked into a separate process, | <li>xnew - the sun compiler forked into a separate process, | ||||
| with the -Xnew option (since Ant 1.7). | with the -Xnew option (since Ant 1.7). | ||||
| This is the most reliable way to use -Xnew</li> | This is the most reliable way to use -Xnew</li> | ||||
| @@ -200,14 +200,18 @@ | |||||
| <target name="probe-rmic"> | <target name="probe-rmic"> | ||||
| <available property="kaffe.present" classname="jkaffe.rmi.rmic.RMIC"/> | <available property="kaffe.present" classname="jkaffe.rmi.rmic.RMIC"/> | ||||
| <available property="rmic.present" classname="sun.rmi.rmic.Main"/> | |||||
| <available property="wlrmic.present" classname="weblogic.rmic"/> | |||||
| <condition property="rmic5.present"> | |||||
| <and> | |||||
| <isset property="rmic.present"/> | |||||
| <available classname="java.net.Proxy"/> | |||||
| </and> | |||||
| <condition property="rmic.present"> | |||||
| <or> | |||||
| <available classname="sun.rmi.rmic.Main"/> | |||||
| <!-- we'll use forking as default for Java9 --> | |||||
| <available classname="java.lang.module.ModuleDescriptor"/> | |||||
| </or> | |||||
| </condition> | |||||
| <condition property="rmic.compiler" value="forking"> | |||||
| <available classname="java.lang.module.ModuleDescriptor"/> | |||||
| </condition> | </condition> | ||||
| <property name="rmic.compiler" value="sun"/> | |||||
| <available property="wlrmic.present" classname="weblogic.rmic"/> | |||||
| <condition property="rmic6.present"> | <condition property="rmic6.present"> | ||||
| <and> | <and> | ||||
| <isset property="rmic.present"/> | <isset property="rmic.present"/> | ||||
| @@ -269,24 +273,24 @@ | |||||
| </target> | </target> | ||||
| <target name="testRmic" if="rmic.present" depends="init"> | <target name="testRmic" if="rmic.present" depends="init"> | ||||
| <base-rmic compiler="sun"/> | |||||
| <base-rmic compiler="${rmic.compiler}"/> | |||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testRmicDest" if="rmic.present" depends="init"> | <target name="testRmicDest" if="rmic.present" depends="init"> | ||||
| <dest-rmic compiler="sun"/> | |||||
| <dest-rmic compiler="${rmic.compiler}"/> | |||||
| <assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
| </target> | </target> | ||||
| <target name="testRmicJArg" if="rmic.present" depends="init"> | <target name="testRmicJArg" if="rmic.present" depends="init"> | ||||
| <base-rmic compiler="sun"> | |||||
| <base-rmic compiler="${rmic.compiler}"> | |||||
| <compilerarg value="-J-mx256m" /> | <compilerarg value="-J-mx256m" /> | ||||
| </base-rmic> | </base-rmic> | ||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testRmicJArgDest" if="rmic.present" depends="init"> | <target name="testRmicJArgDest" if="rmic.present" depends="init"> | ||||
| <dest-rmic compiler="sun"> | |||||
| <dest-rmic compiler="${rmic.compiler}"> | |||||
| <compilerarg value="-J-mx256m" /> | <compilerarg value="-J-mx256m" /> | ||||
| </dest-rmic> | </dest-rmic> | ||||
| <assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
| @@ -328,7 +332,7 @@ | |||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testBadName" if="rmic.present" depends="init"> | |||||
| <target name="testBadName" depends="init"> | |||||
| <base-rmic | <base-rmic | ||||
| compiler="no-such-compiler" | compiler="no-such-compiler" | ||||
| /> | /> | ||||
| @@ -336,12 +340,12 @@ | |||||
| <target name="testExplicitClass" if="rmic.present" depends="init"> | <target name="testExplicitClass" if="rmic.present" depends="init"> | ||||
| <base-rmic | <base-rmic | ||||
| compiler="org.apache.tools.ant.taskdefs.rmic.SunRmic" | |||||
| compiler="org.apache.tools.ant.taskdefs.rmic.ForkingSunRmic" | |||||
| /> | /> | ||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testWrongClass" if="rmic.present" depends="init"> | |||||
| <target name="testWrongClass" depends="init"> | |||||
| <base-rmic | <base-rmic | ||||
| compiler="org.apache.tools.ant.BuildException" | compiler="org.apache.tools.ant.BuildException" | ||||
| /> | /> | ||||
| @@ -395,14 +399,14 @@ | |||||
| <assertAntCompiledInDest/> | <assertAntCompiledInDest/> | ||||
| </target> | </target> | ||||
| <target name="testForkingAntClasspath" if="rmic.present" depends="compileAntTimestamp"> | |||||
| <target name="testForkingAntClasspath" depends="compileAntTimestamp"> | |||||
| <base-rmic | <base-rmic | ||||
| compiler="forking" | compiler="forking" | ||||
| /> | /> | ||||
| <assertAntCompiled /> | <assertAntCompiled /> | ||||
| </target> | </target> | ||||
| <target name="testForkingAntClasspathDest" if="rmic.present" depends="compileAntTimestamp"> | |||||
| <target name="testForkingAntClasspathDest" depends="compileAntTimestamp"> | |||||
| <dest-rmic | <dest-rmic | ||||
| compiler="forking" | compiler="forking" | ||||
| /> | /> | ||||
| @@ -434,41 +438,41 @@ | |||||
| <!-- | <!-- | ||||
| This test stamps on the XML parser settings on java6, so it is disabled. | This test stamps on the XML parser settings on java6, so it is disabled. | ||||
| --> | --> | ||||
| <target name="testXnew" if="rmic5.present" unless="rmic6.present" depends="init"> | |||||
| <base-rmic compiler="sun"> | |||||
| <target name="testXnew" if="rmic.present" unless="rmic6.present" depends="init"> | |||||
| <base-rmic compiler="${rmic.compiler}"> | |||||
| <compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
| </base-rmic> | </base-rmic> | ||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testXnewDest" if="rmic5.present" unless="rmic6.present" depends="init"> | |||||
| <dest-rmic compiler="sun"> | |||||
| <target name="testXnewDest" if="rmic.present" unless="rmic6.present" depends="init"> | |||||
| <dest-rmic compiler="${rmic.compiler}"> | |||||
| <compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
| </dest-rmic> | </dest-rmic> | ||||
| <assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
| </target> | </target> | ||||
| <target name="testXnewForked" if="rmic5.present" depends="init"> | |||||
| <target name="testXnewForked" if="rmic.present" depends="init"> | |||||
| <base-rmic compiler="forking"> | <base-rmic compiler="forking"> | ||||
| <compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
| </base-rmic> | </base-rmic> | ||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testXnewForkedDest" if="rmic5.present" depends="init"> | |||||
| <target name="testXnewForkedDest" if="rmic.present" depends="init"> | |||||
| <dest-rmic compiler="forking"> | <dest-rmic compiler="forking"> | ||||
| <compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
| </dest-rmic> | </dest-rmic> | ||||
| <assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
| </target> | </target> | ||||
| <target name="testXnewCompiler" if="rmic5.present" depends="init"> | |||||
| <target name="testXnewCompiler" if="rmic.present" depends="init"> | |||||
| <base-rmic compiler="xnew"> | <base-rmic compiler="xnew"> | ||||
| </base-rmic> | </base-rmic> | ||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </target> | ||||
| <target name="testXnewCompilerDest" if="rmic5.present" depends="init"> | |||||
| <target name="testXnewCompilerDest" if="rmic.present" depends="init"> | |||||
| <dest-rmic compiler="xnew"> | <dest-rmic compiler="xnew"> | ||||
| </dest-rmic> | </dest-rmic> | ||||
| <assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
| @@ -22,6 +22,7 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.ClasspathUtils; | import org.apache.tools.ant.util.ClasspathUtils; | ||||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||||
| /** | /** | ||||
| * Creates the necessary rmic adapter, given basic criteria. | * Creates the necessary rmic adapter, given basic criteria. | ||||
| @@ -95,9 +96,13 @@ public final class RmicAdapterFactory { | |||||
| throws BuildException { | throws BuildException { | ||||
| //handle default specially by choosing the sun or kaffe compiler | //handle default specially by choosing the sun or kaffe compiler | ||||
| if (DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length() == 0) { | if (DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length() == 0) { | ||||
| rmicType = KaffeRmic.isAvailable() | |||||
| ? KaffeRmic.COMPILER_NAME | |||||
| : SunRmic.COMPILER_NAME; | |||||
| if (KaffeRmic.isAvailable()) { | |||||
| rmicType = KaffeRmic.COMPILER_NAME; | |||||
| } else if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { | |||||
| rmicType = ForkingSunRmic.COMPILER_NAME; | |||||
| } else { | |||||
| rmicType = SunRmic.COMPILER_NAME; | |||||
| } | |||||
| } | } | ||||
| if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { | if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { | ||||
| return new SunRmic(); | return new SunRmic(); | ||||
| @@ -27,6 +27,7 @@ import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.taskdefs.LogOutputStream; | import org.apache.tools.ant.taskdefs.LogOutputStream; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||||
| /** | /** | ||||
| * The implementation of the rmic for SUN's JDK. | * The implementation of the rmic for SUN's JDK. | ||||
| @@ -54,6 +55,9 @@ public class SunRmic extends DefaultRmicAdapter { | |||||
| + "available. A common solution is to " | + "available. A common solution is to " | ||||
| + "set the environment variable " | + "set the environment variable " | ||||
| + "JAVA_HOME"; | + "JAVA_HOME"; | ||||
| public static final String ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9 = "Cannot use SUN rmic, as it is not " | |||||
| + "available. The class we try to use is part of the jdk.rmic module which may not be. " | |||||
| + "Please use the 'forking' compiler for JDK 9+"; | |||||
| /** Error message to use when there is an error starting the sun rmic compiler */ | /** Error message to use when there is an error starting the sun rmic compiler */ | ||||
| public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: "; | public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: "; | ||||
| @@ -84,6 +88,10 @@ public class SunRmic extends DefaultRmicAdapter { | |||||
| (new Object[] {cmd.getArguments()})); | (new Object[] {cmd.getArguments()})); | ||||
| return ok.booleanValue(); | return ok.booleanValue(); | ||||
| } catch (ClassNotFoundException ex) { | } catch (ClassNotFoundException ex) { | ||||
| if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { | |||||
| throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9, | |||||
| getRmic().getLocation()); | |||||
| } | |||||
| throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH, | throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH, | ||||
| getRmic().getLocation()); | getRmic().getLocation()); | ||||
| } catch (Exception ex) { | } catch (Exception ex) { | ||||
| @@ -137,7 +137,7 @@ public class RmicAdvancedTest { | |||||
| * test weblogic | * test weblogic | ||||
| */ | */ | ||||
| @Test | @Test | ||||
| @Ignore("WLRmin tests don't work") | |||||
| @Ignore("WLRmic tests don't work") | |||||
| public void XtestWlrmic() throws Exception { | public void XtestWlrmic() throws Exception { | ||||
| buildRule.executeTarget("testWlrmic"); | buildRule.executeTarget("testWlrmic"); | ||||
| } | } | ||||
| @@ -146,7 +146,7 @@ public class RmicAdvancedTest { | |||||
| * test weblogic's stripping of -J args | * test weblogic's stripping of -J args | ||||
| */ | */ | ||||
| @Test | @Test | ||||
| @Ignore("WLRmin tests don't work") | |||||
| @Ignore("WLRmic tests don't work") | |||||
| public void XtestWlrmicJArg() throws Exception { | public void XtestWlrmicJArg() throws Exception { | ||||
| buildRule.executeTarget("testWlrmicJArg"); | buildRule.executeTarget("testWlrmicJArg"); | ||||
| } | } | ||||
| @@ -155,8 +155,7 @@ public class RmicAdvancedTest { | |||||
| * test the forking compiler | * test the forking compiler | ||||
| */ | */ | ||||
| @Test | @Test | ||||
| @Ignore("WLRmin tests don't work") | |||||
| public void NotestForking() throws Exception { | |||||
| public void testForking() throws Exception { | |||||
| buildRule.executeTarget("testForking"); | buildRule.executeTarget("testForking"); | ||||
| } | } | ||||
| @@ -1,140 +1,147 @@ | |||||
| /* | |||||
| * Licensed to the Apache Software Foundation (ASF) under one or more | |||||
| * contributor license agreements. See the NOTICE file distributed with | |||||
| * this work for additional information regarding copyright ownership. | |||||
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
| * (the "License"); you may not use this file except in compliance with | |||||
| * the License. You may obtain a copy of the License at | |||||
| * | |||||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| * | |||||
| */ | |||||
| package org.apache.tools.ant.util; | |||||
| import java.io.File; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.tools.ant.taskdefs.condition.Os; | |||||
| import org.junit.Assume; | |||||
| import org.junit.Test; | |||||
| import static org.junit.Assert.assertEquals; | |||||
| import static org.junit.Assert.assertFalse; | |||||
| import static org.junit.Assert.assertTrue; | |||||
| /** | |||||
| * TestCase for JavaEnvUtils. | |||||
| * | |||||
| */ | |||||
| public class JavaEnvUtilsTest { | |||||
| private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||||
| @Test | |||||
| public void testGetExecutableNetware() { | |||||
| Assume.assumeTrue("Test only runs on netware", Os.isName("netware")); | |||||
| assertEquals("java", JavaEnvUtils.getJreExecutable("java")); | |||||
| assertEquals("javac", JavaEnvUtils.getJdkExecutable("javac")); | |||||
| assertEquals("foo", JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo", JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testGetExecutableWindows() { | |||||
| Assume.assumeTrue("Test only runs on windows", Os.isFamily("windows")); | |||||
| String javaHome = | |||||
| FILE_UTILS.normalize(System.getProperty("java.home")) | |||||
| .getAbsolutePath(); | |||||
| String j = JavaEnvUtils.getJreExecutable("java"); | |||||
| assertTrue(j.endsWith(".exe")); | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| try { | |||||
| assertTrue(j+" is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| } catch (AssertionFailedError e) { | |||||
| // java.home is bogus | |||||
| assertEquals("java.exe", j); | |||||
| } | |||||
| j = JavaEnvUtils.getJdkExecutable("javac"); | |||||
| assertTrue(j.endsWith(".exe")); | |||||
| try { | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| String javaHomeParent = | |||||
| FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath(); | |||||
| assertTrue(j+" is normalized and in the JDK dir", | |||||
| j.startsWith(javaHomeParent)); | |||||
| assertTrue(j+" is normalized and not in the JRE dir", | |||||
| !j.startsWith(javaHome)); | |||||
| } catch (AssertionFailedError e) { | |||||
| // java.home is bogus | |||||
| assertEquals("javac.exe", j); | |||||
| } | |||||
| assertEquals("foo.exe", JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo.exe", JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testGetExecutableMostPlatforms() { | |||||
| Assume.assumeTrue("Test only runs on non Netware and non Windows systems", | |||||
| !Os.isName("netware") && !Os.isFamily("windows")); | |||||
| String javaHome = | |||||
| FILE_UTILS.normalize(System.getProperty("java.home")) | |||||
| .getAbsolutePath(); | |||||
| // could still be OS/2 | |||||
| String extension = Os.isFamily("dos") ? ".exe" : ""; | |||||
| String j = JavaEnvUtils.getJreExecutable("java"); | |||||
| if (!extension.equals("")) { | |||||
| assertTrue(j.endsWith(extension)); | |||||
| } | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| assertTrue(j+" is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| j = JavaEnvUtils.getJdkExecutable("javac"); | |||||
| if (!extension.equals("")) { | |||||
| assertTrue(j.endsWith(extension)); | |||||
| } | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| String javaHomeParent = | |||||
| FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath(); | |||||
| assertTrue(j+" is normalized and in the JDK dir", | |||||
| j.startsWith(javaHomeParent)); | |||||
| if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { | |||||
| assertTrue(j + " is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| } else { | |||||
| assertTrue(j + " is normalized and not in the JRE dir", | |||||
| !j.startsWith(javaHome)); | |||||
| } | |||||
| assertEquals("foo"+extension, | |||||
| JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo"+extension, | |||||
| JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testIsAtLeastJavaVersion() | |||||
| { | |||||
| assertTrue( | |||||
| "Current java version is not at least the current java version...", | |||||
| JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion())); | |||||
| } | |||||
| } | |||||
| /* | |||||
| * Licensed to the Apache Software Foundation (ASF) under one or more | |||||
| * contributor license agreements. See the NOTICE file distributed with | |||||
| * this work for additional information regarding copyright ownership. | |||||
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
| * (the "License"); you may not use this file except in compliance with | |||||
| * the License. You may obtain a copy of the License at | |||||
| * | |||||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||||
| * | |||||
| * Unless required by applicable law or agreed to in writing, software | |||||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| * See the License for the specific language governing permissions and | |||||
| * limitations under the License. | |||||
| * | |||||
| */ | |||||
| package org.apache.tools.ant.util; | |||||
| import java.io.File; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.tools.ant.taskdefs.condition.Os; | |||||
| import org.junit.Assume; | |||||
| import org.junit.Test; | |||||
| import static org.junit.Assert.assertEquals; | |||||
| import static org.junit.Assert.assertFalse; | |||||
| import static org.junit.Assert.assertTrue; | |||||
| import static org.junit.Assume.assumeTrue; | |||||
| /** | |||||
| * TestCase for JavaEnvUtils. | |||||
| * | |||||
| */ | |||||
| public class JavaEnvUtilsTest { | |||||
| private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||||
| @Test | |||||
| public void testGetExecutableNetware() { | |||||
| Assume.assumeTrue("Test only runs on netware", Os.isName("netware")); | |||||
| assertEquals("java", JavaEnvUtils.getJreExecutable("java")); | |||||
| assertEquals("javac", JavaEnvUtils.getJdkExecutable("javac")); | |||||
| assertEquals("foo", JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo", JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testGetExecutableWindows() { | |||||
| Assume.assumeTrue("Test only runs on windows", Os.isFamily("windows")); | |||||
| String javaHome = | |||||
| FILE_UTILS.normalize(System.getProperty("java.home")) | |||||
| .getAbsolutePath(); | |||||
| String j = JavaEnvUtils.getJreExecutable("java"); | |||||
| assertTrue(j.endsWith(".exe")); | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| try { | |||||
| assertTrue(j+" is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| } catch (AssertionFailedError e) { | |||||
| // java.home is bogus | |||||
| assertEquals("java.exe", j); | |||||
| } | |||||
| j = JavaEnvUtils.getJdkExecutable("javac"); | |||||
| assertTrue(j.endsWith(".exe")); | |||||
| try { | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| String javaHomeParent = | |||||
| FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath(); | |||||
| assertTrue(j+" is normalized and in the JDK dir", | |||||
| j.startsWith(javaHomeParent)); | |||||
| assertTrue(j+" is normalized and not in the JRE dir", | |||||
| !j.startsWith(javaHome)); | |||||
| } catch (AssertionFailedError e) { | |||||
| // java.home is bogus | |||||
| assertEquals("javac.exe", j); | |||||
| } | |||||
| assertEquals("foo.exe", JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo.exe", JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testGetExecutableMostPlatforms() { | |||||
| Assume.assumeTrue("Test only runs on non Netware and non Windows systems", | |||||
| !Os.isName("netware") && !Os.isFamily("windows")); | |||||
| String javaHome = | |||||
| FILE_UTILS.normalize(System.getProperty("java.home")) | |||||
| .getAbsolutePath(); | |||||
| // could still be OS/2 | |||||
| String extension = Os.isFamily("dos") ? ".exe" : ""; | |||||
| String j = JavaEnvUtils.getJreExecutable("java"); | |||||
| if (!extension.equals("")) { | |||||
| assertTrue(j.endsWith(extension)); | |||||
| } | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| assertTrue(j+" is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| j = JavaEnvUtils.getJdkExecutable("javac"); | |||||
| if (!extension.equals("")) { | |||||
| assertTrue(j.endsWith(extension)); | |||||
| } | |||||
| assertTrue(j+" is absolute", (new File(j)).isAbsolute()); | |||||
| String javaHomeParent = | |||||
| FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath(); | |||||
| assertTrue(j+" is normalized and in the JDK dir", | |||||
| j.startsWith(javaHomeParent)); | |||||
| if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { | |||||
| assertTrue(j + " is normalized and in the JRE dir", | |||||
| j.startsWith(javaHome)); | |||||
| } else { | |||||
| assertTrue(j + " is normalized and not in the JRE dir", | |||||
| !j.startsWith(javaHome)); | |||||
| } | |||||
| assertEquals("foo"+extension, | |||||
| JavaEnvUtils.getJreExecutable("foo")); | |||||
| assertEquals("foo"+extension, | |||||
| JavaEnvUtils.getJdkExecutable("foo")); | |||||
| } | |||||
| @Test | |||||
| public void testIsAtLeastJavaVersion() | |||||
| { | |||||
| assertTrue( | |||||
| "Current java version is not at least the current java version...", | |||||
| JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion())); | |||||
| } | |||||
| @Test | |||||
| public void isJavaVersionSupportsBothVersionsOfJava9() { | |||||
| assumeTrue(JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)); | |||||
| assertTrue("JAVA_1_9 is not considered equal to JAVA_9", | |||||
| JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_9)); | |||||
| } | |||||
| } | |||||