diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/OpcZipTest.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/OpcZipTest.java new file mode 100644 index 0000000000..8c7ecec01c --- /dev/null +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/streaming/OpcZipTest.java @@ -0,0 +1,51 @@ +package org.apache.poi.xssf.streaming; + +import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; +import org.junit.jupiter.api.Test; + +import java.io.PrintStream; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.zip.ZipEntry; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class OpcZipTest { + @Test + void compareOutput() throws Exception { + Map contents = createContents(); + try ( + UnsynchronizedByteArrayOutputStream bos1 = new UnsynchronizedByteArrayOutputStream(); + UnsynchronizedByteArrayOutputStream bos2 = new UnsynchronizedByteArrayOutputStream() + ) { + try (OpcOutputStream zip = new OpcOutputStream(bos1)) { + for (Map.Entry entry : contents.entrySet()) { + zip.putNextEntry(entry.getKey()); + PrintStream printer = new PrintStream(zip); + printer.print(entry.getValue()); + printer.flush(); + zip.closeEntry(); + } + } + try (com.github.rzymek.opczip.OpcOutputStream zip = new com.github.rzymek.opczip.OpcOutputStream(bos2)) { + for (Map.Entry entry : contents.entrySet()) { + zip.putNextEntry(new ZipEntry(entry.getKey())); + PrintStream printer = new PrintStream(zip); + printer.print(entry.getValue()); + printer.flush(); + zip.closeEntry(); + } + } + assertArrayEquals(bos1.toByteArray(), bos2.toByteArray()); + } + } + + private static Map createContents() { + Map contents = new LinkedHashMap<>(); + for (int i = 0; i < 3; i++) { + String name = String.format("dir%s/file%s.txt", i % 3, i); + contents.put(name, "this is the contents"); + } + return contents; + } +}