<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->

<project name="Harmony LUNI Test" default="test" basedir=".">

    <property name="hy.test.root" location=".." />
    <property name="hy.component" value="classlib" />
    <property name="hy.module" value="luni" />
    <import file="${hy.test.root}/../ant/testproperties.xml" />

    <target name="test" depends="test-module" />

    <target name="test-module"
            depends="-test-module,-test-module-impl" />
    <target name="-test-module" depends="test-jre-vm-info">
        <convert-test-as-class from="test.case" to="converted.tc.class" />
        <run-hdk-tests module="luni" jar="luni_tests_api.jar">
            <excludeorinclude>
                <exclude name="**/java/io/Test.class" />
            </excludeorinclude>
            <junit-elements>
                <!-- Required by various tests that set security manager etc -->
                <jvmarg value="-Djava.security.policy=../testing.policy" />

                <!-- Required for running the java.net unit tests -->
                <jvmarg value="-Dtest.ini.file=resources/config/localhosttest.ini" />
            </junit-elements>
        </run-hdk-tests>
    </target>

    <target name="-test-module-impl" if="hy.run.impl.tests">
        <run-hdk-tests module="luni" jar="luni_tests_impl.jar">
            <junit-elements>
                <!-- Required by various tests that set security manager etc -->
                <jvmarg value="-Djava.security.policy=../testing.policy" />

                <!-- Required for running the java.net unit tests -->
                <jvmarg value="-Dtest.ini.file=resources/config/localhosttest.ini" />
            </junit-elements>
        </run-hdk-tests>
    </target>
    
</project>
