Bug 62307: made Cell#getNumericCellValue() behavior consistent across HSSF/XSSF/SXSSF.\nAll three implementations throw ISE when trying to get numeric value from a boolean-valued cell, have it a formula set or not.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1850207 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Vladislav Galas 2019-01-02 20:45:52 +00:00
parent 59a7919af6
commit 3aec436a34
2 changed files with 14 additions and 7 deletions

View File

@ -285,12 +285,10 @@ public final class XSSFCell implements Cell {
*/
@Override
public double getNumericCellValue() {
CellType cellType = getCellType();
switch(cellType) {
CellType valueType = isFormulaCell() ? getCachedFormulaResultType() : getCellType();
switch(valueType) {
case BLANK:
return 0.0;
case FORMULA:
// fall-through
case NUMERIC:
if(_cell.isSetV()) {
String v = _cell.getV();
@ -305,8 +303,10 @@ public final class XSSFCell implements Cell {
} else {
return 0.0;
}
case FORMULA:
throw new AssertionError();
default:
throw typeMismatch(CellType.NUMERIC, cellType, false);
throw typeMismatch(CellType.NUMERIC, valueType, false);
}
}
@ -1361,4 +1361,4 @@ public final class XSSFCell implements Cell {
}
}

View File

@ -74,7 +74,7 @@ public abstract class BaseTestCell {
assertEquals(CellType.BOOLEAN, cell.getCellType());
cell.setCellValue(true);
assertTrue(cell.getBooleanCellValue());
assertProhibitedValueAccess(cell, CellType.NUMERIC, CellType.STRING,
assertProhibitedValueAccess(cell, CellType.NUMERIC, CellType.STRING, CellType.BOOLEAN,
CellType.FORMULA, CellType.ERROR);
cell.setCellValue(factory.createRichTextString("Foo"));
@ -1133,4 +1133,11 @@ public abstract class BaseTestCell {
assertEquals(CellType.FORMULA, cell.getCellType());
}
}
@Test
public void testGetNumericCellValueOnABlankCellReturnsZero() {
Cell cell = _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0);
assertEquals(CellType.BLANK, cell.getCellType());
assertEquals(0, cell.getNumericCellValue(), 0);
}
}