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]