<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Test Task</title>
</head>

<body>

<h2><a name="test">Test</a></h2>
<h3>Description</h3>
<p>This is a primitive task to execute a unit test in the org.apache.testlet framework.</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">showSuccess</td>
    <td valign="top">a boolean value indicating whether tests should display a 
    message on success
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">showBanner</td>
    <td valign="top">a boolean value indicating whether a banner should be displayed 
    when starting testlet engine
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">forceShowTrace</td>
    <td valign="top">a boolean indicating that a stack trace is displayed on any failure
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">showTrace</td>
    <td valign="top">a boolean indicating that a stack trace is displayed on 
    error (but not normal failure)
    </td>
    <td valign="top" align="center">No</td>
  </tr>
</table>
<p>
The user can also specify the nested &lt;classpath&gt; element which defines classpath 
in which the task is executed. The user also specifies a subelement per testlet executed
which has content that specifies tasklet classname.</p>

<h3>Examples</h3>
<blockquote>
<pre>
&lt;test showSuccess=&quot;false&quot; showBanner=&quot;false&quot; showTrace=&quot;true&quot; forceShowTrace=&quot;true&quot;&gt;
   &lt;classpath refid=&quot;test.classpath&quot;/&gt;
   &lt;testlet&gt;org.foo.MyTestlet&lt;/testlet&gt;
   &lt;testlet&gt;org.foo.MyOtherTestlet&lt;/testlet&gt;
&lt;/test&gt;
</pre>
</blockquote>
The above will run the testlets org.foo.MyTestlet and org.foo.MyOtherTestlet

<hr>
<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
Reserved.</p>

</body>
</html>

