diff --git a/build.xml b/build.xml index 7ca30bd49..d31fafc6a 100644 --- a/build.xml +++ b/build.xml @@ -298,7 +298,7 @@ - + @@ -330,7 +330,7 @@ - + diff --git a/docs/junit.html b/docs/junit.html index cb6abb49a..7445c9384 100644 --- a/docs/junit.html +++ b/docs/junit.html @@ -76,8 +76,7 @@ elements.

junit supports a nested <classpath> element, that represents a PATH like -structure. The value is ignored if fork is -disabled.

+structure.

jvmarg

diff --git a/src/etc/testcases/taskdefs/filter.xml b/src/etc/testcases/taskdefs/filter.xml index 9e11981b3..5925e978b 100644 --- a/src/etc/testcases/taskdefs/filter.xml +++ b/src/etc/testcases/taskdefs/filter.xml @@ -20,22 +20,26 @@ - + - + + + - + - + + + diff --git a/src/etc/testcases/taskdefs/taskdef.xml b/src/etc/testcases/taskdefs/taskdef.xml index eafcd6d18..94d76ec7b 100644 --- a/src/etc/testcases/taskdefs/taskdef.xml +++ b/src/etc/testcases/taskdefs/taskdef.xml @@ -19,7 +19,7 @@
- + diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java index a04a1ba34..aed6ee242 100644 --- a/src/main/org/apache/tools/ant/AntClassLoader.java +++ b/src/main/org/apache/tools/ant/AntClassLoader.java @@ -113,6 +113,7 @@ public class AntClassLoader extends ClassLoader { if (project.getJavaVersion().startsWith("1.1")) { // JDK > 1.1 adds these by default addSystemPackageRoot("java"); + addSystemPackageRoot("javax"); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index 1eb0b07ac..d6d1a3dd3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -749,7 +749,7 @@ public class Javac extends MatchingTask { try { /* * Many system have been reported to get into trouble with - * long command lines - no, not only Windows 8^). + * long command lines - no, not only Windows ;-). * * POSIX seems to define a lower limit of 4k, so use a temporary * file if the total length of the command line exceeds this limit. diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java index 432840245..bebab2192 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java @@ -54,6 +54,7 @@ package org.apache.tools.ant.taskdefs.optional.junit; +import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; @@ -76,14 +77,13 @@ import java.util.Vector; * *

JUnit is a framework to create unit test. It has been initially * created by Erich Gamma and Kent Beck. JUnit can be found at http://www.xprogramming.com/software.htm. + * href="http://www.junit.org">http://www.junit.org. * - *

This ant task runs a single TestCase. By default it spans a new - * Java VM to prevent interferences between different testcases, - * unless fork has been disabled. + *

To spawn a new Java VM to prevent interferences between + * different testcases, you need to enable fork. * * @author Thomas Haas - * @author Stefan Bodewig + * @author Stefan Bodewig */ public class JUnitTask extends Task { @@ -217,9 +217,24 @@ public class JUnitTask extends Task { Project.MSG_WARN); } - JUnitTestRunner runner = - new JUnitTestRunner(test, test.getHaltonerror(), - test.getHaltonfailure()); + JUnitTestRunner runner = null; + + Path classpath = commandline.getClasspath(); + if (classpath != null) { + log("Using CLASSPATH " + classpath, Project.MSG_VERBOSE); + AntClassLoader l = new AntClassLoader(project, classpath, + false); + // make sure the test will be accepted as a TestCase + l.addSystemPackageRoot("junit"); + // will cause trouble in JDK 1.1 if omitted + l.addSystemPackageRoot("org.apache.tools.ant"); + runner = new JUnitTestRunner(test, test.getHaltonerror(), + test.getHaltonfailure(), l); + } else { + runner = new JUnitTestRunner(test, test.getHaltonerror(), + test.getHaltonfailure()); + } + if (summary) { log("Running " + test.getName(), Project.MSG_INFO); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java index 9d9d3e7ce..1f3806299 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java @@ -75,7 +75,7 @@ import java.util.Vector; * *

Summary output is generated at the end. * - * @author Stefan Bodewig + * @author Stefan Bodewig */ public class JUnitTestRunner implements TestListener { @@ -135,14 +135,31 @@ public class JUnitTestRunner implements TestListener { */ private JUnitTest junitTest; + /** + * Constructor for fork=true or when the user hasn't specified a + * classpath. + */ public JUnitTestRunner(JUnitTest test, boolean haltOnError, boolean haltOnFailure) { + this(test, haltOnError, haltOnFailure, null); + } + + /** + * Constructor to use when the user has specified a classpath. + */ + public JUnitTestRunner(JUnitTest test, boolean haltOnError, + boolean haltOnFailure, ClassLoader loader) { this.junitTest = test; this.haltOnError = haltOnError; this.haltOnFailure = haltOnFailure; try { - Class testClass = Class.forName(test.getName()); + Class testClass = null; + if (loader == null) { + testClass = Class.forName(test.getName()); + } else { + testClass = loader.loadClass(test.getName()); + } try { Method suiteMethod= testClass.getMethod("suite", new Class[0]);