time, this is not true. PR: 2442 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269834 13f79535-47bb-0310-9956-ffa450edef68master
@@ -20,6 +20,10 @@ Fixed bugs: | |||
* <ant> will no longer override a subbuilds basedir with inheritall="true". | |||
* Fixed problem with the built-in <junit> formatters which assumed | |||
that only one test could be running at the same time - this is not | |||
necessarily true, see junit.extensions.ActiveTestSuite. | |||
Other changes: | |||
-------------- | |||
@@ -242,7 +242,8 @@ public class BriefJUnitResultFormatter implements JUnitResultFormatter { | |||
/** | |||
* Format an error and print it. | |||
*/ | |||
protected void formatError(String type, Test test, Throwable error) { | |||
protected synchronized void formatError(String type, Test test, | |||
Throwable error) { | |||
if (test != null) { | |||
endTest(test); | |||
} | |||
@@ -61,6 +61,7 @@ import java.io.StringWriter; | |||
import java.io.PrintWriter; | |||
import java.io.IOException; | |||
import java.text.NumberFormat; | |||
import java.util.Hashtable; | |||
import junit.framework.AssertionFailedError; | |||
import junit.framework.Test; | |||
@@ -81,7 +82,7 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter { | |||
/** | |||
* Timing helper. | |||
*/ | |||
private long lastTestStart = 0; | |||
private Hashtable testStarts = new Hashtable(); | |||
/** | |||
* Where to write the log to. | |||
*/ | |||
@@ -97,7 +98,7 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter { | |||
/** | |||
* Suppress endTest if testcase failed. | |||
*/ | |||
private boolean failed = true; | |||
private Hashtable failed = new Hashtable(); | |||
private String systemOutput = null; | |||
private String systemError = null; | |||
@@ -187,10 +188,8 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter { | |||
* <p>A new Test is started. | |||
*/ | |||
public void startTest(Test t) { | |||
lastTestStart = System.currentTimeMillis(); | |||
wri.print("Testcase: " | |||
+ JUnitVersionHelper.getTestCaseName((TestCase) t)); | |||
failed = false; | |||
testStarts.put(t, new Long(System.currentTimeMillis())); | |||
failed.put(t, Boolean.FALSE); | |||
} | |||
/** | |||
@@ -199,11 +198,18 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter { | |||
* <p>A Test is finished. | |||
*/ | |||
public void endTest(Test test) { | |||
if (failed) return; | |||
wri.println(" took " | |||
+ nf.format((System.currentTimeMillis()-lastTestStart) | |||
/ 1000.0) | |||
+ " sec"); | |||
synchronized (wri) { | |||
wri.print("Testcase: " | |||
+ JUnitVersionHelper.getTestCaseName((TestCase) test)); | |||
if (Boolean.TRUE.equals(failed.get(test))) { | |||
return; | |||
} | |||
Long l = (Long) testStarts.get(test); | |||
wri.println(" took " | |||
+ nf.format((System.currentTimeMillis()-l.longValue()) | |||
/ 1000.0) | |||
+ " sec"); | |||
} | |||
} | |||
/** | |||
@@ -234,15 +240,17 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter { | |||
} | |||
private void formatError(String type, Test test, Throwable t) { | |||
if (test != null) { | |||
endTest(test); | |||
} | |||
failed = true; | |||
synchronized (wri) { | |||
if (test != null) { | |||
endTest(test); | |||
failed.put(test, Boolean.TRUE); | |||
} | |||
wri.println(type); | |||
wri.println(t.getMessage()); | |||
t.printStackTrace(wri); | |||
wri.println(""); | |||
wri.println(type); | |||
wri.println(t.getMessage()); | |||
t.printStackTrace(wri); | |||
wri.println(""); | |||
} | |||
} | |||
} // PlainJUnitResultFormatter |
@@ -64,6 +64,7 @@ import java.io.PrintWriter; | |||
import java.util.Properties; | |||
import java.util.Enumeration; | |||
import java.util.Hashtable; | |||
import javax.xml.parsers.DocumentBuilder; | |||
import javax.xml.parsers.DocumentBuilderFactory; | |||
import org.w3c.dom.Document; | |||
@@ -107,11 +108,11 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||
/** | |||
* Element for the current test. | |||
*/ | |||
private Element currentTest; | |||
private Hashtable testElements = new Hashtable(); | |||
/** | |||
* Timing helper. | |||
*/ | |||
private long lastTestStart = 0; | |||
private Hashtable testStarts = new Hashtable(); | |||
/** | |||
* Where to write the log to. | |||
*/ | |||
@@ -167,7 +168,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||
Writer wri = null; | |||
try { | |||
wri = new OutputStreamWriter(out, "UTF8"); | |||
wri.write("<?xml version=\"1.0\"?>\n"); | |||
wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); | |||
(new DOMElementWriter()).write(rootElement, wri, 0, " "); | |||
wri.flush(); | |||
} catch(IOException exc) { | |||
@@ -190,11 +191,13 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||
* <p>A new Test is started. | |||
*/ | |||
public void startTest(Test t) { | |||
lastTestStart = System.currentTimeMillis(); | |||
currentTest = doc.createElement(TESTCASE); | |||
testStarts.put(t, new Long(System.currentTimeMillis())); | |||
Element currentTest = doc.createElement(TESTCASE); | |||
currentTest.setAttribute(ATTR_NAME, | |||
JUnitVersionHelper.getTestCaseName((TestCase) t)); | |||
rootElement.appendChild(currentTest); | |||
testElements.put(t, currentTest); | |||
} | |||
/** | |||
@@ -203,8 +206,10 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||
* <p>A Test is finished. | |||
*/ | |||
public void endTest(Test test) { | |||
Element currentTest = (Element) testElements.get(test); | |||
Long l = (Long) testStarts.get(test); | |||
currentTest.setAttribute(ATTR_TIME, | |||
""+((System.currentTimeMillis()-lastTestStart) | |||
""+((System.currentTimeMillis()-l.longValue()) | |||
/ 1000.0)); | |||
} | |||
@@ -241,12 +246,15 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||
} | |||
Element nested = doc.createElement(type); | |||
Element currentTest = null; | |||
if (test != null) { | |||
currentTest.appendChild(nested); | |||
currentTest = (Element) testElements.get(test); | |||
} else { | |||
rootElement.appendChild(nested); | |||
currentTest = rootElement; | |||
} | |||
currentTest.appendChild(nested); | |||
String message = t.getMessage(); | |||
if (message != null && message.length() > 0) { | |||
nested.setAttribute(ATTR_MESSAGE, t.getMessage()); | |||