<pathelement location="../../build/fop.jar"/>
</path>
<taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop" classpathref="run-classpath"/>
- <taskdef name="compare" classname="org.apache.fop.tools.anttasks.Compare" classpathref="run-classpath"/>
+ <taskdef name="compare" classname="org.apache.fop.tools.anttasks.FileCompare" classpathref="run-classpath"/>
</target>
<!-- =================================================================== -->
<!-- Help on usage -->
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;
/**
* 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
* 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);
}
/**
}
/**
- * 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);
}
}
}
}
} catch (Exception e) {
- getLogger().error("Error while running tests", e);
+ logger.error("Error while running tests", e);
}
}
* @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) {
+++ /dev/null
-/*
- * 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("<html><head><title>Test Results</title></head><body>\n");
- results.println("<h2>Compare Results<br>");
- results.println("<font size='1'>created " + dateTime
- + "</font></h2>");
- results.println("<table cellpadding='10' border='2'><thead>"
- + "<th align='center'>reference file</th>"
- + "<th align='center'>test file</th>"
- + "<th align='center'>identical?</th></thead>");
-
-
- }
-
- /**
- * 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("<tr><td><a href='"
- + referenceDirectory
- + oldFile.getName() + "'>"
- + oldFile.getName()
- + "</a> </td><td> <a href='"
- + testDirectory + newFile.getName()
- + "'>" + newFile.getName() + "</a>"
- + " </td><td><font color='red'>No</font></td></tr>");
- } else {
- results.println("<tr><td><a href='"
- + referenceDirectory
- + oldFile.getName() + "'>"
- + oldFile.getName()
- + "</a> </td><td> <a href='"
- + testDirectory + newFile.getName()
- + "'>" + newFile.getName() + "</a>"
- + " </td><td>Yes</td></tr>");
- }
- }
- }
- results.println("</table></html>");
- } catch (IOException ioe) {
- System.err.println("ERROR: " + ioe);
- }
- } // end: execute()
-
-}
-
--- /dev/null
+/*
+ * 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("<html><head><title>Test Results</title></head><body>\n");
+ results.println("<h2>Compare Results<br>");
+ results.println("<font size='1'>created " + dateTime
+ + "</font></h2>");
+ results.println("<table cellpadding='10' border='2'><thead>"
+ + "<th align='center'>reference file</th>"
+ + "<th align='center'>test file</th>"
+ + "<th align='center'>identical?</th></thead>");
+ }
+
+ /**
+ * 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("<tr><td><a href='"
+ + referenceDirectory
+ + oldFile.getName() + "'>"
+ + oldFile.getName()
+ + "</a> </td><td> <a href='"
+ + testDirectory + newFile.getName()
+ + "'>" + newFile.getName() + "</a>"
+ + " </td><td><font color='red'>No</font></td></tr>");
+ } else {
+ results.println("<tr><td><a href='"
+ + referenceDirectory
+ + oldFile.getName() + "'>"
+ + oldFile.getName()
+ + "</a> </td><td> <a href='"
+ + testDirectory + newFile.getName()
+ + "'>" + newFile.getName() + "</a>"
+ + " </td><td>Yes</td></tr>");
+ }
+ }
+ }
+ results.println("</table></html>");
+ } catch (IOException ioe) {
+ System.err.println("ERROR: " + ioe);
+ }
+ } // end: execute()
+
+}
+
/**
* 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 {
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)) {
* 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