summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2010-09-04 06:33:22 +0000
committerYegor Kozlov <yegor@apache.org>2010-09-04 06:33:22 +0000
commit66f04045144ee621b3a30f4a8c40dc05adf84008 (patch)
treef80938548ddd3cd3c16bb1c2d80aec246b3bb80a
parentd959321d7231e0caed10046593f099c8fa7f9f76 (diff)
downloadpoi-66f04045144ee621b3a30f4a8c40dc05adf84008.tar.gz
poi-66f04045144ee621b3a30f4a8c40dc05adf84008.zip
added ZipFileAssert, this file was in the original OpenXML4J package but wasn't included in POI-3.5
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@992551 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java82
-rw-r--r--src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java161
-rw-r--r--test-data/openxml4j/TestCreatePackageOUTPUT.docxbin0 -> 1412 bytes
-rw-r--r--test-data/openxml4j/TestOpenPackageOUTPUT.docxbin0 -> 1983 bytes
4 files changed, 202 insertions, 41 deletions
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
index 1c41db0d1b..287bcdae67 100644
--- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java
@@ -60,7 +60,7 @@ public final class TestPackage extends TestCase {
// Compare the original and newly saved document
assertTrue(targetFile.exists());
- //ZipFileAssert.assertEquals(originalFile, targetFile);
+ ZipFileAssert.assertEquals(new File(originalFile), targetFile);
assertTrue(targetFile.delete());
}
@@ -103,43 +103,43 @@ public final class TestPackage extends TestCase {
public void testCreatePackageAddPart() throws Exception {
File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx");
- File expectedFileFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageOUTPUT.docx");
-
- // Zap the target file, in case of an earlier run
- if(targetFile.exists()) targetFile.delete();
-
- // Create a package
- OPCPackage pkg = OPCPackage.create(targetFile);
- PackagePartName corePartName = PackagingURIHelper
- .createPartName("/word/document.xml");
-
- pkg.addRelationship(corePartName, TargetMode.INTERNAL,
- PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
-
- PackagePart corePart = pkg
- .createPart(
- corePartName,
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
-
- Document doc = DocumentHelper.createDocument();
- Namespace nsWordprocessinML = new Namespace("w",
- "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
- Element elDocument = doc.addElement(new QName("document",
- nsWordprocessinML));
- Element elBody = elDocument.addElement(new QName("body",
- nsWordprocessinML));
- Element elParagraph = elBody.addElement(new QName("p",
- nsWordprocessinML));
- Element elRun = elParagraph
- .addElement(new QName("r", nsWordprocessinML));
- Element elText = elRun.addElement(new QName("t", nsWordprocessinML));
- elText.setText("Hello Open XML !");
-
- StreamHelper.saveXmlInStream(doc, corePart.getOutputStream());
- pkg.close();
+ File expectedFile = OpenXML4JTestDataSamples.getSampleFile("TestCreatePackageOUTPUT.docx");
+
+ // Zap the target file, in case of an earlier run
+ if(targetFile.exists()) targetFile.delete();
+
+ // Create a package
+ OPCPackage pkg = OPCPackage.create(targetFile);
+ PackagePartName corePartName = PackagingURIHelper
+ .createPartName("/word/document.xml");
+
+ pkg.addRelationship(corePartName, TargetMode.INTERNAL,
+ PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
+
+ PackagePart corePart = pkg
+ .createPart(
+ corePartName,
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
+
+ Document doc = DocumentHelper.createDocument();
+ Namespace nsWordprocessinML = new Namespace("w",
+ "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
+ Element elDocument = doc.addElement(new QName("document",
+ nsWordprocessinML));
+ Element elBody = elDocument.addElement(new QName("body",
+ nsWordprocessinML));
+ Element elParagraph = elBody.addElement(new QName("p",
+ nsWordprocessinML));
+ Element elRun = elParagraph
+ .addElement(new QName("r", nsWordprocessinML));
+ Element elText = elRun.addElement(new QName("t", nsWordprocessinML));
+ elText.setText("Hello Open XML !");
+
+ StreamHelper.saveXmlInStream(doc, corePart.getOutputStream());
+ pkg.close();
- //ZipFileAssert.assertEquals(expectedFile, targetFile);
- assertTrue(targetFile.delete());
+ ZipFileAssert.assertEquals(expectedFile, targetFile);
+ assertTrue(targetFile.delete());
}
/**
@@ -240,7 +240,7 @@ public final class TestPackage extends TestCase {
File inputFile = OpenXML4JTestDataSamples.getSampleFile("TestOpenPackageINPUT.docx");
- File expectedFile = OpenXML4JTestDataSamples.getOutputFile("TestOpenPackageOUTPUT.docx");
+ File expectedFile = OpenXML4JTestDataSamples.getSampleFile("TestOpenPackageOUTPUT.docx");
// Copy the input file in the output directory
FileHelper.copyFile(inputFile, targetFile);
@@ -286,7 +286,7 @@ public final class TestPackage extends TestCase {
fail();
}
- //ZipFileAssert.assertEquals(expectedFile, targetFile);
+ ZipFileAssert.assertEquals(expectedFile, targetFile);
assertTrue(targetFile.delete());
}
@@ -306,7 +306,7 @@ public final class TestPackage extends TestCase {
// Compare the original and newly saved document
assertTrue(targetFile.exists());
- //ZipFileAssert.assertEquals(originalFile, targetFile);
+ ZipFileAssert.assertEquals(new File(originalFile), targetFile);
assertTrue(targetFile.delete());
}
@@ -346,7 +346,7 @@ public final class TestPackage extends TestCase {
// Compare the original and newly saved document
assertTrue(targetFile.exists());
- //ZipFileAssert.assertEquals(targetFile, tempFile);
+ ZipFileAssert.assertEquals(targetFile, tempFile);
assertTrue(targetFile.delete());
}
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java
new file mode 100644
index 0000000000..c59be45256
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/ZipFileAssert.java
@@ -0,0 +1,161 @@
+/* ====================================================================
+ 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
+
+ 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.
+==================================================================== */
+
+package org.apache.poi.openxml4j.opc;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+
+/**
+ * Compare the contents of 2 zip files.
+ *
+ * @author CDubettier
+ */
+public class ZipFileAssert {
+ private ZipFileAssert() {
+ }
+
+ static final int BUFFER_SIZE = 2048;
+
+ protected static boolean equals(
+ TreeMap<String, ByteArrayOutputStream> file1,
+ TreeMap<String, ByteArrayOutputStream> file2) {
+ Set listFile1 = file1.keySet();
+ if (listFile1.size() == file2.keySet().size()) {
+ for (Iterator iter = listFile1.iterator(); iter.hasNext();) {
+ String fileName = (String) iter.next();
+ // extract the contents for both
+ ByteArrayOutputStream contain2 = file2.get(fileName);
+ ByteArrayOutputStream contain1 = file1.get(fileName);
+
+ if (contain2 == null) {
+ // file not found in archive 2
+ Assert.fail(fileName + " not found in 2nd zip");
+ return false;
+ }
+ // no need to check for contain1. The key come from it
+
+ if ((fileName.endsWith(".xml")) || fileName.endsWith(".rels")) {
+ // we have a xml file
+ // TODO
+ // YK: the original OpenXML4J version attempted to compare xml using xmlunit (http://xmlunit.sourceforge.net),
+ // but POI does not depend on this library
+ } else {
+ // not xml, may be an image or other binary format
+ if (contain2.size() != contain1.size()) {
+ // not the same size
+ Assert.fail(fileName
+ + " does not have the same size in both zip:"
+ + contain2.size() + "!=" + contain1.size());
+ return false;
+ }
+ byte array1[] = contain1.toByteArray();
+ byte array2[] = contain2.toByteArray();
+ for (int i = 0; i < array1.length; i++) {
+ if (array1[i] != array2[i]) {
+ Assert.fail(fileName + " differ at index:" + i);
+ return false;
+ }
+ }
+ }
+ }
+ } else {
+ // not the same number of files -> cannot be equals
+ Assert.fail("not the same number of files in zip:"
+ + listFile1.size() + "!=" + file2.keySet().size());
+ return false;
+ }
+ return true;
+ }
+
+ protected static TreeMap<String, ByteArrayOutputStream> decompress(
+ File filename) throws IOException {
+ // store the zip content in memory
+ // let s assume it is not Go ;-)
+ TreeMap<String, ByteArrayOutputStream> zipContent = new TreeMap<String, ByteArrayOutputStream>();
+
+ byte data[] = new byte[BUFFER_SIZE];
+ /* Open file to decompress */
+ FileInputStream file_decompress = new FileInputStream(filename);
+
+ /* Create a buffer for the decompressed files */
+ BufferedInputStream buffi = new BufferedInputStream(file_decompress);
+
+ /* Open the file with the buffer */
+ ZipInputStream zis = new ZipInputStream(buffi);
+
+ /* Processing entries of the zip file */
+ ZipEntry entree;
+ int count;
+ while ((entree = zis.getNextEntry()) != null) {
+
+ /* Create a array for the current entry */
+ ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
+ zipContent.put(entree.getName(), byteArray);
+
+ /* copy in memory */
+ while ((count = zis.read(data, 0, BUFFER_SIZE)) != -1) {
+ byteArray.write(data, 0, count);
+ }
+ /* Flush the buffer */
+ byteArray.flush();
+ byteArray.close();
+ }
+
+ zis.close();
+
+ return zipContent;
+ }
+
+ /**
+ * Asserts that two files are equal. Throws an <tt>AssertionFailedError</tt>
+ * if they are not.
+ * <p>
+ *
+ */
+ public static void assertEquals(File expected, File actual) {
+ Assert.assertNotNull(expected);
+ Assert.assertNotNull(actual);
+
+ Assert.assertTrue("File does not exist [" + expected.getAbsolutePath()
+ + "]", expected.exists());
+ Assert.assertTrue("File does not exist [" + actual.getAbsolutePath()
+ + "]", actual.exists());
+
+ Assert.assertTrue("Expected file not readable", expected.canRead());
+ Assert.assertTrue("Actual file not readable", actual.canRead());
+
+ try {
+ TreeMap<String, ByteArrayOutputStream> file1 = decompress(expected);
+ TreeMap<String, ByteArrayOutputStream> file2 = decompress(actual);
+ equals(file1, file2);
+ } catch (IOException e) {
+ throw new AssertionFailedError(e.toString());
+ }
+ }
+}
diff --git a/test-data/openxml4j/TestCreatePackageOUTPUT.docx b/test-data/openxml4j/TestCreatePackageOUTPUT.docx
new file mode 100644
index 0000000000..dfcacc55e2
--- /dev/null
+++ b/test-data/openxml4j/TestCreatePackageOUTPUT.docx
Binary files differ
diff --git a/test-data/openxml4j/TestOpenPackageOUTPUT.docx b/test-data/openxml4j/TestOpenPackageOUTPUT.docx
new file mode 100644
index 0000000000..1e0996fd41
--- /dev/null
+++ b/test-data/openxml4j/TestOpenPackageOUTPUT.docx
Binary files differ