<?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="Common test property definitions">
    <description>
        Ant file of common test properties to be imported by other ant
        test files
    </description>

    <property name="hy.target" value="${hy.test.root}" />
    <property name="hy.hdk" location="${hy.test.root}/../.." />
    <property name="test.jre.home" location="${hy.hdk}/jdk/jre" />
    <property name="work.dir" value="${hy.test.root}" />
    <property name="tests.output" value="${work.dir}/report" />
    <property name="report.dir" value="${tests.output}/html" />
    <property name="junit.jar" value="${hy.test.root}/junit.jar" />
    <property file="${hy.test.root}/test.properties" />

    <import file="${hy.test.root}/../ant/properties.xml" />
</project>
