mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
184be5c03b
commit
7e3b3b85d9
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
package org.apache.poi.poifs.filesystem;
|
package org.apache.poi.poifs.filesystem;
|
||||||
|
|
||||||
|
import static org.hamcrest.core.IsCollectionContaining.hasItem;
|
||||||
import static org.hamcrest.core.IsEqual.equalTo;
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
|
@ -30,6 +31,7 @@ import java.nio.ByteBuffer;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.apache.poi.POIDataSamples;
|
import org.apache.poi.POIDataSamples;
|
||||||
|
import org.apache.poi.hpsf.DocumentSummaryInformation;
|
||||||
import org.apache.poi.hpsf.PropertySet;
|
import org.apache.poi.hpsf.PropertySet;
|
||||||
import org.apache.poi.hpsf.PropertySetFactory;
|
import org.apache.poi.hpsf.PropertySetFactory;
|
||||||
import org.apache.poi.hpsf.SummaryInformation;
|
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 BATs", expectedBAT, foundBAT);
|
||||||
assertEquals("Wrong number of XBATs with " + expectedBAT + " BATs", expectedXBAT, foundXBAT);
|
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 {
|
protected static HeaderBlock writeOutAndReadHeader(NPOIFSFileSystem fs) throws IOException {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
@ -597,13 +608,10 @@ public final class TestNPOIFSFileSystem {
|
||||||
DocumentNode doc = (DocumentNode)si;
|
DocumentNode doc = (DocumentNode)si;
|
||||||
|
|
||||||
// Check we can read it
|
// Check we can read it
|
||||||
NDocumentInputStream inp = new NDocumentInputStream(doc);
|
assertContentsMatches(null, doc);
|
||||||
byte[] contents = new byte[doc.getSize()];
|
|
||||||
assertEquals(doc.getSize(), inp.read(contents));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
// Now try to build the property set
|
// Now try to build the property set
|
||||||
inp = new NDocumentInputStream(doc);
|
DocumentInputStream inp = new NDocumentInputStream(doc);
|
||||||
PropertySet ps = PropertySetFactory.create(inp);
|
PropertySet ps = PropertySetFactory.create(inp);
|
||||||
SummaryInformation inf = (SummaryInformation)ps;
|
SummaryInformation inf = (SummaryInformation)ps;
|
||||||
|
|
||||||
|
@ -611,9 +619,22 @@ public final class TestNPOIFSFileSystem {
|
||||||
assertEquals(null, inf.getApplicationName());
|
assertEquals(null, inf.getApplicationName());
|
||||||
assertEquals(null, inf.getAuthor());
|
assertEquals(null, inf.getAuthor());
|
||||||
assertEquals(null, inf.getSubject());
|
assertEquals(null, inf.getSubject());
|
||||||
|
assertEquals(131333, inf.getOSVersion());
|
||||||
|
|
||||||
// Finish
|
// Finish with this one
|
||||||
inp.close();
|
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
|
@Test
|
||||||
public void readWriteRead() throws Exception {
|
public void readWriteRead() throws Exception {
|
||||||
|
SummaryInformation sinf = null;
|
||||||
|
DocumentSummaryInformation dinf = null;
|
||||||
|
|
||||||
for(NPOIFSFileSystem fs : get512and4kFileAndInput()) {
|
for(NPOIFSFileSystem fs : get512and4kFileAndInput()) {
|
||||||
// Check we can find the entries we expect
|
// Check we can find the entries we expect
|
||||||
DirectoryNode root = fs.getRoot();
|
DirectoryNode root = fs.getRoot();
|
||||||
assertEquals(5, root.getEntryCount());
|
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
|
// Write out, re-load
|
||||||
// TODO Add check
|
fs = writeOutAndReadBack(fs);
|
||||||
|
|
||||||
// Check they're still there
|
// 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
|
// 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
|
// 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
|
// 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
|
// Add a full stream, delete a full stream
|
||||||
// TODO Add check
|
// TODO Add check
|
||||||
|
@ -684,7 +737,6 @@ public final class TestNPOIFSFileSystem {
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public void createWriteRead() throws Exception {
|
public void createWriteRead() throws Exception {
|
||||||
NPOIFSFileSystem fs = new NPOIFSFileSystem();
|
NPOIFSFileSystem fs = new NPOIFSFileSystem();
|
||||||
NDocumentInputStream inp;
|
|
||||||
DocumentEntry miniDoc;
|
DocumentEntry miniDoc;
|
||||||
DocumentEntry normDoc;
|
DocumentEntry normDoc;
|
||||||
|
|
||||||
|
@ -859,25 +911,13 @@ public final class TestNPOIFSFileSystem {
|
||||||
assertEquals(3, testDir.getEntryCount());
|
assertEquals(3, testDir.getEntryCount());
|
||||||
|
|
||||||
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
||||||
inp = new NDocumentInputStream(miniDoc);
|
assertContentsMatches(mini, miniDoc);
|
||||||
byte[] miniRead = new byte[miniDoc.getSize()];
|
|
||||||
assertEquals(miniDoc.getSize(), inp.read(miniRead));
|
|
||||||
assertThat(mini, equalTo(miniRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
||||||
inp = new NDocumentInputStream(normDoc);
|
assertContentsMatches(main4096, normDoc);
|
||||||
byte[] normRead = new byte[normDoc.getSize()];
|
|
||||||
assertEquals(normDoc.getSize(), inp.read(normRead));
|
|
||||||
assertThat(main4096, equalTo(normRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
normDoc = (DocumentEntry)testDir.getEntry("Normal5124");
|
normDoc = (DocumentEntry)testDir.getEntry("Normal5124");
|
||||||
inp = new NDocumentInputStream(normDoc);
|
assertContentsMatches(main5124, normDoc);
|
||||||
normRead = new byte[normDoc.getSize()];
|
|
||||||
assertEquals(normDoc.getSize(), inp.read(normRead));
|
|
||||||
assertThat(main5124, equalTo(normRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
// All done
|
// All done
|
||||||
fs.close();
|
fs.close();
|
||||||
|
@ -886,7 +926,6 @@ public final class TestNPOIFSFileSystem {
|
||||||
@Test
|
@Test
|
||||||
public void addBeforeWrite() throws Exception {
|
public void addBeforeWrite() throws Exception {
|
||||||
NPOIFSFileSystem fs = new NPOIFSFileSystem();
|
NPOIFSFileSystem fs = new NPOIFSFileSystem();
|
||||||
NDocumentInputStream inp;
|
|
||||||
DocumentEntry miniDoc;
|
DocumentEntry miniDoc;
|
||||||
DocumentEntry normDoc;
|
DocumentEntry normDoc;
|
||||||
HeaderBlock hdr;
|
HeaderBlock hdr;
|
||||||
|
@ -945,18 +984,10 @@ public final class TestNPOIFSFileSystem {
|
||||||
|
|
||||||
// Check that we can read the right data pre-write
|
// Check that we can read the right data pre-write
|
||||||
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
||||||
inp = new NDocumentInputStream(miniDoc);
|
assertContentsMatches(mini, miniDoc);
|
||||||
byte[] miniRead = new byte[miniDoc.getSize()];
|
|
||||||
assertEquals(miniDoc.getSize(), inp.read(miniRead));
|
|
||||||
assertThat(mini, equalTo(miniRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
||||||
inp = new NDocumentInputStream(normDoc);
|
assertContentsMatches(main4096, normDoc);
|
||||||
byte[] normRead = new byte[normDoc.getSize()];
|
|
||||||
assertEquals(normDoc.getSize(), inp.read(normRead));
|
|
||||||
assertThat(main4096, equalTo(normRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
|
|
||||||
// Write, read, check
|
// Write, read, check
|
||||||
|
@ -1002,18 +1033,10 @@ public final class TestNPOIFSFileSystem {
|
||||||
assertEquals(2, testDir.getEntryCount());
|
assertEquals(2, testDir.getEntryCount());
|
||||||
|
|
||||||
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
||||||
inp = new NDocumentInputStream(miniDoc);
|
assertContentsMatches(mini, miniDoc);
|
||||||
miniRead = new byte[miniDoc.getSize()];
|
|
||||||
assertEquals(miniDoc.getSize(), inp.read(miniRead));
|
|
||||||
assertThat(mini, equalTo(miniRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
normDoc = (DocumentEntry)testDir.getEntry("Normal4096");
|
||||||
inp = new NDocumentInputStream(normDoc);
|
assertContentsMatches(main4096, normDoc);
|
||||||
normRead = new byte[normDoc.getSize()];
|
|
||||||
assertEquals(normDoc.getSize(), inp.read(normRead));
|
|
||||||
assertThat(main4096, equalTo(normRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
|
|
||||||
// Add one more stream to each, then save and re-load
|
// Add one more stream to each, then save and re-load
|
||||||
|
@ -1040,25 +1063,13 @@ public final class TestNPOIFSFileSystem {
|
||||||
assertEquals(4, testDir.getEntryCount());
|
assertEquals(4, testDir.getEntryCount());
|
||||||
|
|
||||||
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
miniDoc = (DocumentEntry)testDir.getEntry("Mini");
|
||||||
inp = new NDocumentInputStream(miniDoc);
|
assertContentsMatches(mini, miniDoc);
|
||||||
miniRead = new byte[miniDoc.getSize()];
|
|
||||||
assertEquals(miniDoc.getSize(), inp.read(miniRead));
|
|
||||||
assertThat(mini, equalTo(miniRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
miniDoc = (DocumentEntry)testDir.getEntry("Mini2");
|
miniDoc = (DocumentEntry)testDir.getEntry("Mini2");
|
||||||
inp = new NDocumentInputStream(miniDoc);
|
assertContentsMatches(mini2, miniDoc);
|
||||||
miniRead = new byte[miniDoc.getSize()];
|
|
||||||
assertEquals(miniDoc.getSize(), inp.read(miniRead));
|
|
||||||
assertThat(mini2, equalTo(miniRead));
|
|
||||||
inp.close();
|
|
||||||
|
|
||||||
normDoc = (DocumentEntry)testDir.getEntry("Normal4106");
|
normDoc = (DocumentEntry)testDir.getEntry("Normal4106");
|
||||||
inp = new NDocumentInputStream(normDoc);
|
assertContentsMatches(main4106, normDoc);
|
||||||
normRead = new byte[normDoc.getSize()];
|
|
||||||
assertEquals(normDoc.getSize(), inp.read(normRead));
|
|
||||||
assertThat(main4106, equalTo(normRead));
|
|
||||||
inp.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue