You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2017/01/23 00:31:28 UTC

svn commit: r1779869 [2/2] - in /poi/trunk/src: ooxml/testcases/org/apache/poi/xdgf/extractor/ scratchpad/testcases/org/apache/poi/hslf/record/ scratchpad/testcases/org/apache/poi/hwpf/extractor/ scratchpad/testcases/org/apache/poi/hwpf/usermodel/ test...

Modified: poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java?rev=1779869&r1=1779868&r2=1779869&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java Mon Jan 23 00:31:27 2017
@@ -24,7 +24,12 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import java.util.Iterator;
 
@@ -53,7 +58,7 @@ public final class TestNPOIFSFileSystem
     * Returns test files with 512 byte and 4k block sizes, loaded
     *  both from InputStreams and Files
     */
-   protected NPOIFSFileSystem[] get512and4kFileAndInput() throws Exception {
+   protected NPOIFSFileSystem[] get512and4kFileAndInput() throws IOException {
        NPOIFSFileSystem fsA = new NPOIFSFileSystem(_inst.getFile("BlockSize512.zvi"));
        NPOIFSFileSystem fsB = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
        NPOIFSFileSystem fsC = new NPOIFSFileSystem(_inst.getFile("BlockSize4096.zvi"));
@@ -82,8 +87,9 @@ public final class TestNPOIFSFileSystem
        assertEquals(doc.getSize(), inp.read(contents));
        inp.close();
        
-       if (expected != null)
-           assertThat(expected, equalTo(contents));
+       if (expected != null) {
+        assertThat(expected, equalTo(contents));
+    }
    }
    
    protected static HeaderBlock writeOutAndReadHeader(NPOIFSFileSystem fs) throws IOException {
@@ -97,7 +103,6 @@ public final class TestNPOIFSFileSystem
     protected static NPOIFSFileSystem writeOutAndReadBack(NPOIFSFileSystem original) throws IOException {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         original.writeFilesystem(baos);
-        original.close();
         return new NPOIFSFileSystem(new ByteArrayInputStream(baos.toByteArray()));
     }
 
@@ -109,12 +114,11 @@ public final class TestNPOIFSFileSystem
         } finally {
             fout.close();
         }
-        original.close();
         return new NPOIFSFileSystem(file, false);
     }
    
    @Test
