<!--
   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="svggen" name="SVGGraphics2D Accuracy Testing">
    <testGroup id="roundTripSVG" class="org.apache.batik.svggen.SVGGeneratorTests">
        <test id="ATransform" />
        <test id="AttributedCharacterIterator" />
        <test id="BasicShapes" />
        <test id="BasicShapes2" />
        <test id="BStroke" />
        <test id="Bug4389" />
        <test id="Bug4945" />
        <test id="Bug6535" />
        <test id="Bug17965" />
        <test id="Clip" />
        <test id="Color1" />
        <test id="Color2" />
        <test id="DrawImage" />
        <test id="Font1" />
        <test id="Font2" />
        <test id="GVector" />
        <test id="Gradient" />
        <test id="GraphicObjects" />
        <test id="IdentityTest" />
        <test id="Lookup" />
        <test id="NegativeLengths" />
        <test id="Paints" />
        <test id="RHints" />
        <test id="Rescale" />
        <test id="ShearTest" />
        <test id="Texture" />
        <test id="TextSpacePreserve" />    
        <test id="TransformCollapse" /> 
    </testGroup>

    <test id="ShowSVG" class="org.apache.batik.svggen.ShowGraphics2DOutput" />
    <test id="GetRootTest" class="org.apache.batik.svggen.GetRootTest" />

    <test id="bug21259" class="org.apache.batik.svggen.Bug21259" />

    <!-- In the OnePerformanceTest, runOp is the same as runref. Therefore, the -->
    <!-- score should be 1.                                                     -->
    <test id="DoubleStringPerformanceTest" class="org.apache.batik.svggen.DoubleStringPerformanceTest">
        <property name="ReferenceScore" class="java.lang.Double" value="0.3724747761938356" />
    </test>

    <!-- SVGGeneratorTests.doubleString NullPointerException regression test -->
    <test id="DoubleString" class="org.apache.batik.svggen.DoubleString" />

</testSuite>
