<!--
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">XML AntUnit Listener</a></h2>

    <h3>Description</h3>

    <p>Writes reports similar to the "xml" JUnit formatter.  Some
    information that appears as attributes for the JUnit formatter has
    been turned into elements to allow streaming of the report.</p>

    <p>The AntUnit distribution comes with two XSLT stylesheets (in
    the etc subdirectory of the binary or the src/etc directory of the
    source release) that can be used together with Ant's
    &lt;junitreport&gt; task to create reports about your AntUnit
    tests.</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">toDir</td>
        <td valign="top">Directory where testreports will be written
            to.  Defaults to the project's basedir.</td>
        <td align="center">No.</td>
      </tr>
      <tr>
        <td valign="top">logLevel</td>
        <td valign="top">Log level for messages from the tests to
        include in the report.  Must be one of: none, error, warn,
        warning, info, verbose, and debug. Messages at the given level
        or below will be included.</td>
        <td align="center">No. Default is 'none'.</td>
      </tr>
    </table>

    <h3>Examples</h3>

<pre>
    &lt;au:antunit failonerror="false" errorproperty="antunit-failure">
      &lt;fileset dir="${tests}" includes="*.xml"/>
      &lt;au:xmllistener toDir="${reportsdir}"/>
    &lt;/au:antunit>
    &lt;junitreport>
      &lt;fileset dir="${reportsdir}" includes="*.xml"/>
      &lt;report format="frames" styledir="${antunit-styles}"
              todir="${reportsdir}-frames"/>
    &lt;/junitreport>
    &lt;fail if="antunit-failure">At least one test has failed&lt;/fail>
</pre>

    <p>Runs AntUnit on all XML files in the directory
    <code>${tests}</code> writing XML reports to the directory
    <code>${reportsdir}</code> (which must exist upfront).  Based on
    the XML reports a consolidated HTML frame report is created in
    <code>${reportsdir}-frames</code> using the stylesheets mentioned
    above.  <code>${antunit-styles}</code> must point to the directory
    containing the stylesheets.</p>

  </body>
</html>