-   public void basicOpen() throws Exception {
+   public void basicOpen() throws IOException {
       NPOIFSFileSystem fsA, fsB;
       
       // With a simple 512 block file
@@ -137,7 +141,7 @@ public final class TestNPOIFSFileSystem
    }
 
    @Test
-   public void propertiesAndFatOnRead() throws Exception {
+   public void propertiesAndFatOnRead() throws IOException {
       NPOIFSFileSystem fsA, fsB;
       
       // With a simple 512 block file
@@ -280,7 +284,7 @@ public final class TestNPOIFSFileSystem
     *  out what the next one is
     */
    @Test
-   public void nextBlock() throws Exception {
+   public void nextBlock() throws IOException {
       NPOIFSFileSystem fsA = new NPOIFSFileSystem(_inst.getFile("BlockSize512.zvi"));
       NPOIFSFileSystem fsB = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
       for(NPOIFSFileSystem fs : new NPOIFSFileSystem[] {fsA,fsB}) {
@@ -342,7 +346,7 @@ public final class TestNPOIFSFileSystem
     * Check we get the right data back for each block
     */
    @Test
-   public void getBlock() throws Exception {
+   public void getBlock() throws IOException {
       NPOIFSFileSystem fsA = new NPOIFSFileSystem(_inst.getFile("BlockSize512.zvi"));
       NPOIFSFileSystem fsB = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
       for(NPOIFSFileSystem fs : new NPOIFSFileSystem[] {fsA,fsB}) {
@@ -416,7 +420,7 @@ public final class TestNPOIFSFileSystem
     *  to be had from the FAT
     */
    @Test
-   public void getFreeBlockWithSpare() throws Exception {
+   public void getFreeBlockWithSpare() throws IOException {
       NPOIFSFileSystem fs = new NPOIFSFileSystem(_inst.getFile("BlockSize512.zvi"));
       
       // Our first BAT block has spares
@@ -447,142 +451,143 @@ public final class TestNPOIFSFileSystem
     *  file needs to be extended and another BAT/XBAT added
     */
    @Test
-   public void getFreeBlockWithNoneSpare() throws Exception {
-      NPOIFSFileSystem fs = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
+   public void getFreeBlockWithNoneSpare() throws IOException {
+      NPOIFSFileSystem fs1 = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
       int free;
 
       // We have one BAT at block 99
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(99));
-      assertBATCount(fs, 1, 0);
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs1.getNextBlock(99));
+      assertBATCount(fs1, 1, 0);
       
       // We've spare ones from 100 to 128
       for(int i=100; i<128; i++) {
-         assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(i));
+         assertEquals(POIFSConstants.UNUSED_BLOCK, fs1.getNextBlock(i));
       }
       
       // Check our BAT knows it's free
-      assertEquals(true, fs.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
+      assertEquals(true, fs1.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
       
       // Allocate all the spare ones
       for(int i=100; i<128; i++) {
-         fs.setNextBlock(i, POIFSConstants.END_OF_CHAIN);
+         fs1.setNextBlock(i, POIFSConstants.END_OF_CHAIN);
       }
       
       // BAT is now full, but there's only the one
-      assertEquals(false, fs.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
+      assertEquals(false, fs1.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(128).getBlock().hasFreeSectors());
+         assertEquals(false, fs1.getBATBlockAndIndex(128).getBlock().hasFreeSectors());
          fail("Should only be one BAT");
       } catch(IndexOutOfBoundsException e) {}
-      assertBATCount(fs, 1, 0);
+      assertBATCount(fs1, 1, 0);
 
       
       // Now ask for a free one, will need to extend the file
-      assertEquals(129, fs.getFreeBlock());
+      assertEquals(129, fs1.getFreeBlock());
       
-      assertEquals(false, fs.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
-      assertEquals(true, fs.getBATBlockAndIndex(128).getBlock().hasFreeSectors());
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(128));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(129));
+      assertEquals(false, fs1.getBATBlockAndIndex(0).getBlock().hasFreeSectors());
+      assertEquals(true, fs1.getBATBlockAndIndex(128).getBlock().hasFreeSectors());
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs1.getNextBlock(128));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs1.getNextBlock(129));
       
       // We now have 2 BATs, but no XBATs
-      assertBATCount(fs, 2, 0);
+      assertBATCount(fs1, 2, 0);
       
       
       // Fill up to hold 109 BAT blocks
       for(int i=0; i<109; i++) {
-         fs.getFreeBlock();
+         fs1.getFreeBlock();
          int startOffset = i*128;
-         while( fs.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
-            free = fs.getFreeBlock();
-            fs.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
+         while( fs1.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
+            free = fs1.getFreeBlock();
+            fs1.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
          }
       }
       
-      assertEquals(false, fs.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
+      assertEquals(false, fs1.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(109*128).getBlock().hasFreeSectors());
+         assertEquals(false, fs1.getBATBlockAndIndex(109*128).getBlock().hasFreeSectors());
          fail("Should only be 109 BATs");
       } catch(IndexOutOfBoundsException e) {}
       
       // We now have 109 BATs, but no XBATs
-      assertBATCount(fs, 109, 0);
+      assertBATCount(fs1, 109, 0);
       
       
       // Ask for it to be written out, and check the header
-      HeaderBlock header = writeOutAndReadHeader(fs);
+      HeaderBlock header = writeOutAndReadHeader(fs1);
       assertEquals(109, header.getBATCount());
       assertEquals(0, header.getXBATCount());
       
       
       // Ask for another, will get our first XBAT
-      free = fs.getFreeBlock();
-      assertEquals(false, fs.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
-      assertEquals(true, fs.getBATBlockAndIndex(110*128-1).getBlock().hasFreeSectors());
+      free = fs1.getFreeBlock();
+      assertEquals(false, fs1.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
+      assertEquals(true, fs1.getBATBlockAndIndex(110*128-1).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(110*128).getBlock().hasFreeSectors());
+         assertEquals(false, fs1.getBATBlockAndIndex(110*128).getBlock().hasFreeSectors());
          fail("Should only be 110 BATs");
       } catch(IndexOutOfBoundsException e) {}
-      assertBATCount(fs, 110, 1);
+      assertBATCount(fs1, 110, 1);
       
-      header = writeOutAndReadHeader(fs);
+      header = writeOutAndReadHeader(fs1);
       assertEquals(110, header.getBATCount());
       assertEquals(1, header.getXBATCount());
 
       
       // Fill the XBAT, which means filling 127 BATs
       for(int i=109; i<109+127; i++) {
-         fs.getFreeBlock();
+         fs1.getFreeBlock();
          int startOffset = i*128;
-         while( fs.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
-            free = fs.getFreeBlock();
-            fs.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
+         while( fs1.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
+            free = fs1.getFreeBlock();
+            fs1.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
          }
-         assertBATCount(fs, i+1, 1);
+         assertBATCount(fs1, i+1, 1);
       }
       
       // Should now have 109+127 = 236 BATs
-      assertEquals(false, fs.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
+      assertEquals(false, fs1.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(236*128).getBlock().hasFreeSectors());
+         assertEquals(false, fs1.getBATBlockAndIndex(236*128).getBlock().hasFreeSectors());
          fail("Should only be 236 BATs");
       } catch(IndexOutOfBoundsException e) {}
-      assertBATCount(fs, 236, 1);
+      assertBATCount(fs1, 236, 1);
 
       
       // Ask for another, will get our 2nd XBAT
-      free = fs.getFreeBlock();
-      assertEquals(false, fs.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
-      assertEquals(true, fs.getBATBlockAndIndex(237*128-1).getBlock().hasFreeSectors());
+      free = fs1.getFreeBlock();
+      assertEquals(false, fs1.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
+      assertEquals(true, fs1.getBATBlockAndIndex(237*128-1).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(237*128).getBlock().hasFreeSectors());
+         assertEquals(false, fs1.getBATBlockAndIndex(237*128).getBlock().hasFreeSectors());
          fail("Should only be 237 BATs");
       } catch(IndexOutOfBoundsException e) {}
       
       
       // Check the counts now
-      assertBATCount(fs, 237, 2);
+      assertBATCount(fs1, 237, 2);
 
       // Check the header
-      header = writeOutAndReadHeader(fs);
+      header = writeOutAndReadHeader(fs1);
       
       
       // Now, write it out, and read it back in again fully
-      fs = writeOutAndReadBack(fs);
+      NPOIFSFileSystem fs2 = writeOutAndReadBack(fs1);
+      fs1.close();
 
       // Check that it is seen correctly
-      assertBATCount(fs, 237, 2);
+      assertBATCount(fs2, 237, 2);
 
-      assertEquals(false, fs.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
-      assertEquals(true, fs.getBATBlockAndIndex(237*128-1).getBlock().hasFreeSectors());
+      assertEquals(false, fs2.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
+      assertEquals(true, fs2.getBATBlockAndIndex(237*128-1).getBlock().hasFreeSectors());
       try {
-         assertEquals(false, fs.getBATBlockAndIndex(237*128).getBlock().hasFreeSectors());
+         assertEquals(false, fs2.getBATBlockAndIndex(237*128).getBlock().hasFreeSectors());
          fail("Should only be 237 BATs");
       } catch(IndexOutOfBoundsException e) {}
 
       
       // All done
-      fs.close();
+      fs2.close();
    }
    
    /**
@@ -590,7 +595,7 @@ public final class TestNPOIFSFileSystem
     *  entries, and the details on the files in them
     */
    @Test
-   public void listEntries() throws Exception {
+   public void listEntries() throws IOException {
       for(NPOIFSFileSystem fs : get512and4kFileAndInput()) {
          DirectoryEntry root = fs.getRoot();
          assertEquals(5, root.getEntryCount());
@@ -680,9 +685,9 @@ public final class TestNPOIFSFileSystem
        DocumentSummaryInformation dinf = null;
        DirectoryEntry root = null, testDir = null;
        
-       for(NPOIFSFileSystem fs : get512and4kFileAndInput()) {
+       for(NPOIFSFileSystem fs1 : get512and4kFileAndInput()) {
            // Check we can find the entries we expect
-           root = fs.getRoot();
+           root = fs1.getRoot();
            assertEquals(5, root.getEntryCount());
            assertThat(root.getEntryNames(), hasItem("Thumbnail"));
            assertThat(root.getEntryNames(), hasItem("Image"));
@@ -692,10 +697,11 @@ public final class TestNPOIFSFileSystem
 
            
            // Write out, re-load
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs2 = writeOutAndReadBack(fs1);
+           fs1.close();
            
            // Check they're still there
-           root = fs.getRoot();
+           root = fs2.getRoot();
            assertEquals(5, root.getEntryCount());
            assertThat(root.getEntryNames(), hasItem("Thumbnail"));
            assertThat(root.getEntryNames(), hasItem("Image"));
@@ -723,9 +729,10 @@ public final class TestNPOIFSFileSystem
            
            
            // Write out, re-load
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs3 = writeOutAndReadBack(fs2);
+           fs2.close();
            
-           root = fs.getRoot();
+           root = fs3.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            assertEquals(6, root.getEntryCount());
            assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -749,9 +756,10 @@ public final class TestNPOIFSFileSystem
            
            
            // Write out and read once more, just to be sure
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs4 = writeOutAndReadBack(fs3);
+           fs3.close();
            
-           root = fs.getRoot();
+           root = fs4.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            assertEquals(6, root.getEntryCount());
            assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -782,10 +790,11 @@ public final class TestNPOIFSFileSystem
            
            
            // Write out, re-load
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs5 = writeOutAndReadBack(fs4);
+           fs4.close();
 
            // Check it's all there
-           root = fs.getRoot();
+           root = fs5.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            assertEquals(5, root.getEntryCount());
            assertThat(root.getEntryNames(), hasItem("Thumbnail"));
@@ -814,10 +823,11 @@ public final class TestNPOIFSFileSystem
            
            
            // Save
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs6 = writeOutAndReadBack(fs5);
+           fs5.close();
 
            // Check
-           root = fs.getRoot();
+           root = fs6.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            
            assertEquals(5, root.getEntryCount());
@@ -839,9 +849,10 @@ public final class TestNPOIFSFileSystem
            testDir.createDocument("Mini2", new ByteArrayInputStream(mini2));
            
            // Save, load, check
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs7 = writeOutAndReadBack(fs6);
+           fs6.close();
            
-           root = fs.getRoot();
+           root = fs7.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            
            assertEquals(5, root.getEntryCount());
@@ -871,9 +882,10 @@ public final class TestNPOIFSFileSystem
 
            
            // Save, load, check
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs8 = writeOutAndReadBack(fs7);
+           fs7.close();
            
-           root = fs.getRoot();
+           root = fs8.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            
            assertEquals(5, root.getEntryCount());
@@ -907,9 +919,10 @@ public final class TestNPOIFSFileSystem
            
            
            // Re-check
-           fs = writeOutAndReadBack(fs);
+           NPOIFSFileSystem fs9 = writeOutAndReadBack(fs8);
+           fs8.close();
            
-           root = fs.getRoot();
+           root = fs9.getRoot();
            testDir = (DirectoryEntry)root.getEntry("Testing 123");
            
            assertEquals(5, root.getEntryCount());
@@ -932,7 +945,7 @@ public final class TestNPOIFSFileSystem
            
            
            // All done
-           fs.close();
+           fs9.close();
        }
    }
    
@@ -941,51 +954,52 @@ public final class TestNPOIFSFileSystem
     * Then, add some streams, write and read
     */
    @Test
-   @SuppressWarnings("resource")
-   public void createWriteRead() throws Exception {
-      NPOIFSFileSystem fs = new NPOIFSFileSystem();
+   public void createWriteRead() throws IOException {
+      NPOIFSFileSystem fs1 = new NPOIFSFileSystem();
       DocumentEntry miniDoc;
       DocumentEntry normDoc;
       
       // Initially has Properties + BAT but not SBAT
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(2));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs1.getNextBlock(1));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs1.getNextBlock(2));
       
       // Check that the SBAT is empty
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getRoot().getProperty().getStartBlock());
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getRoot().getProperty().getStartBlock());
       
       // Check that properties table was given block 0
-      assertEquals(0, fs._get_property_table().getStartBlock());
+      assertEquals(0, fs1._get_property_table().getStartBlock());
 
       // Write and read it
-      fs = writeOutAndReadBack(fs);
+      NPOIFSFileSystem fs2 = writeOutAndReadBack(fs1);
+      fs1.close();
       
       // No change, SBAT remains empty 
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs.getNextBlock(2));
-      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs.getNextBlock(3));
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getRoot().getProperty().getStartBlock());
-      assertEquals(0, fs._get_property_table().getStartBlock());
-
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs2.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs2.getNextBlock(1));
+      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs2.getNextBlock(2));
+      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs2.getNextBlock(3));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs2.getRoot().getProperty().getStartBlock());
+      assertEquals(0, fs2._get_property_table().getStartBlock());
+      fs2.close();
       
       // Check the same but with saving to a file
-      fs = new NPOIFSFileSystem();
-      fs = writeOutFileAndReadBack(fs);
+      NPOIFSFileSystem fs3 = new NPOIFSFileSystem();
+      NPOIFSFileSystem fs4 = writeOutFileAndReadBack(fs3);
+      fs3.close();
       
       // Same, no change, SBAT remains empty 
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs.getNextBlock(2));
-      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs.getNextBlock(3));
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getRoot().getProperty().getStartBlock());
-      assertEquals(0, fs._get_property_table().getStartBlock());
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs4.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs4.getNextBlock(1));
+      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs4.getNextBlock(2));
+      assertEquals(POIFSConstants.UNUSED_BLOCK,     fs4.getNextBlock(3));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs4.getRoot().getProperty().getStartBlock());
+      assertEquals(0, fs4._get_property_table().getStartBlock());
 
       
       
       // Put everything within a new directory
-      DirectoryEntry testDir = fs.createDirectory("Test Directory");
+      DirectoryEntry testDir = fs4.createDirectory("Test Directory");
       
       // Add a new Normal Stream (Normal Streams minimum 4096 bytes)
       byte[] main4096 = new byte[4096];
@@ -993,20 +1007,20 @@ public final class TestNPOIFSFileSystem
       main4096[4095] = -11;
       testDir.createDocument("Normal4096", new ByteArrayInputStream(main4096));
 
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(3, fs.getNextBlock(2));
-      assertEquals(4, fs.getNextBlock(3));
-      assertEquals(5, fs.getNextBlock(4));
-      assertEquals(6, fs.getNextBlock(5));
-      assertEquals(7, fs.getNextBlock(6));
-      assertEquals(8, fs.getNextBlock(7));
-      assertEquals(9, fs.getNextBlock(8));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(9));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(10));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(11));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs4.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs4.getNextBlock(1));
+      assertEquals(3, fs4.getNextBlock(2));
+      assertEquals(4, fs4.getNextBlock(3));
+      assertEquals(5, fs4.getNextBlock(4));
+      assertEquals(6, fs4.getNextBlock(5));
+      assertEquals(7, fs4.getNextBlock(6));
+      assertEquals(8, fs4.getNextBlock(7));
+      assertEquals(9, fs4.getNextBlock(8));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(9));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs4.getNextBlock(10));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs4.getNextBlock(11));
       // SBAT still unused
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getRoot().getProperty().getStartBlock());
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getRoot().getProperty().getStartBlock());
 
       
       // Add a bigger Normal Stream
