| /* ==================================================================== |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| ==================================================================== */ |
| |
| package org.apache.poi.poifs.storage; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import junit.framework.TestCase; |
| |
| import org.apache.poi.poifs.common.POIFSConstants; |
| import org.apache.poi.poifs.filesystem.OPOIFSDocument; |
| import org.apache.poi.poifs.property.PropertyTable; |
| import org.apache.poi.poifs.property.RootProperty; |
| |
| /** |
| * Class to test SmallBlockTableWriter functionality |
| * |
| * @author Marc Johnson |
| */ |
| public final class TestSmallBlockTableWriter extends TestCase { |
| |
| public void testWritingConstructor() throws IOException { |
| List<OPOIFSDocument> documents = new ArrayList<OPOIFSDocument>(); |
| |
| documents.add( |
| new OPOIFSDocument( |
| "doc340", new ByteArrayInputStream(new byte[ 340 ]))); |
| documents.add( |
| new OPOIFSDocument( |
| "doc5000", new ByteArrayInputStream(new byte[ 5000 ]))); |
| documents |
| .add(new OPOIFSDocument("doc0", |
| new ByteArrayInputStream(new byte[ 0 ]))); |
| documents |
| .add(new OPOIFSDocument("doc1", |
| new ByteArrayInputStream(new byte[ 1 ]))); |
| documents |
| .add(new OPOIFSDocument("doc2", |
| new ByteArrayInputStream(new byte[ 2 ]))); |
| documents |
| .add(new OPOIFSDocument("doc3", |
| new ByteArrayInputStream(new byte[ 3 ]))); |
| documents |
| .add(new OPOIFSDocument("doc4", |
| new ByteArrayInputStream(new byte[ 4 ]))); |
| documents |
| .add(new OPOIFSDocument("doc5", |
| new ByteArrayInputStream(new byte[ 5 ]))); |
| documents |
| .add(new OPOIFSDocument("doc6", |
| new ByteArrayInputStream(new byte[ 6 ]))); |
| documents |
| .add(new OPOIFSDocument("doc7", |
| new ByteArrayInputStream(new byte[ 7 ]))); |
| documents |
| .add(new OPOIFSDocument("doc8", |
| new ByteArrayInputStream(new byte[ 8 ]))); |
| documents |
| .add(new OPOIFSDocument("doc9", |
| new ByteArrayInputStream(new byte[ 9 ]))); |
| |
| HeaderBlock header = new HeaderBlock(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS); |
| RootProperty root = new PropertyTable(header).getRoot(); |
| SmallBlockTableWriter sbtw = new SmallBlockTableWriter( |
| POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS, documents,root); |
| BlockAllocationTableWriter bat = sbtw.getSBAT(); |
| |
| // 15 small blocks: 6 for doc340, 0 for doc5000 (too big), 0 |
| // for doc0 (no storage needed), 1 each for doc1 through doc9 |
| assertEquals(15 * 64, root.getSize()); |
| |
| // 15 small blocks rounds up to 2 big blocks |
| assertEquals(2, sbtw.countBlocks()); |
| int start_block = 1000 + root.getStartBlock(); |
| |
| sbtw.setStartBlock(start_block); |
| assertEquals(start_block, root.getStartBlock()); |
| } |
| } |