ASF Bugzilla – Attachment 21682 Details for
Bug 41534
"quiet" Formatter for Ant's JUnit Task
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch file based on Ant revision 638724
quiet-oneline-patch-r638724 (text/plain), 21.81 KB, created by
Mathias Ricken
on 2008-03-19 00:56:22 UTC
(
hide
)
Description:
Patch file based on Ant revision 638724
Filename:
MIME Type:
Creator:
Mathias Ricken
Created:
2008-03-19 00:56:22 UTC
Size:
21.81 KB
patch
obsolete
>Index: src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java >=================================================================== >--- src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java (revision 638701) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java (working copy) >@@ -14,6 +14,14 @@ > * See the License for the specific language governing permissions and > * limitations under the License. > * >+ * NOTE: >+ * This file was changed by Mathias Ricken to include support for a >+ * "quiet" and a "oneline" JUnit formatter. >+ * For more information, please go to >+ * >+ * http://www.superscalar.org/files/apache-ant-1.7.0-quiet/ >+ * >+ * Thank you. > */ > > package org.apache.tools.ant.taskdefs.optional.junit; >@@ -723,6 +731,8 @@ > > private final String[] splitClasses = { > "BriefJUnitResultFormatter", >+ "QuietJUnitResultFormatter", >+ "OneLineJUnitResultFormatter", > "JUnitResultFormatter", > "JUnitTaskMirrorImpl", > "JUnitTestRunner", >Index: src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java >=================================================================== >--- src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java (revision 638701) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java (working copy) >@@ -14,6 +14,14 @@ > * See the License for the specific language governing permissions and > * limitations under the License. > * >+ * NOTE: >+ * This file was changed by Mathias Ricken to include support for a >+ * "quiet" and a "oneline" JUnit formatter. >+ * For more information, please go to >+ * >+ * http://www.superscalar.org/files/apache-ant-1.7.0-quiet/ >+ * >+ * Thank you. > */ > > package org.apache.tools.ant.taskdefs.optional.junit; >@@ -50,6 +58,8 @@ > * @see XMLJUnitResultFormatter > * @see BriefJUnitResultFormatter > * @see PlainJUnitResultFormatter >+ * @see QuietJUnitResultFormatter >+ * @see OneLineJUnitResultFormatter > * @see FailureRecorder > * @see JUnitResultFormatter > */ >@@ -75,6 +85,12 @@ > /** brief formatter class */ > public static final String BRIEF_FORMATTER_CLASS_NAME = > "org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"; >+ /** quiet formatter class */ >+ public static final String QUIET_FORMATTER_CLASS_NAME = >+ "org.apache.tools.ant.taskdefs.optional.junit.QuietJUnitResultFormatter"; >+ /** one=line formatter class */ >+ public static final String ONELINE_FORMATTER_CLASS_NAME = >+ "org.apache.tools.ant.taskdefs.optional.junit.OneLineJUnitResultFormatter"; > /** plain formatter class */ > public static final String PLAIN_FORMATTER_CLASS_NAME = > "org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter"; >@@ -90,6 +106,8 @@ > * <li> The <code>xml</code> type uses a <code>XMLJUnitResultFormatter</code>. > * <li> The <code>brief</code> type uses a <code>BriefJUnitResultFormatter</code>. > * <li> The <code>plain</code> type (the default) uses a <code>PlainJUnitResultFormatter</code>. >+ * <li> The <code>quiet</code> type uses a <code>QuietJUnitResultFormatter</code>. >+ * <li> The <code>oneline</code> type uses a <code>OneLineJUnitResultFormatter</code>. > * <li> The <code>failure</code> type uses a <code>FailureRecorder</code>. > * </ul> > * >@@ -106,8 +124,16 @@ > } else { > if ("failure".equals(type.getValue())) { > setClassname(FAILURE_RECORDER_CLASS_NAME); >- } else { // must be plain, ensured by TypeAttribute >- setClassname(PLAIN_FORMATTER_CLASS_NAME); >+ } else { >+ if ("quiet".equals(type.getValue())) { >+ setClassname(QUIET_FORMATTER_CLASS_NAME); >+ } else { >+ if ("oneline".equals(type.getValue())) { >+ setClassname(ONELINE_FORMATTER_CLASS_NAME); >+ } else { // must be plain, ensured by TypeAttribute >+ setClassname(PLAIN_FORMATTER_CLASS_NAME); >+ } >+ } > } > } > } >@@ -127,6 +153,10 @@ > setExtension(".txt"); > } else if (BRIEF_FORMATTER_CLASS_NAME.equals(classname)) { > setExtension(".txt"); >+ } else if (QUIET_FORMATTER_CLASS_NAME.equals(classname)) { >+ setExtension(".txt"); >+ } else if (ONELINE_FORMATTER_CLASS_NAME.equals(classname)) { >+ setExtension(".txt"); > } > } > >@@ -320,14 +350,14 @@ > } > > /** >- * <p> Enumerated attribute with the values "plain", "xml", "brief" and "failure". >+ * <p> Enumerated attribute with the values "plain", "xml", "brief", "quiet", "oneline" and "failure". > * > * <p> Use to enumerate options for <code>type</code> attribute. > */ > public static class TypeAttribute extends EnumeratedAttribute { > /** {@inheritDoc}. */ > public String[] getValues() { >- return new String[] {"plain", "xml", "brief", "failure"}; >+ return new String[] {"plain", "xml", "brief", "quiet", "oneline", "failure"}; > } > } > } >Index: src/main/org/apache/tools/ant/taskdefs/optional/junit/QuietJUnitResultFormatter.java >=================================================================== >--- src/main/org/apache/tools/ant/taskdefs/optional/junit/QuietJUnitResultFormatter.java (revision 0) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/QuietJUnitResultFormatter.java (revision 0) >@@ -0,0 +1,262 @@ >+/* >+ * Licensed to the Apache Software Foundation (ASF) under one or more >+ * contributor license agreements. See the NOTICE file distributed with >+ * this work for additional information regarding copyright ownership. >+ * The ASF licenses this file to You under the Apache License, Version 2.0 >+ * (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * >+ * http://www.apache.org/licenses/LICENSE-2.0 >+ * >+ * Unless required by applicable law or agreed to in writing, software >+ * distributed under the License is distributed on an "AS IS" BASIS, >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >+ * See the License for the specific language governing permissions and >+ * limitations under the License. >+ * >+ * NOTE: >+ * This file was added by Mathias Ricken to include support for a >+ * "quiet" JUnit formatter. >+ * For more information, please go to >+ * >+ * http://www.superscalar.org/files/apache-ant-1.7.0-quiet/ >+ * >+ * Thank you. >+ */ >+ >+package org.apache.tools.ant.taskdefs.optional.junit; >+ >+import java.io.OutputStream; >+import java.io.PrintWriter; >+import java.io.StringWriter; >+import java.text.NumberFormat; >+ >+import junit.framework.AssertionFailedError; >+import junit.framework.Test; >+ >+import org.apache.tools.ant.util.FileUtils; >+import org.apache.tools.ant.util.StringUtils; >+ >+/** >+ * Only prints out errors, no summaries. >+ * >+ * @see FormatterElement >+ * @see PlainJUnitResultFormatter >+ */ >+public class QuietJUnitResultFormatter implements JUnitResultFormatter { >+ >+ /** >+ * Where to write the log to. >+ */ >+ private OutputStream out; >+ >+ /** >+ * Used for writing the results. >+ */ >+ private PrintWriter output; >+ >+ /** >+ * Used as part of formatting the results. >+ */ >+ private StringWriter results; >+ >+ /** >+ * Used for writing formatted results to. >+ */ >+ private PrintWriter resultWriter; >+ >+ /** >+ * Formatter for timings. >+ */ >+ private NumberFormat numberFormat = NumberFormat.getInstance(); >+ >+ /** >+ * Output suite has written to System.out >+ */ >+ private String systemOutput = null; >+ >+ /** >+ * Output suite has written to System.err >+ */ >+ private String systemError = null; >+ >+ /** >+ * Constructor for QuietJUnitResultFormatter. >+ */ >+ public QuietJUnitResultFormatter() { >+ results = new StringWriter(); >+ resultWriter = new PrintWriter(results); >+ } >+ >+ /** >+ * Sets the stream the formatter is supposed to write its results to. >+ * @param out the output stream to write to >+ */ >+ public void setOutput(OutputStream out) { >+ this.out = out; >+ output = new PrintWriter(out); >+ } >+ >+ /** >+ * @see JUnitResultFormatter#setSystemOutput(String) >+ */ >+ /** {@inheritDoc}. */ >+ public void setSystemOutput(String out) { >+ systemOutput = out; >+ } >+ >+ /** >+ * @see JUnitResultFormatter#setSystemError(String) >+ */ >+ /** {@inheritDoc}. */ >+ public void setSystemError(String err) { >+ systemError = err; >+ } >+ >+ /** >+ * String generated when the testsuite was started. >+ */ >+ private String _startTestSuiteOutput = ""; >+ >+ /** >+ * The whole testsuite started. >+ * @param suite the test suite >+ */ >+ public void startTestSuite(JUnitTest suite) { >+ if (output == null) { >+ return; // Quick return - no output do nothing. >+ } >+ StringBuffer sb = new StringBuffer("Testsuite: "); >+ sb.append(suite.getName()); >+ sb.append(StringUtils.LINE_SEP); >+ _startTestSuiteOutput = sb.toString(); >+ } >+ >+ /** >+ * The whole testsuite ended. >+ * @param suite the test suite >+ */ >+ public void endTestSuite(JUnitTest suite) { >+ StringBuffer sb = new StringBuffer("Tests run: "); >+ sb.append(suite.runCount()); >+ sb.append(", Failures: "); >+ sb.append(suite.failureCount()); >+ sb.append(", Errors: "); >+ sb.append(suite.errorCount()); >+ sb.append(", Time elapsed: "); >+ sb.append(numberFormat.format(suite.getRunTime() / 1000.0)); >+ sb.append(" sec"); >+ sb.append(StringUtils.LINE_SEP); >+ sb.append(StringUtils.LINE_SEP); >+ >+ // append the err and output streams to the log >+ if (systemOutput != null && systemOutput.length() > 0) { >+ sb.append("------------- Standard Output ---------------") >+ .append(StringUtils.LINE_SEP) >+ .append(systemOutput) >+ .append("------------- ---------------- ---------------") >+ .append(StringUtils.LINE_SEP); >+ } >+ >+ if (systemError != null && systemError.length() > 0) { >+ sb.append("------------- Standard Error -----------------") >+ .append(StringUtils.LINE_SEP) >+ .append(systemError) >+ .append("------------- ---------------- ---------------") >+ .append(StringUtils.LINE_SEP); >+ } >+ >+ if (output != null) { >+ if ((suite.failureCount()!=0) || (suite.errorCount()!=0)) { >+ try { >+ output.write(_startTestSuiteOutput); >+ output.write(sb.toString()); >+ resultWriter.close(); >+ output.write(results.toString()); >+ output.flush(); >+ } finally { >+ if (out != System.out && out != System.err) { >+ FileUtils.close(out); >+ } >+ } >+ } >+ } >+ } >+ >+ /** >+ * A test started. >+ * @param test a test >+ */ >+ public void startTest(Test test) { >+ } >+ >+ /** >+ * A test ended. >+ * @param test a test >+ */ >+ public void endTest(Test test) { >+ } >+ >+ /** >+ * Interface TestListener for JUnit <= 3.4. >+ * >+ * <p>A Test failed. >+ * @param test a test >+ * @param t the exception thrown by the test >+ */ >+ public void addFailure(Test test, Throwable t) { >+ formatError("\tFAILED", test, t); >+ } >+ >+ /** >+ * Interface TestListener for JUnit > 3.4. >+ * >+ * <p>A Test failed. >+ * @param test a test >+ * @param t the assertion failed by the test >+ */ >+ public void addFailure(Test test, AssertionFailedError t) { >+ addFailure(test, (Throwable) t); >+ } >+ >+ /** >+ * A test caused an error. >+ * @param test a test >+ * @param error the error thrown by the test >+ */ >+ public void addError(Test test, Throwable error) { >+ formatError("\tCaused an ERROR", test, error); >+ } >+ >+ /** >+ * Format the test for printing.. >+ * @param test a test >+ * @return the formatted testname >+ */ >+ protected String formatTest(Test test) { >+ if (test == null) { >+ return "Null Test: "; >+ } else { >+ return "Testcase: " + test.toString() + ":"; >+ } >+ } >+ >+ /** >+ * Format an error and print it. >+ * @param type the type of error >+ * @param test the test that failed >+ * @param error the exception that the test threw >+ */ >+ protected synchronized void formatError(String type, Test test, >+ Throwable error) { >+ if (test != null) { >+ endTest(test); >+ } >+ >+ resultWriter.println(formatTest(test) + type); >+ resultWriter.println(error.getMessage()); >+ String strace = JUnitTestRunner.getFilteredTrace(error); >+ resultWriter.println(strace); >+ resultWriter.println(); >+ } >+} > >Property changes on: src/main/org/apache/tools/ant/taskdefs/optional/junit/QuietJUnitResultFormatter.java >___________________________________________________________________ >Name: svn:executable > + * > >Index: src/main/org/apache/tools/ant/taskdefs/optional/junit/OneLineJUnitResultFormatter.java >=================================================================== >--- src/main/org/apache/tools/ant/taskdefs/optional/junit/OneLineJUnitResultFormatter.java (revision 0) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/OneLineJUnitResultFormatter.java (revision 0) >@@ -0,0 +1,261 @@ >+/* >+ * Licensed to the Apache Software Foundation (ASF) under one or more >+ * contributor license agreements. See the NOTICE file distributed with >+ * this work for additional information regarding copyright ownership. >+ * The ASF licenses this file to You under the Apache License, Version 2.0 >+ * (the "License"); you may not use this file except in compliance with >+ * the License. You may obtain a copy of the License at >+ * >+ * http://www.apache.org/licenses/LICENSE-2.0 >+ * >+ * Unless required by applicable law or agreed to in writing, software >+ * distributed under the License is distributed on an "AS IS" BASIS, >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >+ * See the License for the specific language governing permissions and >+ * limitations under the License. >+ * >+ * NOTE: >+ * This file was added by Mathias Ricken to include support for a >+ * "oneline" JUnit formatter. >+ * For more information, please go to >+ * >+ * http://www.superscalar.org/files/apache-ant-1.7.0-quiet/ >+ * >+ * Thank you. >+ */ >+ >+package org.apache.tools.ant.taskdefs.optional.junit; >+ >+import java.io.OutputStream; >+import java.io.PrintWriter; >+import java.io.StringWriter; >+import java.text.NumberFormat; >+ >+import junit.framework.AssertionFailedError; >+import junit.framework.Test; >+ >+import org.apache.tools.ant.util.FileUtils; >+import org.apache.tools.ant.util.StringUtils; >+ >+/** >+ * Prints out one-line summaries if tests succeed. >+ * >+ * @see FormatterElement >+ * @see PlainJUnitResultFormatter >+ */ >+public class OneLineJUnitResultFormatter implements JUnitResultFormatter { >+ >+ /** >+ * Where to write the log to. >+ */ >+ private OutputStream out; >+ >+ /** >+ * Used for writing the results. >+ */ >+ private PrintWriter output; >+ >+ /** >+ * Used as part of formatting the results. >+ */ >+ private StringWriter results; >+ >+ /** >+ * Used for writing formatted results to. >+ */ >+ private PrintWriter resultWriter; >+ >+ /** >+ * Formatter for timings. >+ */ >+ private NumberFormat numberFormat = NumberFormat.getInstance(); >+ >+ /** >+ * Output suite has written to System.out >+ */ >+ private String systemOutput = null; >+ >+ /** >+ * Output suite has written to System.err >+ */ >+ private String systemError = null; >+ >+ /** >+ * Constructor for OneLineJUnitResultFormatter. >+ */ >+ public OneLineJUnitResultFormatter() { >+ results = new StringWriter(); >+ resultWriter = new PrintWriter(results); >+ } >+ >+ /** >+ * Sets the stream the formatter is supposed to write its results to. >+ * @param out the output stream to write to >+ */ >+ public void setOutput(OutputStream out) { >+ this.out = out; >+ output = new PrintWriter(out); >+ } >+ >+ /** >+ * @see JUnitResultFormatter#setSystemOutput(String) >+ */ >+ /** {@inheritDoc}. */ >+ public void setSystemOutput(String out) { >+ systemOutput = out; >+ } >+ >+ /** >+ * @see JUnitResultFormatter#setSystemError(String) >+ */ >+ /** {@inheritDoc}. */ >+ public void setSystemError(String err) { >+ systemError = err; >+ } >+ >+ /** >+ * The whole testsuite started. >+ * @param suite the test suite >+ */ >+ public void startTestSuite(JUnitTest suite) { >+ // no output >+ } >+ >+ /** >+ * The whole testsuite ended. >+ * @param suite the test suite >+ */ >+ public void endTestSuite(JUnitTest suite) { >+ StringBuffer sb = new StringBuffer("Testsuite: "); >+ sb.append(suite.getName()); >+ sb.append(StringUtils.LINE_SEP); >+ sb.append("Tests run: "); >+ sb.append(suite.runCount()); >+ sb.append(", Failures: "); >+ sb.append(suite.failureCount()); >+ sb.append(", Errors: "); >+ sb.append(suite.errorCount()); >+ sb.append(StringUtils.LINE_SEP); >+ >+ String simpleName = suite.getName(); >+ int dotIndex = simpleName.lastIndexOf('.'); >+ if (dotIndex>=0) { >+ simpleName = simpleName.substring(dotIndex+1); >+ } >+ StringBuffer sbTime = new StringBuffer(simpleName); >+ while(sbTime.toString().length()<45) { sbTime.append(' '); } >+ sbTime.append(numberFormat.format(suite.getRunTime() / 1000.0)); >+ sbTime.append(" sec"); >+ sbTime.append(StringUtils.LINE_SEP); >+ >+ // append the err and output streams to the log >+ if (systemOutput != null && systemOutput.length() > 0) { >+ sb.append("------------- Standard Output ---------------") >+ .append(StringUtils.LINE_SEP) >+ .append(systemOutput) >+ .append("------------- ---------------- ---------------") >+ .append(StringUtils.LINE_SEP); >+ } >+ >+ if (systemError != null && systemError.length() > 0) { >+ sb.append("------------- Standard Error -----------------") >+ .append(StringUtils.LINE_SEP) >+ .append(systemError) >+ .append("------------- ---------------- ---------------") >+ .append(StringUtils.LINE_SEP); >+ } >+ >+ if (output != null) { >+ output.write(sbTime.toString()); >+ if ((suite.failureCount()!=0) || (suite.errorCount()!=0)) { >+ try { >+ output.write(sb.toString()); >+ resultWriter.close(); >+ output.write(results.toString()); >+ } finally { >+ if (out != System.out && out != System.err) { >+ FileUtils.close(out); >+ } >+ } >+ } >+ output.flush(); >+ } >+ } >+ >+ /** >+ * A test started. >+ * @param test a test >+ */ >+ public void startTest(Test test) { >+ } >+ >+ /** >+ * A test ended. >+ * @param test a test >+ */ >+ public void endTest(Test test) { >+ } >+ >+ /** >+ * Interface TestListener for JUnit <= 3.4. >+ * >+ * <p>A Test failed. >+ * @param test a test >+ * @param t the exception thrown by the test >+ */ >+ public void addFailure(Test test, Throwable t) { >+ formatError("\tFAILED", test, t); >+ } >+ >+ /** >+ * Interface TestListener for JUnit > 3.4. >+ * >+ * <p>A Test failed. >+ * @param test a test >+ * @param t the assertion failed by the test >+ */ >+ public void addFailure(Test test, AssertionFailedError t) { >+ addFailure(test, (Throwable) t); >+ } >+ >+ /** >+ * A test caused an error. >+ * @param test a test >+ * @param error the error thrown by the test >+ */ >+ public void addError(Test test, Throwable error) { >+ formatError("\tCaused an ERROR", test, error); >+ } >+ >+ /** >+ * Format the test for printing.. >+ * @param test a test >+ * @return the formatted testname >+ */ >+ protected String formatTest(Test test) { >+ if (test == null) { >+ return "Null Test: "; >+ } else { >+ return "Testcase: " + test.toString() + ":"; >+ } >+ } >+ >+ /** >+ * Format an error and print it. >+ * @param type the type of error >+ * @param test the test that failed >+ * @param error the exception that the test threw >+ */ >+ protected synchronized void formatError(String type, Test test, >+ Throwable error) { >+ if (test != null) { >+ endTest(test); >+ } >+ >+ resultWriter.println(formatTest(test) + type); >+ resultWriter.println(error.getMessage()); >+ String strace = JUnitTestRunner.getFilteredTrace(error); >+ resultWriter.println(strace); >+ resultWriter.println(); >+ } >+} > >Property changes on: src/main/org/apache/tools/ant/taskdefs/optional/junit/OneLineJUnitResultFormatter.java >___________________________________________________________________ >Name: svn:executable > + * >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 41534
:
19503
| 21682