<?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 JDK tools Test" default="test" basedir=".">

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

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

    <target name="test-module" depends="test-jre-vm-info">
        <property name="test.jre.home" value="${hy.jdk}/jre" />
        <property name="test.jre.jvm" value="${test.jre.home}/bin/java" />
        <property name="test.debugger.jvm" value="${test.jre.jvm}" />
        <property name="test.debuggee.jvm" value="${test.jre.jvm}" />

        <echo message="Running JPDA tests" />
        <echo message="  Debugger JVM=${test.debugger.jvm}" />
        <echo message="  Debuggee JVM=${test.debuggee.jvm}" />

        <convert-test-as-class from="test.case" to="converted.tc.class" />
        <run-hdk-tests module="jpda" jar="jpda_tests.jar">
            <junit-elements>
                <!-- JVM path and arguments for debuggee process -->
                <jvmarg value="-Djpda.settings.debuggeeJavaPath=${test.debuggee.jvm}" />
                <jvmarg value="-Djpda.settings.debuggeeVMExtraOptions=${hy.test.vmargs}" />
            </junit-elements>
        </run-hdk-tests>
    </target>
</project>
