<project name="Project" default="default">

    <target name="check_prog">
        <fail message="Please provide a program to test with -Dprogam=''. The arguments can be 
one of {original, mutant-1, mutant-2, mutant-3, mutant-4, mutant-5}">
            <condition>
                <or>
                    <not><isset property="program"/></not>
                    <not><contains 
string="original,mutant-1,mutant-2,mutant-3,mutant-4,mutant-5" substring="${program}"/></not>
                </or>
            </condition>
        </fail>
    </target>

    <target name="check_test">
        <fail message="Please provide a test with -Dtest=''. The arguments can be one of 
{Boundary, Partitioning}">
            <condition>
                <or>
                    <not><isset property="test"/></not>
                    <not><contains string="Boundary,Partitioning" substring="${test}"/></not>
                </or>
            </condition>
        </fail>
    </target>

    <target name="compile_prog" depends="check_prog">
        <mkdir dir="classes/programs/${program}" />
        <depend srcdir="programs/${program}" destdir="classes/programs/${program}" 
cache=".depcache/programs/${program}" closure="yes"/>
        <javac srcdir="programs/${program}" destdir="classes/programs/${program}"  
classpath="lib/junit-4.11.jar;lib/hamcrest-core-1.3.jar" includeantruntime="false"/>
    </target>

    <target name="compile_orig">
        <mkdir dir="classes/programs/original" />
        <depend srcdir="tests" destdir="classes/programs/original" 
cache=".depcache/programs/original" closure="yes"/>
        <javac srcdir="programs/original" destdir="classes/programs/original" 
classpath="lib/junit-4.11.jar;lib/hamcrest-core-1.3.jar" includeantruntime="false"/>
    </target>

    <target name="compile_test" depends="compile_orig, check_test">
        <mkdir dir="classes/tests" />
        <depend srcdir="tests/" destdir="classes/tests/" 
cache=".depcache/tests/" closure="yes"/>
        <javac srcdir="tests/" destdir="classes/tests/" 
classpath="lib/junit-4.11.jar;lib/hamcrest-core-1.3.jar;classes/programs/original" 
includeantruntime="false"/>
    </target>

    <target name="test" depends="compile_prog, compile_test">
        <mkdir dir="results"/>
        <parallel threadCount="1" timeout="5000">
            <sequential>
                <junit printsummary="yes" fork="yes" haltonfailure="yes">
                    <classpath>
                        <pathelement path="classes/programs/${program}"/>
                        <pathelement path="classes/tests/"/>
                        <pathelement path="lib/junit-4.11.jar"/>
                        <pathelement path="lib/hamcrest-core-1.3.jar"/>
                    </classpath>
                    <formatter type="plain"/>
                    <test name="swen90006.passbook.${test}Tests" todir="results" 
outfile="${test}_results.${program}"/>
                </junit>
            </sequential>
        </parallel>
    </target>

    <target name="clean">
        <delete dir="classes"/>
        <delete dir=".depcache"/>
        <delete><fileset dir="results" includes="**/*"/></delete>
    </target>

</project>