From 19366d6013ce5e8a1db7de1af77a8a37580de194 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 7 Mar 2022 13:15:01 +0000 Subject: [PATCH] [bug-65939] add partial fix for clearing formula with circular ref git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1898681 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/usermodel/TestFormulaEval.java | 22 +++++++++++++++++++ .../poi/ss/formula/TestFormulaEval.java | 22 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestFormulaEval.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestFormulaEval.java index 6d40f40f56..60e3f3144c 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestFormulaEval.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestFormulaEval.java @@ -25,4 +25,26 @@ class TestFormulaEval { assertEquals(CellType.ERROR, cell.getCellType()); } } + + @Test + void testCircularRef2() throws IOException { + try (XSSFWorkbook wb = new XSSFWorkbook()) { + XSSFSheet sheet = wb.createSheet(); + XSSFRow row = sheet.createRow(0); + XSSFCell cell0 = row.createCell(0); + XSSFCell cell1 = row.createCell(1); + cell0.setCellFormula("B1"); + cell1.setCellFormula("A1"); + XSSFFormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); + formulaEvaluator.evaluateAll(); + + cell0.setCellFormula(null); + cell1.setCellFormula(null); + formulaEvaluator.notifyUpdateCell(cell0); + formulaEvaluator.notifyUpdateCell(cell1); + //the following asserts should probably be BLANK not ERROR + assertEquals(CellType.ERROR, cell0.getCellType()); + assertEquals(CellType.ERROR, cell1.getCellType()); + } + } } diff --git a/poi/src/test/java/org/apache/poi/ss/formula/TestFormulaEval.java b/poi/src/test/java/org/apache/poi/ss/formula/TestFormulaEval.java index 3f2a43d76e..3a507f57c1 100644 --- a/poi/src/test/java/org/apache/poi/ss/formula/TestFormulaEval.java +++ b/poi/src/test/java/org/apache/poi/ss/formula/TestFormulaEval.java @@ -50,4 +50,26 @@ class TestFormulaEval { assertEquals(CellType.ERROR, cell.getCellType()); } } + + @Test + void testCircularRef2() throws IOException { + try (HSSFWorkbook wb = new HSSFWorkbook()) { + HSSFSheet sheet = wb.createSheet(); + HSSFRow row = sheet.createRow(0); + HSSFCell cell0 = row.createCell(0); + HSSFCell cell1 = row.createCell(1); + cell0.setCellFormula("B1"); + cell1.setCellFormula("A1"); + HSSFFormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); + formulaEvaluator.evaluateAll(); + + cell0.setCellFormula(null); + cell1.setCellFormula(null); + formulaEvaluator.notifyUpdateCell(cell0); + formulaEvaluator.notifyUpdateCell(cell1); + //the following asserts should probably be BLANK not ERROR + assertEquals(CellType.ERROR, cell0.getCellType()); + assertEquals(CellType.ERROR, cell1.getCellType()); + } + } }