--- /dev/null
+package org.apache.poi.hwpf;
+
+import java.io.FileInputStream;
+
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.poifs.filesystem.DocumentEntry;
+
+import org.apache.poi.hwpf.model.hdftypes.*;
+
+
+public class HWPFDocFixture
+{
+ public byte[] _tableStream;
+ public byte[] _mainStream;
+ public FileInformationBlock _fib;
+
+ public HWPFDocFixture(Object obj)
+ {
+
+ }
+
+ public void setUp()
+ {
+ try
+ {
+ POIFSFileSystem filesystem = new POIFSFileSystem(new FileInputStream(
+ "C:\\test.doc"));
+
+ DocumentEntry documentProps =
+ (DocumentEntry) filesystem.getRoot().getEntry("WordDocument");
+ _mainStream = new byte[documentProps.getSize()];
+ filesystem.createDocumentInputStream("WordDocument").read(_mainStream);
+
+ // use the fib to determine the name of the table stream.
+ _fib = new FileInformationBlock(_mainStream);
+
+ String name = "0Table";
+ if (_fib.isFWhichTblStm())
+ {
+ name = "1Table";
+ }
+
+ // read in the table stream.
+ DocumentEntry tableProps =
+ (DocumentEntry) filesystem.getRoot().getEntry(name);
+ _tableStream = new byte[tableProps.getSize()];
+ filesystem.createDocumentInputStream(name).read(_tableStream);
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace();
+ }
+ }
+
+ public void tearDown()
+ {
+ }
+
+}
--- /dev/null
+package org.apache.poi.hwpf.model.hdftypes;
+
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+
+import junit.framework.*;
+
+import org.apache.poi.hwpf.*;
+import org.apache.poi.hwpf.model.io.*;
+
+public class TestCHPBinTable
+ extends TestCase
+{
+ private CHPBinTable _cHPBinTable = null;
+ private HWPFDocFixture _hWPFDocFixture;
+
+ public TestCHPBinTable(String name)
+ {
+ super(name);
+ }
+
+ public void testReadWrite()
+ throws Exception
+ {
+ FileInformationBlock fib = _hWPFDocFixture._fib;
+ byte[] mainStream = _hWPFDocFixture._mainStream;
+ byte[] tableStream = _hWPFDocFixture._tableStream;
+ int fcMin = fib.getFcMin();
+
+ _cHPBinTable = new CHPBinTable(mainStream, tableStream, fib.getFcPlcfbteChpx(), fib.getLcbPlcfbteChpx(), fcMin);
+
+ HWPFFileSystem fileSys = new HWPFFileSystem();
+
+ _cHPBinTable.writeTo(fileSys, 0);
+ ByteArrayOutputStream tableOut = fileSys.getStream("1Table");
+ ByteArrayOutputStream mainOut = fileSys.getStream("WordDocument");
+
+ byte[] newTableStream = tableOut.toByteArray();
+ byte[] newMainStream = mainOut.toByteArray();
+
+ CHPBinTable newBinTable = new CHPBinTable(newMainStream, newTableStream, 0, newTableStream.length, 0);
+
+ ArrayList oldTextRuns = _cHPBinTable._textRuns;
+ ArrayList newTextRuns = newBinTable._textRuns;
+
+ assertEquals(oldTextRuns.size(), newTextRuns.size());
+
+ int size = oldTextRuns.size();
+ for (int x = 0; x < size; x++)
+ {
+ PropertyNode oldNode = (PropertyNode)oldTextRuns.get(x);
+ PropertyNode newNode = (PropertyNode)newTextRuns.get(x);
+
+ assertTrue(oldNode.equals(newNode));
+ }
+
+ }
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ _hWPFDocFixture = new HWPFDocFixture(this);
+
+ _hWPFDocFixture.setUp();
+ }
+
+ protected void tearDown()
+ throws Exception
+ {
+ _cHPBinTable = null;
+ _hWPFDocFixture.tearDown();
+
+ _hWPFDocFixture = null;
+ super.tearDown();
+ }
+
+}
--- /dev/null
+package org.apache.poi.hwpf.model.hdftypes;
+
+import junit.framework.*;
+import org.apache.poi.hwpf.*;
+
+import org.apache.poi.util.LittleEndian;
+
+public class TestPlexOfCps
+ extends TestCase
+{
+ private PlexOfCps _plexOfCps = null;
+ private HWPFDocFixture _hWPFDocFixture;
+
+ public TestPlexOfCps(String name)
+ {
+ super(name);
+ }
+ public void testWriteRead()
+ throws Exception
+ {
+ _plexOfCps = new PlexOfCps(4);
+
+ int last = 0;
+ for (int x = 0; x < 110; x++)
+ {
+ byte[] intHolder = new byte[4];
+ int span = (int)(110.0f * Math.random());
+ LittleEndian.putInt(intHolder, span);
+ _plexOfCps.addProperty(new PropertyNode(last, last + span, intHolder));
+ last += span;
+ }
+
+ byte[] output = _plexOfCps.toByteArray();
+ _plexOfCps = new PlexOfCps(output, 0, output.length, 4);
+ int len = _plexOfCps.length();
+ assertEquals(len, 110);
+
+ last = 0;
+ for (int x = 0; x < len; x++)
+ {
+ PropertyNode node = _plexOfCps.getProperty(x);
+ assertEquals(node.getStart(), last);
+ last = node.getEnd();
+ int span = LittleEndian.getInt(node.getBuf());
+ assertEquals(node.getEnd()-node.getStart(), span);
+ }
+ }
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ /**@todo verify the constructors*/
+ _hWPFDocFixture = new HWPFDocFixture(this);
+
+ _hWPFDocFixture.setUp();
+ }
+
+ protected void tearDown()
+ throws Exception
+ {
+ _plexOfCps = null;
+ _hWPFDocFixture.tearDown();
+
+ _hWPFDocFixture = null;
+ super.tearDown();
+ }
+
+}