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]

Reply via email to