<!--
   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
   
        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.
-->

<!-- ===================================================================== -->
<!-- @author vincent.hardy@eng.sun.com                                     -->
<!-- @version $Id$ -->
<!-- ===================================================================== -->
<testSuite id="test.unitTesting" name="Test Module - Unit Testing">
    <!-- ================================================================= -->
    <!-- Validates that the XMLTestSuiteRunner class is operating          -->
    <!-- as expected                                                       -->
    <!-- ================================================================= -->
    <test id="xmlTestSuiteRunnerValidator" 
    class="org.apache.batik.test.xml.XMLTestSuiteRunnerValidator" />

    <!-- ================================================================= -->
    <!-- Validates that the SVGRenderingAccuracyTest class is operating as --> 
    <!-- expected                                                          -->
    <!-- ================================================================= -->
    <test id="svgRenderingAccuracyTestValidator" 
    class="org.apache.batik.test.svg.SVGRenderingAccuracyTestValidator"/>

    <!-- ================================================================== -->
    <!-- Validates that the SelfContainedSVGOnLoadTest class is operating   -->
    <!-- as expected                                                        -->
    <!-- ================================================================== -->
    <test id="selfContainedSVGOnLoadTestValidator" 
    class="org.apache.batik.test.svg.SelfContainedSVGOnLoadTestValidator" />

    <!-- ================================================================== -->
    <!-- Validates that the SVGAccuracyTest class is operating as expected  -->
    <!-- ================================================================== -->
    <test id="svgAccuracyTestValidator" 
    class="org.apache.batik.svggen.SVGAccuracyTestValidator" /> 


    <!-- ================================================================== -->
    <!-- Validates that the Memory Leak Test is operating as expected       -->
    <!-- ================================================================== -->
    <test id="memoryLeakTestValidator" 
    class="org.apache.batik.test.MemoryLeakTestValidator" />

    <!-- ========================================================================== -->
    <!-- Validates the operation of PerformanceTest                                 -->
    <!-- ========================================================================== -->
    <test id="PerformanceTestValidator" class="org.apache.batik.test.PerformanceTestValidator" /> 

    <!-- In the OnePerformanceTest, runOp is the same as runref. Therefore, the -->
    <!-- score should be 1.                                                     -->
    <test id="PerformanceTestSanity" class="org.apache.batik.test.OnePerformanceTest">
        <property name="ReferenceScore" class="java.lang.Double" value="1" />
    </test>
    
    <!-- =================================================================== -->
    <!-- Validates parametrization of tests                                  -->
    <!-- =================================================================== -->
    <testGroup id="parametrizedGroup" class="org.apache.batik.test.ParametrizedTest">
        <property name="A" class="java.lang.String" value="parametrizedGroup_A_value" />
        <property name="B" class="java.lang.String" value="parametrizedGroup_B_value" />

        <test id="parametrizedInstanceA">
            <property name="ExpectedA" class="java.lang.String" value="parametrizedGroup_A_value" />
            <property name="ExpectedB" class="java.lang.String" value="parametrizedGroup_B_value" />
        </test>
        <test id="parametrizedInstanceB">
            <property name="B" class="java.lang.String" value="parametrizedInstanceB_B_value" />
            <property name="ExpectedA" class="java.lang.String" value="parametrizedGroup_A_value" />
            <property name="ExpectedB" class="java.lang.String" value="parametrizedInstanceB_B_value" />
        </test>
    </testGroup>

</testSuite>
