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()); | |||