<!--
   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 deweese@apache.org                                             -->
<!-- @author vincent.hardy@sun.com                                          -->
<!-- @version $Id$  -->
<!-- ====================================================================== -->
<testSuite id="gvt.unitTesting" name="org.apache.batik.gvt Unit Testing">

    <!-- ================================================================== -->
    <!--                         Text Selection Tests                       -->
    <!-- ================================================================== -->

    <test id="text.selection.latin" 
    class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the latin entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="latin" />
        <arg class="java.lang.Integer" value="0" />
        <arg class="java.lang.Integer" value="20" />
    </test>

    <test id="text.selection.latin-ext" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the latin-extended entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="latin-extended" />
        <arg class="java.lang.Integer" value="0" />
        <arg class="java.lang.Integer" value="15" />
    </test>

    <test id="text.selection.cyrillic" 
    class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the cyrillic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="cyrillic" />
        <arg class="java.lang.Integer" value="4" />
        <arg class="java.lang.Integer" value="24" />
    </test>

    <test id="text.selection.greek" 
    class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the greek entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="greek" />
        <arg class="java.lang.Integer" value="0" />
        <arg class="java.lang.Integer" value="35" />
    </test>

    <test id="text.selection.hebrew" 
    class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select just the hebrew part of entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="hebrew" />
        <arg class="java.lang.Integer" value="10" />
        <arg class="java.lang.Integer" value="20" />
    </test>

    <test id="text.selection.arabic" 
    class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/textBiDi.svg" />
        <arg class="java.lang.String"  value="arabic" />
        <arg class="java.lang.Integer" value="5" />
        <arg class="java.lang.Integer" value="40" />
    </test>

    <test id="text.selection.svgpath.middle50" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/fonts/fontOnPath.svg" />
        <arg class="java.lang.String"  value="middle50" />
        <arg class="java.lang.Integer" value="1" />
        <arg class="java.lang.Integer" value="13" />
    </test>

    <test id="text.selection.svgpath.start35" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/fonts/fontOnPath.svg" />
        <arg class="java.lang.String"  value="start35" />
        <arg class="java.lang.Integer" value="0" />
        <arg class="java.lang.Integer" value="13" />
    </test>

    <test id="text.selection.vertpath.supersub" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalTextOnPath.svg" />
        <arg class="java.lang.String"  value="supersub" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="18" />
    </test>

    <test id="text.selection.vertpath.beforeafter" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalTextOnPath.svg" />
        <arg class="java.lang.String"  value="beforeafter" />
        <arg class="java.lang.Integer" value="0" />
        <arg class="java.lang.Integer" value="28" />
    </test>

    <test id="text.selection.vertpath.negpos" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select most of the arabic entry -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalTextOnPath.svg" />
        <arg class="java.lang.String"  value="negpos" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="17" />
    </test>

    <test id="text.selection.vert.orient0" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select vertical text with orientation 0 -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalText.svg" />
        <arg class="java.lang.String"  value="orient0" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="18" />
    </test>

    <test id="text.selection.vert.orient90" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select vertical text with orientation 90 -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalText.svg" />
        <arg class="java.lang.String"  value="orient90" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="18" />
    </test>

    <test id="text.selection.vert.orient180" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select vertical text with orientation 180 -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalText.svg" />
        <arg class="java.lang.String"  value="orient180" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="18" />
    </test>

    <test id="text.selection.vert.orient270" 
          class="org.apache.batik.gvt.TextSelectionTest">
        <!-- Select vertical text with orientation 270 -->
        <arg class="java.lang.String"  
             value="samples/tests/spec/text/verticalText.svg" />
        <arg class="java.lang.String"  value="orient270" />
        <arg class="java.lang.Integer" value="3" />
        <arg class="java.lang.Integer" value="18" />
    </test>
</testSuite>
