git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@987139 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -46,6 +46,12 @@ Changes that could break older environments: | |||
| store their information are now excluded by the defaultexcludes. | |||
| Bugzilla Report 49624. | |||
| * The <junit> task no longer generates TestListener events - which | |||
| have been introduced in ant 1.7.0 - by default. The task has a new | |||
| attribute enableTestListenerEvents and a new "magic" property | |||
| ant.junit.enabletestlistenerevents has been added that can be used | |||
| to reinstate the old behavior. | |||
| Fixed bugs: | |||
| ----------- | |||
| @@ -235,6 +235,19 @@ elements</a>).</p> | |||
| <em>since Ant 1.8.0</em></td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">enableTestListenerEvents</td> | |||
| <td valign="top">Whether Ant should send fine grained information | |||
| about the running tests to Ant's logging system at the verbose | |||
| level. Such events may be used by custom test listeners to show | |||
| the progress of tests.<br/> | |||
| Defaults to <code>false</code>.<br/> | |||
| Can be overridden by a <a href="#enabletestlistenerevents">magic | |||
| property</a>.<br/> | |||
| <em>since Ant 1.8.2</em> - <strong>Ant 1.7.0 to 1.8.1 behave as | |||
| if this attribute was true by default.</strong></td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| </table> | |||
| <p>By using the <code>errorproperty</code> and <code>failureproperty</code> | |||
| @@ -635,6 +648,20 @@ supported.</p> | |||
| <p>to your <code>junit</code> task.</p> | |||
| <h3><a name="enabletestlistenerevents"><code>ant.junit.enabletestlistenerevents</a> | |||
| magic property</h3> | |||
| <p><em>Since Ant 1.8.2</em> the <code>enableTestListenerEvents</code> | |||
| attribute of the task controls whether fine grained logging messages | |||
| will be sent to the task's verbose log. In addition to this | |||
| attribute Ant will consult the | |||
| property <code>ant.junit.enabletestlistenerevents</code> and the | |||
| value of the property overrides the setting of the attribute.</p> | |||
| <p>This property exists so that containers running Ant that depend on | |||
| the additional logging events can ensure they will be generated even | |||
| if the build file disables them.</p> | |||
| <h3>Examples</h3> | |||
| <pre> | |||
| @@ -104,7 +104,9 @@ | |||
| <target name="captureToSummary"> | |||
| <property name="fork" value="true"/> | |||
| <junit fork="${fork}" printSummary="withOutAndErr"> | |||
| <property name="enableEvents" value="false"/> | |||
| <junit fork="${fork}" printSummary="withOutAndErr" | |||
| enableTestListenerEvents="${enableEvents}"> | |||
| <test name="org.apache.tools.ant.taskdefs.optional.junit.Printer"/> | |||
| <classpath refid="test"/> | |||
| </junit> | |||
| @@ -165,6 +165,7 @@ public class JUnitTask extends Task { | |||
| private ForkMode forkMode = new ForkMode("perTest"); | |||
| private boolean splitJunit = false; | |||
| private boolean enableTestListenerEvents = false; | |||
| private JUnitTaskMirror delegate; | |||
| private ClassLoader mirrorLoader; | |||
| @@ -186,6 +187,12 @@ public class JUnitTask extends Task { | |||
| public static final String TESTLISTENER_PREFIX = | |||
| "junit.framework.TestListener: "; | |||
| /** | |||
| * Name of magic property that enables test listener events. | |||
| */ | |||
| public static final String ENABLE_TESTLISTENER_EVENTS = | |||
| "ant.junit.enabletestlistenerevents"; | |||
| private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||
| /** | |||
| @@ -672,6 +679,32 @@ public class JUnitTask extends Task { | |||
| this.tmpDir = tmpDir; | |||
| } | |||
| /** | |||
| * Whether test listener events shall be generated. | |||
| * | |||
| * <p>Defaults to false.</p> | |||
| * | |||
| * <p>This value will be overridden by the magic property | |||
| * ant.junit.enabletestlistenerevents if it has been set.</p> | |||
| * | |||
| * @since Ant 1.8.2 | |||
| */ | |||
| public void setEnableTestListenerEvents(boolean b) { | |||
| enableTestListenerEvents = b; | |||
| } | |||
| /** | |||
| * Whether test listener events shall be generated. | |||
| * @since Ant 1.8.2 | |||
| */ | |||
| public boolean getEnableTestListenerEvents() { | |||
| String e = getProject().getProperty(ENABLE_TESTLISTENER_EVENTS); | |||
| if (e != null) { | |||
| return Project.toBoolean(e); | |||
| } | |||
| return enableTestListenerEvents; | |||
| } | |||
| /** | |||
| * Adds the jars or directories containing Ant, this task and | |||
| * JUnit to the classpath - this should make the forked JVM work | |||
| @@ -953,8 +986,9 @@ public class JUnitTask extends Task { | |||
| cmd.createArgument().setValue(Constants.LOG_FAILED_TESTS | |||
| + String.valueOf(logFailedTests)); | |||
| cmd.createArgument().setValue( | |||
| Constants.LOGTESTLISTENEREVENTS + "true"); // #31885 | |||
| // #31885 | |||
| cmd.createArgument().setValue(Constants.LOGTESTLISTENEREVENTS | |||
| + String.valueOf(getEnableTestListenerEvents())); | |||
| StringBuffer formatterArg = new StringBuffer(STRING_BUFFER_SIZE); | |||
| final FormatterElement[] feArray = mergeFormatters(test); | |||
| @@ -1209,7 +1243,7 @@ public class JUnitTask extends Task { | |||
| /** | |||
| * Pass output sent to System.out to the TestRunner so it can | |||
| * collect ot for the formatters. | |||
| * collect it for the formatters. | |||
| * | |||
| * @param output output coming from System.out | |||
| * @since Ant 1.5 | |||
| @@ -1360,7 +1394,8 @@ public class JUnitTask extends Task { | |||
| runner = delegate.newJUnitTestRunner(test, test.getMethods(), test.getHaltonerror(), | |||
| test.getFiltertrace(), | |||
| test.getHaltonfailure(), false, | |||
| true, classLoader); | |||
| getEnableTestListenerEvents(), | |||
| classLoader); | |||
| if (summary) { | |||
| JUnitTaskMirror.SummaryJUnitResultFormatterMirror f = | |||
| @@ -45,18 +45,21 @@ public class JUnitTestListenerTest extends BuildFileTest { | |||
| } | |||
| public void testFullLogOutput() { | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertTrue("expecting full log to have BuildListener events", | |||
| hasBuildListenerEvents(getFullLog())); | |||
| } | |||
| public void testNoLogOutput() { | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertFalse("expecting log to not have BuildListener events", | |||
| hasBuildListenerEvents(getLog())); | |||
| } | |||
| public void testTestCountFired() { | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertTrue("expecting test count message", | |||
| hasEventMessage(JUnitTask.TESTLISTENER_PREFIX + | |||
| @@ -64,6 +67,7 @@ public class JUnitTestListenerTest extends BuildFileTest { | |||
| } | |||
| public void testStartTestFired() { | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertTrue("expecting test started message", | |||
| hasEventMessage(JUnitTask.TESTLISTENER_PREFIX + | |||
| @@ -71,12 +75,34 @@ public class JUnitTestListenerTest extends BuildFileTest { | |||
| } | |||
| public void testEndTestFired() { | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertTrue("expecting test ended message", | |||
| hasEventMessage(JUnitTask.TESTLISTENER_PREFIX + | |||
| "endTest(" + PASS_TEST + ")")); | |||
| } | |||
| public void testNoFullLogOutputByDefault() { | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertFalse("expecting full log to not have BuildListener events", | |||
| hasBuildListenerEvents(getFullLog())); | |||
| } | |||
| public void testFullLogOutputMagicProperty() { | |||
| getProject().setProperty(JUnitTask.ENABLE_TESTLISTENER_EVENTS, "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertTrue("expecting full log to have BuildListener events", | |||
| hasBuildListenerEvents(getFullLog())); | |||
| } | |||
| public void testNoFullLogOutputMagicPropertyWins() { | |||
| getProject().setProperty(JUnitTask.ENABLE_TESTLISTENER_EVENTS, "false"); | |||
| getProject().setProperty("enableEvents", "true"); | |||
| executeTarget(PASS_TEST_TARGET); | |||
| assertFalse("expecting full log to not have BuildListener events", | |||
| hasBuildListenerEvents(getFullLog())); | |||
| } | |||
| private boolean hasBuildListenerEvents(String log) { | |||
| return log.indexOf(JUnitTask.TESTLISTENER_PREFIX) >= 0; | |||
| } | |||