mirror of https://github.com/apache/poi.git
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:
parent
d959321d72
commit
66f0404514
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
Loading…
Reference in New Issue