Add a (disabled) failing unit test on heavily nested NPOIFS copies, found working on #56791
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1678764 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2df3bef375
commit
89890a247a
@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
package org.apache.poi.poifs.filesystem;
|
package org.apache.poi.poifs.filesystem;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -30,6 +33,7 @@ import org.apache.poi.POIDataSamples;
|
|||||||
*/
|
*/
|
||||||
public final class TestFileSystemBugs extends TestCase {
|
public final class TestFileSystemBugs extends TestCase {
|
||||||
protected static POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
|
protected static POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
|
||||||
|
protected static POIDataSamples _ssSamples = POIDataSamples.getSpreadSheetInstance();
|
||||||
|
|
||||||
protected List<NPOIFSFileSystem> openedFSs;
|
protected List<NPOIFSFileSystem> openedFSs;
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
@ -45,15 +49,25 @@ public final class TestFileSystemBugs extends TestCase {
|
|||||||
openedFSs = null;
|
openedFSs = null;
|
||||||
}
|
}
|
||||||
protected DirectoryNode[] openSample(String name, boolean oldFails) throws Exception {
|
protected DirectoryNode[] openSample(String name, boolean oldFails) throws Exception {
|
||||||
NPOIFSFileSystem nfs = new NPOIFSFileSystem(
|
return openSamples(new InputStream[] {
|
||||||
_samples.openResourceAsStream(name));
|
_samples.openResourceAsStream(name),
|
||||||
|
_samples.openResourceAsStream(name)
|
||||||
|
}, oldFails);
|
||||||
|
}
|
||||||
|
protected DirectoryNode[] openSSSample(String name, boolean oldFails) throws Exception {
|
||||||
|
return openSamples(new InputStream[] {
|
||||||
|
_ssSamples.openResourceAsStream(name),
|
||||||
|
_ssSamples.openResourceAsStream(name)
|
||||||
|
}, oldFails);
|
||||||
|
}
|
||||||
|
protected DirectoryNode[] openSamples(InputStream[] inps, boolean oldFails) throws Exception {
|
||||||
|
NPOIFSFileSystem nfs = new NPOIFSFileSystem(inps[0]);
|
||||||
if (openedFSs == null) openedFSs = new ArrayList<NPOIFSFileSystem>();
|
if (openedFSs == null) openedFSs = new ArrayList<NPOIFSFileSystem>();
|
||||||
openedFSs.add(nfs);
|
openedFSs.add(nfs);
|
||||||
|
|
||||||
POIFSFileSystem ofs = null;
|
POIFSFileSystem ofs = null;
|
||||||
try {
|
try {
|
||||||
ofs = new POIFSFileSystem(
|
ofs = new POIFSFileSystem(inps[1]);
|
||||||
_samples.openResourceAsStream(name));
|
|
||||||
if (oldFails) fail("POIFSFileSystem should have failed but didn't");
|
if (oldFails) fail("POIFSFileSystem should have failed but didn't");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (!oldFails) throw e;
|
if (!oldFails) throw e;
|
||||||
@ -107,4 +121,36 @@ public final class TestFileSystemBugs extends TestCase {
|
|||||||
assertEquals(42, root.getEntryCount());
|
assertEquals(42, root.getEntryCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* With heavily nested documents, ensure we still re-write the same
|
||||||
|
*/
|
||||||
|
public void IGNOREDtestHeavilyNestedReWrite() throws Exception {
|
||||||
|
for (DirectoryNode root : openSSSample("ex42570-20305.xls", false)) {
|
||||||
|
// TODO Record the structure
|
||||||
|
|
||||||
|
// Prepare to copy
|
||||||
|
DirectoryNode dest;
|
||||||
|
if (root.getNFileSystem() != null) {
|
||||||
|
dest = (new NPOIFSFileSystem()).getRoot();
|
||||||
|
} else {
|
||||||
|
dest = (new OPOIFSFileSystem()).getRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy over
|
||||||
|
EntryUtils.copyNodes(root, dest);
|
||||||
|
|
||||||
|
// Re-load, always as NPOIFS
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
if (root.getNFileSystem() != null) {
|
||||||
|
root.getNFileSystem().writeFilesystem(baos);
|
||||||
|
} else {
|
||||||
|
root.getOFileSystem().writeFilesystem(baos);
|
||||||
|
}
|
||||||
|
NPOIFSFileSystem read = new NPOIFSFileSystem(
|
||||||
|
new ByteArrayInputStream(baos.toByteArray()));
|
||||||
|
|
||||||
|
// TODO Check the structure matches
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user