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
This commit is contained in:
Yegor Kozlov 2010-09-04 06:33:22 +00:00
parent d959321d72
commit 66f0404514
4 changed files with 196 additions and 35 deletions

View File

@ -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");
File expectedFile = OpenXML4JTestDataSamples.getSampleFile("TestCreatePackageOUTPUT.docx");
// Zap the target file, in case of an earlier run
if(targetFile.exists()) targetFile.delete();
// 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");
// Create a package
OPCPackage pkg = OPCPackage.create(targetFile);
PackagePartName corePartName = PackagingURIHelper
.createPartName("/word/document.xml");
pkg.addRelationship(corePartName, TargetMode.INTERNAL,
PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
pkg.addRelationship(corePartName, TargetMode.INTERNAL,
PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
PackagePart corePart = pkg
.createPart(
corePartName,
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
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 !");
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();
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());
}

View File

@ -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());
}
}
}

Binary file not shown.

Binary file not shown.