<!--
  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.
-->
<html>
<head>
</head>
<body>

  <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&content-type=text/vnd.viewcvs-markup">here</a>
  </p>
</body>
</html>
