Browse Source

Allow the user to specify a classpath to <junit> even if fork="off".

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268059 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 24 years ago
parent
commit
47dce162e8
8 changed files with 56 additions and 20 deletions
  1. +2
    -2
      build.xml
  2. +1
    -2
      docs/junit.html
  3. +8
    -4
      src/etc/testcases/taskdefs/filter.xml
  4. +1
    -1
      src/etc/testcases/taskdefs/taskdef.xml
  5. +1
    -0
      src/main/org/apache/tools/ant/AntClassLoader.java
  6. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  7. +23
    -8
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  8. +19
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java

+ 2
- 2
build.xml View File

@@ -298,7 +298,7 @@
<!-- Run testcase --> <!-- Run testcase -->
<!-- =================================================================== --> <!-- =================================================================== -->
<target name="runtests" depends="compiletests" if="junit.present"> <target name="runtests" depends="compiletests" if="junit.present">
<junit printsummary="no" fork="yes" haltonfailure="yes">
<junit printsummary="no" haltonfailure="yes">
<classpath> <classpath>
<pathelement location="${lib.dir}/${name}.jar" /> <pathelement location="${lib.dir}/${name}.jar" />
<pathelement location="${build.tests}" /> <pathelement location="${build.tests}" />
@@ -330,7 +330,7 @@
</target> </target>


<target name="run.single.test" if="testcase" depends="compiletests"> <target name="run.single.test" if="testcase" depends="compiletests">
<junit printsummary="no" fork="yes" haltonfailure="yes">
<junit printsummary="no" haltonfailure="yes">
<classpath> <classpath>
<pathelement location="${lib.dir}/${name}.jar" /> <pathelement location="${lib.dir}/${name}.jar" />
<pathelement location="${build.tests}" /> <pathelement location="${build.tests}" />


+ 1
- 2
docs/junit.html View File

@@ -76,8 +76,7 @@ elements</a>.</p>


<p><code>junit</code> supports a nested <code>&lt;classpath&gt;</code> <p><code>junit</code> supports a nested <code>&lt;classpath&gt;</code>
element, that represents a <a href="index.html#path">PATH like element, that represents a <a href="index.html#path">PATH like
structure</a>. The value is ignored if <code>fork</code> is
disabled.</p>
structure</a>.</p>


<h4>jvmarg</h4> <h4>jvmarg</h4>




+ 8
- 4
src/etc/testcases/taskdefs/filter.xml View File

@@ -20,22 +20,26 @@


<target name="test5"> <target name="test5">
<filter token="year" value="2000" /> <filter token="year" value="2000" />
<copyfile src="filter1.txt" dest="filtered.tmp" filtering="yes"/>
<copy file="filter1.txt" tofile="filtered.tmp" filtering="yes" overwrite="yes" />
</target> </target>


<target name="test6"> <target name="test6">
<filter token="year" value="2000" /> <filter token="year" value="2000" />
<copydir src="." dest="./taskdefs.tmp" filtering="yes" includes="filter1.txt"/>
<copy todir="./taskdefs.tmp" filtering="yes" overwrite="yes">
<fileset dir="." includes="filter1.txt" />
</copy>
</target> </target>


<target name="test7"> <target name="test7">
<filter token="ROOT" value="root" /> <filter token="ROOT" value="root" />
<copyfile src="filter2.txt" dest="filtered.tmp" filtering="yes"/>
<copy file="filter2.txt" tofile="filtered.tmp" filtering="yes" overwrite="yes" />
</target> </target>


<target name="test8"> <target name="test8">
<filter token="ROOT" value="root" /> <filter token="ROOT" value="root" />
<copydir src="." dest="./taskdefs.tmp" filtering="yes" includes="filter2.txt"/>
<copy todir="./taskdefs.tmp" filtering="yes" overwrite="yes">
<fileset dir="." includes="filter2.txt"/>
</copy>
</target> </target>


</project> </project>

+ 1
- 1
src/etc/testcases/taskdefs/taskdef.xml View File

@@ -19,7 +19,7 @@
</target> </target>


<target name="test5"> <target name="test5">
<taskdef name="test" classname="org.apache.tools.ant.ProjectTest"/>
<taskdef name="test" classname="org.apache.tools.ant.Project" />
</target> </target>


</project> </project>

+ 1
- 0
src/main/org/apache/tools/ant/AntClassLoader.java View File

@@ -113,6 +113,7 @@ public class AntClassLoader extends ClassLoader {
if (project.getJavaVersion().startsWith("1.1")) { if (project.getJavaVersion().startsWith("1.1")) {
// JDK > 1.1 adds these by default // JDK > 1.1 adds these by default
addSystemPackageRoot("java"); addSystemPackageRoot("java");
addSystemPackageRoot("javax");
} }
} }




+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

@@ -749,7 +749,7 @@ public class Javac extends MatchingTask {
try { try {
/* /*
* Many system have been reported to get into trouble with * 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 * 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. * file if the total length of the command line exceeds this limit.


+ 23
- 8
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

@@ -54,6 +54,7 @@


package org.apache.tools.ant.taskdefs.optional.junit; 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.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
@@ -76,14 +77,13 @@ import java.util.Vector;
* *
* <p>JUnit is a framework to create unit test. It has been initially * <p>JUnit is a framework to create unit test. It has been initially
* created by Erich Gamma and Kent Beck. JUnit can be found at <a * created by Erich Gamma and Kent Beck. JUnit can be found at <a
* href="http://www.xprogramming.com/software.htm">http://www.xprogramming.com/software.htm</a>.
* href="http://www.junit.org">http://www.junit.org</a>.
* *
* <p> This ant task runs a single TestCase. By default it spans a new
* Java VM to prevent interferences between different testcases,
* unless <code>fork</code> has been disabled.
* <p> To spawn a new Java VM to prevent interferences between
* different testcases, you need to enable <code>fork</code>.
* *
* @author Thomas Haas * @author Thomas Haas
* @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/ */
public class JUnitTask extends Task { public class JUnitTask extends Task {


@@ -217,9 +217,24 @@ public class JUnitTask extends Task {
Project.MSG_WARN); 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) { if (summary) {
log("Running " + test.getName(), Project.MSG_INFO); log("Running " + test.getName(), Project.MSG_INFO);


+ 19
- 2
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java View File

@@ -75,7 +75,7 @@ import java.util.Vector;
* *
* <p>Summary output is generated at the end. * <p>Summary output is generated at the end.
* *
* @author <a href="mailto:stefan.bodewig@megabit.net">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/ */


public class JUnitTestRunner implements TestListener { public class JUnitTestRunner implements TestListener {
@@ -135,14 +135,31 @@ public class JUnitTestRunner implements TestListener {
*/ */
private JUnitTest junitTest; private JUnitTest junitTest;


/**
* Constructor for fork=true or when the user hasn't specified a
* classpath.
*/
public JUnitTestRunner(JUnitTest test, boolean haltOnError, public JUnitTestRunner(JUnitTest test, boolean haltOnError,
boolean haltOnFailure) { 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.junitTest = test;
this.haltOnError = haltOnError; this.haltOnError = haltOnError;
this.haltOnFailure = haltOnFailure; this.haltOnFailure = haltOnFailure;


try { 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 { try {
Method suiteMethod= testClass.getMethod("suite", new Class[0]); Method suiteMethod= testClass.getMethod("suite", new Class[0]);


Loading…
Cancel
Save