Bug 58113: Fix regression: NullPointerException when setting cell value to null
add unit tests which verifies this for all three SS-implementations git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690652 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2f8aa558b3
commit
da56e012c3
@ -248,7 +248,7 @@ public class SXSSFCell implements Cell
|
|||||||
{
|
{
|
||||||
ensureTypeOrFormulaType(CELL_TYPE_STRING);
|
ensureTypeOrFormulaType(CELL_TYPE_STRING);
|
||||||
|
|
||||||
if(value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()){
|
if(value != null && value.length() > SpreadsheetVersion.EXCEL2007.getMaxTextLength()){
|
||||||
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
|
throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ import org.apache.poi.hssf.util.PaneInformation;
|
|||||||
import org.apache.poi.ss.ITestDataProvider;
|
import org.apache.poi.ss.ITestDataProvider;
|
||||||
import org.apache.poi.ss.SpreadsheetVersion;
|
import org.apache.poi.ss.SpreadsheetVersion;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -419,16 +420,16 @@ public abstract class BaseTestBugzillaIssues {
|
|||||||
Workbook wb = _testDataProvider.createWorkbook();
|
Workbook wb = _testDataProvider.createWorkbook();
|
||||||
Sheet sheet = wb.createSheet("My sheet");
|
Sheet sheet = wb.createSheet("My sheet");
|
||||||
|
|
||||||
Row row = sheet.createRow( 0 );
|
Row row = sheet.createRow(0);
|
||||||
Cell cell = row.createCell( 0 );
|
Cell cell = row.createCell(0);
|
||||||
cell.setCellFormula(hyperlinkF);
|
cell.setCellFormula(hyperlinkF);
|
||||||
|
|
||||||
assertEquals(hyperlinkF, cell.getCellFormula());
|
assertEquals(hyperlinkF, cell.getCellFormula());
|
||||||
|
|
||||||
wb = _testDataProvider.writeOutAndReadBack(wb);
|
wb = _testDataProvider.writeOutAndReadBack(wb);
|
||||||
sheet = wb.getSheet("My Sheet");
|
sheet = wb.getSheet("My Sheet");
|
||||||
row = sheet.getRow( 0 );
|
row = sheet.getRow(0);
|
||||||
cell = row.getCell( 0 );
|
cell = row.getCell(0);
|
||||||
|
|
||||||
assertEquals(hyperlinkF, cell.getCellFormula());
|
assertEquals(hyperlinkF, cell.getCellFormula());
|
||||||
}
|
}
|
||||||
@ -691,7 +692,8 @@ public abstract class BaseTestBugzillaIssues {
|
|||||||
* TODO Fix this to evaluate for XSSF
|
* TODO Fix this to evaluate for XSSF
|
||||||
* TODO Fix this to work at all for HSSF
|
* TODO Fix this to work at all for HSSF
|
||||||
*/
|
*/
|
||||||
// @Test
|
@Ignore("Fix this to evaluate for XSSF, Fix this to work at all for HSSF")
|
||||||
|
@Test
|
||||||
public void bug46670() throws Exception {
|
public void bug46670() throws Exception {
|
||||||
Workbook wb = _testDataProvider.createWorkbook();
|
Workbook wb = _testDataProvider.createWorkbook();
|
||||||
Sheet s = wb.createSheet();
|
Sheet s = wb.createSheet();
|
||||||
@ -730,7 +732,7 @@ public abstract class BaseTestBugzillaIssues {
|
|||||||
assertEquals(refHttp, c2.getCellFormula());
|
assertEquals(refHttp, c2.getCellFormula());
|
||||||
|
|
||||||
|
|
||||||
// Try to evalutate, without giving a way to get at the other file
|
// Try to evaluate, without giving a way to get at the other file
|
||||||
try {
|
try {
|
||||||
evaluateCell(wb, c1);
|
evaluateCell(wb, c1);
|
||||||
fail("Shouldn't be able to evaluate without the other file");
|
fail("Shouldn't be able to evaluate without the other file");
|
||||||
@ -1003,4 +1005,44 @@ public abstract class BaseTestBugzillaIssues {
|
|||||||
fail();
|
fail();
|
||||||
} catch(IllegalStateException e) {}
|
} catch(IllegalStateException e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test58113() {
|
||||||
|
Workbook wb = _testDataProvider.createWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet( "Test" );
|
||||||
|
|
||||||
|
Row row = sheet.createRow(0);
|
||||||
|
|
||||||
|
Cell cell = row.createCell(0);
|
||||||
|
// verify that null-values can be set, this was possible up to 3.11, but broken in 3.12
|
||||||
|
cell.setCellValue((String)null);
|
||||||
|
String value = cell.getStringCellValue();
|
||||||
|
assertTrue("HSSF will currently return empty string, XSSF/SXSSF will return null, but had: " + value,
|
||||||
|
value == null || value.length() == 0);
|
||||||
|
|
||||||
|
cell = row.createCell(1);
|
||||||
|
// also verify that setting formulas to null works
|
||||||
|
cell.setCellType(Cell.CELL_TYPE_FORMULA);
|
||||||
|
cell.setCellValue((String)null);
|
||||||
|
|
||||||
|
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
|
||||||
|
|
||||||
|
value = cell.getStringCellValue();
|
||||||
|
assertTrue("HSSF will currently return empty string, XSSF/SXSSF will return null, but had: " + value,
|
||||||
|
value == null || value.length() == 0);
|
||||||
|
|
||||||
|
// set some value
|
||||||
|
cell.setCellType(Cell.CELL_TYPE_STRING);
|
||||||
|
cell.setCellValue("somevalue");
|
||||||
|
|
||||||
|
value = cell.getStringCellValue();
|
||||||
|
assertTrue("can set value afterwards: " + value,
|
||||||
|
value.equals("somevalue"));
|
||||||
|
|
||||||
|
// verify that the null-value is actually set even if there was some value in the cell before
|
||||||
|
cell.setCellValue((String)null);
|
||||||
|
value = cell.getStringCellValue();
|
||||||
|
assertTrue("HSSF will currently return empty string, XSSF/SXSSF will return null, but had: " + value,
|
||||||
|
value == null || value.length() == 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user