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:
parent
47be5cb142
commit
9874de32e3
@ -104,8 +104,9 @@ public class EntryUtils
|
|||||||
* Checks to see if the two Directories hold the same contents.
|
* Checks to see if the two Directories hold the same contents.
|
||||||
* For this to be true, they must have entries with the same names,
|
* 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
|
* no entries in one but not the other, and the size+contents
|
||||||
* of each entry must match, and they must share names
|
* of each entry must match, and they must share names.
|
||||||
* TODO Some sort of excepts support
|
* To exclude certain parts of the Directory from being checked,
|
||||||
|
* use a {@link FilteringDirectoryNode}
|
||||||
*/
|
*/
|
||||||
public static boolean areDirectoriesIdentical(DirectoryEntry dirA, DirectoryEntry dirB) {
|
public static boolean areDirectoriesIdentical(DirectoryEntry dirA, DirectoryEntry dirB) {
|
||||||
// First, check names
|
// First, check names
|
||||||
@ -162,10 +163,10 @@ public class EntryUtils
|
|||||||
boolean match;
|
boolean match;
|
||||||
if (a.isDirectoryEntry()) {
|
if (a.isDirectoryEntry()) {
|
||||||
match = areDirectoriesIdentical(
|
match = areDirectoriesIdentical(
|
||||||
(DirectoryNode)a, (DirectoryNode)b);
|
(DirectoryEntry)a, (DirectoryEntry)b);
|
||||||
} else {
|
} else {
|
||||||
match = areDocumentsIdentical(
|
match = areDocumentsIdentical(
|
||||||
(DocumentNode)a, (DocumentNode)b);
|
(DocumentEntry)a, (DocumentEntry)b);
|
||||||
}
|
}
|
||||||
if (!match) return false;
|
if (!match) return false;
|
||||||
} catch(FileNotFoundException e) {
|
} catch(FileNotFoundException e) {
|
||||||
|
@ -20,13 +20,12 @@ package org.apache.poi.poifs.filesystem;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.POIDataSamples;
|
|
||||||
|
|
||||||
public class TestEntryUtils extends TestCase {
|
public class TestEntryUtils extends TestCase {
|
||||||
private static final POIDataSamples dataSamples = POIDataSamples.getPOIFSInstance();
|
|
||||||
private byte[] dataSmallA = new byte[] { 12, 42, 11, -12, -121 };
|
private byte[] dataSmallA = new byte[] { 12, 42, 11, -12, -121 };
|
||||||
private byte[] dataSmallB = new byte[] { 11, 73, 21, -92, -103 };
|
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));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user