From: Dominik Stadler Date: Mon, 17 Jun 2013 09:06:39 +0000 (+0000) Subject: Bug 54607: Add unit test and fix NPE for getTopRow() and getLeftCol() X-Git-Tag: 3.10-beta1~18 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d1a21260ca0ee0ca110a0f320fb1bd542c0a24fb;p=poi.git Bug 54607: Add unit test and fix NPE for getTopRow() and getLeftCol() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1493686 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 1b0fc8d388..58b4aebd9e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -866,6 +866,9 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { public short getLeftCol() { String cellRef = worksheet.getSheetViews().getSheetViewArray(0).getTopLeftCell(); + if(cellRef == null) { + return 0; + } CellReference cellReference = new CellReference(cellRef); return cellReference.getCol(); } @@ -1178,6 +1181,9 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { */ public short getTopRow() { String cellRef = getSheetTypeSheetView().getTopLeftCell(); + if(cellRef == null) { + return 0; + } CellReference cellReference = new CellReference(cellRef); return (short) cellReference.getRow(); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index e47632acf9..8c96fb817a 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -17,18 +17,29 @@ package org.apache.poi.xssf.usermodel; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.List; -import org.apache.poi.ss.usermodel.*; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.record.PasswordRecord; +import org.apache.poi.ss.usermodel.BaseTestSheet; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.RichTextString; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.util.HexDump; import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.model.CalculationChain; import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.model.StylesTable; -import org.apache.poi.xssf.model.CalculationChain; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; -import org.apache.poi.util.HexDump; -import org.apache.poi.hssf.record.PasswordRecord; import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; @@ -1091,4 +1102,66 @@ public final class TestXSSFSheet extends BaseTestSheet { sheet = workbook.getSheet("Sheet 1"); assertEquals(false, sheet.getForceFormulaRecalculation()); } + + public void test54607() { + // run with the file provided in the Bug-Report + runGetTopRow("54607.xlsx", true, 1, 0, 0); + runGetLeftCol("54607.xlsx", true, 0, 0, 0); + + // run with some other flie to see + runGetTopRow("54436.xlsx", true, 0); + runGetLeftCol("54436.xlsx", true, 0); + runGetTopRow("TwoSheetsNoneHidden.xlsx", true, 0, 0); + runGetLeftCol("TwoSheetsNoneHidden.xlsx", true, 0, 0); + runGetTopRow("TwoSheetsNoneHidden.xls", false, 0, 0); + runGetLeftCol("TwoSheetsNoneHidden.xls", false, 0, 0); + } + + private void runGetTopRow(String file, boolean isXSSF, int... topRows) { + final Workbook wb; + if(isXSSF) { + wb = XSSFTestDataSamples.openSampleWorkbook(file); + } else { + wb = HSSFTestDataSamples.openSampleWorkbook(file); + } + for (int si = 0; si < wb.getNumberOfSheets(); si++) { + Sheet sh = wb.getSheetAt(si); + assertNotNull(sh.getSheetName()); + assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow()); + } + + // for XSSF also test with SXSSF + if(isXSSF) { + Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb); + for (int si = 0; si < swb.getNumberOfSheets(); si++) { + Sheet sh = swb.getSheetAt(si); + assertNotNull(sh.getSheetName()); + assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow()); + } + } + } + + private void runGetLeftCol(String file, boolean isXSSF, int... topRows) { + final Workbook wb; + if(isXSSF) { + wb = XSSFTestDataSamples.openSampleWorkbook(file); + } else { + wb = HSSFTestDataSamples.openSampleWorkbook(file); + } + for (int si = 0; si < wb.getNumberOfSheets(); si++) { + Sheet sh = wb.getSheetAt(si); + assertNotNull(sh.getSheetName()); + assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol()); + } + + // for XSSF also test with SXSSF + if(isXSSF) { + Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb); + for (int si = 0; si < swb.getNumberOfSheets(); si++) { + Sheet sh = swb.getSheetAt(si); + assertNotNull(sh.getSheetName()); + assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol()); + } + } + } } diff --git a/test-data/spreadsheet/54607.xlsx b/test-data/spreadsheet/54607.xlsx new file mode 100644 index 0000000000..bdfe143bb3 Binary files /dev/null and b/test-data/spreadsheet/54607.xlsx differ