bug 57423: add unit test demonstrating corrupted workbook where CTRow xmlbeans are not in ascending order in the CTWorksheet; unit test adapted from Luca
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1817975 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8498e4d88c
commit
5530f8a831
@ -342,4 +342,42 @@ public final class TestUnfixedBugs {
|
|||||||
assertEquals("Did not have expected contents at rownum " + rowNum,
|
assertEquals("Did not have expected contents at rownum " + rowNum,
|
||||||
contents + ".0", cell.toString());
|
contents + ".0", cell.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bug57423_shiftRowsByLargeOffset() throws IOException {
|
||||||
|
try (
|
||||||
|
XSSFWorkbook wb = new XSSFWorkbook();
|
||||||
|
//OutputStream out = new FileOutputStream("/tmp/57423." + wb.getClass().getName() + ".xlsx"));
|
||||||
|
) {
|
||||||
|
Sheet sh = wb.createSheet();
|
||||||
|
sh.createRow(0).createCell(0).setCellValue("a");
|
||||||
|
sh.createRow(1).createCell(0).setCellValue("b");
|
||||||
|
sh.createRow(2).createCell(0).setCellValue("c");
|
||||||
|
sh.shiftRows(0, 1, 3);
|
||||||
|
|
||||||
|
XSSFWorkbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
||||||
|
|
||||||
|
assertThatRowsInAscendingOrder(wb);
|
||||||
|
assertThatRowsInAscendingOrder(wbBack);
|
||||||
|
|
||||||
|
//wbBack.write(out);
|
||||||
|
// Excel reports that the workbook is corrupt because the rows are not in ascending order
|
||||||
|
// LibreOffice doesn't complain when rows are not in ascending order
|
||||||
|
|
||||||
|
wbBack.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertThatRowsInAscendingOrder(final XSSFWorkbook wb) {
|
||||||
|
// Check that CTRows are stored in ascending order of row index
|
||||||
|
long maxSeenRowNum = 0; //1-based
|
||||||
|
for (final CTRow ctRow : wb.getSheetAt(0).getCTWorksheet().getSheetData().getRowArray()) {
|
||||||
|
final long rowNum = ctRow.getR(); //1-based
|
||||||
|
//final int rowNum = Integer.parseInt(ctRow.getR()); //1-based
|
||||||
|
assertTrue("Row " + rowNum + " (1-based) is not in ascending order; previously saw " + maxSeenRowNum,
|
||||||
|
rowNum > maxSeenRowNum);
|
||||||
|
maxSeenRowNum = rowNum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user