diff options
author | Josh Micich <josh@apache.org> | 2009-05-10 21:34:28 +0000 |
---|---|---|
committer | Josh Micich <josh@apache.org> | 2009-05-10 21:34:28 +0000 |
commit | c028c0d1f163c6101ee746b60395ec9a72879c51 (patch) | |
tree | d85f66e263d6fb45dcc1f15f89f6c7f8e9dbb2f5 /src/testcases/org | |
parent | ec103cd342f6fc9589e43bd81812eef44a8b0bf6 (diff) | |
download | poi-c028c0d1f163c6101ee746b60395ec9a72879c51.tar.gz poi-c028c0d1f163c6101ee746b60395ec9a72879c51.zip |
Bug 46953 - fixed PageSettingsBlock parsing logic in Sheet. Bug caused sheet EOFs to get misplaced.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@773412 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org')
-rw-r--r-- | src/testcases/org/apache/poi/hssf/record/aggregates/AllRecordAggregateTests.java | 2 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingsBlock.java (renamed from src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingBlock.java) | 45 |
2 files changed, 45 insertions, 2 deletions
diff --git a/src/testcases/org/apache/poi/hssf/record/aggregates/AllRecordAggregateTests.java b/src/testcases/org/apache/poi/hssf/record/aggregates/AllRecordAggregateTests.java index e19f182f77..57fe336b60 100644 --- a/src/testcases/org/apache/poi/hssf/record/aggregates/AllRecordAggregateTests.java +++ b/src/testcases/org/apache/poi/hssf/record/aggregates/AllRecordAggregateTests.java @@ -36,7 +36,7 @@ public final class AllRecordAggregateTests { result.addTestSuite(TestRowRecordsAggregate.class); result.addTestSuite(TestSharedValueManager.class); result.addTestSuite(TestValueRecordsAggregate.class); - result.addTestSuite(TestPageSettingBlock.class); + result.addTestSuite(TestPageSettingsBlock.class); return result; } } diff --git a/src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingBlock.java b/src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingsBlock.java index 07a49fd1e6..076bbfeb37 100644 --- a/src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingBlock.java +++ b/src/testcases/org/apache/poi/hssf/record/aggregates/TestPageSettingsBlock.java @@ -30,6 +30,7 @@ import org.apache.poi.hssf.record.DimensionsRecord; import org.apache.poi.hssf.record.EOFRecord; import org.apache.poi.hssf.record.FooterRecord; import org.apache.poi.hssf.record.HeaderRecord; +import org.apache.poi.hssf.record.IndexRecord; import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.UnknownRecord; @@ -45,7 +46,7 @@ import org.apache.poi.util.HexRead; * * @author Dmitriy Kumshayev */ -public final class TestPageSettingBlock extends TestCase { +public final class TestPageSettingsBlock extends TestCase { public void testPrintSetup_bug46548() { @@ -109,6 +110,48 @@ public final class TestPageSettingBlock extends TestCase { assertEquals(13, outRecs.length); } + /** + * Bug 46953 occurred because POI didn't handle late PSB records properly. + */ + public void testLateHeaderFooter_bug46953() { + + int rowIx = 5; + int colIx = 6; + NumberRecord nr = new NumberRecord(); + nr.setRow(rowIx); + nr.setColumn((short) colIx); + nr.setValue(3.0); + + Record[] recs = { + BOFRecord.createSheetBOF(), + new HeaderRecord("&LSales Figures"), + new FooterRecord("&LJanuary"), + new DimensionsRecord(), + new WindowTwoRecord(), + ur(UnknownRecord.HEADER_FOOTER_089C, "9C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C4 60 00 00 00 00 00 00 00 00"), + EOFRecord.instance, + }; + RecordStream rs = new RecordStream(Arrays.asList(recs), 0); + Sheet sheet = Sheet.createSheet(rs); + + RecordCollector rv = new RecordCollector(); + sheet.visitContainedRecords(rv, rowIx); + Record[] outRecs = rv.getRecords(); + if (outRecs[4] == EOFRecord.instance) { + throw new AssertionFailedError("Identified bug 46953 - EOF incorrectly appended to PSB"); + } + assertEquals(recs.length+1, outRecs.length); // +1 for index record + + assertEquals(BOFRecord.class, outRecs[0].getClass()); + assertEquals(IndexRecord.class, outRecs[1].getClass()); + assertEquals(HeaderRecord.class, outRecs[2].getClass()); + assertEquals(FooterRecord.class, outRecs[3].getClass()); + assertEquals(UnknownRecord.HEADER_FOOTER_089C, outRecs[4].getSid()); + assertEquals(DimensionsRecord.class, outRecs[5].getClass()); + assertEquals(WindowTwoRecord.class, outRecs[6].getClass()); + assertEquals(EOFRecord.instance, outRecs[7]); + } + private static UnknownRecord ur(int sid, String hexData) { return new UnknownRecord(sid, HexRead.readFromString(hexData)); } |