bodewig     2004/10/13 03:23:30

  Modified:    src/main/org/apache/tools/ant/taskdefs/optional/junit
                        JUnitTask.java JUnitTestRunner.java
  Removed:     src/main/org/apache/tools/ant/taskdefs/optional/junit
                        ForkedVMWatcher.java
  Log:
  The code that tries to detect a crashing forked VM in <junit> breaks
  down when the VM runs multiple tests.
  
  The old code used a TestFormatter and detected a crash if the expected
  output had not been written.  If multiple tests get run in one VM, the
  TestRunner ignores the filename that has been passed in - and the task
  doesn't find any output.
  
  Even if it didn't ignore the file name, a single non-crashing test
  would have made the task think, the VM finished in a healthy way.
  
  Make the crash-detection more explcit and let the TestRunner cooperate
  more than before.
  
  This bug has been presented by Gump in cooperation with the Hivemind
  build.
  
  Revision  Changes    Path
  1.109     +2 -4      
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.108
  retrieving revision 1.109
  diff -u -r1.108 -r1.109
  --- JUnitTask.java    7 Oct 2004 16:15:36 -0000       1.108
  +++ JUnitTask.java    13 Oct 2004 10:23:30 -0000      1.109
  @@ -847,9 +847,7 @@
           }
   
           File vmWatcher = createTempPropertiesFile("junitvmwatcher");
  -        formatterArg.append("formatter=");
  -        formatterArg.append(ForkedVMWatcher.class.getName());
  -        formatterArg.append(",");
  +        formatterArg.append("nocrashfile=");
           formatterArg.append(vmWatcher);
           cmd.createArgument().setValue(formatterArg.toString());
   
  
  
  
  1.52      +23 -0     
ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
  
  Index: JUnitTestRunner.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- JUnitTestRunner.java      6 Oct 2004 15:01:55 -0000       1.51
  +++ JUnitTestRunner.java      13 Oct 2004 10:23:30 -0000      1.52
  @@ -21,6 +21,7 @@
   import java.io.ByteArrayOutputStream;
   import java.io.File;
   import java.io.FileInputStream;
  +import java.io.FileOutputStream;
   import java.io.IOException;
   import java.io.PrintStream;
   import java.io.PrintWriter;
  @@ -475,6 +476,7 @@
           boolean stackfilter = true;
           Properties props = new Properties();
           boolean showOut = false;
  +        String noCrashFile = null;
   
           if (args.length == 0) {
               System.err.println("required argument TestClassName missing");
  @@ -493,6 +495,8 @@
                   haltFail = Project.toBoolean(args[i].substring(14));
               } else if (args[i].startsWith("filtertrace=")) {
                   stackfilter = Project.toBoolean(args[i].substring(12));
  +            } else if (args[i].startsWith("nocrashfile=")) {
  +                noCrashFile = args[i].substring(12);
               } else if (args[i].startsWith("formatter=")) {
                   try {
                       createAndStoreFormatter(args[i].substring(10));
  @@ -540,6 +544,7 @@
                       if (errorOccured || failureOccured ) {
                           if ((errorOccured && haltError) 
                               || (failureOccured && haltFail)) {
  +                            registerNonCrash(noCrashFile);
                               System.exit(code);
                           } else {
                               if (code > returnCode) {
  @@ -558,6 +563,7 @@
                                   stackfilter, haltFail, showOut, props);
           }
   
  +        registerNonCrash(noCrashFile);
           System.exit(returnCode);
       }
   
  @@ -655,4 +661,21 @@
           runner.run();
           return runner.getRetCode();
        }
  +
  +    /**
  +     * @since Ant 1.7
  +     */
  +    private static void registerNonCrash(String noCrashFile) 
  +        throws IOException {
  +        if (noCrashFile != null) {
  +            FileOutputStream out = null;
  +            try {
  +                out = new FileOutputStream(noCrashFile);
  +                out.write(0);
  +                out.flush();
  +            } finally {
  +                out.close();
  +            }
  +        }
  +    }
   } // JUnitTestRunner
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to