bodewig 2005/04/11 03:36:53
Modified: src/main/org/apache/tools/ant/taskdefs/optional/junit Tag:
ANT_16_BRANCH JUnitTestRunner.java
Log:
Merge fix for 30798
Revision Changes Path
No revision
No revision
1.42.2.10 +98 -99
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.42.2.9
retrieving revision 1.42.2.10
diff -u -r1.42.2.9 -r1.42.2.10
--- JUnitTestRunner.java 24 Mar 2005 08:36:40 -0000 1.42.2.9
+++ JUnitTestRunner.java 11 Apr 2005 10:36:53 -0000 1.42.2.10
@@ -137,16 +137,6 @@
private boolean haltOnFailure = false;
/**
- * The corresponding testsuite.
- */
- private Test suite = null;
-
- /**
- * Exception caught in constructor.
- */
- private Exception exception;
-
- /**
* Returncode
*/
private int retCode = SUCCESS;
@@ -168,6 +158,9 @@
/** Running more than one test suite? */
private static boolean multipleTests = false;
+ /** ClassLoader passed in in non-forked mode. */
+ private ClassLoader loader;
+
/**
* Constructor for fork=true or when the user hasn't specified a
* classpath.
@@ -207,38 +200,7 @@
this.haltOnError = haltOnError;
this.haltOnFailure = haltOnFailure;
this.showOutput = showOutput;
-
- try {
- Class testClass = null;
- if (loader == null) {
- testClass = Class.forName(test.getName());
- } else {
- testClass = Class.forName(test.getName(), true, loader);
- }
-
- Method suiteMethod = null;
- try {
- // check if there is a suite method
- suiteMethod = testClass.getMethod("suite", new Class[0]);
- } catch (NoSuchMethodException e) {
- // no appropriate suite method found. We don't report any
- // error here since it might be perfectly normal.
- }
- if (suiteMethod != null) {
- // if there is a suite method available, then try
- // to extract the suite from it. If there is an error
- // here it will be caught below and reported.
- suite = (Test) suiteMethod.invoke(null, new Class[0]);
- } else {
- // try to extract a test suite automatically
- // this will generate warnings if the class is no suitable
Test
- suite = new TestSuite(testClass);
- }
-
- } catch (Exception e) {
- retCode = ERRORS;
- exception = e;
- }
+ this.loader = loader;
}
public void run() {
@@ -248,77 +210,114 @@
res.addListener((TestListener) formatters.elementAt(i));
}
- long start = System.currentTimeMillis();
+ ByteArrayOutputStream errStrm = new ByteArrayOutputStream();
+ systemError = new PrintStream(errStrm);
- fireStartTestSuite();
- if (exception != null) { // had an exception in the constructor
- for (int i = 0; i < formatters.size(); i++) {
- ((TestListener) formatters.elementAt(i)).addError(null,
- exception);
- }
- junitTest.setCounts(1, 0, 1);
- junitTest.setRunTime(0);
- } else {
+ ByteArrayOutputStream outStrm = new ByteArrayOutputStream();
+ systemOut = new PrintStream(outStrm);
+ PrintStream savedErr = null;
+ PrintStream savedOut = null;
- ByteArrayOutputStream errStrm = new ByteArrayOutputStream();
- systemError = new PrintStream(errStrm);
+ if (forked) {
+ savedOut = System.out;
+ savedErr = System.err;
+ if (!showOutput) {
+ System.setOut(systemOut);
+ System.setErr(systemError);
+ } else {
+ System.setOut(new PrintStream(
+ new TeeOutputStream(savedOut,
systemOut)
+ )
+ );
+ System.setErr(new PrintStream(
+ new TeeOutputStream(savedErr,
+ systemError)
+ )
+ );
+ }
+ perm = null;
+ } else {
+ if (perm != null) {
+ perm.setSecurityManager();
+ }
+ }
- ByteArrayOutputStream outStrm = new ByteArrayOutputStream();
- systemOut = new PrintStream(outStrm);
+ Test suite = null;
+ Throwable exception = null;
- PrintStream savedOut = null;
- PrintStream savedErr = null;
+ try {
- if (forked) {
- savedOut = System.out;
- savedErr = System.err;
- if (!showOutput) {
- System.setOut(systemOut);
- System.setErr(systemError);
+ try {
+ Class testClass = null;
+ if (loader == null) {
+ testClass = Class.forName(junitTest.getName());
} else {
- System.setOut(new PrintStream(
- new TeeOutputStream(savedOut,
systemOut)
- )
- );
- System.setErr(new PrintStream(
- new TeeOutputStream(savedErr,
- systemError)
- )
- );
+ testClass = Class.forName(junitTest.getName(), true,
+ loader);
}
- perm = null;
- } else {
- if (perm != null) {
- perm.setSecurityManager();
+
+ Method suiteMethod = null;
+ try {
+ // check if there is a suite method
+ suiteMethod = testClass.getMethod("suite", new Class[0]);
+ } catch (NoSuchMethodException e) {
+ // no appropriate suite method found. We don't report any
+ // error here since it might be perfectly normal.
+ }
+ if (suiteMethod != null) {
+ // if there is a suite method available, then try
+ // to extract the suite from it. If there is an error
+ // here it will be caught below and reported.
+ suite = (Test) suiteMethod.invoke(null, new Class[0]);
+ } else {
+ // try to extract a test suite automatically this
+ // will generate warnings if the class is no
+ // suitable Test
+ suite = new TestSuite(testClass);
}
- }
+ } catch (Throwable e) {
+ retCode = ERRORS;
+ exception = e;
+ }
- try {
- suite.run(res);
- } finally {
- if (perm != null) {
- perm.restoreSecurityManager();
+ long start = System.currentTimeMillis();
+
+ fireStartTestSuite();
+ if (exception != null) { // had an exception constructing suite
+ for (int i = 0; i < formatters.size(); i++) {
+ ((TestListener) formatters.elementAt(i))
+ .addError(null, exception);
}
- if (savedOut != null) {
- System.setOut(savedOut);
- }
- if (savedErr != null) {
- System.setErr(savedErr);
+ junitTest.setCounts(1, 0, 1);
+ junitTest.setRunTime(0);
+ } else {
+ try {
+ suite.run(res);
+ } finally {
+ junitTest.setCounts(res.runCount(), res.failureCount(),
+ res.errorCount());
+ junitTest.setRunTime(System.currentTimeMillis() - start);
}
-
- systemError.close();
- systemError = null;
- systemOut.close();
- systemOut = null;
- sendOutAndErr(new String(outStrm.toByteArray()),
- new String(errStrm.toByteArray()));
-
- junitTest.setCounts(res.runCount(), res.failureCount(),
- res.errorCount());
- junitTest.setRunTime(System.currentTimeMillis() - start);
}
+ } finally {
+ if (perm != null) {
+ perm.restoreSecurityManager();
+ }
+ if (savedOut != null) {
+ System.setOut(savedOut);
+ }
+ if (savedErr != null) {
+ System.setErr(savedErr);
+ }
+
+ systemError.close();
+ systemError = null;
+ systemOut.close();
+ systemOut = null;
+ sendOutAndErr(new String(outStrm.toByteArray()),
+ new String(errStrm.toByteArray()));
}
fireEndTestSuite();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]