<?xml version="1.0" encoding="UTF-8"?>

<!--
   Copyright 2005 The Apache Software Foundation

   Licensed 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.
-->

<!--
   Compiles and runs unit tests against distribution jar(s).  Use .antrc or the 
   command line to control the jdk used to execute this build file.  
   
   Assumes that the distribution jar to be tested is in the base directory. 
   Use the "jardir" property to specify the path to the directory containing
   the jar. Any other jars in this directory will also be added to the
   classpath.  
   
   The default target, "test," executes clean as a dependency.
-->
  
<project default="test" name="commons-math" basedir=".">
  <property name="defaulttargetdir" value="target"/>
  <property name="libdir" value="target/lib"/>
  <property name="testclassesdir" value="target/test-classes"/>
  <property name="testreportdir" value="target/test-reports"/>
  <property name="defaulttargetdir" value="target"/>
  <property name="jardir" value="${basedir}"/>
   <path id="build.classpath">
    <fileset dir="${libdir}">
      <include name="**/*.jar">
      </include>
    </fileset>
  </path>
  <target name="clean" description="o Clean up the generated directories">
    <delete dir="${defaulttargetdir}"/>
  </target>
  <target name="init" description="o Initializes some properties">
    <echo>
    JAVA ENVIRONMENT
    **************************Java runtime version*****************************
    ${java.runtime.version}
    **************************Java class path**********************************
    ${java.class.path}
    **************************Java home****************************************
    ${java.home}
     *************************Java library path*******************************
    Java library path: ${java.library.path}
    ===========================================================================
    </echo>
    <mkdir dir="${libdir}" />
    <condition property="noget">
      <equals arg2="only" arg1="${build.sysclasspath}">
      </equals>
    </condition>
    <!--Test if JUNIT is present in ANT classpath-->
    <available property="Junit.present" classname="junit.framework.Test">
    </available>
  </target>
  <target name="test" description="o Run the test cases" if="test.failure" depends="internal-test">
    <fail message="There were test failures.">
    </fail>
  </target>
  <target name="internal-test" if="Junit.present" depends="clean, junit-present,compile-tests">
    <mkdir dir="${testreportdir}"/>
    <junit dir="./" failureproperty="test.failure" printSummary="yes" fork="true" haltonerror="true">
      <sysproperty key="basedir" value="."/>
      <formatter usefile="false" type="plain"/>
      <classpath>
        <path refid="build.classpath"/>
        <pathelement path="${testclassesdir}"/>
      </classpath>
      <batchtest todir="${testreportdir}">
        <fileset dir="src/test">
          <include name="**/*Test.java"/>
          <exclude name="**/*AbstractTest.java"/>
        </fileset>
      </batchtest>
    </junit>
  </target>
  <target name="junit-present" unless="Junit.present" depends="init">
  <echo>
    ================================= WARNING ================================
    Junit isn't present in your ${ANT_HOME}/lib directory. Tests not executed.
    ==========================================================================
  </echo>
  </target>
  <target name="compile-tests" if="Junit.present" depends="junit-present,get-deps">
    <mkdir dir="${testclassesdir}"/>
    <javac destdir="${testclassesdir}" deprecation="true" debug="true"
            optimize="false" excludes="**/package.html">
      <src>
        <pathelement location="src/test"/>
      </src>
      <classpath>
        <path refid="build.classpath"/>
      </classpath>
    </javac>
    <copy todir="${testclassesdir}">
      <fileset dir="src/test">
        <include name="**/*.xml"/>
        <include name="**/*.txt"/>
      </fileset>
    </copy>
  </target>
  <target name="get-deps" unless="noget" depends="init">
    <get dest="${libdir}/commons-logging-1.0.3.jar" usetimestamp="true" ignoreerrors="true" 
              src="http://www.ibiblio.org/maven/commons-logging/jars/commons-logging-1.0.3.jar"/>
    <get dest="${libdir}/commons-discovery-0.2.jar" usetimestamp="true" ignoreerrors="true" 
              src="http://www.ibiblio.org/maven/commons-discovery/jars/commons-discovery-0.2.jar"/>
    <copy todir="${libdir}">
      <fileset dir="${jardir}">
        <include name="*.jar"/>
      </fileset>
    </copy>
  </target>
</project>