More on the HPFS in-place NPOIFS write tests, and a note about what is still to do for them
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1590319 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f649abdbe9
commit
3e6cb71fb9
@ -31,6 +31,10 @@ import org.apache.poi.util.IOUtils;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A POIFS {@link DataSource} backed by a File
|
* A POIFS {@link DataSource} backed by a File
|
||||||
|
*
|
||||||
|
* TODO - Return the ByteBuffers in such a way that in RW mode,
|
||||||
|
* changes to the buffer end up on the disk (will fix the HPSF TestWrite
|
||||||
|
* currently failing unit test when done)
|
||||||
*/
|
*/
|
||||||
public class FileBackedDataSource extends DataSource {
|
public class FileBackedDataSource extends DataSource {
|
||||||
private FileChannel channel;
|
private FileChannel channel;
|
||||||
|
@ -17,8 +17,10 @@
|
|||||||
|
|
||||||
package org.apache.poi.hpsf.basic;
|
package org.apache.poi.hpsf.basic;
|
||||||
|
|
||||||
|
import static org.hamcrest.core.IsEqual.equalTo;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
@ -65,6 +67,7 @@ import org.apache.poi.poifs.filesystem.DirectoryEntry;
|
|||||||
import org.apache.poi.poifs.filesystem.DocumentNode;
|
import org.apache.poi.poifs.filesystem.DocumentNode;
|
||||||
import org.apache.poi.poifs.filesystem.NDocumentInputStream;
|
import org.apache.poi.poifs.filesystem.NDocumentInputStream;
|
||||||
import org.apache.poi.poifs.filesystem.NDocumentOutputStream;
|
import org.apache.poi.poifs.filesystem.NDocumentOutputStream;
|
||||||
|
import org.apache.poi.poifs.filesystem.NPOIFSDocument;
|
||||||
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
import org.apache.poi.util.CodePageUtil;
|
import org.apache.poi.util.CodePageUtil;
|
||||||
@ -830,16 +833,17 @@ public class TestWrite
|
|||||||
|
|
||||||
|
|
||||||
// Open the copy in read/write mode
|
// Open the copy in read/write mode
|
||||||
fs = new NPOIFSFileSystem(copy);
|
fs = new NPOIFSFileSystem(copy, false);
|
||||||
root = fs.getRoot();
|
root = fs.getRoot();
|
||||||
|
|
||||||
|
|
||||||
// Read the properties in there
|
// Read the properties in there
|
||||||
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
|
||||||
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
|
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
|
||||||
assertEquals(131077, sinf.getOSVersion());
|
assertEquals(131077, sinf.getOSVersion());
|
||||||
|
|
||||||
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
|
||||||
dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
|
dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
|
||||||
assertEquals(131077, dinf.getOSVersion());
|
assertEquals(131077, dinf.getOSVersion());
|
||||||
|
|
||||||
@ -853,7 +857,45 @@ public class TestWrite
|
|||||||
assertEquals(null, dinf.getManager());
|
assertEquals(null, dinf.getManager());
|
||||||
|
|
||||||
|
|
||||||
// Have them write themselves in-place with no changes
|
// Do an in-place replace via an InputStream
|
||||||
|
new NPOIFSDocument(sinfDoc).replaceContents(sinf.toInputStream());
|
||||||
|
new NPOIFSDocument(dinfDoc).replaceContents(dinf.toInputStream());
|
||||||
|
|
||||||
|
|
||||||
|
// Check it didn't get changed
|
||||||
|
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
|
||||||
|
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
|
||||||
|
assertEquals(131077, sinf.getOSVersion());
|
||||||
|
|
||||||
|
dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
|
||||||
|
assertEquals(131077, dinf.getOSVersion());
|
||||||
|
|
||||||
|
|
||||||
|
// Start again!
|
||||||
|
fs.close();
|
||||||
|
inp = _samples.openResourceAsStream("TestShiftJIS.doc");
|
||||||
|
out = new FileOutputStream(copy);
|
||||||
|
IOUtils.copy(inp, out);
|
||||||
|
inp.close();
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
fs = new NPOIFSFileSystem(copy, false);
|
||||||
|
root = fs.getRoot();
|
||||||
|
|
||||||
|
// Read the properties in once more
|
||||||
|
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
|
||||||
|
sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
|
||||||
|
assertEquals(131077, sinf.getOSVersion());
|
||||||
|
|
||||||
|
dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
|
||||||
|
assertEquals(131077, dinf.getOSVersion());
|
||||||
|
|
||||||
|
|
||||||
|
// Have them write themselves in-place with no changes, as an OutputStream
|
||||||
sinf.write(new NDocumentOutputStream(sinfDoc));
|
sinf.write(new NDocumentOutputStream(sinfDoc));
|
||||||
dinf.write(new NDocumentOutputStream(dinfDoc));
|
dinf.write(new NDocumentOutputStream(dinfDoc));
|
||||||
|
|
||||||
@ -868,7 +910,10 @@ public class TestWrite
|
|||||||
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
|
||||||
|
|
||||||
// TODO
|
byte[] sinfData = IOUtils.toByteArray(new NDocumentInputStream(sinfDoc));
|
||||||
|
byte[] dinfData = IOUtils.toByteArray(new NDocumentInputStream(dinfDoc));
|
||||||
|
assertThat(sinfBytes.toByteArray(), equalTo(sinfData));
|
||||||
|
assertThat(dinfBytes.toByteArray(), equalTo(dinfData));
|
||||||
|
|
||||||
|
|
||||||
// Read back in as-is
|
// Read back in as-is
|
||||||
|
@ -28,6 +28,7 @@ import org.apache.poi.poifs.common.POIFSConstants;
|
|||||||
/**
|
/**
|
||||||
* Tests for the Mini Store in the NIO POIFS
|
* Tests for the Mini Store in the NIO POIFS
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("resource")
|
||||||
public final class TestNPOIFSMiniStore extends TestCase {
|
public final class TestNPOIFSMiniStore extends TestCase {
|
||||||
private static final POIDataSamples _inst = POIDataSamples.getPOIFSInstance();
|
private static final POIDataSamples _inst = POIDataSamples.getPOIFSInstance();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user