mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
allow ATP function override
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1925444 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a7231a3764
commit
1d510c7fc3
@ -0,0 +1,58 @@
|
||||
package org.apache.poi.ss.formula.atp;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.formula.OperationEvaluationContext;
|
||||
import org.apache.poi.ss.formula.eval.ErrorEval;
|
||||
import org.apache.poi.ss.formula.eval.ValueEval;
|
||||
import org.apache.poi.ss.formula.functions.FreeRefFunction;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
public class TestAnalysisToolPak {
|
||||
private static class NullFunction implements FreeRefFunction {
|
||||
@Override
|
||||
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
|
||||
return ErrorEval.DIV_ZERO;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOverrideKnownButUnimplemented() {
|
||||
// JIS is a known function in Excel, but it is not implemented in POI
|
||||
AnalysisToolPak.registerFunction("JIS", new NullFunction());
|
||||
try (HSSFWorkbook workbook = new HSSFWorkbook()) {
|
||||
HSSFSheet sheet = workbook.createSheet("Sheet1");
|
||||
HSSFCell cell = sheet.createRow(0).createCell(0);
|
||||
cell.setCellFormula("JIS(\"test\")");
|
||||
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
|
||||
assertEquals(ErrorEval.DIV_ZERO.getErrorCode(), cell.getErrorCellValue());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOverrideUnknown() {
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
AnalysisToolPak.registerFunction("UNKNOWN", new NullFunction());
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOverrideUnknownButForceAllowed() {
|
||||
AnalysisToolPak.registerFunction("FAKE", new NullFunction(), true);
|
||||
try (HSSFWorkbook workbook = new HSSFWorkbook()) {
|
||||
HSSFSheet sheet = workbook.createSheet("Sheet1");
|
||||
HSSFCell cell = sheet.createRow(0).createCell(0);
|
||||
cell.setCellFormula("FAKE(\"test\")");
|
||||
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
|
||||
assertEquals(ErrorEval.DIV_ZERO.getErrorCode(), cell.getErrorCellValue());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user