@@ -1015,32 +1029,32 @@ public final class TestNPOIFSFileSystem
       main5124[5123] = -33;
       testDir.createDocument("Normal5124", new ByteArrayInputStream(main5124));
 
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(3, fs.getNextBlock(2));
-      assertEquals(4, fs.getNextBlock(3));
-      assertEquals(5, fs.getNextBlock(4));
-      assertEquals(6, fs.getNextBlock(5));
-      assertEquals(7, fs.getNextBlock(6));
-      assertEquals(8, fs.getNextBlock(7));
-      assertEquals(9, fs.getNextBlock(8));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(9));
-
-      assertEquals(11, fs.getNextBlock(10));
-      assertEquals(12, fs.getNextBlock(11));
-      assertEquals(13, fs.getNextBlock(12));
-      assertEquals(14, fs.getNextBlock(13));
-      assertEquals(15, fs.getNextBlock(14));
-      assertEquals(16, fs.getNextBlock(15));
-      assertEquals(17, fs.getNextBlock(16));
-      assertEquals(18, fs.getNextBlock(17));
-      assertEquals(19, fs.getNextBlock(18));
-      assertEquals(20, fs.getNextBlock(19));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(20));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(21));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(22));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs4.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs4.getNextBlock(1));
+      assertEquals(3, fs4.getNextBlock(2));
+      assertEquals(4, fs4.getNextBlock(3));
+      assertEquals(5, fs4.getNextBlock(4));
+      assertEquals(6, fs4.getNextBlock(5));
+      assertEquals(7, fs4.getNextBlock(6));
+      assertEquals(8, fs4.getNextBlock(7));
+      assertEquals(9, fs4.getNextBlock(8));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(9));
+
+      assertEquals(11, fs4.getNextBlock(10));
+      assertEquals(12, fs4.getNextBlock(11));
+      assertEquals(13, fs4.getNextBlock(12));
+      assertEquals(14, fs4.getNextBlock(13));
+      assertEquals(15, fs4.getNextBlock(14));
+      assertEquals(16, fs4.getNextBlock(15));
+      assertEquals(17, fs4.getNextBlock(16));
+      assertEquals(18, fs4.getNextBlock(17));
+      assertEquals(19, fs4.getNextBlock(18));
+      assertEquals(20, fs4.getNextBlock(19));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(20));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs4.getNextBlock(21));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs4.getNextBlock(22));
 
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getRoot().getProperty().getStartBlock());
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getRoot().getProperty().getStartBlock());
       
       
       // Now Add a mini stream
