| <?xml version="1.0"?> |
| <!-- |
| 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 |
| |
| https://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="antunit" xmlns:au="antlib:org.apache.ant.antunit"> |
| <import file="../antunit-base.xml" /> |
| |
| <target name="-fileResourceSetup"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <touch file="${input}/file.txt"/> |
| </target> |
| |
| <target name="testCopyFileFlatten" depends="-fileResourceSetup"> |
| <au:assertFileDoesntExist file="${output}/file.txt"/> |
| <copy todir="${output}" flatten="true"> |
| <file file="${input}/file.txt"/> |
| </copy> |
| <au:assertFileExists file="${output}/file.txt"/> |
| </target> |
| |
| <target name="testCopyFileInResourcesFlatten" depends="-fileResourceSetup"> |
| <au:assertFileDoesntExist file="${output}/file.txt"/> |
| <copy todir="${output}" flatten="true"> |
| <resources> |
| <file file="${input}/file.txt"/> |
| </resources> |
| </copy> |
| <au:assertFileExists file="${output}/file.txt"/> |
| </target> |
| |
| <target name="-setupNullByteStreamResource"> |
| <mkdir dir="${input}"/> |
| <echo file="${input}/NullByteStreamResource.java"><![CDATA[ |
| import org.apache.tools.ant.types.Resource; |
| import java.io.*; |
| public class NullByteStreamResource extends Resource { |
| private long length = 1024; |
| |
| public boolean isExists() { |
| return true; |
| } |
| |
| public long getLastModified() { |
| return UNKNOWN_DATETIME; |
| } |
| |
| public void setLength(long length) { |
| this.length = length; |
| } |
| |
| public InputStream getInputStream() { |
| return new InputStream() { |
| int readSoFar = 0; |
| |
| public int read() { |
| return readSoFar++ > length ? -1 : 0; |
| } |
| }; |
| } |
| } |
| ]]></echo> |
| <mkdir dir="${output}"/> |
| <javac srcdir="${input}" destdir="${output}"/> |
| <typedef name="nullstream" classname="NullByteStreamResource"> |
| <classpath> |
| <pathelement location="${output}"/> |
| </classpath> |
| </typedef> |
| </target> |
| |
| <target name="testResourceWithoutName" |
| depends="-setupNullByteStreamResource" description="Tests that a |
| copy operation, of a resource without a name, doesn't run into (NPE) |
| exceptions. The resource itself will however be silently ignored"> |
| <copy todir="${output}"> |
| <nullstream/> |
| </copy> |
| </target> |
| |
| <target name="testResourceWithoutNameWithMergeMapper" |
| depends="-setupNullByteStreamResource"> |
| <copy todir="${output}"> |
| <nullstream/> |
| <mergemapper to="foo"/> |
| </copy> |
| <au:assertFileExists file="${output}/foo"/> |
| </target> |
| |
| <target name="testMappedResources"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <echo file="${input}/foo.txt">Hello, world!</echo> |
| <copy todir="${output}"> |
| <mappedresources> |
| <fileset dir="${input}"/> |
| <globmapper from="foo.*" to="bar.*"/> |
| </mappedresources> |
| </copy> |
| <au:assertFileDoesntExist file="${output}/foo.txt"/> |
| <au:assertFileExists file="${output}/bar.txt"/> |
| <au:assertFilesMatch expected="${input}/foo.txt" |
| actual="${output}/bar.txt"/> |
| </target> |
| |
| <target name="testMappedResourcesMultipleTrue"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <echo file="${input}/foo.txt">Hello, world!</echo> |
| <copy todir="${output}"> |
| <mappedresources enableMultipleMappings="true"> |
| <fileset dir="${input}"/> |
| <compositemapper> |
| <globmapper from="foo.*" to="bar.*"/> |
| <globmapper from="foo.*" to="baz.*"/> |
| </compositemapper> |
| </mappedresources> |
| </copy> |
| <au:assertFileDoesntExist file="${output}/foo.txt"/> |
| <au:assertFileExists file="${output}/bar.txt"/> |
| <au:assertFileExists file="${output}/baz.txt"/> |
| <au:assertFilesMatch expected="${input}/foo.txt" |
| actual="${output}/bar.txt"/> |
| <au:assertFilesMatch expected="${input}/foo.txt" |
| actual="${output}/baz.txt"/> |
| </target> |
| |
| <target name="testMappedResourcesMultipleFalse"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <echo file="${input}/foo.txt">Hello, world!</echo> |
| <copy todir="${output}"> |
| <mappedresources enableMultipleMappings="false"> |
| <fileset dir="${input}"/> |
| <compositemapper> |
| <globmapper from="foo.*" to="bar.*"/> |
| <globmapper from="foo.*" to="baz.*"/> |
| </compositemapper> |
| </mappedresources> |
| </copy> |
| <au:assertFileDoesntExist file="${output}/foo.txt"/> |
| <au:assertFileExists file="${output}/bar.txt"/> |
| <au:assertFileDoesntExist file="${output}/baz.txt"/> |
| <au:assertFilesMatch expected="${input}/foo.txt" |
| actual="${output}/bar.txt"/> |
| </target> |
| |
| <target name="testIncludeEmptyDirsDefaultsToTrue" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47168"> |
| <mkdir dir="${input}/foo"/> |
| <mkdir dir="${output}"/> |
| <copy todir="${output}"> |
| <fileset dir="${input}"/> |
| </copy> |
| <au:assertFileExists file="${output}/foo"/> |
| </target> |
| |
| <target name="XtestIncludeEmptyDirsAndZipfileset" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47168"> |
| <mkdir dir="${input}/foo"/> |
| <mkdir dir="${output}/final"/> |
| <zip destfile="${output}/zipfile.zip"> |
| <fileset dir="${input}"/> |
| </zip> |
| <copy todir="${output}/final"> |
| <zipfileset src="${output}/zipfile.zip"/> |
| </copy> |
| <au:assertFileExists file="${output}/final/foo"/> |
| </target> |
| |
| <target name="testFailOnURLConnectionError" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=47362"> |
| <mkdir dir="${output}"/> |
| <au:expectfailure> |
| <copy todir="${output}" failonerror="true" flatten="true"> |
| <resources> |
| <url url="https://i-do-not-exist/"/> |
| </resources> |
| </copy> |
| </au:expectfailure> |
| </target> |
| |
| <target name="testNotModifiedSelector" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43574" |
| > |
| <mkdir dir="${input}/images"/> |
| <mkdir dir="${input}/cache"/> |
| <touch file="${input}/images/foo.jpg"/> |
| <mkdir dir="${output}"/> |
| <selector id="cache.selector"> |
| <not> |
| <modified update="true" |
| seldirs="false" |
| cache="propertyfile" |
| algorithm="digest" |
| comparator="equal"> |
| <param name="cache.cachefile" |
| value="${input}/cache/cache.properties"/> |
| <param name="algorithm.algorithm" value="MD5"/> |
| </modified> |
| </not> |
| </selector> |
| <au:assertFileDoesntExist file="${input}/cache/cache.properties"/> |
| <copy todir="${output}" overwrite="true"> |
| <fileset dir="${input}/images"> |
| <include name="*.jpg" /> |
| <selector refid="cache.selector" /> |
| </fileset> |
| </copy> |
| <au:assertFileExists file="${input}/cache/cache.properties"/> |
| <au:assertFileDoesntExist file="${output}/foo.jpg"/> |
| <copy todir="${output}" overwrite="true"> |
| <fileset dir="${input}/images"> |
| <include name="*.jpg" /> |
| <selector refid="cache.selector" /> |
| </fileset> |
| </copy> |
| <au:assertFileExists file="${output}/foo.jpg"/> |
| </target> |
| |
| <target name="testMissingFileUsingFileAttribute"> |
| <mkdir dir="${output}"/> |
| <mkdir dir="${input}"/> |
| <au:expectfailure expectedMessage="Could not find file"> |
| <copy file="${input}/not-there.txt" todir="${output}"/> |
| </au:expectfailure> |
| <copy file="${input}/not-there.txt" todir="${output}" |
| failonerror="false"/> |
| </target> |
| |
| <target name="testQuiet"> |
| <mkdir dir="${output}"/> |
| <mkdir dir="${input}"/> |
| <copy file="${input}/not-there.txt" todir="${output}" failonerror="false" quiet="true" /> |
| <au:assertLogDoesntContain text="Could not find file" /> |
| </target> |
| |
| <target name="testMissingFilesetRoot"> |
| <mkdir dir="${output}"/> |
| <au:expectfailure expectedMessage="does not exist"> |
| <copy todir="${output}"> |
| <fileset dir="${input}"> |
| <include name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </au:expectfailure> |
| <copy todir="${output}" failonerror="false"> |
| <fileset dir="${input}"> |
| <include name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </target> |
| |
| <target name="testMissingFileUsingFilesetInclude" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=49070"> |
| <mkdir dir="${output}"/> |
| <mkdir dir="${input}"/> |
| <au:expectfailure |
| expectedMessage="Cannot perform operation from directory to file."> |
| <copy tofile="${output}/foo.txt"> |
| <fileset dir="${input}"> |
| <include name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </au:expectfailure> |
| <copy tofile="${output}/foo.txt" failonerror="false"> |
| <fileset dir="${input}"> |
| <include name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </target> |
| |
| <target name="testMissingFileUsingFilesetFilename" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=49070"> |
| <mkdir dir="${output}"/> |
| <mkdir dir="${input}"/> |
| <au:expectfailure |
| expectedMessage="Cannot perform operation from directory to file."> |
| <copy tofile="${output}/foo.txt"> |
| <fileset dir="${input}"> |
| <filename name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </au:expectfailure> |
| <copy tofile="${output}/foo.txt" failonerror="false"> |
| <fileset dir="${input}"> |
| <filename name="not-there.txt"/> |
| </fileset> |
| </copy> |
| </target> |
| |
| <!-- stolen from ../types/readwrite-test.xml - create a read-only file --> |
| <property name="file" value="testfile"/> |
| <condition property="unix"> |
| <os family="unix"/> |
| </condition> |
| <target name="createTestdir"> |
| <mkdir dir="${output}"/> |
| <mkdir dir="${input}"/> |
| <touch file="${output}/${file}"/> |
| </target> |
| <target name="makeFileUnwritable" depends="createTestdir"> |
| <setpermissions mode="444" nonPosixMode="tryDosOrFail"> |
| <file file="${output}/${file}"/> |
| </setpermissions> |
| </target> |
| |
| <target name="testCopyOverReadOnlyFile" depends="makeFileUnwritable"> |
| <sleep seconds="2"/> |
| <touch file="${input}/${file}"/> |
| <au:expectfailure |
| expectedMessage="can't write to read-only destination file "> |
| <copy toDir="${output}"> |
| <fileset dir="${input}"/> |
| </copy> |
| </au:expectfailure> |
| </target> |
| |
| <target name="testFilteredCopyOverReadOnlyFile" depends="makeFileUnwritable"> |
| <sleep seconds="2"/> |
| <touch file="${input}/${file}"/> |
| <au:expectfailure |
| expectedMessage="can't write to read-only destination file "> |
| <copy toDir="${output}"> |
| <fileset dir="${input}"/> |
| <filterset> |
| <filter token="foo" value="bar"/> |
| </filterset> |
| </copy> |
| </au:expectfailure> |
| </target> |
| |
| <target name="testCopyOverReadOnlyFileWithOverwrite" |
| depends="makeFileUnwritable"> |
| <touch file="${input}/${file}"/> |
| <au:expectfailure |
| expectedMessage="can't write to read-only destination file "> |
| <copy toDir="${output}" overwrite="true"> |
| <fileset dir="${input}"/> |
| </copy> |
| </au:expectfailure> |
| </target> |
| |
| <target name="testFilteredCopyOverReadOnlyFileWithOverwrite" |
| depends="makeFileUnwritable"> |
| <touch file="${input}/${file}"/> |
| <au:expectfailure |
| expectedMessage="can't write to read-only destination file "> |
| <copy toDir="${output}" overwrite="true"> |
| <fileset dir="${input}"/> |
| <filterset> |
| <filter token="foo" value="bar"/> |
| </filterset> |
| </copy> |
| </au:expectfailure> |
| </target> |
| |
| <target name="testForcedCopyOverReadOnlyFile" depends="makeFileUnwritable"> |
| <sleep seconds="2"/> |
| <touch file="${input}/${file}"/> |
| <copy toDir="${output}" force="true"> |
| <fileset dir="${input}"/> |
| </copy> |
| </target> |
| |
| <target name="testForcedFilteredCopyOverReadOnlyFile" |
| depends="makeFileUnwritable"> |
| <sleep seconds="2"/> |
| <touch file="${input}/${file}"/> |
| <copy toDir="${output}" force="true"> |
| <fileset dir="${input}"/> |
| <filterset> |
| <filter token="foo" value="bar"/> |
| </filterset> |
| </copy> |
| </target> |
| |
| <target name="testForcedCopyOverReadOnlyFileWithOverwrite" |
| depends="makeFileUnwritable"> |
| <touch file="${input}/${file}"/> |
| <copy toDir="${output}" overwrite="true" force="true"> |
| <fileset dir="${input}"/> |
| </copy> |
| </target> |
| |
| <target name="testForcedFilteredCopyOverReadOnlyFileWithOverwrite" |
| depends="makeFileUnwritable"> |
| <touch file="${input}/${file}"/> |
| <copy toDir="${output}" overwrite="true" force="true"> |
| <fileset dir="${input}"/> |
| <filterset> |
| <filter token="foo" value="bar"/> |
| </filterset> |
| </copy> |
| </target> |
| |
| <target name="testCopyWithResourceAndFile" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=49756" |
| > |
| <mkdir dir="${input}"/> |
| <au:assertFileDoesntExist file="${input}/somefile"/> |
| <copy tofile="${input}/somefile"> |
| <first> |
| <union> |
| <restrict> |
| <exists/> |
| <fileset file="${input}/somefile"/> |
| </restrict> |
| <string value="default contents"/> |
| </union> |
| </first> |
| </copy> |
| <au:assertFileExists file="${input}/somefile"/> |
| <au:assertResourceContains resource="${input}/somefile" |
| value="default contents"/> |
| <delete file="${input}/somefile"/> |
| <touch file="${input}/somefile"/> |
| <copy tofile="${input}/somefile"> |
| <first> |
| <union> |
| <restrict> |
| <exists/> |
| <fileset file="${input}/somefile"/> |
| </restrict> |
| <string value="default contents"/> |
| </union> |
| </first> |
| </copy> |
| <au:assertFileExists file="${input}/somefile"/> |
| <au:assertResourceDoesntContain resource="${input}/somefile" |
| value="default contents"/> |
| </target> |
| |
| <target name="testCopyDoesntDeleteReadonlyTargetWhenCopyFails" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=53095"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <touch file="${input}/somefile"/> |
| <touch file="${output}/somefile"/> |
| <setpermissions mode="444" nonPosixMode="tryDosOrFail"> |
| <file file="${output}/somefile"/> |
| </setpermissions> |
| <au:expectfailure> |
| <copy todir="${output}" file="${input}/somefile" |
| overwrite="true"/> |
| </au:expectfailure> |
| <au:assertFileExists file="${input}/somefile"/> |
| <au:assertFileExists file="${output}/somefile"/> |
| </target> |
| |
| |
| <target name="test-with-some-resources-mapped-away" |
| description="https://bz.apache.org/bugzilla/show_bug.cgi?id=62076"> |
| <mkdir dir="${input}"/> |
| <touch file="${input}/a.filea"/> |
| <touch file="${input}/b.fileb"/> |
| <mkdir dir="${output}"/> |
| <copy todir="${output}"> |
| <mappedresources> |
| <fileset dir="${input}" /> |
| <globmapper from="a.*" to="*" /> |
| </mappedresources> |
| </copy> |
| <au:assertFileExists file="${output}/filea"/> |
| </target> |
| |
| <target name="testCopyOfResourceListDoesntFlatten" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=62379"> |
| <mkdir dir="${input}/dir"/> |
| <touch file="${input}/a"/> |
| <touch file="${input}/b"/> |
| <touch file="${input}/c"/> |
| <echo file="${input}/dir/c">Testfile</echo> |
| <mkdir dir="${output}"/> |
| <copy todir="${output}"> |
| <resourcelist basedir="${input}"> |
| <string value="${input}/dir/c"/> |
| </resourcelist> |
| </copy> |
| <au:assertFileDoesntExist file="${output}/c"/> |
| <au:assertFileExists file="${output}/dir/c"/> |
| <au:assertFilesMatch expected="${input}/dir/c" actual="${output}/dir/c"/> |
| </target> |
| </project> |