<?xml version="1.0"?>

<project name="copy-test" basedir="." default="test1">

  <target name="test1">
    <copy file="copy.xml" tofile="copytest1.tmp" />
  </target>

  <target name="test2">
    <copy file="copy.xml" todir="copytest1dir" overwrite="true"/>
  </target>

  <target name="filtertest">
    <!-- check fix for bugzilla 23154 -->
    <delete quiet="yes" file="copy.filter.out"/>
    <delete quiet="yes" file="copy.filter.inp"/>
    <concat destfile="copy.filter.inp">
PRODUCT_VERSION=6.2.1.4
PRODUCT_BUILD=6.5 (BLD_65036)
PRODUCT_VERSION=6.2.1.4
PRODUCT_BUILD=6.5 (BLD_65036)
    </concat>
    <copy file="copy.filter.inp" tofile="copy.filter.out">
      <filterset begintoken="6" endtoken="4">
        <filter token=".2.1." value="2.6.4" />
      </filterset>
    </copy>
    <concat><path path="copy.filter.out"/></concat>
  </target>

  <target name="infinitetest">
    <delete quiet="yes" file="copy.filter.out"/>
    <delete quiet="yes" file="copy.filter.inp"/>
    <concat destfile="copy.filter.inp">
a=b=
    </concat>
    <copy file="copy.filter.inp" tofile="copy.filter.out">
      <filterset begintoken="=" endtoken="=">
        <filter token="b" value="=b="/>
      </filterset>
    </copy>
    <concat><path path="copy.filter.out"/></concat>
  </target>

  <target name="test3">
    <!-- create an empty file -->
    <touch file="copytest3.tmp"/>
    <!--wait -->
    <sleep seconds="4"/>
    <!-- copy a different file to two places -->
    <copy file="copy.xml" tofile="copytest3a.tmp" overwrite="true"/>
    <copy file="copy.xml" tofile="copytest3b.tmp" overwrite="true"/>
    <!--wait -->
    <sleep seconds="4"/>
    <!-- copy an old file onto a newer file (should not work) -->
    <copy file="copytest3.tmp" tofile="copytest3b.tmp" />
    <!-- copy an older file onto a new one, should succeed -->
    <copy file="copytest3.tmp" tofile="copytest3c.tmp"
      overwrite="true"
      preservelastmodified="true" />
    <!-- copy a newer file onto an older one (should work) -->
    <copy file="copytest3a.tmp" tofile="copytest3.tmp"
      preservelastmodified="true" />
    <!-- expected state :
      3a.tmp==3.tmp==copy.xml
      timeof(3a.tmp)==timeof(3.tmp)==now()-4
      sizeof(3c)==0
      timeof(3c.tmp)<timeof(3a.tmp);
      3b.tmp==copy.xml
    -->
  </target>

  <target name="test_single_file_fileset">
    <copy tofile="copytest_single_file_fileset.tmp">
      <fileset dir="." includes="copy.xml"/>
    </copy>
  </target>

  <target name="test_single_file_path">
    <copy tofile="copytest_single_file_path.tmp">
      <path>
        <pathelement location="copy.xml"/>
      </path>
    </copy>
  </target>

  <target name="testFilterSet">
    <copy file="copy.filterset" tofile="copy.filterset.tmp">
      <filterset>
        <filter token="TITLE" value="Apache Ant Project"/>
      </filterset>
    </copy>
  </target>

  <target name="testFilterChain">
    <copy file="copy.filterset" tofile="copy.filterchain.tmp">
      <filterchain>
        <replacetokens>
          <token key="TITLE" value="Apache Ant Project"/>
        </replacetokens>
      </filterchain>
    </copy>
  </target>

  <target name="testTranscoding">
    <copy file="copy/input/iso8859-1" tofile="copytest1.tmp"
          encoding="ISO8859_1" outputencoding="UTF8"/>
  </target>

  <target name="testMissingFileIgnore">
    <copy file="not-there" tofile="copytest1.tmp"
          failonerror="false"/>
  </target>

  <target name="testMissingFileBail">
    <copy file="not-there" tofile="copytest1.tmp"
          failonerror="true"/>
  </target>

  <target name="testMissingDirIgnore">
    <copy todir="copytest1dir" failonerror="false">
      <fileset dir="not-there"/>
    </copy>
  </target>

  <target name="testMissingDirBail">
    <copy todir="copytest1dir" failonerror="true">
      <fileset dir="not-there"/>
    </copy>
  </target>

  <property name="to.dir" value="copy-todir-tmp"/>
  <property name="from.dir" value="copy-fromdir-tmp"/>

  <target name="testResource.prepare">
    <mkdir dir="${from.dir}"/>
    <concat destfile="${from.dir}/file1.txt">This is file 1</concat>
    <concat destfile="${from.dir}/file2.txt">This is file 2</concat>
    <concat destfile="${from.dir}/file3.txt">This is file 3</concat>
    <concat destfile="${from.dir}/fileNR.txt">This is file @NR@</concat>
  </target>

  <target name="testFileResourcePlain" depends="testResource.prepare">
    <copy todir="${to.dir}" flatten="true">
      <resources>
        <file file="${from.dir}/file1.txt"/>
        <file file="${from.dir}/file2.txt"/>
        <file file="${from.dir}/file3.txt"/>
      </resources>
    </copy>
  </target>

  <target name="testFileResourceWithMapper" depends="testResource.prepare">
    <copy todir="${to.dir}" flatten="true">
      <resources>
        <file file="${from.dir}/file1.txt"/>
        <file file="${from.dir}/file2.txt"/>
        <file file="${from.dir}/file3.txt"/>
      </resources>
      <regexpmapper from="^(.*)\.txt$$" to="\1.txt.bak"/>
    </copy>
  </target>

  <target name="testFileResourceWithFilter" depends="testResource.prepare">
    <copy todir="${to.dir}" flatten="true">
      <resources>
        <file file="${from.dir}/fileNR.txt"/>
      </resources>
      <filterset>
        <filter token="NR" value="42"/>
      </filterset>
    </copy>
  </target>

  <target name="testResourcePlain">
  </target>

  <target name="testResourcePlainWithMapper">
  </target>

  <target name="testResourcePlainWithFilter">
  </target>

  <target name="testOnlineResources">
  </target>

  <target name="testPathAsResource" depends="testResource.prepare">
    <copy todir="${to.dir}">
      <path>
        <fileset dir="${from.dir}"/>
      </path>
    </copy>
  </target>

  <target name="testZipfileset" depends="testResource.prepare">
    <zip destfile="${from.dir}/test.zip" roundup="false">
      <fileset dir="${from.dir}" excludes="*.zip"/>
    </zip>
    <copy todir="${to.dir}">
      <zipfileset src="${from.dir}/test.zip"/>
    </copy>
  </target>

  <target name="prepareDirset">
    <touch mkdirs="true">
      <filelist dir="${from.dir}/dirset">
        <file name="a/x/foo" />
        <file name="a/y/foo" />
        <file name="a/z/foo" />
        <file name="b/x/foo" />
        <file name="b/y/foo" />
        <file name="b/z/foo" />
      </filelist>
    </touch>
    <fail>
      <condition>
        <or>
          <resourcecount when="ne" count="9">
            <dirset id="dirset" dir="${from.dir}/dirset" />
          </resourcecount>
          <resourcecount when="ne" count="6">
            <fileset dir="${from.dir}/dirset" />
          </resourcecount>
        </or>
      </condition>
    </fail>
    <delete dir="${to.dir}/dirset" />
    <fail>
      <condition>
        <available file="${to.dir}/dirset" />
      </condition>
    </fail>
  </target>

  <target name="testDirset" depends="prepareDirset">
    <copy todir="${to.dir}/dirset">
      <resources refid="dirset" />
    </copy>
    <fail>
      <condition>
        <or>
          <resourcecount when="ne" count="9">
            <dirset dir="${to.dir}/dirset" />
          </resourcecount>
          <resourcecount when="ne" count="0">
            <fileset dir="${to.dir}/dirset" />
          </resourcecount>
        </or>
      </condition>
    </fail>
  </target>

  <target name="cleanup">
    <delete file="copytest1.tmp"/>
    <delete file="copytest3.tmp"/>
    <delete file="copytest3a.tmp"/>
    <delete file="copytest3b.tmp"/>
    <delete file="copytest3c.tmp"/>
    <delete file="copytest_single_file_fileset.tmp"/>
    <delete file="copytest_single_file_path.tmp"/>
    <delete file="copy.filterset.tmp"/>
    <delete file="copy.filterchain.tmp"/>
    <delete dir="copytest1dir"/>
    <delete quiet="yes" file="copy.filter.out"/>
    <delete quiet="yes" file="copy.filter.inp"/>
    <delete dir="${from.dir}"/>
    <delete dir="${to.dir}"/>
  </target>

</project>
