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.PropertySetFactory;
|
||||||
import org.apache.poi.hpsf.SummaryInformation;
|
import org.apache.poi.hpsf.SummaryInformation;
|
||||||
import org.apache.poi.poifs.common.POIFSConstants;
|
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.NPropertyTable;
|
||||||
import org.apache.poi.poifs.property.Property;
|
import org.apache.poi.poifs.property.Property;
|
||||||
import org.apache.poi.poifs.property.RootProperty;
|
import org.apache.poi.poifs.property.RootProperty;
|
||||||
@ -1483,4 +1484,58 @@ public final class TestNPOIFSFileSystem {
|
|||||||
|
|
||||||
assertThat(wbDataExp, equalTo(wbDataAct));
|
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