<!--

   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@sun.com                                             -->
<!-- @version $Id$        -->
<!-- ========================================================================= -->
<testSuite id="A" name="Dummy Test Suite A">
    <test id="A1" class="org.apache.batik.test.xml.DummyValidTest" />
    <test id="A2" class="org.apache.batik.test.xml.DummyValidTest" />
    <test id="duplicatedId" class="org.apache.batik.test.xml.DummyValidTestSuite" />
    <testGroup id="AG" name="AG Test Group">
        <test id="AG1" class="org.apache.batik.test.xml.DummyValidTest" />
        <test id="AG2" class="org.apache.batik.test.xml.DummyValidTest" />
    </testGroup>
</testSuite>
