<?xml version="1.0"?>
<!--
  Copyright 2002-2004 The Apache Software Foundation

  Licensed 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

      http://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.
-->

<document>
  <properties>
    <title>Jetty Tag Library</title>
    <author email="dion@apache.org">dIon Gillard</author>
  </properties>

  <body>
    <section name="Overview">
    
      <p>A collection of <a href="http://www.junit.org">JUnit</a> tags for 
        performing unit tests written in Jelly script.
      </p>
  
      <p>
        The &lt;suite&gt; tag allows a test suite to be created and then test cases can either 
        be individually ran or the whole suite ran.
      </p>
      <p>
        The &lt;case&gt; tag allows a single test case to be created as part of a suite.
      </p>
      <p>
        The &lt;run&gt; tag can be used to run a given Test, TestCase or TestSuite
      </p>
  
      <p>
        There is an example of these tags in action 
        <a href="http://cvs.apache.org/viewcvs.cgi/jakarta-commons/jelly/jelly-tags/junit/src/test/org/apache/commons/jelly/tags/junit/suite.jelly?rev=HEAD&amp;content-type=text/vnd.viewcvs-markup">here</a>
      </p>
      <p>
        See the <a href="tags.html">tags</a> for more information.
      </p>
    </section>
  </body>
</document>

