]> source.dussan.org Git - poi.git/commitdiff
Add unit test for using FilteringDirectoryNode with EntryUtils.areDirectoriesIdentical
authorNick Burch <nick@apache.org>
Mon, 28 Nov 2011 16:51:06 +0000 (16:51 +0000)
committerNick Burch <nick@apache.org>
Mon, 28 Nov 2011 16:51:06 +0000 (16:51 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1207422 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/poifs/filesystem/EntryUtils.java
src/testcases/org/apache/poi/poifs/filesystem/TestEntryUtils.java

index f6525f954c45bc153fd404d4c2e127ff0b242038..b268fe0a3d2a6188c099d7f67c0795c50163f38a 100644 (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) {
index 8c6712c96ea45f77ef80110b8fcf14d820f686f0..3cf452acff7d85e203a4057d8ea0d3467ebc5ab5 100644 (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));
     }
 }