aboutsummaryrefslogtreecommitdiffstats
path: root/src/testcases/org/apache/poi/poifs
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2014-04-25 21:11:26 +0000
committerNick Burch <nick@apache.org>2014-04-25 21:11:26 +0000
commit7e3b3b85d926dc5f2bb0c0e1178a5f719b28f19d (patch)
tree0a25dbe603f19d2b5c50ae9bc3a6f9a7dce55973 /src/testcases/org/apache/poi/poifs
parent184be5c03badc06f6d50e5942370d54c6f498307 (diff)
downloadpoi-7e3b3b85d926dc5f2bb0c0e1178a5f719b28f19d.tar.gz
poi-7e3b3b85d926dc5f2bb0c0e1178a5f719b28f19d.zip
Refactor some of the NPOIFS write tests, and begin on the last missing write test
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1590149 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/poifs')
-rw-r--r--src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java167
1 files changed, 89 insertions, 78 deletions
diff --git a/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java b/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
index fa019ccd85..df3bca587d 100644
--- a/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
+++ b/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
@@ -17,6 +17,7 @@
package org.apache.poi.poifs.filesystem;
+import static org.hamcrest.core.IsCollectionContaining.hasItem;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -30,6 +31,7 @@ import java.nio.ByteBuffer;
import java.util.Iterator;
import org.apache.poi.POIDataSamples;
+import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.PropertySet;
import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation;
@@ -74,6 +76,15 @@ public final class TestNPOIFSFileSystem {
assertEquals("Wrong number of BATs", expectedBAT, foundBAT);
assertEquals("Wrong number of XBATs with " + expectedBAT + " BATs", expectedXBAT, foundXBAT);
}
+ protected void assertContentsMatches(byte[] expected, DocumentEntry doc) throws IOException {
+ NDocumentInputStream inp = new NDocumentInputStream(doc);
+ byte[] contents = new byte[doc.getSize()];
+ assertEquals(doc.getSize(), inp.read(contents));
+ inp.close();
+
+ if (expected != null)
+ assertThat(expected, equalTo(contents));
+ }
protected static HeaderBlock writeOutAndReadHeader(NPOIFSFileSystem fs) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -597,13 +608,10 @@ public final class TestNPOIFSFileSystem {
DocumentNode doc = (DocumentNode)si;
// Check we can read it
- NDocumentInputStream inp = new NDocumentInputStream(doc);
- byte[] contents = new byte[doc.getSize()];
- assertEquals(doc.getSize(), inp.read(contents));
- inp.close();
+ assertContentsMatches(null, doc);
// Now try to build the property set
- inp = new NDocumentInputStream(doc);
+ DocumentInputStream inp = new NDocumentInputStream(doc);
PropertySet ps = PropertySetFactory.create(inp);
SummaryInformation inf = (SummaryInformation)ps;
@@ -611,9 +619,22 @@ public final class TestNPOIFSFileSystem {
assertEquals(null, inf.getApplicationName());
assertEquals(null, inf.getAuthor());
assertEquals(null, inf.getSubject());
+ assertEquals(131333, inf.getOSVersion());
- // Finish
+ // Finish with this one
inp.close();
+
+
+ // Try the other summary information
+ si = root.getEntry("\u0005DocumentSummaryInformation");
+ assertEquals(true, si.isDocumentEntry());
+ doc = (DocumentNode)si;
+ assertContentsMatches(null, doc);
+
+ inp = new NDocumentInputStream(doc);
+ ps = PropertySetFactory.create(inp);
+ DocumentSummaryInformation dinf = (DocumentSummaryInformation)ps;
+ assertEquals(131333, dinf.getOSVersion());
}
}
@@ -623,42 +644,74 @@ public final class TestNPOIFSFileSystem {
*/
@Test
public void readWriteRead() throws Exception {
+ SummaryInformation sinf = null;
+ DocumentSummaryInformation dinf = null;
+
for(NPOIFSFileSystem fs : get512and4kFileAndInput()) {
// Check we can find the entries we expect
DirectoryNode root = fs.getRoot();
assertEquals(5, root.getEntryCount());
+ assertThat(root.getEntryNames(), hasItem("Thumbnail"));
+ assertThat(root.getEntryNames(), hasItem("Image"));
+ assertThat(root.getEntryNames(), hasItem("Tags"));
+ assertThat(root.getEntryNames(), hasItem("\u0005DocumentSummaryInformation"));
+ assertThat(root.getEntryNames(), hasItem("\u0005SummaryInformation"));
-/*
- assertEquals("Thumbnail", prop.getName());
- prop = pi.next();
- assertEquals("\u0005DocumentSummaryInformation", prop.getName());
- prop = pi.next();
- assertEquals("\u0005SummaryInformation", prop.getName());
- prop = pi.next();
- assertEquals("Image", prop.getName());
- prop = pi.next();
- assertEquals("Tags", prop.getName());
-*/
-
- // TODO Add check
// Write out, re-load
- // TODO Add check
+ fs = writeOutAndReadBack(fs);
// Check they're still there
- // TODO Add check
+ root = fs.getRoot();
+ assertEquals(5, root.getEntryCount());
+ assertThat(root.getEntryNames(), hasItem("Thumbnail"));
+ assertThat(root.getEntryNames(), hasItem("Image"));
+ assertThat(root.getEntryNames(), hasItem("Tags"));
+ assertThat(root.getEntryNames(), hasItem("\u0005DocumentSummaryInformation"));
+ assertThat(root.getEntryNames(), hasItem("\u0005SummaryInformation"));
+
+
+ // Check the contents of them - parse the summary block and check
+ sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(
+ (DocumentEntry)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ assertEquals(131333, sinf.getOSVersion());
+
+ dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(
+ (DocumentEntry)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ assertEquals(131333, sinf.getOSVersion());
- // Check the first few and last few bytes of a few
- // TODO Add check
// Add a test mini stream
- // TODO Add check
+ DirectoryEntry testDir = root.createDirectory("Testing 123");
+ byte[] mini = new byte[] { 42, 0, 1, 2, 3, 4, 42 };
+ testDir.createDocument("Mini", new ByteArrayInputStream(mini));
+
// Write out, re-load
- // TODO Add check
+ fs = writeOutAndReadBack(fs);
+
+ root = fs.getRoot();
+ assertEquals(6, root.getEntryCount());
+ assertThat(root.getEntryNames(), hasItem("Thumbnail"));
+ assertThat(root.getEntryNames(), hasItem("Image"));
+ assertThat(root.getEntryNames(), hasItem("Tags"));
+ assertThat(root.getEntryNames(), hasItem("Testing 123"));
+ assertThat(root.getEntryNames(), hasItem("\u0005DocumentSummaryInformation"));
+ assertThat(root.getEntryNames(), hasItem("\u0005SummaryInformation"));
+
// Check old and new are there
- // TODO Add check
+ sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(
+ (DocumentEntry)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME)));
+ assertEquals(131333, sinf.getOSVersion());
+
+ dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(
+ (DocumentEntry)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME)));
+ assertEquals(131333, sinf.getOSVersion());
+
+ testDir = (DirectoryEntry)root.getEntry("Testing 123");
+ assertContentsMatches(mini, (DocumentEntry)testDir.getEntry("Mini"));
+
// Add a full stream, delete a full stream
// TODO Add check
@@ -684,7 +737,6 @@ public final class TestNPOIFSFileSystem {
@SuppressWarnings("resource")
public void createWriteRead() throws Exception {
NPOIFSFileSystem fs = new NPOIFSFileSystem();
- NDocumentInputStream inp;
DocumentEntry miniDoc;
DocumentEntry normDoc;
@@ -859,25 +911,13 @@ public final class TestNPOIFSFileSystem {
assertEquals(3, testDir.getEntryCount());
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
- inp = new NDocumentInputStream(miniDoc);
- byte[] miniRead = new byte[miniDoc.getSize()];
- assertEquals(miniDoc.getSize(), inp.read(miniRead));
- assertThat(mini, equalTo(miniRead));
- inp.close();
+ assertContentsMatches(mini, miniDoc);
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
- inp = new NDocumentInputStream(normDoc);
- byte[] normRead = new byte[normDoc.getSize()];
- assertEquals(normDoc.getSize(), inp.read(normRead));
- assertThat(main4096, equalTo(normRead));
- inp.close();
+ assertContentsMatches(main4096, normDoc);
normDoc = (DocumentEntry)testDir.getEntry("Normal5124");
- inp = new NDocumentInputStream(normDoc);
- normRead = new byte[normDoc.getSize()];
- assertEquals(normDoc.getSize(), inp.read(normRead));
- assertThat(main5124, equalTo(normRead));
- inp.close();
+ assertContentsMatches(main5124, normDoc);
// All done
fs.close();
@@ -886,7 +926,6 @@ public final class TestNPOIFSFileSystem {
@Test
public void addBeforeWrite() throws Exception {
NPOIFSFileSystem fs = new NPOIFSFileSystem();
- NDocumentInputStream inp;
DocumentEntry miniDoc;
DocumentEntry normDoc;
HeaderBlock hdr;
@@ -945,18 +984,10 @@ public final class TestNPOIFSFileSystem {
// Check that we can read the right data pre-write
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
- inp = new NDocumentInputStream(miniDoc);
- byte[] miniRead = new byte[miniDoc.getSize()];
- assertEquals(miniDoc.getSize(), inp.read(miniRead));
- assertThat(mini, equalTo(miniRead));
- inp.close();
+ assertContentsMatches(mini, miniDoc);
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
- inp = new NDocumentInputStream(normDoc);
- byte[] normRead = new byte[normDoc.getSize()];
- assertEquals(normDoc.getSize(), inp.read(normRead));
- assertThat(main4096, equalTo(normRead));
- inp.close();
+ assertContentsMatches(main4096, normDoc);
// Write, read, check
@@ -1002,18 +1033,10 @@ public final class TestNPOIFSFileSystem {
assertEquals(2, testDir.getEntryCount());
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
- inp = new NDocumentInputStream(miniDoc);
- miniRead = new byte[miniDoc.getSize()];
- assertEquals(miniDoc.getSize(), inp.read(miniRead));
- assertThat(mini, equalTo(miniRead));
- inp.close();
+ assertContentsMatches(mini, miniDoc);
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
- inp = new NDocumentInputStream(normDoc);
- normRead = new byte[normDoc.getSize()];
- assertEquals(normDoc.getSize(), inp.read(normRead));
- assertThat(main4096, equalTo(normRead));
- inp.close();
+ assertContentsMatches(main4096, normDoc);
// Add one more stream to each, then save and re-load
@@ -1040,25 +1063,13 @@ public final class TestNPOIFSFileSystem {
assertEquals(4, testDir.getEntryCount());
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
- inp = new NDocumentInputStream(miniDoc);
- miniRead = new byte[miniDoc.getSize()];
- assertEquals(miniDoc.getSize(), inp.read(miniRead));
- assertThat(mini, equalTo(miniRead));
- inp.close();
+ assertContentsMatches(mini, miniDoc);
miniDoc = (DocumentEntry)testDir.getEntry("Mini2");
- inp = new NDocumentInputStream(miniDoc);
- miniRead = new byte[miniDoc.getSize()];
- assertEquals(miniDoc.getSize(), inp.read(miniRead));
- assertThat(mini2, equalTo(miniRead));
- inp.close();
+ assertContentsMatches(mini2, miniDoc);
normDoc = (DocumentEntry)testDir.getEntry("Normal4106");
- inp = new NDocumentInputStream(normDoc);
- normRead = new byte[normDoc.getSize()];
- assertEquals(normDoc.getSize(), inp.read(normRead));
- assertThat(main4106, equalTo(normRead));
- inp.close();
+ assertContentsMatches(main4106, normDoc);
}
/**