blob: 8f2ebfcc8f16c02d8c511e5161bbf3d0466a766f [file] [log] [blame]
/*
* 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.types;
import junit.framework.TestCase;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.JavaEnvUtils;
/**
* JUnit 3 testcases for org.apache.tools.ant.CommandlineJava
*
*/
public class CommandlineJavaTest extends TestCase {
private String cloneVm;
public CommandlineJavaTest(String name) {
super(name);
}
private Project project;
public void setUp() {
project = new Project();
project.setBasedir(System.getProperty("root"));
project.setProperty("build.sysclasspath", "ignore");
cloneVm = System.getProperty("ant.build.clonevm");
if (cloneVm != null) {
System.setProperty("ant.build.clonevm", "false");
}
}
public void tearDown() {
if (cloneVm != null) {
System.setProperty("ant.build.clonevm", cloneVm);
}
}
public void testGetCommandline() throws Exception {
CommandlineJava c = new CommandlineJava();
c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
c.setClassname("junit.textui.TestRunner");
c.createVmArgument().setValue("-Djava.compiler=NONE");
String[] s = c.getCommandline();
assertEquals("no classpath", 4, s.length);
/*
* After changing CommandlineJava to search for the java
* executable, I don't know, how to tests the value returned
* here without using the same logic as applied in the class
* itself.
*
* assertTrue("no classpath", "java", s[0]);
*/
assertEquals("no classpath", "-Djava.compiler=NONE", s[1]);
assertEquals("no classpath", "junit.textui.TestRunner", s[2]);
assertEquals("no classpath",
"org.apache.tools.ant.CommandlineJavaTest", s[3]);
try {
CommandlineJava c2 = (CommandlineJava) c.clone();
} catch (NullPointerException ex) {
fail("cloning should work without classpath specified");
}
c.createClasspath(project).setLocation(project.resolveFile("build.xml"));
c.createClasspath(project).setLocation(project.resolveFile(
System.getProperty(MagicNames.ANT_HOME)+"/lib/ant.jar"));
s = c.getCommandline();
assertEquals("with classpath", 6, s.length);
// assertEquals("with classpath", "java", s[0]);
assertEquals("with classpath", "-Djava.compiler=NONE", s[1]);
assertEquals("with classpath", "-classpath", s[2]);
assertTrue("build.xml contained",
s[3].indexOf("build.xml"+java.io.File.pathSeparator) >= 0);
assertTrue("ant.jar contained", s[3].endsWith("ant.jar"));
assertEquals("with classpath", "junit.textui.TestRunner", s[4]);
assertEquals("with classpath",
"org.apache.tools.ant.CommandlineJavaTest", s[5]);
}
public void testJarOption() throws Exception {
CommandlineJava c = new CommandlineJava();
c.createArgument().setValue("arg1");
c.setJar("myfile.jar");
c.createVmArgument().setValue("-classic");
c.createVmArgument().setValue("-Dx=y");
String[] s = c.getCommandline();
assertEquals("-classic", s[1]);
assertEquals("-Dx=y", s[2]);
assertEquals("-jar", s[3]);
assertEquals("myfile.jar", s[4]);
assertEquals("arg1", s[5]);
}
public void testSysproperties() {
String currentClasspath = System.getProperty("java.class.path");
assertNotNull(currentClasspath);
assertNull(System.getProperty("key"));
CommandlineJava c = new CommandlineJava();
Environment.Variable v = new Environment.Variable();
v.setKey("key");
v.setValue("value");
c.addSysproperty(v);
project.setProperty("key2", "value2");
PropertySet ps = new PropertySet();
ps.setProject(project);
ps.appendName("key2");
c.addSyspropertyset(ps);
try {
c.setSystemProperties();
String newClasspath = System.getProperty("java.class.path");
assertNotNull(newClasspath);
assertEquals(currentClasspath, newClasspath);
assertNotNull(System.getProperty("key"));
assertEquals("value", System.getProperty("key"));
assertTrue(System.getProperties().containsKey("java.class.path"));
assertNotNull(System.getProperty("key2"));
assertEquals("value2", System.getProperty("key2"));
} finally {
c.restoreSystemProperties();
}
assertNull(System.getProperty("key"));
assertNull(System.getProperty("key2"));
}
public void testAssertions() throws Exception {
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)
|| JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) {
return;
}
CommandlineJava c = new CommandlineJava();
c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
c.setClassname("junit.textui.TestRunner");
c.createVmArgument().setValue("-Djava.compiler=NONE");
Assertions a = new Assertions();
a.setProject(project);
Assertions.EnabledAssertion ea = new Assertions.EnabledAssertion();
ea.setClass("junit.textui.TestRunner");
a.addEnable(ea);
c.setAssertions(a);
String[] expected = new String[] {
null,
"-Djava.compiler=NONE",
"-ea:junit.textui.TestRunner",
"junit.textui.TestRunner",
"org.apache.tools.ant.CommandlineJavaTest",
};
// only the second iteration would pass because of PR 27218
for (int i = 0; i < 3; i++) {
String[] s = c.getCommandline();
assertEquals(expected.length, s.length);
for (int j = 1; j < expected.length; j++) {
assertEquals(expected[j], s[j]);
}
}
CommandlineJava c2 = (CommandlineJava) c.clone();
String[] s = c2.getCommandline();
assertEquals(expected.length, s.length);
for (int j = 1; j < expected.length; j++) {
assertEquals(expected[j], s[j]);
}
}
}