@@ -1048,40 +1062,41 @@ public final class TestNPOIFSFileSystem
       testDir.createDocument("Mini", new ByteArrayInputStream(mini));
       
       // Mini stream will get one block for fat + one block for data
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0));
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-      assertEquals(3, fs.getNextBlock(2));
-      assertEquals(4, fs.getNextBlock(3));
-      assertEquals(5, fs.getNextBlock(4));
-      assertEquals(6, fs.getNextBlock(5));
-      assertEquals(7, fs.getNextBlock(6));
-      assertEquals(8, fs.getNextBlock(7));
-      assertEquals(9, fs.getNextBlock(8));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(9));
-
-      assertEquals(11, fs.getNextBlock(10));
-      assertEquals(12, fs.getNextBlock(11));
-      assertEquals(13, fs.getNextBlock(12));
-      assertEquals(14, fs.getNextBlock(13));
-      assertEquals(15, fs.getNextBlock(14));
-      assertEquals(16, fs.getNextBlock(15));
-      assertEquals(17, fs.getNextBlock(16));
-      assertEquals(18, fs.getNextBlock(17));
-      assertEquals(19, fs.getNextBlock(18));
-      assertEquals(20, fs.getNextBlock(19));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(20));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(21));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(22));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(23));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs4.getNextBlock(0));
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs4.getNextBlock(1));
+      assertEquals(3, fs4.getNextBlock(2));
+      assertEquals(4, fs4.getNextBlock(3));
+      assertEquals(5, fs4.getNextBlock(4));
+      assertEquals(6, fs4.getNextBlock(5));
+      assertEquals(7, fs4.getNextBlock(6));
+      assertEquals(8, fs4.getNextBlock(7));
+      assertEquals(9, fs4.getNextBlock(8));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(9));
+
+      assertEquals(11, fs4.getNextBlock(10));
+      assertEquals(12, fs4.getNextBlock(11));
+      assertEquals(13, fs4.getNextBlock(12));
+      assertEquals(14, fs4.getNextBlock(13));
+      assertEquals(15, fs4.getNextBlock(14));
+      assertEquals(16, fs4.getNextBlock(15));
+      assertEquals(17, fs4.getNextBlock(16));
+      assertEquals(18, fs4.getNextBlock(17));
+      assertEquals(19, fs4.getNextBlock(18));
+      assertEquals(20, fs4.getNextBlock(19));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(20));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(21));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs4.getNextBlock(22));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs4.getNextBlock(23));
 
       // Check the mini stream location was set
       // (21 is mini fat, 22 is first mini stream block)
