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]

Reply via email to