FileDocCategorySizeDatePackage
TestBlockAllocationTableWriter.javaAPI DocApache Poi 3.0.15807Mon Jan 01 12:39:44 GMT 2007org.apache.poi.poifs.storage

TestBlockAllocationTableWriter

public class TestBlockAllocationTableWriter extends TestCase
Class to test BlockAllocationTableWriter functionality
author
Marc Johnson

Fields Summary
Constructors Summary
public TestBlockAllocationTableWriter(String name)
Constructor TestBlockAllocationTableWriter

param
name

        super(name);
    
Methods Summary
public static voidmain(java.lang.String[] ignored_args)
main method to run the unit tests

param
ignored_args

        System.out.println(
            "Testing org.apache.poi.poifs.storage.BlockAllocationTableWriter");
        junit.textui.TestRunner.run(TestBlockAllocationTableWriter.class);
    
public voidtestAllocateSpace()
Test the allocateSpace method.

        BlockAllocationTableWriter table         =
            new BlockAllocationTableWriter();
        int[]                      blockSizes    =
        {
            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
        };
        int                        expectedIndex = 0;

        for (int j = 0; j < blockSizes.length; j++)
        {
            assertEquals(expectedIndex, table.allocateSpace(blockSizes[ j ]));
            expectedIndex += blockSizes[ j ];
        }
    
public voidtestCreateBlocks()
Test the createBlocks method

exception
IOException

        BlockAllocationTableWriter table = new BlockAllocationTableWriter();

        table.allocateSpace(127);
        table.createBlocks();
        verifyBlocksCreated(table, 1);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(128);
        table.createBlocks();
        verifyBlocksCreated(table, 2);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(254);
        table.createBlocks();
        verifyBlocksCreated(table, 2);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(255);
        table.createBlocks();
        verifyBlocksCreated(table, 3);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(13843);
        table.createBlocks();
        verifyBlocksCreated(table, 109);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(13844);
        table.createBlocks();
        verifyBlocksCreated(table, 110);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(13969);
        table.createBlocks();
        verifyBlocksCreated(table, 110);
        table = new BlockAllocationTableWriter();
        table.allocateSpace(13970);
        table.createBlocks();
        verifyBlocksCreated(table, 111);
    
public voidtestProduct()
Test content produced by BlockAllocationTableWriter

exception
IOException

        BlockAllocationTableWriter table = new BlockAllocationTableWriter();

        for (int k = 1; k <= 22; k++)
        {
            table.allocateSpace(k);
        }
        table.createBlocks();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        table.writeBlocks(stream);
        byte[] output = stream.toByteArray();

        assertEquals(1024, output.length);
        byte[] expected = new byte[ 1024 ];

        Arrays.fill(expected, ( byte ) 0xFF);
        int offset      = 0;
        int block_index = 1;

        for (int k = 1; k <= 22; k++)
        {
            int limit = k - 1;

            for (int j = 0; j < limit; j++)
            {
                LittleEndian.putInt(expected, offset, block_index++);
                offset += LittleEndianConsts.INT_SIZE;
            }
            LittleEndian.putInt(expected, offset,
                                POIFSConstants.END_OF_CHAIN);
            offset += 4;
            block_index++;
        }

        // add BAT block indices
        LittleEndian.putInt(expected, offset, block_index++);
        offset += LittleEndianConsts.INT_SIZE;
        LittleEndian.putInt(expected, offset, POIFSConstants.END_OF_CHAIN);
        for (int k = 0; k < expected.length; k++)
        {
            assertEquals("At offset " + k, expected[ k ], output[ k ]);
        }
    
private voidverifyBlocksCreated(org.apache.poi.poifs.storage.BlockAllocationTableWriter table, int count)

        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        table.writeBlocks(stream);
        byte[] output = stream.toByteArray();

        assertEquals(count * 512, output.length);