git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277345 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -8,26 +8,20 @@ | |||
| <target name="prepare"> | |||
| <mkdir dir="${recdir}"/> | |||
| <copy toDir="${recdir}"> | |||
| <fileset dir="${recin}"/> | |||
| </copy> | |||
| <fixcrlf srcdir="${recdir}"/> | |||
| </target> | |||
| <target name="noappend"> | |||
| <copy file="${recdir}/rectest2.result" tofile="${recdir}/rectest1.log"/> | |||
| <copy file="${recin}/rectest2.result" tofile="${recdir}/rectest1.log"/> | |||
| <record name="${recdir}/rectest1.log" action="start" /> | |||
| <echo message="some message1"/> | |||
| <record name="${recdir}/rectest1.log" action="stop" /> | |||
| <fixcrlf srcdir="${recdir}" includes="*.log"/> | |||
| </target> | |||
| <target name="append"> | |||
| <copy file="${recdir}/rectest1.result" tofile="${recdir}/rectest2.log"/> | |||
| <copy file="${recin}/rectest1.result" tofile="${recdir}/rectest2.log"/> | |||
| <record name="${recdir}/rectest2.log" append="true" action="start"/> | |||
| <echo message="some message2"/> | |||
| <record name="${recdir}/rectest2.log" action="stop"/> | |||
| <fixcrlf srcdir="${recdir}" includes="*.log"/> | |||
| </target> | |||
| <target name="restart"> | |||
| @@ -38,7 +32,6 @@ | |||
| <record name="${recdir}/rectest3.log" action="start"/> | |||
| <echo message="some message3"/> | |||
| <record name="${recdir}/rectest3.log" action="stop"/> | |||
| <fixcrlf srcdir="${recdir}" includes="*.log"/> | |||
| </target> | |||
| <target name="deleterestart"> | |||
| @@ -50,12 +43,11 @@ | |||
| <record name="${recdir}/rectest4.log" action="start"/> | |||
| <echo message="some message3"/> | |||
| <record name="${recdir}/rectest4.log" action="stop"/> | |||
| <fixcrlf srcdir="${recdir}" includes="*.log"/> | |||
| </target> | |||
| <target name="cleanup"> | |||
| <delete dir="${recdir}"/> | |||
| <delete dir="${recdir}"/> | |||
| </target> | |||
| </project> | |||
| @@ -971,21 +971,31 @@ public class FileUtils { | |||
| /** | |||
| * Compares the contents of two files. | |||
| * | |||
| * <p>simple but sub-optimal comparision algorithm. written for | |||
| * working rather than fast. Better would be a block read into | |||
| * buffers followed by long comparisions apart from the final 1-7 | |||
| * bytes.</p> | |||
| * | |||
| * @param f1 the file whose content is to be compared. | |||
| * @param f2 the other file whose content is to be compared. | |||
| * | |||
| * @return true if the content of the files is the same. | |||
| * | |||
| * @throws IOException if the files cannot be read. | |||
| * | |||
| * @since 1.9 | |||
| */ | |||
| public boolean contentEquals(File f1, File f2) throws IOException { | |||
| return contentEquals(f1, f2, false); | |||
| } | |||
| /** | |||
| * Compares the contents of two files. | |||
| * | |||
| * @param f1 the file whose content is to be compared. | |||
| * @param f2 the other file whose content is to be compared. | |||
| * @param textfile true if the file is to be treated as a text file and | |||
| * differences in kind of line break are to be ignored. | |||
| * | |||
| * @return true if the content of the files is the same. | |||
| * | |||
| * @throws IOException if the files cannot be read. | |||
| * @since ant 1.7 | |||
| */ | |||
| public boolean contentEquals(File f1, File f2, boolean textfile) throws IOException { | |||
| if (f1.exists() != f2.exists()) { | |||
| return false; | |||
| } | |||
| @@ -1005,6 +1015,27 @@ public class FileUtils { | |||
| return true; | |||
| } | |||
| if (textfile) { | |||
| return textEquals(f1, f2); | |||
| } else { | |||
| return binaryEquals(f1, f2); | |||
| } | |||
| } | |||
| /** | |||
| * Binary compares the contents of two files. | |||
| * <p> | |||
| * simple but sub-optimal comparision algorithm. written for working | |||
| * rather than fast. Better would be a block read into buffers followed | |||
| * by long comparisions apart from the final 1-7 bytes. | |||
| * </p> | |||
| * | |||
| * @param f1 the file whose content is to be compared. | |||
| * @param f2 the other file whose content is to be compared. | |||
| * @return true if the content of the files is the same. | |||
| * @throws IOException if the files cannot be read. | |||
| */ | |||
| private boolean binaryEquals(File f1, File f2) throws IOException { | |||
| if (f1.length() != f2.length()) { | |||
| // different size =>false | |||
| return false; | |||
| @@ -1033,6 +1064,40 @@ public class FileUtils { | |||
| } | |||
| } | |||
| /** | |||
| * Text compares the contents of two files. | |||
| * | |||
| * Ignores different kinds of line endings. | |||
| * | |||
| * @param f1 the file whose content is to be compared. | |||
| * @param f2 the other file whose content is to be compared. | |||
| * @return true if the content of the files is the same. | |||
| * @throws IOException if the files cannot be read. | |||
| */ | |||
| private boolean textEquals(File f1, File f2) throws IOException { | |||
| BufferedReader in1 = null; | |||
| BufferedReader in2 = null; | |||
| try { | |||
| in1 = new BufferedReader(new FileReader(f1)); | |||
| in2 = new BufferedReader(new FileReader(f2)); | |||
| String expected = in1.readLine(); | |||
| while (expected != null) { | |||
| if (!expected.equals(in2.readLine())) { | |||
| return false; | |||
| } | |||
| expected = in1.readLine(); | |||
| } | |||
| if (in2.readLine() != null) { | |||
| return false; | |||
| } | |||
| return true; | |||
| } finally { | |||
| close(in1); | |||
| close(in2); | |||
| } | |||
| } | |||
| /** | |||
| * This was originally an emulation of {@link File#getParentFile} for JDK 1.1, | |||
| * but it is now implemented using that method (Ant 1.7 onwards). | |||
| @@ -27,7 +27,8 @@ import java.io.IOException; | |||
| */ | |||
| public class RecorderTest extends BuildFileTest { | |||
| private static final String REC_DIR = "recorder-out"; | |||
| private static final String REC_IN = "recorder/"; | |||
| private static final String REC_DIR = "recorder-out/"; | |||
| /** Utilities used for file operations */ | |||
| private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||
| @@ -48,37 +49,37 @@ public class RecorderTest extends BuildFileTest { | |||
| public void testNoAppend() throws IOException { | |||
| executeTarget("noappend"); | |||
| assertTrue(FILE_UTILS | |||
| .contentEquals(project.resolveFile(REC_DIR | |||
| .contentEquals(project.resolveFile(REC_IN | |||
| + "rectest1.result"), | |||
| project.resolveFile(REC_DIR | |||
| + "rectest1.log"))); | |||
| project.resolveFile(REC_DIR | |||
| + "rectest1.log"), true)); | |||
| } | |||
| public void testAppend() throws IOException { | |||
| executeTarget("append"); | |||
| assertTrue(FILE_UTILS | |||
| .contentEquals(project.resolveFile(REC_DIR | |||
| .contentEquals(project.resolveFile(REC_IN | |||
| + "rectest2.result"), | |||
| project.resolveFile(REC_DIR | |||
| + "rectest2.log"))); | |||
| project.resolveFile(REC_DIR | |||
| + "rectest2.log"), true)); | |||
| } | |||
| public void testRestart() throws IOException { | |||
| executeTarget("restart"); | |||
| assertTrue(FILE_UTILS | |||
| .contentEquals(project.resolveFile(REC_DIR | |||
| .contentEquals(project.resolveFile(REC_IN | |||
| + "rectest3.result"), | |||
| project.resolveFile(REC_DIR | |||
| + "rectest3.log"))); | |||
| project.resolveFile(REC_DIR | |||
| + "rectest3.log"), true)); | |||
| } | |||
| public void testDeleteRestart() throws IOException { | |||
| executeTarget("deleterestart"); | |||
| assertTrue(FILE_UTILS | |||
| .contentEquals(project.resolveFile(REC_DIR | |||
| .contentEquals(project.resolveFile(REC_IN | |||
| + "rectest4.result"), | |||
| project.resolveFile(REC_DIR | |||
| + "rectest4.log"))); | |||
| project.resolveFile(REC_DIR | |||
| + "rectest4.log"), true)); | |||
| } | |||
| } | |||