public void TestShortLastBlock() { String[] files = new String[] { "ShortLastBlock.qwp", "ShortLastBlock.wps" }; for (int i = 0; i < files.Length; i++) { // Open the file up OPOIFSFileSystem fs = new OPOIFSFileSystem( _samples.OpenResourceAsStream(files[i]) ); // Write it into a temp output array MemoryStream baos = new MemoryStream(); fs.WriteFileSystem(baos); // Check sizes } }
public void TestBATandXBAT() { byte[] hugeStream = new byte[8 * 1024 * 1024]; OPOIFSFileSystem fs = new OPOIFSFileSystem(); fs.Root.CreateDocument("BIG", new MemoryStream(hugeStream)); MemoryStream baos = new MemoryStream(); fs.WriteFileSystem(baos); byte[] fsData = baos.ToArray(); // Check the header was written properly Stream inp = new MemoryStream(fsData); HeaderBlock header = new HeaderBlock(inp); Assert.AreEqual(109 + 21, header.BATCount); Assert.AreEqual(1, header.XBATCount); ByteBuffer xbatData = ByteBuffer.CreateBuffer(512); xbatData.Write(fsData, (1 + header.XBATIndex) * 512, 512); xbatData.Position = 0; BATBlock xbat = BATBlock.CreateBATBlock(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS, xbatData); for (int i = 0; i < 21; i++) { Assert.IsTrue(xbat.GetValueAt(i) != POIFSConstants.UNUSED_BLOCK); } for (int i = 21; i < 127; i++) { Assert.AreEqual(POIFSConstants.UNUSED_BLOCK, xbat.GetValueAt(i)); } Assert.AreEqual(POIFSConstants.END_OF_CHAIN, xbat.GetValueAt(127)); RawDataBlockList blockList = new RawDataBlockList(inp, POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS); Assert.AreEqual(fsData.Length / 512, blockList.BlockCount() + 1); new BlockAllocationTableReader(header.BigBlockSize, header.BATCount, header.BATArray, header.XBATCount, header.XBATIndex, blockList); Assert.AreEqual(fsData.Length / 512, blockList.BlockCount() + 1); fs = null; fs = new OPOIFSFileSystem(new MemoryStream(fsData)); DirectoryNode root = fs.Root; Assert.AreEqual(1, root.EntryCount); DocumentNode big = (DocumentNode)root.GetEntry("BIG"); Assert.AreEqual(hugeStream.Length, big.Size); }