From c6d10f6ffcfc9ba5ebf41d7ea079047833f97642 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 29 Oct 2001 14:25:07 +0000 Subject: [PATCH] formatters assumed that only one test could be running at the same time, this is not true. PR: 2442 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269834 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 4 ++ .../junit/BriefJUnitResultFormatter.java | 3 +- .../junit/PlainJUnitResultFormatter.java | 46 +++++++++++-------- .../junit/XMLJUnitResultFormatter.java | 24 ++++++---- 4 files changed, 49 insertions(+), 28 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index a29a80ac1..23488d8d5 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -20,6 +20,10 @@ Fixed bugs: * will no longer override a subbuilds basedir with inheritall="true". +* Fixed problem with the built-in 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: -------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java index 8ea83de4f..ab289adf6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java @@ -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); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java index 839f7f660..7d8a91e97 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java @@ -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 { *

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 { *

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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java index 5bf8c697f..25d86fc0c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java @@ -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("\n"); + wri.write("\n"); (new DOMElementWriter()).write(rootElement, wri, 0, " "); wri.flush(); } catch(IOException exc) { @@ -190,11 +191,13 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan *

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 *

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