jkf 2005/01/11 13:56:45 Modified: src/main/org/apache/tools/ant/util FileUtils.java src/etc/testcases/taskdefs recorder.xml src/testcases/org/apache/tools/ant/taskdefs RecorderTest.java Log: Extended FileUtils with a comparison that ignores the kind of line break. Revision Changes Path 1.83 +73 -8 ant/src/main/org/apache/tools/ant/util/FileUtils.java Index: FileUtils.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/FileUtils.java,v retrieving revision 1.82 retrieving revision 1.83 diff -u -r1.82 -r1.83 --- FileUtils.java 7 Jan 2005 00:14:06 -0000 1.82 +++ FileUtils.java 11 Jan 2005 21:56:45 -0000 1.83 @@ -971,21 +971,31 @@ /** * 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 @@ 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; @@ -1024,6 +1055,40 @@ expectedByte = in1.read(); } if (in2.read() != -1) { + return false; + } + return true; + } finally { + close(in1); + close(in2); + } + } + + /** + * 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; 1.3 +3 -11 ant/src/etc/testcases/taskdefs/recorder.xml Index: recorder.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/recorder.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- recorder.xml 1 Dec 2004 07:45:11 -0000 1.2 +++ recorder.xml 11 Jan 2005 21:56:45 -0000 1.3 @@ -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> 1.4 +15 -14 ant/src/testcases/org/apache/tools/ant/taskdefs/RecorderTest.java Index: RecorderTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/RecorderTest.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RecorderTest.java 6 Jan 2005 12:05:04 -0000 1.3 +++ RecorderTest.java 11 Jan 2005 21:56:45 -0000 1.4 @@ -27,7 +27,8 @@ */ 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 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)); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]