]> source.dussan.org Git - poi.git/commitdiff
More NPOIFS tests
authorNick Burch <nick@apache.org>
Sat, 1 Jan 2011 06:49:53 +0000 (06:49 +0000)
committerNick Burch <nick@apache.org>
Sat, 1 Jan 2011 06:49:53 +0000 (06:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1054199 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/poifs/filesystem/NPOIFSFileSystem.java
src/testcases/org/apache/poi/poifs/filesystem/TestNPOIFSFileSystem.java

index ef3c5c712df8065e56fbeff06b75008b5d8308f4..8a7b6833153b54331be98f3de8cc0d3ab49e0a47 100644 (file)
@@ -484,7 +484,7 @@ public class NPOIFSFileSystem extends BlockStore
              // Oh joy, we need a new XBAT too...
              xbat = createBAT(offset+1, false);
              xbat.setValueAt(0, offset);
-             bat.setValueAt(offset+1, POIFSConstants.DIFAT_SECTOR_BLOCK);
+             bat.setValueAt(1, POIFSConstants.DIFAT_SECTOR_BLOCK);
              
              // Will go one place higher as XBAT added in
              offset++;
index a375be1665c23085cd40464b74671c537d3e89d0..87b7d57c701c2b4ec991320302abe85b1243bddc 100644 (file)
@@ -348,6 +348,7 @@ public final class TestNPOIFSFileSystem extends TestCase {
     */
    public void testGetFreeBlockWithNoneSpare() throws Exception {
       NPOIFSFileSystem fs = new NPOIFSFileSystem(_inst.openResourceAsStream("BlockSize512.zvi"));
+      int free;
 
       // We have one BAT at block 99
       assertEquals(POIFSConstants.FAT_SECTOR_BLOCK, fs.getNextBlock(99));
@@ -382,19 +383,67 @@ public final class TestNPOIFSFileSystem extends TestCase {
       
       
       // Fill up to hold 109 BAT blocks
-      // TODO
+      for(int i=0; i<109; i++) {
+         fs.getFreeBlock();
+         int startOffset = i*128;
+         while( fs.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
+            free = fs.getFreeBlock();
+            fs.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
+         }
+      }
+      
+      assertEquals(false, fs.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
+      try {
+         assertEquals(false, fs.getBATBlockAndIndex(109*128).getBlock().hasFreeSectors());
+         fail("Should only be 109 BATs");
+      } catch(IndexOutOfBoundsException e) {}
+      
       
       // Ask for another, will get our first XBAT
-      // TODO
+      free = fs.getFreeBlock();
+      assertEquals(false, fs.getBATBlockAndIndex(109*128-1).getBlock().hasFreeSectors());
+      assertEquals(true, fs.getBATBlockAndIndex(110*128-1).getBlock().hasFreeSectors());
+      try {
+         assertEquals(false, fs.getBATBlockAndIndex(110*128).getBlock().hasFreeSectors());
+         fail("Should only be 110 BATs");
+      } catch(IndexOutOfBoundsException e) {}
+
       
-      // Fill the XBAT
-      // TODO
+      // Fill the XBAT, which means filling 127 BATs
+      for(int i=109; i<109+127; i++) {
+         fs.getFreeBlock();
+         int startOffset = i*128;
+         while( fs.getBATBlockAndIndex(startOffset).getBlock().hasFreeSectors() ) {
+            free = fs.getFreeBlock();
+            fs.setNextBlock(free, POIFSConstants.END_OF_CHAIN);
+         }
+      }
+      
+      // Should now have 109+127 = 236 BATs
+      assertEquals(false, fs.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
+      try {
+         assertEquals(false, fs.getBATBlockAndIndex(236*128).getBlock().hasFreeSectors());
+         fail("Should only be 236 BATs");
+      } catch(IndexOutOfBoundsException e) {}
+
       
       // Ask for another, will get our 2nd XBAT
-      // TODO
+      free = fs.getFreeBlock();
+      assertEquals(false, fs.getBATBlockAndIndex(236*128-1).getBlock().hasFreeSectors());
+      assertEquals(true, fs.getBATBlockAndIndex(237*128-1).getBlock().hasFreeSectors());
+      try {
+         assertEquals(false, fs.getBATBlockAndIndex(237*128).getBlock().hasFreeSectors());
+         fail("Should only be 237 BATs");
+      } catch(IndexOutOfBoundsException e) {}
+
       
       // Write it out and read it back in again
-      // Ensure it's correct
+      // TODO
+      
+      // Check the header is correct
+      // TODO
+      
+      // Now check the filesystem sees it correct too
       // TODO
    }
    
@@ -471,5 +520,23 @@ public final class TestNPOIFSFileSystem extends TestCase {
       }
    }
    
+   /**
+    * Read a file, write it and read it again.
+    * Then, alter+add some streams, write and read
+    */
+   public void testReadWriteRead() throws Exception {
+      // TODO
+      // TODO
+   }
+   
+   /**
+    * Create a new file, write it and read it again
+    * Then, add some streams, write and read
+    */
+   public void testCreateWriteRead() throws Exception {
+      // TODO
+      // TODO
+   }
+   
    // TODO Directory/Document write tests
 }