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:
PJ Fanning 2025-05-06 21:19:43 +00:00
parent a7231a3764
commit 1d510c7fc3

View File

@ -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);
}
}
}