Update tests for ExcelAntWorkbookUtil, remove some unnecessary null-checks that can never happen, fix setting failed state on error in evaluation

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1649311 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2015-01-04 10:23:45 +00:00
parent 33c4268b2e
commit b7ab04e5f2
4 changed files with 216 additions and 93 deletions

View File

@ -30,7 +30,7 @@ public class ExcelAntEvaluationResult {
/**
* This boolean flag is used to determine if the evaluation completed
* without error. This alone doesn't ensure that the evaluation was
* sucessful.
* successful.
*/
private boolean evaluationCompletedWithError ;
@ -109,6 +109,4 @@ public class ExcelAntEvaluationResult {
+ errorMessage + ", actualDelta=" + actualDelta + ", cellName="
+ cellName + "]";
}
}

View File

@ -52,7 +52,7 @@ public class ExcelAntWorkbookUtil extends Typedef {
private Workbook workbook;
private HashMap<String, FreeRefFunction> xlsMacroList;
private final HashMap<String, FreeRefFunction> xlsMacroList = new HashMap<String, FreeRefFunction>();
/**
* Constructs an instance using a String that contains the fully qualified
@ -63,7 +63,6 @@ public class ExcelAntWorkbookUtil extends Typedef {
*/
protected ExcelAntWorkbookUtil(String fName) {
excelFileName = fName;
xlsMacroList = new HashMap<String, FreeRefFunction>() ;
loadWorkbook();
}
@ -75,7 +74,6 @@ public class ExcelAntWorkbookUtil extends Typedef {
*/
protected ExcelAntWorkbookUtil(Workbook wb) {
workbook = wb;
xlsMacroList = new HashMap<String, FreeRefFunction>() ;
}
/**
@ -164,14 +162,14 @@ public class ExcelAntWorkbookUtil extends Typedef {
protected FormulaEvaluator getEvaluator( String fileName ) {
FormulaEvaluator evaluator ;
if (fileName.endsWith(".xlsx")) {
if( xlsMacroList != null && xlsMacroList.size() > 0 ) {
if( xlsMacroList.size() > 0 ) {
evaluator = XSSFFormulaEvaluator.create( (XSSFWorkbook) workbook,
null,
getFunctions() ) ;
}
evaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
} else {
if( xlsMacroList != null && xlsMacroList.size() > 0 ) {
if( xlsMacroList.size() > 0 ) {
evaluator = HSSFFormulaEvaluator.create( (HSSFWorkbook)workbook,
null,
getFunctions() ) ;
@ -312,7 +310,7 @@ public class ExcelAntWorkbookUtil extends Typedef {
Byte.toString( resultOfEval.getErrorValue() ) ;
}
evalResults = new ExcelAntEvaluationResult(false, false,
evalResults = new ExcelAntEvaluationResult(true, false,
resultOfEval.getNumberValue(),
"Evaluation failed due to an evaluation error of "
+ resultOfEval.getErrorValue()
@ -331,11 +329,8 @@ public class ExcelAntWorkbookUtil extends Typedef {
*/
public String getCellAsString( String cellName ) {
Cell cell = getCell( cellName ) ;
if( cell != null ) {
return cell.getStringCellValue() ;
}
return "" ;
}
/**
@ -346,11 +341,8 @@ public class ExcelAntWorkbookUtil extends Typedef {
*/
public double getCellAsDouble( String cellName ) {
Cell cell = getCell( cellName ) ;
if( cell != null ) {
return cell.getNumericCellValue() ;
}
return 0.0 ;
}
/**
* Returns a cell reference based on a String in standard Excel format
* (SheetName!CellId). This method will create a new cell if the
@ -360,7 +352,6 @@ public class ExcelAntWorkbookUtil extends Typedef {
* @return
*/
private Cell getCell(String cellName) {
CellReference cellRef = new CellReference(cellName);
String sheetName = cellRef.getSheetName();
Sheet sheet = workbook.getSheet(sheetName);
@ -384,5 +375,4 @@ public class ExcelAntWorkbookUtil extends Typedef {
return cell;
}
}

View File

@ -49,9 +49,9 @@ public class TestExcelAntWorkbookUtil extends TestCase {
public void testStringConstructor() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
assertNotNull( fixture ) ;
assertNotNull(fixture);
}
public void testLoadNotExistingFile() {
@ -69,70 +69,120 @@ public class TestExcelAntWorkbookUtil extends TestCase {
FileInputStream fis = new FileInputStream(workbookFile);
Workbook workbook = WorkbookFactory.create(fis);
fixture = new ExcelAntWorkbookUtilTestHelper( workbook ) ;
assertNotNull( fixture ) ;
fixture = new ExcelAntWorkbookUtilTestHelper(workbook);
assertNotNull(fixture);
}
public void testAddFunction() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
assertNotNull( fixture ) ;
assertNotNull(fixture);
fixture.addFunction("h2_ZFactor", new CalculateMortgageFunction() ) ;
fixture.addFunction("h2_ZFactor", new CalculateMortgageFunction());
UDFFinder functions = fixture.getFunctions() ;
UDFFinder functions = fixture.getFunctions();
assertNotNull( functions ) ;
assertNotNull(functions);
assertNotNull(functions.findFunction("h2_ZFactor"));
}
public void testAddFunctionClassName() throws Exception {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
assertNotNull(fixture);
fixture.addFunction("h2_ZFactor", CalculateMortgageFunction.class.getName());
UDFFinder functions = fixture.getFunctions();
assertNotNull(functions);
assertNotNull(functions.findFunction("h2_ZFactor"));
}
public void testAddFunctionInvalidClassName() throws Exception {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
assertNotNull(fixture);
fixture.addFunction("h2_ZFactor", String.class.getName());
UDFFinder functions = fixture.getFunctions();
assertNotNull(functions);
assertNull(functions.findFunction("h2_ZFactor"));
}
public void testGetWorkbook() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
assertNotNull( fixture ) ;
assertNotNull(fixture);
Workbook workbook = fixture.getWorkbook() ;
Workbook workbook = fixture.getWorkbook();
assertNotNull( workbook ) ;
assertNotNull(workbook);
}
public void testFileName() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
assertNotNull( fixture ) ;
assertNotNull(fixture);
String fileName = fixture.getFileName() ;
String fileName = fixture.getFileName();
assertNotNull( fileName ) ;
assertNotNull(fileName);
assertEquals( mortgageCalculatorFileName, fileName ) ;
assertEquals(mortgageCalculatorFileName, fileName);
}
public void testGetEvaluator() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
FormulaEvaluator evaluator = fixture.getEvaluator(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
assertNotNull( evaluator ) ;
assertNotNull(evaluator);
}
public void testGetEvaluatorWithUDF() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
fixture.addFunction("h2_ZFactor", new CalculateMortgageFunction());
FormulaEvaluator evaluator = fixture.getEvaluator(
mortgageCalculatorFileName);
assertNotNull(evaluator);
}
public void testGetEvaluatorXLSX() {
fixture = new ExcelAntWorkbookUtilTestHelper(
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx") ;
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx");
FormulaEvaluator evaluator = fixture.getEvaluator(
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx" ) ;
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx");
assertNotNull( evaluator ) ;
assertNotNull(evaluator);
}
public void testGetEvaluatorXLSXWithFunction() {
fixture = new ExcelAntWorkbookUtilTestHelper(
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx");
fixture.addFunction("h2_ZFactor", new CalculateMortgageFunction());
FormulaEvaluator evaluator = fixture.getEvaluator(
BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx");
assertNotNull(evaluator);
}
public void testEvaluateCell() {
@ -141,25 +191,71 @@ public class TestExcelAntWorkbookUtil extends TestCase {
double precision = 0.1 ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
ExcelAntEvaluationResult result = fixture.evaluateCell( cell,
ExcelAntEvaluationResult result = fixture.evaluateCell(cell,
expectedValue,
precision ) ;
precision);
System.out.println( result ) ;
//System.out.println(result);
assertTrue(result.toString().contains("evaluationCompletedWithError=false"));
assertTrue(result.toString().contains("returnValue=790.79"));
assertTrue(result.toString().contains("cellName='MortgageCalculator'!B4"));
assertTrue( result.didTestPass() ) ;
assertFalse(result.evaluationCompleteWithError());
assertTrue(result.didTestPass());
}
public void testEvaluateCellFailedPrecision() {
String cell = "'MortgageCalculator'!B4" ;
double expectedValue = 790.79 ;
double precision = 0.0000000000001 ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
ExcelAntEvaluationResult result = fixture.evaluateCell(cell,
expectedValue,
precision);
//System.out.println(result);
assertTrue(result.toString().contains("evaluationCompletedWithError=false"));
assertTrue(result.toString().contains("returnValue=790.79"));
assertTrue(result.toString().contains("cellName='MortgageCalculator'!B4"));
assertFalse(result.evaluationCompleteWithError());
assertFalse(result.didTestPass());
}
public void testEvaluateCellWithError() {
String cell = "'ErrorCell'!A1" ;
double expectedValue = 790.79 ;
double precision = 0.1 ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
ExcelAntEvaluationResult result = fixture.evaluateCell(cell,
expectedValue,
precision);
System.out.println(result);
assertTrue(result.toString().contains("evaluationCompletedWithError=true"));
assertTrue(result.toString().contains("returnValue=0.0"));
assertTrue(result.toString().contains("cellName='ErrorCell'!A1"));
assertTrue(result.evaluationCompleteWithError());
assertFalse(result.didTestPass());
}
public void testGetSheets() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
ArrayList<String> sheets = fixture.getSheets() ;
ArrayList<String> sheets = fixture.getSheets();
assertNotNull( sheets ) ;
assertEquals( sheets.size(), 3 ) ;
assertNotNull(sheets);
assertEquals(sheets.size(), 3);
}
public void testSetString() {
@ -167,16 +263,57 @@ public class TestExcelAntWorkbookUtil extends TestCase {
String cellValue = "testString" ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
fixture.setStringValue( cell, cellValue ) ;
fixture.setStringValue(cell, cellValue);
String value = fixture.getCellAsString( cell ) ;
String value = fixture.getCellAsString(cell);
assertNotNull( value ) ;
assertNotNull(value);
assertEquals(cellValue, value);
}
assertEquals( cellValue, value ) ;
public void testSetNotExistingSheet() {
String cell = "'NotexistingSheet'!C14" ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
try {
fixture.setStringValue(cell, "some");
fail("Should catch exception here");
} catch (BuildException e) {
assertTrue(e.getMessage().contains("NotexistingSheet"));
}
}
public void testSetFormula() {
String cell = "'MortgageCalculator'!C14" ;
String cellValue = "SUM(B14:B18)" ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
fixture.setFormulaValue(cell, cellValue);
double value = fixture.getCellAsDouble(cell);
assertNotNull(value);
assertEquals(0.0, value);
}
public void testSetDoubleValue() {
String cell = "'MortgageCalculator'!C14" ;
double cellValue = 1.2;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
fixture.setDoubleValue(cell, cellValue);
Double value = fixture.getCellAsDouble(cell);
assertNotNull(value);
assertEquals(cellValue, value);
}
public void testSetDate() {
@ -184,37 +321,35 @@ public class TestExcelAntWorkbookUtil extends TestCase {
Date cellValue = new Date();
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
fixture.setDateValue( cell, cellValue ) ;
fixture.setDateValue(cell, cellValue);
double value = fixture.getCellAsDouble( cell ) ;
assertNotNull( value ) ;
assertEquals( DateUtil.getExcelDate(cellValue, false), value ) ;
double value = fixture.getCellAsDouble(cell);
assertNotNull(value);
assertEquals(DateUtil.getExcelDate(cellValue, false), value);
}
public void testGetNonexistingString() {
String cell = "'MortgageCalculator'!C33" ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
String value = fixture.getCellAsString( cell ) ;
String value = fixture.getCellAsString(cell);
assertEquals( "", value ) ;
assertEquals("", value);
}
public void testGetNonexistingDouble() {
String cell = "'MortgageCalculator'!C33" ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
mortgageCalculatorFileName);
double value = fixture.getCellAsDouble( cell ) ;
double value = fixture.getCellAsDouble(cell);
assertEquals( 0.0, value ) ;
assertEquals(0.0, value);
}
}

Binary file not shown.