Events will now send a summary for each end of sequence. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271123 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -65,36 +65,19 @@ import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent; | |||
| */ | |||
| public abstract class BaseFormatter implements Formatter { | |||
| /** number of errors */ | |||
| private int errorCount; | |||
| /** number of failures */ | |||
| private int failureCount; | |||
| /** number of runs (success + failure + error) */ | |||
| private int runCount; | |||
| public void init(Properties props) throws BuildException { | |||
| } | |||
| protected void finalize() throws Throwable { | |||
| super.finalize(); | |||
| close(); | |||
| } | |||
| public void onTestStarted(TestRunEvent evt) { | |||
| runCount++; | |||
| } | |||
| public void onTestEnded(TestRunEvent evt) { | |||
| } | |||
| public void onTestFailure(TestRunEvent evt) { | |||
| failureCount++; | |||
| } | |||
| public void onTestError(TestRunEvent evt) { | |||
| errorCount++; | |||
| } | |||
| public void onSuiteStarted(TestRunEvent evt) { | |||
| @@ -107,33 +90,9 @@ public abstract class BaseFormatter implements Formatter { | |||
| } | |||
| public void onRunEnded(TestRunEvent evt) { | |||
| finished(); | |||
| } | |||
| public void onRunStopped(TestRunEvent evt) { | |||
| finished(); | |||
| } | |||
| protected void finished() { | |||
| close(); | |||
| } | |||
| /** @return the number of errors */ | |||
| protected final int getErrorCount() { | |||
| return errorCount; | |||
| } | |||
| /** @return the number of failures */ | |||
| protected final int getFailureCount() { | |||
| return failureCount; | |||
| } | |||
| /** @return the number of runs */ | |||
| protected final int getRunCount() { | |||
| return runCount; | |||
| } | |||
| /** helper method to flush and close the stream */ | |||
| protected void close() { | |||
| } | |||
| } | |||
| @@ -63,6 +63,7 @@ import java.util.Properties; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.taskdefs.optional.rjunit.KeepAliveOutputStream; | |||
| import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent; | |||
| /** | |||
| * Base formatter providing default implementation to deal with | |||
| @@ -85,6 +86,11 @@ public class BaseStreamFormatter extends BaseFormatter { | |||
| /** writer to output the data to */ | |||
| private PrintWriter writer; | |||
| protected void finalize() throws Throwable { | |||
| super.finalize(); | |||
| close(); | |||
| } | |||
| public void init(Properties props) throws BuildException { | |||
| String file = props.getProperty(FILE_KEY); | |||
| OutputStream os = null; | |||
| @@ -106,13 +112,17 @@ public class BaseStreamFormatter extends BaseFormatter { | |||
| */ | |||
| protected void setOutput(OutputStream value) { | |||
| try { | |||
| writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(value, "UTF8")), true); | |||
| // do not buffer but flush each line. | |||
| writer = new PrintWriter(new OutputStreamWriter(value, "UTF8"), true); | |||
| } catch (IOException e) { | |||
| // should not happen | |||
| throw new BuildException(e); | |||
| } | |||
| } | |||
| public void onRunEnded(TestRunEvent evt) { | |||
| close(); | |||
| } | |||
| protected void close() { | |||
| if (writer != null) { | |||
| @@ -1,6 +1,6 @@ | |||
| # Summary formatter | |||
| summary.finished.msg = TestSuite: \nTests run: {0, number, integer}, Failures: {1, number, integer}, Errors: {2, number, integer}, Time elapsed: {3, number, integer} sec\n | |||
| suite.summary.msg = TestSuite: {0}\nTests run: {1, number, integer}, Failures: {2, number, integer}, Errors: {3, number, integer}, Time elapsed: {4, number, integer} sec | |||
| run.summary.msg=Tests run: {0, number, integer}, Failures: {1, number, integer}, Errors: {2, number, integer}, Time elapsed: {3, number, integer} sec | |||
| # Brief formatter | |||
| brief.status-error.msg = TestCase: {0}\tCaused an ERROR\n{1}\n | |||
| brief.status-failure.msg = TestCase: {0}\tFAILED\n{1}\n | |||
| @@ -55,6 +55,8 @@ package org.apache.tools.ant.taskdefs.optional.rjunit.formatter; | |||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent; | |||
| import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestSummary; | |||
| /** | |||
| * Display a summary message at the end of a testsuite stating | |||
| @@ -67,14 +69,24 @@ public class SummaryFormatter extends BaseStreamFormatter { | |||
| private final static Resources RES = | |||
| ResourceManager.getPackageResources(SummaryFormatter.class); | |||
| protected void finished(long elapsedtime) { | |||
| String msg = RES.getString("summary.finished.msg", | |||
| new Integer(getRunCount()), | |||
| new Integer(getFailureCount()), | |||
| new Integer(getErrorCount()), | |||
| new Long(elapsedtime / 1000)); | |||
| public void onSuiteEnded(TestRunEvent evt) { | |||
| TestSummary summary = evt.getSummary(); | |||
| String msg = RES.getString("suite.summary.msg", | |||
| evt.getName(), | |||
| new Integer(summary.runCount()), | |||
| new Integer(summary.failureCount()), | |||
| new Integer(summary.errorCount()), | |||
| new Long(summary.elapsedTime()/1000)); | |||
| getWriter().println(msg); | |||
| close(); | |||
| } | |||
| public void onRunEnded(TestRunEvent evt) { | |||
| TestSummary summary = evt.getSummary(); | |||
| String msg = RES.getString("run.summary.msg", | |||
| new Integer(summary.runCount()), | |||
| new Integer(summary.failureCount()), | |||
| new Integer(summary.errorCount()), | |||
| new Long(summary.elapsedTime()/1000)); | |||
| getWriter().println(msg); | |||
| } | |||
| } | |||
| @@ -148,21 +148,19 @@ public class XMLFormatter extends BaseStreamFormatter { | |||
| currentTest.setAttribute(ATTR_NAME, evt.getName()); | |||
| rootElement.appendChild(currentTest); | |||
| testElements.put(evt.getName(), currentTest); | |||
| super.onTestStarted(evt); | |||
| removeEvent(evt); | |||
| //removeEvent(evt); | |||
| } | |||
| public void onTestEnded(TestRunEvent evt) { | |||
| Element currentTest = (Element) testElements.get(evt); | |||
| Element currentTest = (Element) testElements.get(evt.getName()); | |||
| // with a TestSetup, startTest and endTest are not called. | |||
| if (currentTest == null) { | |||
| onTestStarted(evt); | |||
| currentTest = (Element) testElements.get(evt.getName()); | |||
| } | |||
| TestRunEvent start = (TestRunEvent)testStarts.get(evt); | |||
| TestRunEvent start = (TestRunEvent)testStarts.get(evt.getName()); | |||
| float time = ((evt.getTimeStamp() - start.getTimeStamp()) / 1000.0f); | |||
| currentTest.setAttribute(ATTR_TIME, Float.toString(time)); | |||
| super.onTestEnded(evt); | |||
| removeEvent(evt); | |||
| } | |||
| @@ -179,7 +177,6 @@ public class XMLFormatter extends BaseStreamFormatter { | |||
| nested.setAttribute(ATTR_TYPE, args[0]); | |||
| Text text = doc.createTextNode(evt.getStackTrace()); | |||
| nested.appendChild(text); | |||
| super.onTestFailure(evt); | |||
| removeEvent(evt); | |||
| } | |||
| @@ -188,18 +185,6 @@ public class XMLFormatter extends BaseStreamFormatter { | |||
| testElements.remove(evt.getName()); | |||
| } | |||
| public void onRunStarted(TestRunEvent evt) { | |||
| super.onRunStarted(evt); | |||
| } | |||
| public void onRunEnded(TestRunEvent evt) { | |||
| super.onRunEnded(evt); | |||
| } | |||
| public void onRunStopped(TestRunEvent evt) { | |||
| super.onRunStopped(evt); | |||
| } | |||
| protected void close() { | |||
| DOMElementWriter domWriter = new DOMElementWriter(); | |||
| // the underlying writer uses UTF8 encoding | |||