-      assertEquals(22, fs.getRoot().getProperty().getStartBlock());
+      assertEquals(22, fs4.getRoot().getProperty().getStartBlock());
       
       
       // Write and read back
-      fs = writeOutAndReadBack(fs);
-      HeaderBlock header = writeOutAndReadHeader(fs);
+      NPOIFSFileSystem fs5 = writeOutAndReadBack(fs4);
+      fs4.close();
+      HeaderBlock header = writeOutAndReadHeader(fs5);
       
       // Check the header has the right points in it
       assertEquals(1, header.getBATCount());
@@ -1089,44 +1104,44 @@ public final class TestNPOIFSFileSystem
       assertEquals(0, header.getPropertyStart());
       assertEquals(1, header.getSBATCount());
       assertEquals(21, header.getSBATStart());
-      assertEquals(22, fs._get_property_table().getRoot().getStartBlock());
+      assertEquals(22, fs5._get_property_table().getRoot().getStartBlock());
       
       // Block use should be almost the same, except the properties
       //  stream will have grown out to cover 2 blocks
       // Check the block use is all unchanged
-      assertEquals(23, fs.getNextBlock(0)); // Properties now extends over 2 blocks
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
+      assertEquals(23, fs5.getNextBlock(0)); // Properties now extends over 2 blocks
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs5.getNextBlock(1));
       
