]> source.dussan.org Git - poi.git/commitdiff
More 0 byte stream tests
authorNick Burch <nick@apache.org>
Tue, 26 May 2015 13:41:29 +0000 (13:41 +0000)
committerNick Burch <nick@apache.org>
Tue, 26 May 2015 13:41:29 +0000 (13:41 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1681754 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/poifs/property/DirectoryProperty.java
src/java/org/apache/poi/poifs/property/RootProperty.java
src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
test-data/poifs/only-zero-byte-streams.ole2 [new file with mode: 0644]

index a73221af2493667bf563bf2ed911a162a9a7c95e..d86e73ada17d93a443e086b266caf8f970069f14 100644 (file)
@@ -28,10 +28,8 @@ import java.util.Set;
 
 /**
  * Directory property
- *
- * @author Marc Johnson (mjohnson at apache dot org)
  */
-public class DirectoryProperty extends Property implements Parent { // TODO - fix instantiable superclass
+public class DirectoryProperty extends Property implements Parent, Iterable<Property> { // TODO - fix instantiable superclass
 
     /** List of Property instances */
     private List<Property> _children;
@@ -241,6 +239,13 @@ public class DirectoryProperty extends Property implements Parent { // TODO - fi
     {
         return _children.iterator();
     }
+    /**
+     * Get an iterator over the children of this Parent, alias for
+     *  {@link #getChildren()} which supports foreach use
+     */
+    public Iterator<Property> iterator() {
+        return getChildren();
+    }
 
     /**
      * Add a new child to the collection of children
index b934a2601b474261490bda632b9f60b2198b7e5f..5a8f3d52efeecc0d04ed943d0a742c71ae37ea2f 100644 (file)
@@ -22,8 +22,6 @@ import org.apache.poi.poifs.storage.SmallDocumentBlock;
 
 /**
  * Root property
- *
- * @author Marc Johnson (mjohnson at apache dot org)
  */
 public final class RootProperty extends DirectoryProperty {
    private static final String NAME = "Root Entry";
index 144437483324b448869cdda8a4ec5c19a91ccd74..69c6cacf688e9a2d69ab021f987aba81d023387a 100644 (file)
@@ -21,6 +21,7 @@ import static org.hamcrest.core.IsCollectionContaining.hasItem;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
 import java.io.ByteArrayInputStream;
@@ -41,6 +42,7 @@ import org.apache.poi.poifs.property.Property;
 import org.apache.poi.poifs.property.RootProperty;
 import org.apache.poi.poifs.storage.HeaderBlock;
 import org.apache.poi.util.IOUtils;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -1306,6 +1308,36 @@ public final class TestNPOIFSFileSystem {
        assertContentsMatches(main4106, normDoc);
    }
    
+   @Test
+   public void readZeroLengthEntries() throws Exception {
+       NPOIFSFileSystem fs = new NPOIFSFileSystem(_inst.getFile("only-zero-byte-streams.ole2"));
+       DirectoryNode testDir = fs.getRoot();
+       assertEquals(3, testDir.getEntryCount());
+       DocumentEntry entry;
+       
+       entry = (DocumentEntry)testDir.getEntry("test-zero-1");
+       assertNotNull(entry);
+       assertEquals(0, entry.getSize());
+       
+       entry = (DocumentEntry)testDir.getEntry("test-zero-2");
+       assertNotNull(entry);
+       assertEquals(0, entry.getSize());
+       
+       entry = (DocumentEntry)testDir.getEntry("test-zero-3");
+       assertNotNull(entry);
+       assertEquals(0, entry.getSize());
+       
+       // Check properties, all have zero length, no blocks
+       NPropertyTable props = fs._get_property_table();
+       assertEquals(POIFSConstants.END_OF_CHAIN, props.getRoot().getStartBlock());
+       for (Property prop : props.getRoot()) {
+           assertEquals("test-zero-", prop.getName().substring(0, 10));
+           assertEquals(POIFSConstants.END_OF_CHAIN, prop.getStartBlock());
+       }
+   }
+   
+   // TODO Should these have a mini-sbat entry or not?
+   // TODO Is the reading of zero-length properties exactly correct?
    @Test
    public void writeZeroLengthEntries() throws Exception {
        NPOIFSFileSystem fs = new NPOIFSFileSystem();
diff --git a/test-data/poifs/only-zero-byte-streams.ole2 b/test-data/poifs/only-zero-byte-streams.ole2
new file mode 100644 (file)
index 0000000..c1b8429
Binary files /dev/null and b/test-data/poifs/only-zero-byte-streams.ole2 differ