You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2003/05/23 16:15:43 UTC

cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/optional/junit FormatterElement.java JUnitTask.java

bodewig     2003/05/23 07:15:43

  Modified:    .        WHATSNEW
               src/main/org/apache/tools/ant/taskdefs/optional/junit
                        FormatterElement.java JUnitTask.java
  Log:
  Load formatter from user specified classpath - even in the timeout case.
  
  PR: 19953
  Submitted by:	Mariano Benitez <mariano at fuegolabs dot com>
  
  Revision  Changes    Path
  1.424     +4 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.423
  retrieving revision 1.424
  diff -u -r1.423 -r1.424
  --- WHATSNEW	23 May 2003 13:40:34 -0000	1.423
  +++ WHATSNEW	23 May 2003 14:15:41 -0000	1.424
  @@ -132,6 +132,10 @@
   * file names that include spaces need to be quoted inside the @argfile
     argument using <javadoc> and JDK 1.4.  Bugzilla Report 16871.
   
  +* <junit> didn't work with custom formatters that were only available
  +  on the user specified classpath when a timeout occured.  Bugzilla
  +  Report 19953.
  +
   Other changes:
   --------------
   * Six new Clearcase tasks added.
  
  
  
  1.12      +20 -2     ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
  
  Index: FormatterElement.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- FormatterElement.java	7 Mar 2003 11:23:06 -0000	1.11
  +++ FormatterElement.java	23 May 2003 14:15:42 -0000	1.12
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -57,6 +57,7 @@
   import java.io.File;
   import java.io.FileOutputStream;
   import java.io.OutputStream;
  +import org.apache.tools.ant.AntClassLoader;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.types.EnumeratedAttribute;
   
  @@ -172,14 +173,31 @@
           return useFile;
       }
   
  +    /**
  +     * @since Ant 1.2
  +     */
       JUnitResultFormatter createFormatter() throws BuildException {
  +        return createFormatter(null);
  +    }
  +
  +    /**
  +     * @since Ant 1.6
  +     */
  +    JUnitResultFormatter createFormatter(ClassLoader loader) 
  +        throws BuildException {
  +
           if (classname == null) {
               throw new BuildException("you must specify type or classname");
           }
           
           Class f = null;
           try {
  -            f = Class.forName(classname);
  +            if (loader == null) {
  +                f = Class.forName(classname);
  +            } else {
  +                f = loader.loadClass(classname);
  +                AntClassLoader.initializeClass(f);
  +            }
           } catch (ClassNotFoundException e) {
               throw new BuildException(e);
           }
  
  
  
  1.64      +37 -23    ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  
  Index: JUnitTask.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- JUnitTask.java	12 May 2003 14:00:09 -0000	1.63
  +++ JUnitTask.java	23 May 2003 14:15:42 -0000	1.64
  @@ -835,26 +835,8 @@
               log("Using System properties " + System.getProperties(),
                   Project.MSG_VERBOSE);
               Path userClasspath = commandline.getClasspath();
  -            Path classpath = userClasspath == null
  -                                              ? null
  -                                              : (Path) userClasspath.clone();
  -            if (classpath != null) {
  -                if (includeAntRuntime) {
  -                    log("Implicitly adding " + antRuntimeClasses
  -                        + " to CLASSPATH", Project.MSG_VERBOSE);
  -                    classpath.append(antRuntimeClasses);
  -                }
  -
  -                cl = getProject().createClassLoader(classpath);
  -                cl.setParentFirst(false);
  -                cl.addJavaLibraries();
  -                log("Using CLASSPATH " + cl.getClasspath(),
  -                    Project.MSG_VERBOSE);
  -
  -                // make sure the test will be accepted as a TestCase
  -                cl.addSystemPackageRoot("junit");
  -                // will cause trouble in JDK 1.1 if omitted
  -                cl.addSystemPackageRoot("org.apache.tools.ant");
  +            if (userClasspath != null) {
  +                cl = createClassLoader();
                   cl.setThreadContextLoader();
               }
               runner = new JUnitTestRunner(test, test.getHaltonerror(),
  @@ -880,7 +862,7 @@
                   } else {
                       fe.setOutput(getDefaultOutput());
                   }
  -                runner.addFormatter(fe.createFormatter());
  +                runner.addFormatter(fe.createFormatter(cl));
               }
   
               runner.run();
  @@ -1013,10 +995,11 @@
        */
   
       private void logTimeout(FormatterElement[] feArray, JUnitTest test) {
  +        AntClassLoader cl = createClassLoader();
           for (int i = 0; i < feArray.length; i++) {
               FormatterElement fe = feArray[i];
               File outFile = getOutput(fe, test);
  -            JUnitResultFormatter formatter = fe.createFormatter();
  +            JUnitResultFormatter formatter = fe.createFormatter(cl);
               if (outFile != null && formatter != null) {
                   try {
                       OutputStream out = new FileOutputStream(outFile);
  @@ -1040,4 +1023,35 @@
           }
       }
   
  +    /**
  +     * Creates and configures an AntClassLoader instance from the
  +     * nested classpath element.
  +     *
  +     * @return null if there is no user-specified classpath.
  +     *
  +     * @since Ant 1.6
  +     */
  +    private AntClassLoader createClassLoader() {
  +        AntClassLoader cl = null;
  +        Path userClasspath = commandline.getClasspath();
  +        if (userClasspath != null) {
  +            Path classpath = (Path) userClasspath.clone();
  +            if (includeAntRuntime) {
  +                log("Implicitly adding " + antRuntimeClasses 
  +                    + " to CLASSPATH", Project.MSG_VERBOSE);
  +                classpath.append(antRuntimeClasses);
  +            }
  +
  +            cl = getProject().createClassLoader(classpath);
  +            cl.setParentFirst(false);
  +            cl.addJavaLibraries();
  +            log("Using CLASSPATH " + cl.getClasspath(), Project.MSG_VERBOSE);
  +
  +            // make sure the test will be accepted as a TestCase
  +            cl.addSystemPackageRoot("junit");
  +            // will cause trouble in JDK 1.1 if omitted
  +            cl.addSystemPackageRoot("org.apache.tools.ant");
  +        }
  +        return cl;
  +    }
   }