-      assertEquals(3, fs.getNextBlock(2));
-      assertEquals(4, fs.getNextBlock(3));
-      assertEquals(5, fs.getNextBlock(4));
-      assertEquals(6, fs.getNextBlock(5));
-      assertEquals(7, fs.getNextBlock(6));
-      assertEquals(8, fs.getNextBlock(7));
-      assertEquals(9, fs.getNextBlock(8));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(9)); // End of normal4096
-
-      assertEquals(11, fs.getNextBlock(10));
-      assertEquals(12, fs.getNextBlock(11));
-      assertEquals(13, fs.getNextBlock(12));
-      assertEquals(14, fs.getNextBlock(13));
-      assertEquals(15, fs.getNextBlock(14));
-      assertEquals(16, fs.getNextBlock(15));
-      assertEquals(17, fs.getNextBlock(16));
-      assertEquals(18, fs.getNextBlock(17));
-      assertEquals(19, fs.getNextBlock(18));
-      assertEquals(20, fs.getNextBlock(19));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(20)); // End of normal5124 
-      
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(21)); // Mini Stream FAT
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(22)); // Mini Stream data
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(23)); // Properties #2
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(24));
+      assertEquals(3, fs5.getNextBlock(2));
+      assertEquals(4, fs5.getNextBlock(3));
+      assertEquals(5, fs5.getNextBlock(4));
+      assertEquals(6, fs5.getNextBlock(5));
+      assertEquals(7, fs5.getNextBlock(6));
+      assertEquals(8, fs5.getNextBlock(7));
+      assertEquals(9, fs5.getNextBlock(8));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs5.getNextBlock(9)); // End of normal4096
+
+      assertEquals(11, fs5.getNextBlock(10));
+      assertEquals(12, fs5.getNextBlock(11));
+      assertEquals(13, fs5.getNextBlock(12));
+      assertEquals(14, fs5.getNextBlock(13));
+      assertEquals(15, fs5.getNextBlock(14));
+      assertEquals(16, fs5.getNextBlock(15));
+      assertEquals(17, fs5.getNextBlock(16));
+      assertEquals(18, fs5.getNextBlock(17));
+      assertEquals(19, fs5.getNextBlock(18));
+      assertEquals(20, fs5.getNextBlock(19));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs5.getNextBlock(20)); // End of normal5124 
+      
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs5.getNextBlock(21)); // Mini Stream FAT
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs5.getNextBlock(22)); // Mini Stream data
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs5.getNextBlock(23)); // Properties #2
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs5.getNextBlock(24));
 
       
       // Check some data
-      assertEquals(1, fs.getRoot().getEntryCount());
-      testDir = (DirectoryEntry)fs.getRoot().getEntry("Test Directory");
+      assertEquals(1, fs5.getRoot().getEntryCount());
+      testDir = (DirectoryEntry)fs5.getRoot().getEntry("Test Directory");
       assertEquals(3, testDir.getEntryCount());
 
       miniDoc = (DocumentEntry)testDir.getEntry("Mini");
@@ -1145,55 +1160,56 @@ public final class TestNPOIFSFileSystem
 
       
       // Check - will have un-used sectors now
-      fs = writeOutAndReadBack(fs);
+      NPOIFSFileSystem fs6 = writeOutAndReadBack(fs5);
+      fs5.close();
       
-      assertEquals(POIFSConstants.END_OF_CHAIN,     fs.getNextBlock(0)); // Props back in 1 block
-      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
+      assertEquals(POIFSConstants.END_OF_CHAIN,     fs6.getNextBlock(0)); // Props back in 1 block
+      assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs6.getNextBlock(1));
       
-      assertEquals(3, fs.getNextBlock(2));
-      assertEquals(4, fs.getNextBlock(3));
-      assertEquals(5, fs.getNextBlock(4));
-      assertEquals(6, fs.getNextBlock(5));
-      assertEquals(7, fs.getNextBlock(6));
-      assertEquals(8, fs.getNextBlock(7));
-      assertEquals(9, fs.getNextBlock(8));
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(9)); // End of normal4096
-
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(10));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(11));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(12));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(13));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(14));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(15));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(16));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(17));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(18));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(19));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(20));
-      
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(21)); // Mini Stream FAT
-      assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(22)); // Mini Stream data
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(23)); // Properties gone
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(24));
-      assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(25));
+      assertEquals(3, fs6.getNextBlock(2));
+      assertEquals(4, fs6.getNextBlock(3));
+      assertEquals(5, fs6.getNextBlock(4));
+      assertEquals(6, fs6.getNextBlock(5));
+      assertEquals(7, fs6.getNextBlock(6));
+      assertEquals(8, fs6.getNextBlock(7));
+      assertEquals(9, fs6.getNextBlock(8));
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs6.getNextBlock(9)); // End of normal4096
+
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(10));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(11));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(12));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(13));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(14));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(15));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(16));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(17));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(18));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(19));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(20));
+      
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs6.getNextBlock(21)); // Mini Stream FAT
+      assertEquals(POIFSConstants.END_OF_CHAIN, fs6.getNextBlock(22)); // Mini Stream data
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(23)); // Properties gone
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(24));
+      assertEquals(POIFSConstants.UNUSED_BLOCK, fs6.getNextBlock(25));
       
       // All done
