of noisey tests. Bugzilla report 12817. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@463045 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -160,6 +160,7 @@ Matt Albrecht | |||
| Matt Benson | |||
| Matt Bishop | |||
| Matt Foemmel | |||
| Matt Grosso | |||
| Matt Humphrey | |||
| Matt Small | |||
| Matthew Hawthorne | |||
| @@ -244,6 +245,7 @@ Thomas Butz | |||
| Thomas Christen | |||
| Thomas Christensen | |||
| Thomas Haas | |||
| Tim Drury | |||
| Tim Fennell | |||
| Timothy Gerard Endres | |||
| Tim Stephenson | |||
| @@ -74,6 +74,9 @@ Other changes: | |||
| * Added <compare> resource selector to select resources based on the | |||
| results of their comparison to other resources. | |||
| * Added outputtoformatters attribute to <junit> to allow suppression | |||
| of noisey tests. Bugzilla report 12817. | |||
| Changes from Ant 1.7.0Beta1 to Ant 1.7.0Beta2 | |||
| ============================================= | |||
| @@ -646,6 +646,10 @@ | |||
| <first>Matt</first> | |||
| <last>Foemmel</last> | |||
| </name> | |||
| <name> | |||
| <first>Matt</first> | |||
| <last>Grosso</last> | |||
| </name> | |||
| <name> | |||
| <first>Matt</first> | |||
| <last>Humphrey</last> | |||
| @@ -969,6 +973,10 @@ | |||
| <first>Thomas</first> | |||
| <last>Haas</last> | |||
| </name> | |||
| <name> | |||
| <first>Tim</first> | |||
| <last>Drury</last> | |||
| </name> | |||
| <name> | |||
| <first>Tim</first> | |||
| <last>Fennell</last> | |||
| @@ -190,6 +190,15 @@ elements</a>).</p> | |||
| formatters receive the output.</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">outputtoformatters</td> | |||
| <td valign="top"> | |||
| <em>Since Ant 1.7.0.</em><br/> | |||
| Send any output generated by tests to the test formatters. | |||
| This is "true" by default. | |||
| </td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">tempdir</td> | |||
| <td valign="top">Where Ant should place temporary files. | |||
| @@ -30,6 +30,7 @@ public class Constants { | |||
| static final String BEFORE_FIRST_TEST = "BeforeFirstTest"; | |||
| static final String PROPSFILE = "propsfile="; | |||
| static final String SHOWOUTPUT = "showoutput="; | |||
| static final String OUTPUT_TO_FORMATTERS = "outputtoformatters="; | |||
| static final String FORMATTER = "formatter="; | |||
| static final String LOGTESTLISTENEREVENTS = "logtestlistenerevents="; | |||
| static final String TESTSFILE = "testsfile="; | |||
| @@ -145,7 +145,12 @@ public class JUnitTask extends Task { | |||
| private boolean includeAntRuntime = true; | |||
| private Path antRuntimeClasses = null; | |||
| // Do we send output to System.out/.err in addition to the formatters? | |||
| private boolean showOutput = false; | |||
| // Do we send output to the formatters ? | |||
| private boolean outputToFormatters = true; | |||
| private File tmpDir; | |||
| private AntClassLoader classLoader = null; | |||
| private Permissions perm = null; | |||
| @@ -549,6 +554,17 @@ public class JUnitTask extends Task { | |||
| this.showOutput = showOutput; | |||
| } | |||
| /** | |||
| * If true, send any output generated by tests to the formatters. | |||
| * | |||
| * @param outputToFormatters if true, send output to formatters (Default | |||
| * is true). | |||
| * @since Ant 1.7.0 | |||
| */ | |||
| public void setOutputToFormatters(boolean outputToFormatters) { | |||
| this.outputToFormatters = outputToFormatters; | |||
| } | |||
| /** | |||
| * Assertions to enable in this program (if fork=true) | |||
| * @since Ant 1.6 | |||
| @@ -923,6 +939,9 @@ public class JUnitTask extends Task { | |||
| cmd.createArgument().setValue(Constants.SHOWOUTPUT | |||
| + String.valueOf(showOutput)); | |||
| cmd.createArgument().setValue(Constants.OUTPUT_TO_FORMATTERS | |||
| + String.valueOf(outputToFormatters)); | |||
| cmd.createArgument().setValue(Constants.LOGTESTLISTENEREVENTS+"true"); // #31885 | |||
| StringBuffer formatterArg = new StringBuffer(STRING_BUFFER_SIZE); | |||
| @@ -964,10 +983,12 @@ public class JUnitTask extends Task { | |||
| + "file.", e, getLocation()); | |||
| } | |||
| Execute execute = new Execute(new JUnitLogStreamHandler(this, | |||
| Project.MSG_INFO, | |||
| Project.MSG_WARN), | |||
| watchdog); | |||
| Execute execute = new Execute( | |||
| new JUnitLogStreamHandler( | |||
| this, | |||
| Project.MSG_INFO, | |||
| Project.MSG_WARN), | |||
| watchdog); | |||
| execute.setCommandline(cmd.getCommandline()); | |||
| execute.setAntRun(getProject()); | |||
| if (dir != null) { | |||
| @@ -1051,7 +1072,9 @@ public class JUnitTask extends Task { | |||
| if (output.startsWith(TESTLISTENER_PREFIX)) { | |||
| log(output, Project.MSG_VERBOSE); | |||
| } else if (runner != null) { | |||
| runner.handleOutput(output); | |||
| if (outputToFormatters) { | |||
| runner.handleOutput(output); | |||
| } | |||
| if (showOutput) { | |||
| super.handleOutput(output); | |||
| } | |||
| @@ -87,6 +87,8 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| */ | |||
| private boolean showOutput = false; | |||
| private boolean outputToFormatters = true; | |||
| /** | |||
| * The permissions set for the test to run. | |||
| */ | |||
| @@ -244,23 +246,40 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| PrintStream savedErr = null; | |||
| if (forked) { | |||
| savedOut = System.out; | |||
| savedErr = System.err; | |||
| if (!showOutput) { | |||
| System.setOut(systemOut); | |||
| System.setErr(systemError); | |||
| if (!outputToFormatters) { | |||
| if (!showOutput) { | |||
| savedOut = System.out; | |||
| savedErr = System.err; | |||
| System.setOut( | |||
| new PrintStream( | |||
| new OutputStream() { | |||
| public void write(int b) {} | |||
| })); | |||
| System.setErr( | |||
| new PrintStream( | |||
| new OutputStream() { | |||
| public void write(int b) {} | |||
| })); | |||
| } | |||
| } else { | |||
| System.setOut(new PrintStream( | |||
| new TeeOutputStream(savedOut, systemOut) | |||
| ) | |||
| ); | |||
| System.setErr(new PrintStream( | |||
| new TeeOutputStream(savedErr, | |||
| systemError) | |||
| ) | |||
| ); | |||
| savedOut = System.out; | |||
| savedErr = System.err; | |||
| if (!showOutput) { | |||
| System.setOut(systemOut); | |||
| System.setErr(systemError); | |||
| } else { | |||
| System.setOut(new PrintStream( | |||
| new TeeOutputStream(savedOut, systemOut) | |||
| ) | |||
| ); | |||
| System.setErr(new PrintStream( | |||
| new TeeOutputStream(savedErr, | |||
| systemError) | |||
| ) | |||
| ); | |||
| } | |||
| perm = null; | |||
| } | |||
| perm = null; | |||
| } else { | |||
| if (perm != null) { | |||
| perm.setSecurityManager(); | |||
| @@ -428,7 +447,7 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| } | |||
| private void logTestListenerEvent(String msg) { | |||
| PrintStream out = forked ? savedOut : System.out; | |||
| PrintStream out = savedOut != null ? savedOut : System.out; | |||
| if (logTestListenerEvents) { | |||
| out.flush(); | |||
| out.println(JUnitTask.TESTLISTENER_PREFIX + msg); | |||
| @@ -581,6 +600,7 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| boolean stackfilter = true; | |||
| Properties props = new Properties(); | |||
| boolean showOut = false; | |||
| boolean outputToFormat = true; | |||
| boolean logTestListenerEvents = false; | |||
| @@ -620,6 +640,9 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| showOut = Project.toBoolean(args[i].substring(Constants.SHOWOUTPUT.length())); | |||
| } else if (args[i].startsWith(Constants.LOGTESTLISTENEREVENTS)) { | |||
| logTestListenerEvents = Project.toBoolean(args[i].substring(Constants.LOGTESTLISTENEREVENTS.length())); | |||
| } else if (args[i].startsWith(Constants.OUTPUT_TO_FORMATTERS)) { | |||
| outputToFormat = Project.toBoolean( | |||
| args[i].substring(Constants.OUTPUT_TO_FORMATTERS.length())); | |||
| } | |||
| } | |||
| @@ -647,7 +670,8 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| t.setTodir(new File(st.nextToken())); | |||
| t.setOutfile(st.nextToken()); | |||
| code = launch(t, haltError, stackfilter, haltFail, | |||
| showOut, logTestListenerEvents, props); | |||
| showOut, outputToFormat, | |||
| logTestListenerEvents, props); | |||
| errorOccurred = (code == ERRORS); | |||
| failureOccurred = (code != SUCCESS); | |||
| if (errorOccurred || failureOccurred) { | |||
| @@ -669,7 +693,8 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| } | |||
| } else { | |||
| returnCode = launch(new JUnitTest(args[0]), haltError, | |||
| stackfilter, haltFail, showOut, | |||
| stackfilter, haltFail, | |||
| showOut, outputToFormat, | |||
| logTestListenerEvents, props); | |||
| } | |||
| @@ -798,13 +823,15 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| */ | |||
| private static int launch(JUnitTest t, boolean haltError, | |||
| boolean stackfilter, boolean haltFail, | |||
| boolean showOut, boolean logTestListenerEvents, | |||
| boolean showOut, boolean outputToFormat, | |||
| boolean logTestListenerEvents, | |||
| Properties props) { | |||
| t.setProperties(props); | |||
| JUnitTestRunner runner = | |||
| new JUnitTestRunner(t, haltError, stackfilter, haltFail, showOut, | |||
| logTestListenerEvents); | |||
| logTestListenerEvents, null); | |||
| runner.forked = true; | |||
| runner.outputToFormatters = outputToFormat; | |||
| transferFormatters(runner, t); | |||
| runner.run(); | |||