From bdb9bbccc153ab84363f62df9d83bb8185b3f5ca Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 30 Jul 2014 22:43:31 +0000 Subject: [PATCH] Start on details tests for bug #53433 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1614786 13f79535-47bb-0310-9956-ffa450edef68 --- .../MissingRecordAwareHSSFListener.java | 11 +- .../TestMissingRecordAwareHSSFListener.java | 406 +++++++++++++++++- test-data/spreadsheet/53433.xls | Bin 0 -> 13824 bytes 3 files changed, 415 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/53433.xls diff --git a/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java b/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java index 15206bd21..ef15ea7ce 100644 --- a/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java +++ b/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java @@ -20,7 +20,16 @@ package org.apache.poi.hssf.eventusermodel; import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord; -import org.apache.poi.hssf.record.*; +import org.apache.poi.hssf.record.BOFRecord; +import org.apache.poi.hssf.record.CellValueRecordInterface; +import org.apache.poi.hssf.record.MulBlankRecord; +import org.apache.poi.hssf.record.MulRKRecord; +import org.apache.poi.hssf.record.NoteRecord; +import org.apache.poi.hssf.record.Record; +import org.apache.poi.hssf.record.RecordFactory; +import org.apache.poi.hssf.record.RowRecord; +import org.apache.poi.hssf.record.SharedFormulaRecord; +import org.apache.poi.hssf.record.StringRecord; /** *

