ASF Bugzilla – Attachment 19503 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 503170
quiet-patch-r503170 (text/plain), 11.25 KB, created by
Mathias Ricken
on 2007-02-02 20:30:19 UTC
(
hide
)
Description:
Patch file based on Ant revision 503170
Filename:
MIME Type:
Creator:
Mathias Ricken
Created:
2007-02-02 20:30:19 UTC
Size:
11.25 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 503169) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java (working copy) >@@ -721,6 +721,7 @@ > > private final String[] splitClasses = { > "BriefJUnitResultFormatter", >+ "QuietJUnitResultFormatter", > "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 503169) >+++ src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java (working copy) >@@ -46,6 +46,7 @@ > * @see JUnitTask > * @see XMLJUnitResultFormatter > * @see BriefJUnitResultFormatter >+ * @see QuietJUnitResultFormatter > * @see PlainJUnitResultFormatter > * @see JUnitResultFormatter > */ >@@ -65,6 +66,9 @@ > /** 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"; > /** plain formatter class */ > public static final String PLAIN_FORMATTER_CLASS_NAME = > "org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter"; >@@ -76,6 +80,7 @@ > * <ul> > * <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>quiet</code> type uses a <code>QuietJUnitResultFormatter</code>. > * <li> The <code>plain</code> type (the default) uses a <code>PlainJUnitResultFormatter</code>. > * </ul> > * >@@ -89,8 +94,12 @@ > } else { > if ("brief".equals(type.getValue())) { > setClassname(BRIEF_FORMATTER_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 { // must be plain, ensured by TypeAttribute >+ setClassname(PLAIN_FORMATTER_CLASS_NAME); >+ } > } > } > } >@@ -109,7 +118,9 @@ > setExtension(".txt"); > } else if (BRIEF_FORMATTER_CLASS_NAME.equals(classname)) { > setExtension(".txt"); >- } >+ } else if (QUIET_FORMATTER_CLASS_NAME.equals(classname)) { >+ setExtension(".txt"); >+ } > } > > /** >@@ -270,14 +281,14 @@ > } > > /** >- * <p> Enumerated attribute with the values "plain", "xml" and "brief". >+ * <p> Enumerated attribute with the values "plain", "xml", "brief", and "quiet". > * > * <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"}; >+ return new String[] {"plain", "xml", "brief", "quiet"}; > } > } > } >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(); >+ } >+}
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