<!--
   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                                             -->
<!-- @version $Id$     -->
<!-- ====================================================================== -->

<testSuite id="ext.awt.geom.unitTesting" 
           name="org.apache.batik.ext.awt.geom Unit Testing">
    <test id="rlm.sort" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.sort.in" />
        <arg class="java.lang.String" value="rlm.sort.out" />
    </test>

    <test id="rlm.containsall" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.containsall.in" />
        <arg class="java.lang.String" value="rlm.containsall.out" />
    </test>

    <test id="rlm.removeall" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.removeall.in" />
        <arg class="java.lang.String" value="rlm.removeall.out" />
    </test>

    <test id="rlm.retainall" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.retainall.in" />
        <arg class="java.lang.String" value="rlm.retainall.out" />
    </test>

    <test id="rlm.merge" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.merge.in" />
        <arg class="java.lang.String" value="rlm.merge.out" />
    </test>

    <test id="rlm.subtract" 
          class="org.apache.batik.ext.awt.geom.RectListManagerTest">
        <arg class="java.lang.String" value="rlm.subtract.in" />
        <arg class="java.lang.String" value="rlm.subtract.out" />
    </test>

</testSuite>
