From: Glen Mazza Date: Sun, 30 Jan 2005 21:59:29 +0000 (+0000) Subject: PR: X-Git-Tag: Root_Temp_KnuthStylePageBreaking~164 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d69f26fbaceaf7aa48bcc8f7ec90772ab68e393a;p=xmlgraphics-fop.git PR: Obtained from: Submitted by: Reviewed by: Altered TestConverter to use FileCompare's file comparison logic. Renamed Compare to FileCompare. Simplified logger implementation in TestConverter. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198343 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/examples/fo/build.xml b/examples/fo/build.xml index 5e8c092ee..841c76b68 100644 --- a/examples/fo/build.xml +++ b/examples/fo/build.xml @@ -17,7 +17,7 @@ - + diff --git a/src/java/org/apache/fop/tools/TestConverter.java b/src/java/org/apache/fop/tools/TestConverter.java index a0a6d7406..0fd0831b7 100644 --- a/src/java/org/apache/fop/tools/TestConverter.java +++ b/src/java/org/apache/fop/tools/TestConverter.java @@ -29,11 +29,11 @@ import javax.xml.parsers.DocumentBuilderFactory; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.InputHandler; +import org.apache.fop.tools.anttasks.FileCompare; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.apache.commons.logging.Log; import org.apache.commons.logging.impl.SimpleLog; @@ -60,24 +60,7 @@ public class TestConverter { /** * logging instance */ - protected Log logger = null; - - - /** - * Sets the Commons-Logging instance for this class - * @param logger The Commons-Logging instance - */ - public void setLogger(Log logger) { - this.logger = logger; - } - - /** - * Returns the Commons-Logging instance for this class - * @return The Commons-Logging instance - */ - protected Log getLogger() { - return logger; - } + protected SimpleLog logger = null; /** * This main method can be used to run the test converter from @@ -128,9 +111,8 @@ public class TestConverter { * Construct a new TestConverter */ public TestConverter() { - SimpleLog log = new SimpleLog("FOP/Test"); - log.setLevel(SimpleLog.LOG_LEVEL_ERROR); - setLogger(log); + logger = new SimpleLog("FOP/Test"); + logger.setLevel(SimpleLog.LOG_LEVEL_ERROR); } /** @@ -159,14 +141,14 @@ public class TestConverter { } /** - * Controls whether to generate PDF or XML. - * @param pdf If True, PDF is generated, Area Tree XML otherwise. + * Controls whether to set logging to debug level + * @param If true, debug level, if false, error level */ public void setDebug(boolean debug) { if (debug) { - SimpleLog log = new SimpleLog("FOP/Test"); - log.setLevel(SimpleLog.LOG_LEVEL_DEBUG); - setLogger(log); + logger.setLevel(SimpleLog.LOG_LEVEL_DEBUG); + } else { + logger.setLevel(SimpleLog.LOG_LEVEL_ERROR); } } @@ -338,7 +320,7 @@ public class TestConverter { } } } catch (Exception e) { - getLogger().error("Error while running tests", e); + logger.error("Error while running tests", e); } } @@ -364,28 +346,12 @@ public class TestConverter { * @return true if equal */ protected boolean compareFiles(File f1, File f2) { - if (f1.length() != f2.length()) { - return false; - } try { - InputStream is1 = new java.io.BufferedInputStream(new java.io.FileInputStream(f1)); - InputStream is2 = new java.io.BufferedInputStream(new java.io.FileInputStream(f2)); - while (true) { - int ch1 = is1.read(); - int ch2 = is2.read(); - if (ch1 == ch2) { - if (ch1 == -1) { - return true; - } - } else { - return false; - } - } + return FileCompare.compareFiles(f1, f2); } catch (Exception e) { logger.error("Error while comparing files", e); + return false; } - - return false; } private Node locateResult(Node testcase, String id) { diff --git a/src/java/org/apache/fop/tools/anttasks/Compare.java b/src/java/org/apache/fop/tools/anttasks/Compare.java deleted file mode 100644 index e3f81d202..000000000 --- a/src/java/org/apache/fop/tools/anttasks/Compare.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright 1999-2004 The Apache Software Foundation. - * - * Licensed 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 - * - * http://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. - */ - -/* $Id$ */ - -package org.apache.fop.tools.anttasks; - -import java.util.Date; -import java.util.List; -import java.util.StringTokenizer; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; - -import org.apache.tools.ant.BuildException; -import java.text.DateFormat; - -/** - * This class is an extension of Ant, a script utility from - * http://ant.apache.org. - * It provides methods to compare two files. - */ - -public class Compare { - - private static final boolean IDENTICAL_FILES = true; - private static final boolean NOTIDENTICAL_FILES = false; - - private String referenceDirectory, testDirectory; - private String[] filenameList; - private String filenames; - private BufferedInputStream oldfileInput; - private BufferedInputStream newfileInput; - - /** - * Sets directory for test files. - * @param testDirectory the test directory - */ - public void setTestDirectory(String testDirectory) { - if (!(testDirectory.endsWith("/") | testDirectory.endsWith("\\"))) { - testDirectory += File.separator; - } - this.testDirectory = testDirectory; - } - - /** - * Sets directory for reference files. - * @param referenceDirectory the reference directory - */ - public void setReferenceDirectory(String referenceDirectory) { - if (!(referenceDirectory.endsWith("/") - | referenceDirectory.endsWith("\\"))) { - referenceDirectory += File.separator; - } - this.referenceDirectory = referenceDirectory; - } - - /** - * Sets the comma-separated list of files to process. - * @param filenames list of files, comma-separated - */ - public void setFilenames(String filenames) { - StringTokenizer tokens = new StringTokenizer(filenames, ","); - List filenameListTmp = new java.util.ArrayList(20); - while (tokens.hasMoreTokens()) { - filenameListTmp.add(tokens.nextToken()); - } - filenameList = new String[filenameListTmp.size()]; - filenameList = (String[])filenameListTmp.toArray(new String[0]); - } - - private boolean compareBytes(File oldFile, File newFile) { - try { - oldfileInput = - new BufferedInputStream(new java.io.FileInputStream(oldFile)); - newfileInput = - new BufferedInputStream(new java.io.FileInputStream(newFile)); - int charactO = 0; - int charactN = 0; - boolean identical = true; - - while (identical & (charactO != -1)) { - if (charactO == charactN) { - charactO = oldfileInput.read(); - charactN = newfileInput.read(); - } else { - return NOTIDENTICAL_FILES; - } - } - return IDENTICAL_FILES; - } catch (IOException io) { - System.err.println("Task Compare - Error: \n" + io.toString()); - } - return NOTIDENTICAL_FILES; - } - - private boolean compareFileSize(File oldFile, File newFile) { - if (oldFile.length() != newFile.length()) { - return NOTIDENTICAL_FILES; - } else { - return IDENTICAL_FILES; - } - } // end: compareBytes - - private boolean filesExist(File oldFile, File newFile) { - if (!oldFile.exists()) { - System.err.println("Task Compare - ERROR: File " - + referenceDirectory + oldFile.getName() - + " doesn't exist!"); - return false; - } else if (!newFile.exists()) { - System.err.println("Task Compare - ERROR: File " + testDirectory - + newFile.getName() + " doesn't exist!"); - return false; - } else { - return true; - } - } - - private void writeHeader(PrintWriter results) { - String dateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, - DateFormat.MEDIUM).format(new Date()); - results.println("Test Results\n"); - results.println("

