Author: fanningpj
Date: Tue May 6 21:19:43 2025
New Revision: 1925444
URL: http://svn.apache.org/viewvc?rev=1925444&view=rev
Log:
allow ATP function override
Added:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java
(with props)
Added:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java?rev=1925444&view=auto
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java
(added)
+++
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java
Tue May 6 21:19:43 2025
@@ -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);
+ }
+ }
+}
Propchange:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/atp/TestAnalysisToolPak.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]