Add unit test for using FilteringDirectoryNode with EntryUtils.areDirectoriesIdentical

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1207422 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-11-28 16:51:06 +00:00
parent 65fb35e5a0
commit 9532e9c878
2 changed files with 35 additions and 8 deletions

View File

@ -104,8 +104,9 @@ public class EntryUtils
* Checks to see if the two Directories hold the same contents.
* For this to be true, they must have entries with the same names,
* no entries in one but not the other, and the size+contents
* of each entry must match, and they must share names
* TODO Some sort of excepts support
* of each entry must match, and they must share names.
* To exclude certain parts of the Directory from being checked,
* use a {@link FilteringDirectoryNode}
*/
public static boolean areDirectoriesIdentical(DirectoryEntry dirA, DirectoryEntry dirB) {
// First, check names
@ -162,10 +163,10 @@ public class EntryUtils
boolean match;
if (a.isDirectoryEntry()) {
match = areDirectoriesIdentical(
(DirectoryNode)a, (DirectoryNode)b);
(DirectoryEntry)a, (DirectoryEntry)b);
} else {
match = areDocumentsIdentical(
(DocumentNode)a, (DocumentNode)b);
(DocumentEntry)a, (DocumentEntry)b);
}
if (!match) return false;
} catch(FileNotFoundException e) {

View File

@ -20,13 +20,12 @@ package org.apache.poi.poifs.filesystem;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import junit.framework.TestCase;
import org.apache.poi.POIDataSamples;
public class TestEntryUtils extends TestCase {
private static final POIDataSamples dataSamples = POIDataSamples.getPOIFSInstance();
private byte[] dataSmallA = new byte[] { 12, 42, 11, -12, -121 };
private byte[] dataSmallB = new byte[] { 11, 73, 21, -92, -103 };
@ -160,6 +159,33 @@ public class TestEntryUtils extends TestCase {
assertEquals(true, EntryUtils.areDirectoriesIdentical(dirA1, dirB1));
// TODO Excludes support
// Excludes support
List<String> excl = Arrays.asList(new String[] {"Ignore1", "IgnDir/Ign2"});
FilteringDirectoryNode fdA = new FilteringDirectoryNode(dirA1, excl);
FilteringDirectoryNode fdB = new FilteringDirectoryNode(dirB1, excl);
assertEquals(true, EntryUtils.areDirectoriesIdentical(fdA, fdB));
// Add an ignored doc, no notice is taken
fdA.createDocument("Ignore1", new ByteArrayInputStream(dataSmallA));
assertEquals(true, EntryUtils.areDirectoriesIdentical(fdA, fdB));
// Add a directory with filtered contents, not the same
DirectoryEntry dirAI = dirA1.createDirectory("IgnDir");
assertEquals(false, EntryUtils.areDirectoriesIdentical(fdA, fdB));
DirectoryEntry dirBI = dirB1.createDirectory("IgnDir");
assertEquals(true, EntryUtils.areDirectoriesIdentical(fdA, fdB));
// Add something to the filtered subdir that gets ignored
dirAI.createDocument("Ign2", new ByteArrayInputStream(dataSmallA));
assertEquals(true, EntryUtils.areDirectoriesIdentical(fdA, fdB));
// And something that doesn't
dirAI.createDocument("IgnZZ", new ByteArrayInputStream(dataSmallA));
assertEquals(false, EntryUtils.areDirectoriesIdentical(fdA, fdB));
dirBI.createDocument("IgnZZ", new ByteArrayInputStream(dataSmallA));
assertEquals(true, EntryUtils.areDirectoriesIdentical(fdA, fdB));
}
}