Compare Results
"); - results.println("created " + dateTime - + "

"); - results.println("" - + "" - + "" - + ""); - - - } - - /** - * Main method of task compare - * @throws BuildException If the execution fails. - */ - public void execute() throws BuildException { - boolean identical = false; - File oldFile; - File newFile; - try { - PrintWriter results = - new PrintWriter(new java.io.FileWriter("results.html"), true); - this.writeHeader(results); - for (int i = 0; i < filenameList.length; i++) { - oldFile = new File(referenceDirectory + filenameList[i]); - newFile = new File(testDirectory + filenameList[i]); - if (filesExist(oldFile, newFile)) { - identical = compareFileSize(oldFile, newFile); - if (identical) { - identical = compareBytes(oldFile, newFile); - } - if (!identical) { - System.out.println("Task Compare: \nFiles " - + referenceDirectory - + oldFile.getName() + " - " - + testDirectory - + newFile.getName() - + " are *not* identical."); - results.println(""); - } else { - results.println(""); - } - } - } - results.println("
reference filetest fileidentical?
" - + oldFile.getName() - + " " + newFile.getName() + "" - + " No
" - + oldFile.getName() - + " " + newFile.getName() + "" - + " Yes
"); - } catch (IOException ioe) { - System.err.println("ERROR: " + ioe); - } - } // end: execute() - -} - diff --git a/src/java/org/apache/fop/tools/anttasks/FileCompare.java b/src/java/org/apache/fop/tools/anttasks/FileCompare.java new file mode 100644 index 000000000..175cb6f0a --- /dev/null +++ b/src/java/org/apache/fop/tools/anttasks/FileCompare.java @@ -0,0 +1,208 @@ +/* + * Copyright 1999-2004 The Apache Software Foundation. + * + * Licensed 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 + * + * http://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. + */ + +/* $Id$ */ + +package org.apache.fop.tools.anttasks; + +import java.util.Date; +import java.util.List; +import java.util.StringTokenizer; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; + +import org.apache.tools.ant.BuildException; +import java.text.DateFormat; + +/** + * This class is an extension of Ant, a script utility from + * http://ant.apache.org. + * It provides methods to compare two files. + */ + +public class FileCompare { + + private String referenceDirectory, testDirectory; + private String[] filenameList; + private String filenames; + + /** + * Sets directory for test files. + * @param testDirectory the test directory + */ + public void setTestDirectory(String testDirectory) { + if (!(testDirectory.endsWith("/") | testDirectory.endsWith("\\"))) { + testDirectory += File.separator; + } + this.testDirectory = testDirectory; + } + + /** + * Sets directory for reference files. + * @param referenceDirectory the reference directory + */ + public void setReferenceDirectory(String referenceDirectory) { + if (!(referenceDirectory.endsWith("/") + | referenceDirectory.endsWith("\\"))) { + referenceDirectory += File.separator; + } + this.referenceDirectory = referenceDirectory; + } + + /** + * Sets the comma-separated list of files to process. + * @param filenames list of files, comma-separated + */ + public void setFilenames(String filenames) { + StringTokenizer tokens = new StringTokenizer(filenames, ","); + List filenameListTmp = new java.util.ArrayList(20); + while (tokens.hasMoreTokens()) { + filenameListTmp.add(tokens.nextToken()); + } + filenameList = new String[filenameListTmp.size()]; + filenameList = (String[])filenameListTmp.toArray(new String[0]); + } + + /** + * Compares two files to see if they are equal + * @param true if files are same, false otherwise + */ + public static boolean compareFiles(File f1, File f2) throws IOException { + return (compareFileSize(f1, f2) && compareBytes(f1, f2)); + } + + /** + * Does a byte compare of two files + * @param true if files are same byte-by-byte, false otherwise + */ + private static boolean compareBytes(File file1, File file2) throws IOException { + BufferedInputStream file1Input = + new BufferedInputStream(new java.io.FileInputStream(file1)); + BufferedInputStream file2Input = + new BufferedInputStream(new java.io.FileInputStream(file2)); + + int charact1 = 0; + int charact2 = 0; + + while (charact1 != -1) { + if (charact1 == charact2) { + charact1 = file1Input.read(); + charact2 = file2Input.read(); + } else { + return false; + } + } + + return true; + } + + /** + * Does a file size compare of two files + * @param true if files are same length, false otherwise + */ + private static boolean compareFileSize(File oldFile, File newFile) { + if (oldFile.length() != newFile.length()) { + return false; + } else { + return true; + } + } // end: compareBytes + + private boolean filesExist(File oldFile, File newFile) { + if (!oldFile.exists()) { + System.err.println("Task Compare - ERROR: File " + + referenceDirectory + oldFile.getName() + + " doesn't exist!"); + return false; + } else if (!newFile.exists()) { + System.err.println("Task Compare - ERROR: File " + testDirectory + + newFile.getName() + " doesn't exist!"); + return false; + } else { + return true; + } + } + + private void writeHeader(PrintWriter results) { + String dateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, + DateFormat.MEDIUM).format(new Date()); + results.println("Test Results\n"); + results.println("