-      fs.close();
+      fs6.close();
    }
    
    @Test
-   public void addBeforeWrite() throws Exception {
-       NPOIFSFileSystem fs = new NPOIFSFileSystem();
+   public void addBeforeWrite() throws IOException {
+       NPOIFSFileSystem fs1 = new NPOIFSFileSystem();
        DocumentEntry miniDoc;
        DocumentEntry normDoc;
        HeaderBlock hdr;
        
        // Initially has Properties + BAT but nothing else
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(0));
-       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-       assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(2));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(0));
+       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs1.getNextBlock(1));
+       assertEquals(POIFSConstants.UNUSED_BLOCK, fs1.getNextBlock(2));
        
-       hdr = writeOutAndReadHeader(fs);
+       hdr = writeOutAndReadHeader(fs1);
        // No mini stream, and no xbats
        // Will have fat then properties stream
        assertEquals(1, hdr.getBATCount());
@@ -1201,14 +1217,14 @@ public final class TestNPOIFSFileSystem
        assertEquals(0, hdr.getPropertyStart());
        assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getSBATStart());
        assertEquals(POIFSConstants.END_OF_CHAIN, hdr.getXBATIndex());
-       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*3, fs.size());
-       
+       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*3, fs1.size());
+       fs1.close();
        
        // Get a clean filesystem to start with
-       fs = new NPOIFSFileSystem();
+       fs1 = new NPOIFSFileSystem();
        
        // Put our test files in a non-standard place
-       DirectoryEntry parentDir = fs.createDirectory("Parent Directory");
+       DirectoryEntry parentDir = fs1.createDirectory("Parent Directory");
        DirectoryEntry testDir = parentDir.createDirectory("Test Directory");
        
        
@@ -1224,20 +1240,20 @@ public final class TestNPOIFSFileSystem
 
        
        // Check the mini stream was added, then the main stream
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(0));
-       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1)); 
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(2)); // Mini Fat
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3)); // Mini Stream
-       assertEquals(5,                           fs.getNextBlock(4)); // Main Stream
-       assertEquals(6,                           fs.getNextBlock(5));
-       assertEquals(7,                           fs.getNextBlock(6));
-       assertEquals(8,                           fs.getNextBlock(7));
-       assertEquals(9,                           fs.getNextBlock(8));
-       assertEquals(10,                          fs.getNextBlock(9));
-       assertEquals(11,                          fs.getNextBlock(10));
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(11));
-       assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(12));
-       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*13, fs.size());
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(0));
+       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs1.getNextBlock(1)); 
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(2)); // Mini Fat
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(3)); // Mini Stream
+       assertEquals(5,                           fs1.getNextBlock(4)); // Main Stream
+       assertEquals(6,                           fs1.getNextBlock(5));
+       assertEquals(7,                           fs1.getNextBlock(6));
+       assertEquals(8,                           fs1.getNextBlock(7));
+       assertEquals(9,                           fs1.getNextBlock(8));
+       assertEquals(10,                          fs1.getNextBlock(9));
+       assertEquals(11,                          fs1.getNextBlock(10));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs1.getNextBlock(11));
+       assertEquals(POIFSConstants.UNUSED_BLOCK, fs1.getNextBlock(12));
+       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*13, fs1.size());
        
        
        // Check that we can read the right data pre-write
@@ -1249,8 +1265,9 @@ public final class TestNPOIFSFileSystem
        
        
        // Write, read, check
-       hdr = writeOutAndReadHeader(fs);
-       fs = writeOutAndReadBack(fs);
+       hdr = writeOutAndReadHeader(fs1);
+       NPOIFSFileSystem fs2 = writeOutAndReadBack(fs1);
+       fs1.close();
        
        // Check the header details - will have the sbat near the start,
        //  then the properties at the end
@@ -1262,25 +1279,25 @@ public final class TestNPOIFSFileSystem
        
        // Check the block allocation is unchanged, other than
        //  the properties stream going in at the end
-       assertEquals(12,                          fs.getNextBlock(0)); // Properties
-       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(1));
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(2));
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(3));
-       assertEquals(5,                           fs.getNextBlock(4));
-       assertEquals(6,                           fs.getNextBlock(5));
-       assertEquals(7,                           fs.getNextBlock(6));
-       assertEquals(8,                           fs.getNextBlock(7));
-       assertEquals(9,                           fs.getNextBlock(8));
-       assertEquals(10,                          fs.getNextBlock(9));
-       assertEquals(11,                          fs.getNextBlock(10));
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(11));
-       assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(12));
-       assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(13));
-       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*14, fs.size());
+       assertEquals(12,                          fs2.getNextBlock(0)); // Properties
+       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs2.getNextBlock(1));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs2.getNextBlock(2));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs2.getNextBlock(3));
+       assertEquals(5,                           fs2.getNextBlock(4));
+       assertEquals(6,                           fs2.getNextBlock(5));
+       assertEquals(7,                           fs2.getNextBlock(6));
+       assertEquals(8,                           fs2.getNextBlock(7));
+       assertEquals(9,                           fs2.getNextBlock(8));
+       assertEquals(10,                          fs2.getNextBlock(9));
+       assertEquals(11,                          fs2.getNextBlock(10));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs2.getNextBlock(11));
+       assertEquals(POIFSConstants.END_OF_CHAIN, fs2.getNextBlock(12));
+       assertEquals(POIFSConstants.UNUSED_BLOCK, fs2.getNextBlock(13));
+       assertEquals(POIFSConstants.SMALLER_BIG_BLOCK_SIZE*14, fs2.size());
        
        
        // Check the data
