Browse Source

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
master
Stefan Bodewig 23 years ago
parent
commit
c6d10f6ffc
4 changed files with 49 additions and 28 deletions
  1. +4
    -0
      WHATSNEW
  2. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java
  3. +27
    -19
      src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
  4. +16
    -8
      src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java

+ 4
- 0
WHATSNEW View File

@@ -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:
--------------



+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java View File

@@ -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);
}


+ 27
- 19
src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java View File

@@ -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

+ 16
- 8
src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java View File

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


Loading…
Cancel
Save