<!--
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>PlainListener AntUnit Listener</title>
  </head>

  <body>
    <h2><a name="plainlistener">Plain AntUnit Listener</a></h2>

    <h3>Description</h3>

    <p>Writes reports similar to the "plain" JUnit formatter.</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">sendLogTo</td>
        <td valign="top">Where the output will be written to.  Valid
            values are "ant" for Ant's logging system, "file" for a
            file and "both" for either of both.  Defaults to "ant".</td>
        <td align="center">No.</td>
      </tr>
      <tr>
        <td valign="top">toDir</td>
        <td valign="top">Directory where testreports will be written
            to if writing to a file.  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>
  </body>
</html>
