]> source.dussan.org Git - poi.git/commitdiff
Add a (disabled) failing unit test on heavily nested NPOIFS copies, found working...
authorNick Burch <nick@apache.org>
Mon, 11 May 2015 14:58:43 +0000 (14:58 +0000)
committerNick Burch <nick@apache.org>
Mon, 11 May 2015 14:58:43 +0000 (14:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1678764 13f79535-47bb-0310-9956-ffa450edef68

src/testcases/org/apache/poi/poifs/filesystem/TestFileSystemBugs.java

index f6540b4d30ba93867d6d87cb76c8b3972726e4c8..fc3d4a958d025d9f0a4701e198aec241a2d3f188 100644 (file)
@@ -17,6 +17,9 @@
 
 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.Iterator;
 import java.util.List;
@@ -30,6 +33,7 @@ import org.apache.poi.POIDataSamples;
  */
 public final class TestFileSystemBugs extends TestCase {
     protected static POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
+    protected static POIDataSamples _ssSamples = POIDataSamples.getSpreadSheetInstance();
     
     protected List<NPOIFSFileSystem> openedFSs;
     protected void tearDown() throws Exception {
@@ -45,15 +49,25 @@ public final class TestFileSystemBugs extends TestCase {
         openedFSs = null;
     }
     protected DirectoryNode[] openSample(String name, boolean oldFails) throws Exception {
-        NPOIFSFileSystem nfs = new NPOIFSFileSystem(
-                _samples.openResourceAsStream(name));
+        return openSamples(new InputStream[] {
+                _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>();
         openedFSs.add(nfs);
         
         POIFSFileSystem ofs = null;
         try {
-            ofs = new POIFSFileSystem(
-                _samples.openResourceAsStream(name));
+            ofs = new POIFSFileSystem(inps[1]);
             if (oldFails) fail("POIFSFileSystem should have failed but didn't");
         } catch (Exception e) {
             if (!oldFails) throw e;
@@ -107,4 +121,36 @@ public final class TestFileSystemBugs extends TestCase {
             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
+        }
+    }
 }