Add a deep re-write NPOIFS test

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1678781 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2015-05-11 18:00:45 +00:00
parent 1945dfc00c
commit bd6012d9b9

View File

@ -21,8 +21,10 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import junit.framework.TestCase; import junit.framework.TestCase;
@ -125,9 +127,11 @@ public final class TestFileSystemBugs extends TestCase {
/** /**
* With heavily nested documents, ensure we still re-write the same * With heavily nested documents, ensure we still re-write the same
*/ */
public void IGNOREDtestHeavilyNestedReWrite() throws Exception { public void testHeavilyNestedReWrite() throws Exception {
for (DirectoryNode root : openSSSample("ex42570-20305.xls", false)) { for (DirectoryNode root : openSSSample("ex42570-20305.xls", false)) {
// TODO Record the structure // Record the structure
Map<String,Integer> entries = new HashMap<String, Integer>();
fetchSizes("/", root, entries);
// Prepare to copy // Prepare to copy
DirectoryNode dest; DirectoryNode dest;
@ -150,7 +154,33 @@ public final class TestFileSystemBugs extends TestCase {
NPOIFSFileSystem read = new NPOIFSFileSystem( NPOIFSFileSystem read = new NPOIFSFileSystem(
new ByteArrayInputStream(baos.toByteArray())); new ByteArrayInputStream(baos.toByteArray()));
// TODO Check the structure matches // Check the structure matches
checkSizes("/", read.getRoot(), entries);
}
}
private void fetchSizes(String path, DirectoryNode dir, Map<String,Integer> entries) {
for (Entry entry : dir) {
if (entry instanceof DirectoryNode) {
String ourPath = path + entry.getName() + "/";
entries.put(ourPath, -1);
fetchSizes(ourPath, (DirectoryNode)entry, entries);
} else {
DocumentNode doc = (DocumentNode)entry;
entries.put(path+entry.getName(), doc.getSize());
}
}
}
private void checkSizes(String path, DirectoryNode dir, Map<String,Integer> entries) {
for (Entry entry : dir) {
if (entry instanceof DirectoryNode) {
String ourPath = path + entry.getName() + "/";
assertTrue(entries.containsKey(ourPath));
assertEquals(-1, entries.get(ourPath).intValue());
checkSizes(ourPath, (DirectoryNode)entry, entries);
} else {
DocumentNode doc = (DocumentNode)entry;
assertEquals(entries.get(path+entry.getName()).intValue(), doc.getSize());
}
} }
} }
} }