You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2016/12/06 13:52:46 UTC

svn commit: r1772894 - /poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java

Author: nick
Date: Tue Dec  6 13:52:46 2016
New Revision: 1772894

URL: http://svn.apache.org/viewvc?rev=1772894&view=rev
Log:
Recursive delete unit test based on users@ query - working fine already

Modified:
    poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java?rev=1772894&r1=1772893&r2=1772894&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java Tue Dec  6 13:52:46 2016
@@ -34,6 +34,7 @@ import org.apache.poi.hpsf.PropertySet;
 import org.apache.poi.hpsf.PropertySetFactory;
 import org.apache.poi.hpsf.SummaryInformation;
 import org.apache.poi.poifs.common.POIFSConstants;
+import org.apache.poi.poifs.property.DirectoryProperty;
 import org.apache.poi.poifs.property.NPropertyTable;
 import org.apache.poi.poifs.property.Property;
 import org.apache.poi.poifs.property.RootProperty;
@@ -1483,4 +1484,58 @@ public final class TestNPOIFSFileSystem
        
        assertThat(wbDataExp, equalTo(wbDataAct));
    }
+   
+   /**
+    * Ensure that you can recursively delete directories and their
+    *  contents
+    */
+   @Test
+   public void RecursiveDelete() throws Exception {
+       File testFile = POIDataSamples.getSpreadSheetInstance().getFile("SimpleMacro.xls");
+       NPOIFSFileSystem src = new NPOIFSFileSystem(testFile);
+
+       // Starts out with 5 entries:
+       //  _VBA_PROJECT_CUR
+       //  SummaryInformation <(0x05)SummaryInformation>
+       //  DocumentSummaryInformation <(0x05)DocumentSummaryInformation>
+       //  Workbook
+       //  CompObj <(0x01)CompObj>
+       assertEquals(5, _countChildren(src._get_property_table().getRoot()));
+       assertEquals(5, src.getRoot().getEntryCount());
+       
+       // Grab the VBA project root
+       DirectoryEntry vbaProj = (DirectoryEntry)src.getRoot().getEntry("_VBA_PROJECT_CUR");
+       assertEquals(3, vbaProj.getEntryCount());
+       // Can't delete yet, has stuff
+       assertEquals(false, vbaProj.delete());
+       // Recursively delete
+       _recursiveDeletee(vbaProj);
+       
+       // Entries gone
+       assertEquals(4, _countChildren(src._get_property_table().getRoot()));
+       assertEquals(4, src.getRoot().getEntryCount());
+       
+       // Done
+       src.close();
+   }
+   private void _recursiveDeletee(Entry entry) throws IOException {
+       if (entry.isDocumentEntry()) {
+           assertEquals(true, entry.delete());
+           return;
+       }
+       
+       DirectoryEntry dir = (DirectoryEntry)entry;
+       String[] names = dir.getEntryNames().toArray(new String[dir.getEntryCount()]);
+       for (String name : names) {
+           Entry ce = dir.getEntry(name);
+           _recursiveDeletee(ce);
+       }
+       assertEquals(true, dir.delete());
+   }
+   @SuppressWarnings("unused")
+   private int _countChildren(DirectoryProperty p) {
+       int count = 0;
+       for (Property cp : p) { count++; }
+       return count;
+   }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org