diff options
-rw-r--r-- | src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java | 6 | ||||
-rw-r--r-- | src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java | 22 | ||||
-rw-r--r-- | src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java | 281 | ||||
-rw-r--r-- | test-data/spreadsheet/excelant.xls | bin | 37888 -> 23552 bytes |
4 files changed, 216 insertions, 93 deletions
diff --git a/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java b/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java index 6633357157..ae946dd8cd 100644 --- a/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java +++ b/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java @@ -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 ; @@ -108,7 +108,5 @@ public class ExcelAntEvaluationResult { + ", returnValue=" + returnValue + ", errorMessage=" + errorMessage + ", actualDelta=" + actualDelta + ", cellName=" + cellName + "]"; - } - - + } } diff --git a/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java b/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java index eec6157a65..c4f6969edd 100644 --- a/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java +++ b/src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java @@ -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,10 +329,7 @@ public class ExcelAntWorkbookUtil extends Typedef { */ public String getCellAsString( String cellName ) { Cell cell = getCell( cellName ) ; - if( cell != null ) { - return cell.getStringCellValue() ; - } - return "" ; + return cell.getStringCellValue() ; } @@ -346,10 +341,7 @@ public class ExcelAntWorkbookUtil extends Typedef { */ public double getCellAsDouble( String cellName ) { Cell cell = getCell( cellName ) ; - if( cell != null ) { - return cell.getNumericCellValue() ; - } - return 0.0 ; + return cell.getNumericCellValue() ; } /** * Returns a cell reference based on a String in standard Excel format @@ -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; } - } diff --git a/src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java b/src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java index 7e5b1e4534..afc330b9f8 100644 --- a/src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java +++ b/src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java @@ -48,15 +48,15 @@ public class TestExcelAntWorkbookUtil extends TestCase { } public void testStringConstructor() { - fixture = new ExcelAntWorkbookUtilTestHelper( - mortgageCalculatorFileName ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - assertNotNull( fixture ) ; + assertNotNull(fixture); } public void testLoadNotExistingFile() { try { - assertNotNull(new ExcelAntWorkbookUtilTestHelper( + assertNotNull(new ExcelAntWorkbookUtilTestHelper( "notexistingFile" )); fail("Should catch exception here"); } catch (BuildException e) { @@ -69,152 +69,287 @@ 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 ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + 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 ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - assertNotNull( fixture ) ; + assertNotNull(fixture); - Workbook workbook = fixture.getWorkbook() ; + Workbook workbook = fixture.getWorkbook(); - assertNotNull( workbook ) ; + assertNotNull(workbook); } public void testFileName() { - fixture = new ExcelAntWorkbookUtilTestHelper( - mortgageCalculatorFileName ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + 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 ) ; - - FormulaEvaluator evaluator = fixture.getEvaluator( - mortgageCalculatorFileName ) ; - - assertNotNull( evaluator ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); + FormulaEvaluator evaluator = fixture.getEvaluator( + mortgageCalculatorFileName); + 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") ; + fixture = new ExcelAntWorkbookUtilTestHelper( + BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx"); - FormulaEvaluator evaluator = fixture.getEvaluator( - BuildFileTest.getDataDir() + "/spreadsheet/sample.xlsx" ) ; + FormulaEvaluator evaluator = fixture.getEvaluator( + 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() { String cell = "'MortgageCalculator'!B4" ; double expectedValue = 790.79 ; double precision = 0.1 ; - fixture = new ExcelAntWorkbookUtilTestHelper( - mortgageCalculatorFileName ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - ExcelAntEvaluationResult result = fixture.evaluateCell( cell, + ExcelAntEvaluationResult result = fixture.evaluateCell(cell, expectedValue, - precision ) ; - - System.out.println( result ) ; - - assertTrue( result.didTestPass() ) ; + 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()); + 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 ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + 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() { String cell = "'MortgageCalculator'!C14" ; String cellValue = "testString" ; - fixture = new ExcelAntWorkbookUtilTestHelper( - mortgageCalculatorFileName ) ; - - fixture.setStringValue( cell, cellValue ) ; - - String value = fixture.getCellAsString( cell ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - assertNotNull( value ) ; + fixture.setStringValue(cell, cellValue); - assertEquals( cellValue, value ) ; + String value = fixture.getCellAsString(cell); + assertNotNull(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() { String cell = "'MortgageCalculator'!C14" ; Date cellValue = new Date(); - fixture = new ExcelAntWorkbookUtilTestHelper( - mortgageCalculatorFileName ) ; - - fixture.setDateValue( cell, cellValue ) ; - - double value = fixture.getCellAsDouble( cell ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - assertNotNull( value ) ; + fixture.setDateValue(cell, cellValue); - 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 ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + 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 ) ; + fixture = new ExcelAntWorkbookUtilTestHelper( + mortgageCalculatorFileName); - double value = fixture.getCellAsDouble( cell ) ; + double value = fixture.getCellAsDouble(cell); - assertEquals( 0.0, value ) ; + assertEquals(0.0, value); } } diff --git a/test-data/spreadsheet/excelant.xls b/test-data/spreadsheet/excelant.xls Binary files differindex e41edfbfd2..24f1fb3605 100644 --- a/test-data/spreadsheet/excelant.xls +++ b/test-data/spreadsheet/excelant.xls |