-       DirectoryEntry fsRoot = fs.getRoot();
+       DirectoryEntry fsRoot = fs2.getRoot();
        assertEquals(1, fsRoot.getEntryCount());
        
        parentDir = (DirectoryEntry)fsRoot.getEntry("Parent Directory");
@@ -1308,9 +1325,10 @@ public final class TestNPOIFSFileSystem
        
        
        // Recheck the data in all 4 streams
-       fs = writeOutAndReadBack(fs);
+       NPOIFSFileSystem fs3 = writeOutAndReadBack(fs2);
+       fs2.close();
        
-       fsRoot = fs.getRoot();
+       fsRoot = fs3.getRoot();
        assertEquals(1, fsRoot.getEntryCount());
        
        parentDir = (DirectoryEntry)fsRoot.getEntry("Parent Directory");
@@ -1329,11 +1347,11 @@ public final class TestNPOIFSFileSystem
        assertContentsMatches(main4106, normDoc);
        
        // All done
-       fs.close();
+       fs3.close();
    }
    
    @Test
-   public void readZeroLengthEntries() throws Exception {
+   public void readZeroLengthEntries() throws IOException {
        NPOIFSFileSystem fs = new NPOIFSFileSystem(_inst.getFile("only-zero-byte-streams.ole2"));
        DirectoryNode testDir = fs.getRoot();
        assertEquals(3, testDir.getEntryCount());
@@ -1364,9 +1382,9 @@ public final class TestNPOIFSFileSystem
    }
    
    @Test
-   public void writeZeroLengthEntries() throws Exception {
-       NPOIFSFileSystem fs = new NPOIFSFileSystem();
-       DirectoryNode testDir = fs.getRoot();
+   public void writeZeroLengthEntries() throws IOException {
+       NPOIFSFileSystem fs1 = new NPOIFSFileSystem();
+       DirectoryNode testDir = fs1.getRoot();
        DocumentEntry miniDoc;
        DocumentEntry normDoc;
        DocumentEntry emptyDoc;
@@ -1405,7 +1423,7 @@ public final class TestNPOIFSFileSystem
        
        // Look at the properties entry, and check the empty ones
        //  have zero size and no start block
-       NPropertyTable props = fs._get_property_table();
+       NPropertyTable props = fs1._get_property_table();
        Iterator<Property> propsIt = props.getRoot().getChildren();
        
        Property prop = propsIt.next();
@@ -1435,8 +1453,9 @@ public final class TestNPOIFSFileSystem
        
        
        // Save and re-check
-       fs = writeOutAndReadBack(fs);
-       testDir = fs.getRoot();
+       NPOIFSFileSystem fs2 = writeOutAndReadBack(fs1);
+       fs1.close();
+       testDir = fs2.getRoot();
        
        miniDoc = (DocumentEntry)testDir.getEntry("Mini2");
        assertContentsMatches(mini2, miniDoc);
@@ -1458,7 +1477,7 @@ public final class TestNPOIFSFileSystem
        assertEquals(64, testDir.getProperty().getSize()); 
        
        // All done
-       fs.close();
+       fs2.close();
    }
 
    /**
@@ -1466,7 +1485,7 @@ public final class TestNPOIFSFileSystem
     *  write it out, read it with POIFS, and see the original data
     */
    @Test
-   public void NPOIFSReadCopyWritePOIFSRead() throws Exception {
+   public void NPOIFSReadCopyWritePOIFSRead() throws IOException {
        File testFile = POIDataSamples.getSpreadSheetInstance().getFile("Simple.xls");
        NPOIFSFileSystem src = new NPOIFSFileSystem(testFile);
        byte wbDataExp[] = IOUtils.toByteArray(src.createDocumentInputStream("Workbook"));
@@ -1483,6 +1502,7 @@ public final class TestNPOIFSFileSystem
        byte wbDataAct[] = IOUtils.toByteArray(pfs.createDocumentInputStream("Workbook"));
        
        assertThat(wbDataExp, equalTo(wbDataAct));
+       pfs.close();
    }
    
    /**
@@ -1490,7 +1510,7 @@ public final class TestNPOIFSFileSystem
     *  contents
     */
    @Test
-   public void RecursiveDelete() throws Exception {
+   public void RecursiveDelete() throws IOException {
        File testFile = POIDataSamples.getSpreadSheetInstance().getFile("SimpleMacro.xls");
        NPOIFSFileSystem src = new NPOIFSFileSystem(testFile);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org