<project default="test.selectors" basedir=".">

  <property name="dest" value="dest"/>
  <property name="srcroot" value="src"/>
  <property name="src" value="${srcroot}/jakarta-ant-1.4.1"/>

  <target name="test.selectors" depends="init">
    <!-- Use antcall so the destination directory is erased each time -->
    <antcall target="test.dateselect.1"/> 
    <antcall target="test.sizeselect.1"/>
    <antcall target="test.filenameselect.1"/>
    <antcall target="test.extendselect.1"/>
    <antcall target="test.depthselect.1"/>
    <antcall target="test.presentselect.1"/>
    <antcall target="test.dependselect.1"/>
    <antcall target="test.containsselect.1"/>
    <antcall target="test.ref.1"/>
    <antcall target="test.ref.2"/>
  </target>

  <target name="test.ref" depends="init">
    <antcall target="test.containsselect.2"/>
    <antcall target="test.containsselect.3"/>
  </target>

  <target name="test.dateselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 78 files"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <dateselect datetime="01/23/2002 01:00 PM" when="after"/>
      </fileset>
    </copy>
  </target>

  <target name="test.sizeselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 196 files"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <sizeselect size="8" units="k" when="more"/>
      </fileset>
    </copy>
  </target>

  <target name="test.filenameselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 134 files (find src -name '*Test*' -print | wc)"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <filenameselect name="**/*Test*"/>
      </fileset>
    </copy>
  </target>

  <target name="test.extendselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 134 files (same as test.filenameselect.1, but through extend)"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <extendselect classname="org.apache.tools.ant.types.selectors.FilenameSelector">
	    <param name="name" value="**/*Test*"/>
	  </extendselect>
      </fileset>
    </copy>
  </target>

  <target name="test.depthselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 20 files"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <depthselect min="0" max="1"/>
      </fileset>
    </copy>
  </target>

  <target name="test.presentselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 1 file"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <presentselect targetdir="${src}/lib/optional"/>
      </fileset>
    </copy>
  </target>

  <target name="test.dependselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 5 files"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}/src/testcases">
          <dependselect targetdir="${src}/src/testcases2" granularity="2000"/>
      </fileset>
    </copy>
  </target>

  <target name="test.containsselect.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 113 files (grep -rl cellspacing src | wc)"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <containsselect id="cs1" contains="cellspacing"/>
      </fileset>
    </copy>
  </target>

  <target name="test.ref.1" depends="init,clear.dest,get.src">
    <echo message="Should copy 113 files (ignore)"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <and id="ref1">
            <containsselect contains="cellspacing"/>
	  </and>
      </fileset>
    </copy>
  </target>

  <target name="test.ref.2" depends="init,clear.dest,get.src">
    <echo message="Should copy 113 files (using ref to previous)"/>
    <copy todir="${dest}" includeEmptyDirs="false">
      <fileset dir="${src}">
          <and refid="ref1"/>
      </fileset>
    </copy>
  </target>



  <target name="clear.dest">
    <delete dir="${dest}"/>
    <mkdir dir="${dest}"/>
  </target>

  <target name="get.src" unless="got.src">
    <delete dir="${srcroot}"/>
    <mkdir dir="${srcroot}"/>
    <get src="http://jakarta.apache.org/builds/jakarta-ant/release/v1.4.1/src/jakarta-ant-1.4.1-src.tar.gz"
            dest="${srcroot}/ant.tar.gz"/>
    <gunzip src="${srcroot}/ant.tar.gz"/>
    <untar src="${srcroot}/ant.tar" dest="${srcroot}"/>
    <delete file="${srcroot}/ant.tar"/>
    <delete file="${srcroot}/ant.tar.gz"/>
    <touch datetime="01/01/2002 1:00 am">
      <fileset dir="${src}/src/testcases"/>
    </touch>
    <touch datetime="02/01/2002 12:00 pm">
      <fileset dir="${src}/src/testcases/org/apache/tools/zip"/>
    </touch>
    <touch datetime="02/15/2002 3:00 pm">
      <fileset dir="${src}/src/testcases/org/apache/tools/ant/taskdefs/optional"/>
    </touch>
    <mkdir dir="${src}/src/testcases2"/>
    <copy todir="${src}/src/testcases2">
        <fileset dir="${src}/src/testcases"/>
    </copy>
    <touch file="${src}/src/testcases2/old1" datetime="02/01/2000 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/old2" datetime="02/01/2000 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/old3" datetime="02/01/2000 12:00 pm"/>
    <touch file="${src}/src/testcases2/new1" datetime="04/01/2002 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/new2" datetime="04/01/2002 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/new3" datetime="04/01/2002 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/ProjectTest.java" datetime="02/01/2000 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/types/MapperTest.java" datetime="02/01/2000 12:00 pm"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/types/DescriptionTest.java" datetime="02/01/2000 12:00 pm"/>
    <delete file="${src}/src/testcases2/org/apache/tools/ant/types/FilterSetTest.java"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/IncludeTest.java"/>
    <sleep seconds="3"/>
    <touch file="${src}/src/testcases/org/apache/tools/ant/IncludeTest.java"/>
    <touch file="${src}/src/testcases2/org/apache/tools/ant/DirectoryScannerTest.java"/>
    <sleep seconds="1"/>
    <touch file="${src}/src/testcases/org/apache/tools/ant/DirectoryScannerTest.java"/>
  </target>

  <target name="init" depends="init.checksrc" unless="already-running">
    <property name="already-running" value="true"/>
  </target>

  <target name="init.checksrc" unless="got.src">
    <available property="got.src" file="${src}/KEYS"/>
  </target>

  <target name="struct">
    <antstructure output="structure.dtd"/>
  </target>
</project>
