aboutsummaryrefslogtreecommitdiffstats
path: root/src/testcases/org/apache/poi/ss
diff options
context:
space:
mode:
authorJosh Micich <josh@apache.org>2009-12-16 23:16:30 +0000
committerJosh Micich <josh@apache.org>2009-12-16 23:16:30 +0000
commit54570b32f41c646373dcfee33467b00343e68e44 (patch)
tree69e099988d68e7e01ec86ab2d927b2f52f041dca /src/testcases/org/apache/poi/ss
parent352deaddc1daec7dce9656be6f2ce8dd7845cc72 (diff)
downloadpoi-54570b32f41c646373dcfee33467b00343e68e44.tar.gz
poi-54570b32f41c646373dcfee33467b00343e68e44.zip
fixed special cases of dereferenceResult method
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@891468 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/ss')
-rw-r--r--src/testcases/org/apache/poi/ss/formula/TestWorkbookEvaluator.java35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/testcases/org/apache/poi/ss/formula/TestWorkbookEvaluator.java b/src/testcases/org/apache/poi/ss/formula/TestWorkbookEvaluator.java
index 7e9149adfa..5e59933cf6 100644
--- a/src/testcases/org/apache/poi/ss/formula/TestWorkbookEvaluator.java
+++ b/src/testcases/org/apache/poi/ss/formula/TestWorkbookEvaluator.java
@@ -38,7 +38,11 @@ import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.ss.usermodel.ErrorConstants;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Workbook;
/**
* Tests {@link WorkbookEvaluator}.
@@ -193,7 +197,7 @@ public class TestWorkbookEvaluator extends TestCase {
assertEquals(HSSFCell.CELL_TYPE_STRING, cv.getCellType());
// adding blank to "abc" gives "abc"
assertEquals("abc", cv.getStringValue());
-
+
// check CHOOSE()
cell.setCellFormula("\"abc\"&CHOOSE(2,5,,9)");
fe.notifySetFormula(cell);
@@ -202,4 +206,33 @@ public class TestWorkbookEvaluator extends TestCase {
// adding blank to "abc" gives "abc"
assertEquals("abc", cv.getStringValue());
}
+
+ /**
+ * Functions like IF, INDIRECT, INDEX, OFFSET etc can return AreaEvals which
+ * should be dereferenced by the evaluator
+ */
+ public void testResultOutsideRange() {
+ Workbook wb = new HSSFWorkbook();
+ Cell cell = wb.createSheet("Sheet1").createRow(0).createCell(0);
+ cell.setCellFormula("D2:D5"); // IF(TRUE,D2:D5,D2) or OFFSET(D2:D5,0,0) would work too
+ FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
+ CellValue cv;
+ try {
+ cv = fe.evaluate(cell);
+ } catch (IllegalArgumentException e) {
+ if ("Specified row index (0) is outside the allowed range (1..4)".equals(e.getMessage())) {
+ throw new AssertionFailedError("Identified bug in result dereferencing");
+ }
+ throw new RuntimeException(e);
+ }
+ assertEquals(Cell.CELL_TYPE_ERROR, cv.getCellType());
+ assertEquals(ErrorConstants.ERROR_VALUE, cv.getErrorValue());
+
+ // verify circular refs are still detected properly
+ fe.clearAllCachedResultValues();
+ cell.setCellFormula("OFFSET(A1,0,0)");
+ cv = fe.evaluate(cell);
+ assertEquals(Cell.CELL_TYPE_ERROR, cv.getCellType());
+ assertEquals(ErrorEval.CIRCULAR_REF_ERROR.getErrorCode(), cv.getErrorValue());
+ }
}