<!--
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

https://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.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>XMLListener AntUnit Listener</title>
  </head>

  <body>
    <h2><a name="xmllistener">Failure AntUnit Listener</a></h2>

    <h3>Description</h3>

    <p>Writes reports similar to the &quot;failure&quot; JUnit formatter.</p><p>This AntUnitListener creates a new buildfile with a target for each failed test target in the AntUnit run. The generated target calls the failed target (with setUp and tearDown if present in the called project). <br></p><p>This is intended for rerunning just failed tests.<br></p>

    

    <h3>Parameters</h3>
    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">file</td>
        <td valign="top">Where to write the generated buildfile.<br></td>
        <td align="center">Yes.</td>
      </tr>
    </table>

    <h3>Examples</h3>

<pre> <br>    &lt;au:antunit&gt; 
      &lt;fileset dir=&quot;${tests}&quot; includes=&quot;*.xml&quot;/&gt; 
      &lt;au:failurelistener file=&quot;${build.dir}/failed-tests/failed.xml&quot;/&gt; 
    &lt;/au:antunit&gt; <br>
</pre>

    <p>Runs AntUnit on all XML files in the directory
    <code>${tests}</code> and collecting all failed tests. If there was a failure the file <code>${build.dir}/failed-tests/failed.xml</code> is created and has a <em>textXXX </em>target for each failed test. Additionally it has a default target <em>antunit</em> which runs all these failed tests.<br> </p>

  </body>
</html>
