Author: peterreilly Date: Fri Dec 29 08:51:56 2006 New Revision: 491045 URL: http://svn.apache.org/viewvc?view=rev&rev=491045 Log: Check if classpath used with forked junit contains multi versions of ant
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java?view=diff&rev=491045&r1=491044&r2=491045 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java Fri Dec 29 08:51:56 2006 @@ -28,6 +28,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.lang.reflect.Constructor; +import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; @@ -126,6 +127,8 @@ */ public class JUnitTask extends Task { + private static final String LINE_SEP + = System.getProperty("line.separator"); private static final String CLASSPATH = "CLASSPATH="; private CommandlineJava commandline; private Vector tests = new Vector(); @@ -159,6 +162,9 @@ private boolean splitJunit = false; private JUnitTaskMirror delegate; + /** A boolean on whether to get the forked path for ant classes */ + private boolean forkedPathChecked = false; + // Attributes for basetest private boolean haltOnError = false; private boolean haltOnFail = false; @@ -1016,6 +1022,9 @@ execute.setEnvironment(environment); log(cmd.describeCommand(), Project.MSG_VERBOSE); + + checkForkedPath(cmd); + TestResultHolder result = new TestResultHolder(); try { result.exitCode = execute.execute(); @@ -1058,6 +1067,42 @@ } return result; + } + + /** + * Check the path for multiple different versions of + * ant. + */ + private void checkForkedPath(CommandlineJava cmd) { + if (forkedPathChecked) { + return; + } + forkedPathChecked = true; + if (!cmd.haveClasspath()) { + return; + } + AntClassLoader loader = new AntClassLoader( + getProject(), cmd.createClasspath(getProject())); + String projectResourceName = LoaderUtils.classNameToResource( + Project.class.getName()); + URL previous = null; + try { + for (Enumeration e = loader.getResources(projectResourceName); + e.hasMoreElements();) { + URL current = (URL) e.nextElement(); + if (previous != null && !current.equals(previous)) { + log("WARNING: multiple versions of ant detected " + + "in path for junit " + + LINE_SEP + " " + previous + + LINE_SEP + " and " + current, + Project.MSG_WARN); + return; + } + previous = current; + } + } catch (Exception ex) { + // Ignore exception + } } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]