Move some tests to the base test class where applicapple

Introduce class BaseTestXCell to collect tests for XSSFCell and SXSSFCell that do not work for HSSFCell

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1649527 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2015-01-05 14:03:37 +00:00
parent c2d82b6005
commit fa8eae2bfd
6 changed files with 265 additions and 227 deletions

View File

@ -89,7 +89,7 @@ public final class OOXMLLite {
//collect unit tests //collect unit tests
System.out.println("Collecting unit tests from " + _testDir); System.out.println("Collecting unit tests from " + _testDir);
collectTests(_testDir, _testDir, lst, ".+.class$", collectTests(_testDir, _testDir, lst, ".+.class$",
".+(TestUnfixedBugs|MemoryUsage|TestDataProvider|TestDataSamples|All.+Tests|ZipFileAssert|PkiTestUtils|TestCellFormatPart\\$\\d|TestSignatureInfo\\$\\d).class"); ".+(BaseTestXCell|TestUnfixedBugs|MemoryUsage|TestDataProvider|TestDataSamples|All.+Tests|ZipFileAssert|PkiTestUtils|TestCellFormatPart\\$\\d|TestSignatureInfo\\$\\d).class");
System.out.println("Found " + lst.size() + " classes"); System.out.println("Found " + lst.size() + " classes");
//run tests //run tests

View File

@ -0,0 +1,79 @@
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.ss.usermodel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.xssf.SXSSFITestDataProvider;
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCell;
/**
* Class for combined testing of XML-specific functionality of
* {@link XSSFCell} and {@link SXSSFCell}.
*
* Any test that is applicable for {@link HSSFCell} as well should go into
* the common base class {@link BaseTestCell}.
*/
public abstract class BaseTestXCell extends BaseTestCell {
protected BaseTestXCell(ITestDataProvider testDataProvider) {
super(testDataProvider);
}
public void testXmlEncoding(){
Workbook wb = _testDataProvider.createWorkbook();
Sheet sh = wb.createSheet();
Row row = sh.createRow(0);
Cell cell = row.createCell(0);
String sval = "\u0000\u0002\u0012<>\t\n\u00a0 &\"POI\'\u2122";
cell.setCellValue(sval);
wb = _testDataProvider.writeOutAndReadBack(wb);
// invalid characters are replaced with question marks
assertEquals("???<>\t\n\u00a0 &\"POI\'\u2122", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
}
public void testEncodingbeloAscii(){
Workbook xwb = XSSFITestDataProvider.instance.createWorkbook();
Cell xCell = xwb.createSheet().createRow(0).createCell(0);
Workbook swb = SXSSFITestDataProvider.instance.createWorkbook();
Cell sCell = swb.createSheet().createRow(0).createCell(0);
StringBuffer sb = new StringBuffer();
// test all possible characters
for(int i = 0; i < Character.MAX_VALUE; i++) sb.append((char)i) ;
String str = sb.toString();
xCell.setCellValue(str);
assertEquals(str, xCell.getStringCellValue());
sCell.setCellValue(str);
assertEquals(str, sCell.getStringCellValue());
xwb = XSSFITestDataProvider.instance.writeOutAndReadBack(xwb);
swb = SXSSFITestDataProvider.instance.writeOutAndReadBack(swb);
xCell = xwb.getSheetAt(0).createRow(0).createCell(0);
sCell = swb.getSheetAt(0).createRow(0).createCell(0);
assertEquals(xCell.getStringCellValue(), sCell.getStringCellValue());
}
}

View File

@ -23,30 +23,25 @@ import java.io.IOException;
import javax.xml.namespace.QName; import javax.xml.namespace.QName;
import org.apache.poi.ss.usermodel.BaseTestCell; import org.apache.poi.ss.usermodel.BaseTestXCell;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.SXSSFITestDataProvider; import org.apache.poi.xssf.SXSSFITestDataProvider;
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
/** /**
* * Tests various functionality having to do with {@link SXSSFCell}. For instance support for
* particular datatypes, etc.
*/ */
public class TestSXSSFCell extends BaseTestCell { public class TestSXSSFCell extends BaseTestXCell {
public TestSXSSFCell() { public TestSXSSFCell() {
super(SXSSFITestDataProvider.instance); super(SXSSFITestDataProvider.instance);
} }
@Override @Override
public void tearDown(){ public void tearDown(){
SXSSFITestDataProvider.instance.cleanup(); SXSSFITestDataProvider.instance.cleanup();
@ -81,47 +76,20 @@ public class TestSXSSFCell extends BaseTestCell {
"Only XSSFCells can be evaluated.", e.getMessage()); "Only XSSFCells can be evaluated.", e.getMessage());
} }
} }
public void testXmlEncoding(){ /**
Workbook wb = _testDataProvider.createWorkbook(); * this test involves evaluation of formulas which isn't supported for SXSSF
Sheet sh = wb.createSheet(); */
Row row = sh.createRow(0); @Override
Cell cell = row.createCell(0); public void testGetErrorCellValueFromFormulaCell() {
String sval = "\u0000\u0002\u0012<>\t\n\u00a0 &\"POI\'\u2122"; try {
cell.setCellValue(sval); super.testConvertStringFormulaCell();
fail("expected exception");
wb = _testDataProvider.writeOutAndReadBack(wb); } catch (IllegalArgumentException e){
assertEquals(
// invalid characters are replaced with question marks "Unexpected type of cell: class org.apache.poi.xssf.streaming.SXSSFCell. " +
assertEquals("???<>\t\n\u00a0 &\"POI\'\u2122", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue()); "Only XSSFCells can be evaluated.", e.getMessage());
}
}
public void testEncodingbeloAscii(){
Workbook xwb = new XSSFWorkbook();
Cell xCell = xwb.createSheet().createRow(0).createCell(0);
Workbook swb = SXSSFITestDataProvider.instance.createWorkbook();
Cell sCell = swb.createSheet().createRow(0).createCell(0);
StringBuffer sb = new StringBuffer();
// test all possible characters
for(int i = 0; i < Character.MAX_VALUE; i++) sb.append((char)i) ;
String str = sb.toString();
xCell.setCellValue(str);
assertEquals(str, xCell.getStringCellValue());
sCell.setCellValue(str);
assertEquals(str, sCell.getStringCellValue());
xwb = XSSFITestDataProvider.instance.writeOutAndReadBack(xwb);
swb = SXSSFITestDataProvider.instance.writeOutAndReadBack(swb);
xCell = xwb.getSheetAt(0).createRow(0).createCell(0);
sCell = swb.getSheetAt(0).createRow(0).createCell(0);
assertEquals(xCell.getStringCellValue(), sCell.getStringCellValue());
} }
public void testPreserveSpaces() throws IOException { public void testPreserveSpaces() throws IOException {
@ -133,13 +101,13 @@ public class TestSXSSFCell extends BaseTestCell {
"\n\nPOI \n", "\n\nPOI \n",
}; };
for(String str : samplesWithSpaces){ for(String str : samplesWithSpaces){
Workbook swb = new SXSSFWorkbook(); Workbook swb = _testDataProvider.createWorkbook();
Cell sCell = swb.createSheet().createRow(0).createCell(0); Cell sCell = swb.createSheet().createRow(0).createCell(0);
sCell.setCellValue(str); sCell.setCellValue(str);
assertEquals(sCell.getStringCellValue(), str); assertEquals(sCell.getStringCellValue(), str);
// read back as XSSF and check that xml:spaces="preserve" is set // read back as XSSF and check that xml:spaces="preserve" is set
XSSFWorkbook xwb = (XSSFWorkbook)SXSSFITestDataProvider.instance.writeOutAndReadBack(swb); XSSFWorkbook xwb = (XSSFWorkbook)_testDataProvider.writeOutAndReadBack(swb);
XSSFCell xCell = xwb.getSheetAt(0).getRow(0).getCell(0); XSSFCell xCell = xwb.getSheetAt(0).getRow(0).getCell(0);
CTRst is = xCell.getCTCell().getIs(); CTRst is = xCell.getCTCell().getIs();
@ -150,47 +118,4 @@ public class TestSXSSFCell extends BaseTestCell {
assertEquals("expected xml:spaces=\"preserve\" \"" + str + "\"", "preserve", t); assertEquals("expected xml:spaces=\"preserve\" \"" + str + "\"", "preserve", t);
} }
} }
public void testBug55658SetNumericValue(){
Workbook wb = new SXSSFWorkbook();
Sheet sh = wb.createSheet();
Row row = sh.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(Integer.valueOf(23));
cell.setCellValue("some");
cell = row.createCell(1);
cell.setCellValue(Integer.valueOf(23));
cell.setCellValue("24");
wb = _testDataProvider.writeOutAndReadBack(wb);
assertEquals("some", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
assertEquals("24", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
}
public void testRemoveHyperlink(){
Workbook wb = _testDataProvider.createWorkbook();
Sheet sh = wb.createSheet("test");
Row row = sh.createRow(0);
CreationHelper helper = wb.getCreationHelper();
Cell cell1 = row.createCell(1);
Hyperlink link1 = helper.createHyperlink(Hyperlink.LINK_URL);
cell1.setHyperlink(link1);
assertNotNull(cell1.getHyperlink());
cell1.removeHyperlink();
assertNull(cell1.getHyperlink());
Cell cell2 = row.createCell(0);
Hyperlink link2 = helper.createHyperlink(Hyperlink.LINK_URL);
cell2.setHyperlink(link2);
assertNotNull(cell2.getHyperlink());
cell2.setHyperlink(null);
assertNull(cell2.getHyperlink());
_testDataProvider.writeOutAndReadBack(wb);
}
} }

View File

@ -19,10 +19,10 @@ package org.apache.poi.xssf.usermodel;
import java.io.IOException; import java.io.IOException;
import org.apache.poi.ss.usermodel.BaseTestCell; import org.apache.poi.ss.usermodel.BaseTestXCell;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Hyperlink; import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -37,7 +37,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellType;
/** /**
* @author Yegor Kozlov * @author Yegor Kozlov
*/ */
public final class TestXSSFCell extends BaseTestCell { public final class TestXSSFCell extends BaseTestXCell {
public TestXSSFCell() { public TestXSSFCell() {
super(XSSFITestDataProvider.instance); super(XSSFITestDataProvider.instance);
@ -98,28 +98,28 @@ public final class TestXSSFCell extends BaseTestCell {
*/ */
public void test47278() { public void test47278() {
XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.createWorkbook(); XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.createWorkbook();
XSSFSheet sheet = wb.createSheet(); Sheet sheet = wb.createSheet();
XSSFRow row = sheet.createRow(0); Row row = sheet.createRow(0);
SharedStringsTable sst = wb.getSharedStringSource(); SharedStringsTable sst = wb.getSharedStringSource();
assertEquals(0, sst.getCount()); assertEquals(0, sst.getCount());
//case 1. cell.setCellValue(new XSSFRichTextString((String)null)); //case 1. cell.setCellValue(new XSSFRichTextString((String)null));
XSSFCell cell_0 = row.createCell(0); Cell cell_0 = row.createCell(0);
XSSFRichTextString str = new XSSFRichTextString((String)null); RichTextString str = new XSSFRichTextString((String)null);
assertNull(str.getString()); assertNull(str.getString());
cell_0.setCellValue(str); cell_0.setCellValue(str);
assertEquals(0, sst.getCount()); assertEquals(0, sst.getCount());
assertEquals(XSSFCell.CELL_TYPE_BLANK, cell_0.getCellType()); assertEquals(Cell.CELL_TYPE_BLANK, cell_0.getCellType());
//case 2. cell.setCellValue((String)null); //case 2. cell.setCellValue((String)null);
XSSFCell cell_1 = row.createCell(1); Cell cell_1 = row.createCell(1);
cell_1.setCellValue((String)null); cell_1.setCellValue((String)null);
assertEquals(0, sst.getCount()); assertEquals(0, sst.getCount());
assertEquals(XSSFCell.CELL_TYPE_BLANK, cell_1.getCellType()); assertEquals(Cell.CELL_TYPE_BLANK, cell_1.getCellType());
} }
public void testFormulaString() throws IOException { public void testFormulaString() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.createWorkbook();
try { try {
XSSFCell cell = wb.createSheet().createRow(0).createCell(0); XSSFCell cell = wb.createSheet().createRow(0).createCell(0);
CTCell ctCell = cell.getCTCell(); //low-level bean holding cell's xml CTCell ctCell = cell.getCTCell(); //low-level bean holding cell's xml
@ -184,25 +184,6 @@ public final class TestXSSFCell extends BaseTestCell {
assertEquals(null, cell.getCellStyle()); assertEquals(null, cell.getCellStyle());
} }
/**
* Cell with the formula that returns error must return error code(There was
* an problem that cell could not return error value form formula cell).
* @throws IOException
*/
public void testGetErrorCellValueFromFormulaCell() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook();
try {
XSSFSheet sheet = wb.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellFormula("SQRT(-1)");
wb.getCreationHelper().createFormulaEvaluator().evaluateFormulaCell(cell);
assertEquals(36, cell.getErrorCellValue());
} finally {
wb.close();
}
}
public void testMissingRAttribute() { public void testMissingRAttribute() {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet(); XSSFSheet sheet = wb.createSheet();
@ -386,28 +367,6 @@ public final class TestXSSFCell extends BaseTestCell {
} }
} }
public void testRemoveHyperlink() {
final Workbook wb = new XSSFWorkbook();
final Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell1 = row.createCell(1);
Hyperlink link1 = new XSSFHyperlink(Hyperlink.LINK_URL);
cell1.setHyperlink(link1);
assertNotNull(cell1.getHyperlink());
cell1.removeHyperlink();
assertNull(cell1.getHyperlink());
Cell cell2 = row.createCell(0);
Hyperlink link2 = new XSSFHyperlink(Hyperlink.LINK_URL);
cell2.setHyperlink(link2);
assertNotNull(cell2.getHyperlink());
cell2.setHyperlink(null);
assertNull(cell2.getHyperlink());
XSSFTestDataSamples.writeOutAndReadBack(wb);
}
public void testBug56644ReturnNull() throws IOException { public void testBug56644ReturnNull() throws IOException {
Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56644.xlsx"); Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56644.xlsx");
try { try {

View File

@ -34,8 +34,9 @@ import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.BaseTestCell; import org.apache.poi.ss.usermodel.BaseTestCell;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.ErrorConstants; import org.apache.poi.ss.usermodel.ErrorConstants;
import org.apache.poi.ss.usermodel.Hyperlink; import org.apache.poi.ss.usermodel.FormulaError;
import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -51,6 +52,7 @@ public final class TestHSSFCell extends BaseTestCell {
public TestHSSFCell() { public TestHSSFCell() {
super(HSSFITestDataProvider.instance); super(HSSFITestDataProvider.instance);
} }
/** /**
* Checks that the recognition of files using 1904 date windowing * Checks that the recognition of files using 1904 date windowing
* is working properly. Conversion of the date is also an issue, * is working properly. Conversion of the date is also an issue,
@ -189,27 +191,31 @@ public final class TestHSSFCell extends BaseTestCell {
// //
// fos.close(); // fos.close();
wb = _testDataProvider.writeOutAndReadBack(wb); Workbook wbBack = _testDataProvider.writeOutAndReadBack(wb);
wb.close();
assertEquals(1, ((HSSFSheet)wbBack.getSheetAt(0)).getSheet().getActiveCellRow());
assertEquals(3, ((HSSFSheet)wbBack.getSheetAt(0)).getSheet().getActiveCellCol());
assertEquals(1, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellRow()); wbBack.getSheetAt(0).getRow(3).getCell(3).setAsActiveCell();
assertEquals(3, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellCol());
wb.getSheetAt(0).getRow(3).getCell(3).setAsActiveCell();
assertEquals(3, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellRow()); assertEquals(3, ((HSSFSheet)wbBack.getSheetAt(0)).getSheet().getActiveCellRow());
assertEquals(3, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellCol()); assertEquals(3, ((HSSFSheet)wbBack.getSheetAt(0)).getSheet().getActiveCellCol());
// fos = new FileOutputStream("/tmp/56114a.xls"); // fos = new FileOutputStream("/tmp/56114a.xls");
// //
// wb.write(fos); // wbBack.write(fos);
// //
// fos.close(); // fos.close();
wb = _testDataProvider.writeOutAndReadBack(wb); Workbook wbBack2 = _testDataProvider.writeOutAndReadBack(wbBack);
wbBack.close();
assertEquals(3, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellRow()); assertEquals(3, ((HSSFSheet)wbBack2.getSheetAt(0)).getSheet().getActiveCellRow());
assertEquals(3, ((HSSFSheet)wb.getSheetAt(0)).getSheet().getActiveCellCol()); assertEquals(3, ((HSSFSheet)wbBack2.getSheetAt(0)).getSheet().getActiveCellCol());
wbBack2.close();
} }
/** /**
* Test reading hyperlinks * Test reading hyperlinks
*/ */
@ -254,26 +260,6 @@ public final class TestHSSFCell extends BaseTestCell {
assertEquals(1, link2.getFirstColumn()); assertEquals(1, link2.getFirstColumn());
} }
public void testRemoveHyperlink() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell1 = row.createCell(1);
HSSFHyperlink link1 = new HSSFHyperlink(Hyperlink.LINK_URL);
assertNotNull(link1);
cell1.removeHyperlink();
assertNull(cell1.getHyperlink());
HSSFCell cell2 = row.createCell(0);
HSSFHyperlink link2 = new HSSFHyperlink(Hyperlink.LINK_URL);
assertNotNull(link2);
cell2.setHyperlink(null);
assertNull(cell2.getHyperlink());
HSSFTestDataSamples.writeOutAndReadBack(wb);
}
/** /**
* Test to ensure we can only assign cell styles that belong * Test to ensure we can only assign cell styles that belong
* to our workbook, and not those from other workbooks. * to our workbook, and not those from other workbooks.
@ -324,16 +310,19 @@ public final class TestHSSFCell extends BaseTestCell {
* the {@link StringRecord} following the {@link FormulaRecord} after the result type had been * the {@link StringRecord} following the {@link FormulaRecord} after the result type had been
* changed to number/boolean/error. Excel silently ignores the extra record, but some POI * changed to number/boolean/error. Excel silently ignores the extra record, but some POI
* versions (prior to bug 46213 / r717883) crash instead. * versions (prior to bug 46213 / r717883) crash instead.
* @throws IOException
*/ */
public void testCachedTypeChange() { public void testCachedTypeChange() throws IOException {
HSSFSheet sheet = new HSSFWorkbook().createSheet("Sheet1"); HSSFWorkbook wb = new HSSFWorkbook();
HSSFCell cell = sheet.createRow(0).createCell(0); HSSFSheet sheet = wb.createSheet("Sheet1");
Cell cell = sheet.createRow(0).createCell(0);
cell.setCellFormula("A1"); cell.setCellFormula("A1");
cell.setCellValue("abc"); cell.setCellValue("abc");
confirmStringRecord(sheet, true); confirmStringRecord(sheet, true);
cell.setCellValue(123); cell.setCellValue(123);
Record[] recs = RecordInspector.getRecords(sheet, 0); Record[] recs = RecordInspector.getRecords(sheet, 0);
if (recs.length == 28 && recs[23] instanceof StringRecord) { if (recs.length == 28 && recs[23] instanceof StringRecord) {
wb.close();
throw new AssertionFailedError("Identified bug - leftover StringRecord"); throw new AssertionFailedError("Identified bug - leftover StringRecord");
} }
confirmStringRecord(sheet, false); confirmStringRecord(sheet, false);
@ -349,6 +338,7 @@ public final class TestHSSFCell extends BaseTestCell {
confirmStringRecord(sheet, true); confirmStringRecord(sheet, true);
cell.setCellValue(false); cell.setCellValue(false);
confirmStringRecord(sheet, false); confirmStringRecord(sheet, false);
wb.close();
} }
private static void confirmStringRecord(HSSFSheet sheet, boolean isPresent) { private static void confirmStringRecord(HSSFSheet sheet, boolean isPresent) {
@ -368,9 +358,11 @@ public final class TestHSSFCell extends BaseTestCell {
/** /**
* The maximum length of cell contents (text) is 32,767 characters. * The maximum length of cell contents (text) is 32,767 characters.
* @throws IOException
*/ */
public void testMaxTextLength(){ public void testMaxTextLength() throws IOException{
HSSFSheet sheet = new HSSFWorkbook().createSheet(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCell cell = sheet.createRow(0).createCell(0); HSSFCell cell = sheet.createRow(0).createCell(0);
int maxlen = SpreadsheetVersion.EXCEL97.getMaxTextLength(); int maxlen = SpreadsheetVersion.EXCEL97.getMaxTextLength();
@ -393,6 +385,7 @@ public final class TestHSSFCell extends BaseTestCell {
} catch (IllegalArgumentException e){ } catch (IllegalArgumentException e){
assertEquals("The maximum length of cell contents (text) is 32,767 characters", e.getMessage()); assertEquals("The maximum length of cell contents (text) is 32,767 characters", e.getMessage());
} }
wb.close();
} }
/** /**
@ -440,11 +433,11 @@ public final class TestHSSFCell extends BaseTestCell {
cell.removeCellComment(); cell.removeCellComment();
} }
public void testCellType() { public void testCellType() throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
HSSFSheet sheet = wb.createSheet(); Sheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0); Row row = sheet.createRow(0);
HSSFCell cell = row.createCell(0); Cell cell = row.createCell(0);
cell.setCellType(Cell.CELL_TYPE_BLANK); cell.setCellType(Cell.CELL_TYPE_BLANK);
assertNull(null, cell.getDateCellValue()); assertNull(null, cell.getDateCellValue());
@ -460,6 +453,7 @@ public final class TestHSSFCell extends BaseTestCell {
cell.setCellType(Cell.CELL_TYPE_BOOLEAN); cell.setCellType(Cell.CELL_TYPE_BOOLEAN);
assertEquals("TRUE", cell.toString()); assertEquals("TRUE", cell.toString());
cell.setCellType(Cell.CELL_TYPE_BOOLEAN); cell.setCellType(Cell.CELL_TYPE_BOOLEAN);
cell.setCellValue("" + FormulaError.VALUE.name());
cell.setCellType(Cell.CELL_TYPE_ERROR); cell.setCellType(Cell.CELL_TYPE_ERROR);
assertEquals("#VALUE!", cell.toString()); assertEquals("#VALUE!", cell.toString());
cell.setCellType(Cell.CELL_TYPE_ERROR); cell.setCellType(Cell.CELL_TYPE_ERROR);
@ -479,41 +473,6 @@ public final class TestHSSFCell extends BaseTestCell {
cell.setCellValue((String)null); cell.setCellValue((String)null);
cell.setCellValue((RichTextString)null); cell.setCellValue((RichTextString)null);
} wb.close();
public void testSetRemoveStyle() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
HSSFCellStyle defaultStyle = wb.getCellStyleAt((short)15);
// Starts out with the default style
assertEquals(defaultStyle, cell.getCellStyle());
// Create some styles, no change
HSSFCellStyle style1 = wb.createCellStyle();
HSSFCellStyle style2 = wb.createCellStyle();
style1.setDataFormat((short)2);
style2.setDataFormat((short)3);
assertEquals(defaultStyle, cell.getCellStyle());
// Apply one, changes
cell.setCellStyle(style1);
assertEquals(style1, cell.getCellStyle());
// Apply the other, changes
cell.setCellStyle(style2);
assertEquals(style2, cell.getCellStyle());
// Remove, goes back to default
cell.setCellStyle(null);
assertEquals(defaultStyle, cell.getCellStyle());
// Add back, returns
cell.setCellStyle(style2);
assertEquals(style2, cell.getCellStyle());
} }
} }

View File

@ -17,15 +17,17 @@
package org.apache.poi.ss.usermodel; package org.apache.poi.ss.usermodel;
import java.io.IOException;
import java.util.Calendar; import java.util.Calendar;
import junit.framework.AssertionFailedError; import junit.framework.AssertionFailedError;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.ITestDataProvider;
/** /**
* Common superclass for testing implementatiosn of * Common superclass for testing implementations of
* {@link org.apache.poi.ss.usermodel.Cell} * {@link org.apache.poi.ss.usermodel.Cell}
*/ */
public abstract class BaseTestCell extends TestCase { public abstract class BaseTestCell extends TestCase {
@ -579,4 +581,118 @@ public abstract class BaseTestCell extends TestCase {
assertFalse(style2.getHidden()); assertFalse(style2.getHidden());
} }
public void testBug55658SetNumericValue(){
Workbook wb = _testDataProvider.createWorkbook();
Sheet sh = wb.createSheet();
Row row = sh.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(Integer.valueOf(23));
cell.setCellValue("some");
cell = row.createCell(1);
cell.setCellValue(Integer.valueOf(23));
cell.setCellValue("24");
wb = _testDataProvider.writeOutAndReadBack(wb);
assertEquals("some", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
assertEquals("24", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
}
public void testRemoveHyperlink(){
Workbook wb = _testDataProvider.createWorkbook();
Sheet sh = wb.createSheet("test");
Row row = sh.createRow(0);
CreationHelper helper = wb.getCreationHelper();
Cell cell1 = row.createCell(1);
Hyperlink link1 = helper.createHyperlink(Hyperlink.LINK_URL);
cell1.setHyperlink(link1);
assertNotNull(cell1.getHyperlink());
cell1.removeHyperlink();
assertNull(cell1.getHyperlink());
Cell cell2 = row.createCell(0);
Hyperlink link2 = helper.createHyperlink(Hyperlink.LINK_URL);
cell2.setHyperlink(link2);
assertNotNull(cell2.getHyperlink());
cell2.setHyperlink(null);
assertNull(cell2.getHyperlink());
Cell cell3 = row.createCell(2);
Hyperlink link3 = helper.createHyperlink(Hyperlink.LINK_URL);
link3.setAddress("http://poi.apache.org/");
cell3.setHyperlink(link3);
assertNotNull(cell3.getHyperlink());
Workbook wbBack = _testDataProvider.writeOutAndReadBack(wb);
assertNotNull(wbBack);
cell1 = wbBack.getSheet("test").getRow(0).getCell(1);
assertNull(cell1.getHyperlink());
cell2 = wbBack.getSheet("test").getRow(0).getCell(0);
assertNull(cell2.getHyperlink());
cell3 = wbBack.getSheet("test").getRow(0).getCell(2);
assertNotNull(cell3.getHyperlink());
}
/**
* Cell with the formula that returns error must return error code(There was
* an problem that cell could not return error value form formula cell).
* @throws IOException
*/
public void testGetErrorCellValueFromFormulaCell() throws IOException {
Workbook wb = _testDataProvider.createWorkbook();
try {
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellFormula("SQRT(-1)");
wb.getCreationHelper().createFormulaEvaluator().evaluateFormulaCell(cell);
assertEquals(36, cell.getErrorCellValue());
} finally {
wb.close();
}
}
public void testSetRemoveStyle() throws Exception {
Workbook wb = _testDataProvider.createWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
// different default style indexes for HSSF and XSSF/SXSSF
CellStyle defaultStyle = wb.getCellStyleAt(wb instanceof HSSFWorkbook ? (short)15 : (short)0);
// Starts out with the default style
assertEquals(defaultStyle, cell.getCellStyle());
// Create some styles, no change
CellStyle style1 = wb.createCellStyle();
CellStyle style2 = wb.createCellStyle();
style1.setDataFormat((short)2);
style2.setDataFormat((short)3);
assertEquals(defaultStyle, cell.getCellStyle());
// Apply one, changes
cell.setCellStyle(style1);
assertEquals(style1, cell.getCellStyle());
// Apply the other, changes
cell.setCellStyle(style2);
assertEquals(style2, cell.getCellStyle());
// Remove, goes back to default
cell.setCellStyle(null);
assertEquals(defaultStyle, cell.getCellStyle());
// Add back, returns
cell.setCellStyle(style2);
assertEquals(style2, cell.getCellStyle());
wb.close();
}
} }