Compare Results
"); + results.println("created " + dateTime + + "

"); + results.println("" + + "" + + "" + + ""); + } + + /** + * Main method of task compare + * @throws BuildException If the execution fails. + */ + public void execute() throws BuildException { + boolean identical = false; + File oldFile; + File newFile; + try { + PrintWriter results = + new PrintWriter(new java.io.FileWriter("results.html"), true); + this.writeHeader(results); + for (int i = 0; i < filenameList.length; i++) { + oldFile = new File(referenceDirectory + filenameList[i]); + newFile = new File(testDirectory + filenameList[i]); + if (filesExist(oldFile, newFile)) { + identical = compareFileSize(oldFile, newFile); + if (identical) { + identical = compareBytes(oldFile, newFile); + } + if (!identical) { + System.out.println("Task Compare: \nFiles " + + referenceDirectory + + oldFile.getName() + " - " + + testDirectory + + newFile.getName() + + " are *not* identical."); + results.println(""); + } else { + results.println(""); + } + } + } + results.println("
reference filetest fileidentical?
" + + oldFile.getName() + + " " + newFile.getName() + "" + + " No
" + + oldFile.getName() + + " " + newFile.getName() + "" + + " Yes
"); + } catch (IOException ioe) { + System.err.println("ERROR: " + ioe); + } + } // end: execute() + +} + diff --git a/src/java/org/apache/fop/tools/anttasks/RunTest.java b/src/java/org/apache/fop/tools/anttasks/RunTest.java index 396a2d539..b13619563 100644 --- a/src/java/org/apache/fop/tools/anttasks/RunTest.java +++ b/src/java/org/apache/fop/tools/anttasks/RunTest.java @@ -37,8 +37,8 @@ import java.util.Map; /** * Testing ant task. * This task is used to test FOP as a build target. - * This uses the TestConverter (with weak code dependancy) to run the tests - * and check the results. + * This uses the TestConverter (with weak code dependency) + * to run the tests and check the results. */ public class RunTest extends Task { @@ -144,7 +144,7 @@ public class RunTest extends Task { boolean failed = false; try { - Class cla = Class.forName("org.apache.fop.apps.Version", true, + Class cla = Class.forName("org.apache.fop.apps.Fop", true, loader); Method get = cla.getMethod("getVersion", new Class[]{}); if (!get.invoke(null, new Object[]{}).equals(refVersion)) { @@ -180,6 +180,8 @@ public class RunTest extends Task { * This loads the TestConverter using the class loader and * then runs the test suite for the current test suite * file in the base directory. + * (Note class loader option provided to allow for different + * fop.jar and other libraries to be activated.) * @param loader the class loader to use to run the tests with * @param dest destination directory * @param compDir comparison directory