Recursive delete unit test based on users@ query - working fine already
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1772894 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
83ff0e5ec4
commit
30d64fda8c
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user