A HSSFListener which tracks rows and columns, and will diff --git a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java index 6a60f9454..5b834ad3d 100644 --- a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java +++ b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java @@ -30,11 +30,17 @@ import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord; import org.apache.poi.hssf.record.BOFRecord; import org.apache.poi.hssf.record.BlankRecord; +import org.apache.poi.hssf.record.CellValueRecordInterface; +import org.apache.poi.hssf.record.DimensionsRecord; +import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.LabelSSTRecord; import org.apache.poi.hssf.record.MulBlankRecord; +import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.RowRecord; import org.apache.poi.hssf.record.SharedFormulaRecord; +import org.apache.poi.hssf.record.StringRecord; +import org.apache.poi.hssf.record.WindowTwoRecord; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * Tests for MissingRecordAwareHSSFListener @@ -358,7 +364,7 @@ public final class TestMissingRecordAwareHSSFListener extends TestCase { private static final class MockHSSFListener implements HSSFListener { public MockHSSFListener() {} - private final List _records = new ArrayList(); + private final List _records = new ArrayList(); private boolean logToStdOut = false; public void processRecord(Record record) { @@ -479,4 +485,402 @@ public final class TestMissingRecordAwareHSSFListener extends TestCase { assertEquals(1, missingCount); assertEquals(1, lastCount); } + + public void testFormulasWithStringResultsHandling() { + readRecords("53433.xls"); + + int pos = 95; + + // First three rows are blank + assertEquals(DimensionsRecord.class, r[pos++].getClass()); + + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(0, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(1, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(2, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + + // Then rows 4-10 are defined + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(3, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(4, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(5, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(6, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(7, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(8, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(9, ((RowRecord)r[pos]).getRowNumber()); + pos++; + + // 5 more blank rows + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(10, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(11, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(12, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(13, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(14, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + + // 2 defined rows + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(15, ((RowRecord)r[pos]).getRowNumber()); + pos++; + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(16, ((RowRecord)r[pos]).getRowNumber()); + pos++; + + // one blank row + assertEquals(MissingRowDummyRecord.class, r[pos].getClass()); + assertEquals(17, ((MissingRowDummyRecord)r[pos]).getRowNumber()); + pos++; + + // one last real row + assertEquals(RowRecord.class, r[pos].getClass()); + assertEquals(18, ((RowRecord)r[pos]).getRowNumber()); + pos++; + + + + // Now onto the cells + + // Because the 3 first rows are missing, should have last-of-row records first + // TODO Fix! + + + // Onto row 4 (=3) + + // Now we have blank cell A4 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(3, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + + // Now 4 real cells, all strings + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(1, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(2, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + + // Final dummy cell for the end-of-row + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(3, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 5 has string, formula of string, number, formula of string + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(4, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(1, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(2, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(StringRecord.class, r[pos].getClass()); + assertEquals("s1", ((StringRecord)r[pos]).getString()); + pos++; + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(StringRecord.class, r[pos].getClass()); + assertEquals("s3845", ((StringRecord)r[pos]).getString()); + pos++; + + // Final dummy cell for the end-of-row + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 6 is blank / string formula / number / number / string formula + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(5, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(5, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(1, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(StringRecord.class, r[pos].getClass()); + assertEquals("s4", ((StringRecord)r[pos]).getString()); + pos++; + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(5, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(2, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(5, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(5, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(StringRecord.class, r[pos].getClass()); + assertEquals("s3845", ((StringRecord)r[pos]).getString()); + pos++; + + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(5, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 7 is blank / blank / number / number / number + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(6, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(6, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(1, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(6, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(2, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(6, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(NumberRecord.class, r[pos].getClass()); + assertEquals(6, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(6, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 8 is blank / string / number formula / string formula / blank + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(7, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(7, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(1, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(7, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(2, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(FormulaRecord.class, r[pos].getClass()); + assertEquals(7, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(StringRecord.class, r[pos].getClass()); + assertEquals("s4", ((StringRecord)r[pos]).getString()); + pos++; + assertEquals(BlankRecord.class, r[pos].getClass()); + assertEquals(7, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(7, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 9 is empty, but with a blank at E9 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(8, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(8, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(1, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(8, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(2, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(8, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(3, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(BlankRecord.class, r[pos].getClass()); + assertEquals(8, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(8, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 10 has a string in D10 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(9, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(9, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(1, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(9, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(2, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(9, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(9, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(3, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Now 5 blank rows + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(10, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(11, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(12, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(13, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(14, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 16 has a single string in B16 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(15, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(15, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(1, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(15, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 17 has a single string in D17 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(16, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(16, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(1, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(16, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(2, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(16, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(3, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(16, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(3, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 18 is blank + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(17, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(-1, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // Row 19 has a single string in E19 + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(18, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(0, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(18, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(1, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(18, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(2, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(MissingCellDummyRecord.class, r[pos].getClass()); + assertEquals(18, ((MissingCellDummyRecord)r[pos]).getRow()); + assertEquals(3, ((MissingCellDummyRecord)r[pos]).getColumn()); + pos++; + assertEquals(LabelSSTRecord.class, r[pos].getClass()); + assertEquals(18, ((CellValueRecordInterface)r[pos]).getRow()); + assertEquals(4, ((CellValueRecordInterface)r[pos]).getColumn()); + pos++; + assertEquals(LastCellOfRowDummyRecord.class, r[pos].getClass()); + assertEquals(18, ((LastCellOfRowDummyRecord)r[pos]).getRow()); + assertEquals(4, ((LastCellOfRowDummyRecord)r[pos]).getLastColumnNumber()); + pos++; + + + // And that's it! + assertEquals(WindowTwoRecord.class, r[pos++].getClass()); + } } diff --git a/test-data/spreadsheet/53433.xls b/test-data/spreadsheet/53433.xls new file mode 100644 index 0000000000000000000000000000000000000000..c31c3a87728c5c5bab296fdebda79be9ebbb8f0c GIT binary patch literal 13824 zcmeHOYiv|S6h3$N-rX&aZd)GmC}n9;`Xp_)P@qUx11ba}0SP25mQsok9woaaLd3YD zM1Np{;fI=#2%=F#f)WY*5mWf3Kk9>o5d2k?pBkglL=s^AzH{&07h9|*ijq4w^Ez|R zoHOT~nYlB2_v^39hmN0~a!m@tBJs=ZbcqCV;0DT*-FlgzJ)LIN%_pG@kQe?(8Yl_D zkO51MO&$z>F@U098WAg%1k?#=WvRh1%72Uh`MEV3XkD^l=WkEhOdj$FXRJ0tHot;^xbEN?` z%rbT9GkjfQWt~eoQ{I*7BI{>1wKdP*uo)rV7?12kh)3-5K7=ZBio7QivUu?(Vl=U> zBQ_-C=~41qI-D?cij=AOxKvPcNr~p;Q&xJTu2ToG z`km8lIUuXI_V)I-5c2*g_Ub@d30XBZ2NFGm72Lpc!3ZH@c7JBbP1&y=Nw0+8^t3Q( zWfEo5h9pT?vJFD__a^&MP7shFQi4bcA|>Wv(}*ToG;P&1%CtwzJy8o?MCY~5LC#)U zojjVxS{srO#xe#Hv?8C2{AuKykoSZpAfn&|%qk6+I8uAtD$CopM*HmP1=cbSF&PwD z4CJx8$d5s~S;AT_=WwMA%x`}9^Q9G=R(5tNyk6lAnjTO{3OH_f5N5&xEia-!IY@bT!u;8dAx6sAMx5_ z7|KKM#QZ9v1?F^<{tUHwTSYYU7@e0%K({-X&koL>j!lpuYba*wxM`;_#nMiLiuv65 zQ;%O;&>j=K63w`UPA%~dP-3V-B}q9vfqsX?hA#j-%EnSiOH?p40NQdeVvRlIzZi7E)0PtS`VMmEWPN zb*L~2=*B?GP_>fEo}VQSl{-J19V$$bg87+u+f zu)yd_<<6ev4i&~pDj;R3=3IeGCa}z`#71L37mZ2aP7Rgl=1NEP!Bt7Eu8Q8}PFD?r zh^`vMV_742Rhpf%skBt&8^n9&s@MrE4gsOKtGbfXow8d`u4{2S8i`wGor$}At}{L5 znCgr%<7URd0Wyr*eqnnP-(zgwqF>N=vpxeIIyJW8C@WXs87Gm~V(q9Dd--u~T4pal zXf0w>-7jEMiw@z-x2aOxm&t8xn*nwG{NZsk9y<8;FE^gtT6XgFkTlHth)72A3eeaXHp z{gEYmdwO>$&(w)!-!EM@Xv9d^KK;c0<%0&j)C-;lJPmjn@HF6Qz|(-I0Z#*-20RUT z8t^pWX~5G!aShz<{O`Lwc=_n;sbxpr!1=%N#wnivuOsq$kLUlDh`f&BxgWnx<0}Et z>$tthd3H}B^4$L_;zY#5h`bNrJpk_qE+FRK2aslA?=$;$_iyXo71`RoeUa$x(+87B zYrkk7Hm?FP?*Mo=VgD+YEw*NhQ5ge7GUWvX?+(}YCAKH|Gg?yVy?X@c#0#DVJPmjn z@HF6Qz|(-I0Z#*-20RUT8t^o5-)Vs7cpis&?#0jY`dtgZP~kb6|LfpcpC9J%sLV4v z&+q)`g6Dp=^Gh-Q=FfA!`$;6v`n(Td`z=J~UifcnV3qXY>6eHskzL3WvJaLUd6+1c z;f{=c6bUgE8PHT7vokwAyr%w#Ln{Ui`hyE!3+@TojxT;G$95My;vD|~$?&HfBPQf! z6M`kHWsmH{)2(A)3N36=nF#5}*NlCD3?FL2pL2-wXQcf3-HTq3A;Wi1;LxKo^r{8^ PnmqIV#`tyU&iMZT5UK1f literal 0 HcmV?d00001