瀏覽代碼

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
tags/REL_3_12_BETA1
Dominik Stadler 9 年之前
父節點
當前提交
b7ab04e5f2

+ 2
- 4
src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntEvaluationResult.java 查看文件

/** /**
* This boolean flag is used to determine if the evaluation completed * This boolean flag is used to determine if the evaluation completed
* without error. This alone doesn't ensure that the evaluation was * without error. This alone doesn't ensure that the evaluation was
* sucessful.
* successful.
*/ */
private boolean evaluationCompletedWithError ; private boolean evaluationCompletedWithError ;
+ ", returnValue=" + returnValue + ", errorMessage=" + ", returnValue=" + returnValue + ", errorMessage="
+ errorMessage + ", actualDelta=" + actualDelta + ", cellName=" + errorMessage + ", actualDelta=" + actualDelta + ", cellName="
+ cellName + "]"; + cellName + "]";
}

}
} }

+ 6
- 16
src/excelant/java/org/apache/poi/ss/excelant/util/ExcelAntWorkbookUtil.java 查看文件



private Workbook workbook; 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 * Constructs an instance using a String that contains the fully qualified
*/ */
protected ExcelAntWorkbookUtil(String fName) { protected ExcelAntWorkbookUtil(String fName) {
excelFileName = fName; excelFileName = fName;
xlsMacroList = new HashMap<String, FreeRefFunction>() ;
loadWorkbook(); loadWorkbook();


} }
*/ */
protected ExcelAntWorkbookUtil(Workbook wb) { protected ExcelAntWorkbookUtil(Workbook wb) {
workbook = wb; workbook = wb;
xlsMacroList = new HashMap<String, FreeRefFunction>() ;
} }


/** /**
protected FormulaEvaluator getEvaluator( String fileName ) { protected FormulaEvaluator getEvaluator( String fileName ) {
FormulaEvaluator evaluator ; FormulaEvaluator evaluator ;
if (fileName.endsWith(".xlsx")) { if (fileName.endsWith(".xlsx")) {
if( xlsMacroList != null && xlsMacroList.size() > 0 ) {
if( xlsMacroList.size() > 0 ) {
evaluator = XSSFFormulaEvaluator.create( (XSSFWorkbook) workbook, evaluator = XSSFFormulaEvaluator.create( (XSSFWorkbook) workbook,
null, null,
getFunctions() ) ; getFunctions() ) ;
} }
evaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook); evaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
} else { } else {
if( xlsMacroList != null && xlsMacroList.size() > 0 ) {
if( xlsMacroList.size() > 0 ) {
evaluator = HSSFFormulaEvaluator.create( (HSSFWorkbook)workbook, evaluator = HSSFFormulaEvaluator.create( (HSSFWorkbook)workbook,
null, null,
getFunctions() ) ; getFunctions() ) ;
Byte.toString( resultOfEval.getErrorValue() ) ; Byte.toString( resultOfEval.getErrorValue() ) ;
} }


evalResults = new ExcelAntEvaluationResult(false, false,
evalResults = new ExcelAntEvaluationResult(true, false,
resultOfEval.getNumberValue(), resultOfEval.getNumberValue(),
"Evaluation failed due to an evaluation error of " "Evaluation failed due to an evaluation error of "
+ resultOfEval.getErrorValue() + resultOfEval.getErrorValue()
*/ */
public String getCellAsString( String cellName ) { public String getCellAsString( String cellName ) {
Cell cell = getCell( cellName ) ; Cell cell = getCell( cellName ) ;
if( cell != null ) {
return cell.getStringCellValue() ;
}
return "" ;
return cell.getStringCellValue() ;
} }




*/ */
public double getCellAsDouble( String cellName ) { public double getCellAsDouble( String cellName ) {
Cell cell = getCell( 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 * Returns a cell reference based on a String in standard Excel format
* @return * @return
*/ */
private Cell getCell(String cellName) { private Cell getCell(String cellName) {

CellReference cellRef = new CellReference(cellName); CellReference cellRef = new CellReference(cellName);
String sheetName = cellRef.getSheetName(); String sheetName = cellRef.getSheetName();
Sheet sheet = workbook.getSheet(sheetName); Sheet sheet = workbook.getSheet(sheetName);


return cell; return cell;
} }

} }

+ 208
- 73
src/excelant/testcases/org/apache/poi/ss/excelant/util/TestExcelAntWorkbookUtil.java 查看文件

} }


public void testStringConstructor() { public void testStringConstructor() {
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);
assertNotNull( fixture ) ;
assertNotNull(fixture);
} }


public void testLoadNotExistingFile() { public void testLoadNotExistingFile() {
try { try {
assertNotNull(new ExcelAntWorkbookUtilTestHelper(
assertNotNull(new ExcelAntWorkbookUtilTestHelper(
"notexistingFile" )); "notexistingFile" ));
fail("Should catch exception here"); fail("Should catch exception here");
} catch (BuildException e) { } catch (BuildException e) {
FileInputStream fis = new FileInputStream(workbookFile); FileInputStream fis = new FileInputStream(workbookFile);
Workbook workbook = WorkbookFactory.create(fis); Workbook workbook = WorkbookFactory.create(fis);


fixture = new ExcelAntWorkbookUtilTestHelper( workbook ) ;
assertNotNull( fixture ) ;
fixture = new ExcelAntWorkbookUtilTestHelper(workbook);
assertNotNull(fixture);
} }
public void testAddFunction() { 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() { 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() { 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() { 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() { 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() { public void testEvaluateCell() {
String cell = "'MortgageCalculator'!B4" ; String cell = "'MortgageCalculator'!B4" ;
double expectedValue = 790.79 ; double expectedValue = 790.79 ;
double precision = 0.1 ; double precision = 0.1 ;


fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName ) ;
fixture = new ExcelAntWorkbookUtilTestHelper(
mortgageCalculatorFileName);


ExcelAntEvaluationResult result = fixture.evaluateCell( cell,
ExcelAntEvaluationResult result = fixture.evaluateCell(cell,
expectedValue, 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() { 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() { public void testSetString() {
String cell = "'MortgageCalculator'!C14" ; String cell = "'MortgageCalculator'!C14" ;
String cellValue = "testString" ; 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() { public void testSetDate() {
String cell = "'MortgageCalculator'!C14" ; String cell = "'MortgageCalculator'!C14" ;
Date cellValue = new Date(); 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() { public void testGetNonexistingString() {
String cell = "'MortgageCalculator'!C33" ; 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() { public void testGetNonexistingDouble() {
String cell = "'MortgageCalculator'!C33" ; 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);
} }
} }

二進制
test-data/spreadsheet/excelant.xls 查看文件


Loading…
取消
儲存