<!--
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 default="jar">
  <target name="compile" description="o Compile the code" depends="get-deps">
    <mkdir dir="${classesdir}"/>
    <javac destdir="${classesdir}">
      <src>
        <pathelement location="src/main/java"/>
      </src>
      <classpath>
        <fileset dir="${libdir}">
          <include name="*.jar"/>
        </fileset>
      </classpath>
    </javac>
  </target>
  <target name="test-compile" description="o Compile the code" depends="get-deps">
    <mkdir dir="${test.classesdir}"/>
    <javac destdir="${test.classesdir}">
      <src>
        <pathelement location="src/test/java"/>
      </src>
      <classpath>
        <fileset dir="${libdir}">
          <include name="/path/to/junit-3.8.1.jar"/>
        </fileset>
      </classpath>
    </javac>
  </target>
  <target name="jar" description="o Create the jar" depends="compile">
    <jar jarfile="target/${final.name.api}.jar"/>
  </target>
  <target name="test" depends="test:compile" description="Run all acceptance tests and unit tests">
    <mkdir dir="${test.reports.dir}"/>
    <junit printsummary="no" fork="yes" forkmode="once" haltonfailure="${junit.haltonfailure}" includeantruntime="true">
      <sysproperty key="java.awt.headless" value="true"/>
      <classpath refid="classpath"/>
      <formatter type="brief" usefile="no"/>
      <formatter type="xml"/>
      <batchtest todir="${test.reports.dir}">
        <fileset dir="src/test/java">
          <include name="${test.src.includes}"/>
        </fileset>
      </batchtest>
    </junit>
    <junitreport todir="${test.reports.dir}">
      <fileset dir="${test.reports.dir}">
        <include name="TEST-*.xml"/>
      </fileset>
      <report format="frames" todir="${test.reports.dir}/html"/>
    </junitreport>
    <echo message="Detailed results written to report : ${test.reports.dir}/html/index.html"/>
  </target>
</project>
