aboutsummaryrefslogtreecommitdiffstats
path: root/src/testcases/org
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2008-09-07 20:11:32 +0000
committerNick Burch <nick@apache.org>2008-09-07 20:11:32 +0000
commit8a7e7f103beb63cb0ce36611245f5f8f1e6def8f (patch)
tree6a5a5aa67df65d06f6c4ca3f0643f8b43b457e0c /src/testcases/org
parent4cfed674685a53464d58de6c4abd0e2ff3b4c5f7 (diff)
downloadpoi-8a7e7f103beb63cb0ce36611245f5f8f1e6def8f.tar.gz
poi-8a7e7f103beb63cb0ce36611245f5f8f1e6def8f.zip
Merged revisions 638786-638802,638805-638811,638813-638814,638816-639230,639233-639241,639243-639253,639255-639486,639488-639601,639603-639835,639837-639917,639919-640056,640058-640710,640712-641156,641158-641184,641186-641795,641797-641798,641800-641933,641935-641963,641965-641966,641968-641995,641997-642230,642232-642562,642564-642565,642568-642570,642572-642573,642576-642736,642739-642877,642879,642881-642890,642892-642903,642905-642945,642947-643624,643626-643653,643655-643669,643671,643673-643830,643832-643833,643835-644342,644344-644472,644474-644508,644510-645347,645349-645351,645353-645559,645561-645565,645568-645951,645953-646193,646195-646311,646313-646404,646406-646665,646667-646853,646855-646869,646871-647151,647153-647185,647187-647277,647279-647566,647568-647573,647575,647578-647711,647714-647737,647739-647823,647825-648155,648157-648202,648204-648273,648275,648277-648302,648304-648333,648335-648588,648590-648622,648625-648673,648675-649141,649144,649146-649556,649558-649795,649799,649801-649910,649912-649913,649915-650128,650131-650132,650134-650137,650140-650914,650916-651991,651993-652284,652286-652287,652289,652291,652293-652297,652299-652328,652330-652425,652427-652445,652447-652560,652562-652933,652935,652937-652993,652995-653116,653118-653124,653126-653483,653487-653519,653522-653550,653552-653607,653609-653667,653669-653674,653676-653814,653817-653830,653832-653891,653893-653944,653946-654055,654057-654355,654357-654365,654367-654648,654651-655215,655217-655277,655279-655281,655283-655911,655913-656212,656214,656216-656251,656253-656698,656700-656756,656758-656892,656894-657135,657137-657165,657168-657179,657181-657354,657356-657357,657359-657701,657703-657874,657876-658032,658034-658284,658286,658288-658301,658303-658307,658309-658321,658323-658335,658337-658348,658351,658353-658832,658834-658983,658985,658987-659066,659068-659402,659404-659428,659430-659451,659453-659454,659456-659461,659463-659477,659479-659524,659526-659571,659574,659576-660255,660257-660262,660264-660279,660281-660343,660345-660473,660475-660827,660829-660833,660835-660888,660890-663321,663323-663435,663437-663764,663766-663854,663856-664219,664221-664489,664494-664514,664516-668013,668015-668142,668144-668152,668154,668156-668256,668258,668260-669139,669141-669455,669457-669657,669659-669808,669810-670189,670191-671321,671323-672229,672231-672549,672551-672552,672554-672561,672563-672566,672568,672571-673049,673051-673852,673854-673862,673864-673986,673988-673996,673998-674347,674349-674890,674892-674910,674912-674936,674938-674952,674954-675078,675080-675085,675087-675217,675219-675660,675662-675670,675672-675716,675718-675726,675728-675733,675735-675775,675777-675782,675784,675786-675791,675794-675852,675854-676200,676202,676204,676206-676220,676222-676309,676311-676456,676458-676994,676996-677027,677030-677040,677042-677056,677058-677375,677377-677968,677970-677971,677973,677975-677994,677996-678286,678288-678538,678540-680393,680395-680469,680471-680529,680531-680852,680854-681529,681531-681571,681573-682224,682226,682228,682231-682281,682283-682335,682337-682507,682509,682512-682517,682519-682532,682534-682619,682622-682777,682779-682998,683000-683019,683021-683022,683024-683080,683082-683092,683094-683095,683097-683127,683129-683131,683133-683166,683168-683698,683700-683705,683707-683757,683759-683787,683789-683870,683872-683879,683881-683900,683902-684066,684068-684074,684076-684222,684224-684254,684257-684281,684283-684286,684288-684292,684294-684298,684300-684301,684303-684308,684310-684317,684320,684323-684335,684337-684348,684350-684354,684356-684361,684363-684369,684371-684453,684455-684883,684885-684937,684940-684958,684960-684970,684972-684985,684987-685053,685055-685063,685065-685259,685261-685262,685264-685266,685268-685282,685285-686035,686037-686045,686047-686052,686054-686206,686208-686215,686217-686277,686279-686289,686291-686620,686622-686623,686626-686627,686629-686639,686641-686843,686845-686976,686978-687402,687404-687422,687424-687428,687430-687442,687444-688425,688427-688641,688643-688649,688651-688654,688656-688824,688826-688909,688911-689543,689545-689558,689560-689635,689637-689703,689705-689715,689717-689718,689720,689722-689972,689974-690090,690092-690093,690095-690111,690113-690258,690260-690261,690263-690403,690405-690410,690412-690460,690462-690516,690518-690533,690535,690537-690625,690627-690635,690637-690720,690722-690725,690727-690728,690730-690738,690740-690760,690762-690771,690773-690824,690826-690834,690838-691016,691018-691179,691181,691183-692908 via svnmerge from
https://svn.apache.org/repos/asf/poi/trunk ........ r691533 | yegor | 2008-09-03 09:04:07 +0100 (Wed, 03 Sep 2008) | 1 line fixed bug #45728: SlideShow.reorderSlide didn't work properly ........ r691687 | josh | 2008-09-03 18:03:02 +0100 (Wed, 03 Sep 2008) | 1 line Fixed ArrayPtg.toString to not crash when partially initialised ........ r691740 | josh | 2008-09-03 20:22:53 +0100 (Wed, 03 Sep 2008) | 1 line Initial work on bug 45720 - copy 'FilterDatabase' named record when cloning sheets. Some clean-up in NameRecord. ........ r692239 | josh | 2008-09-04 21:58:37 +0100 (Thu, 04 Sep 2008) | 1 line Fixed 2 small bugs in RelationalOperationEval (added junits). Refactored hierarchy. ........ r692241 | josh | 2008-09-04 22:01:48 +0100 (Thu, 04 Sep 2008) | 1 line Fix unused import (correction to r692239) ........ r692243 | josh | 2008-09-04 22:05:50 +0100 (Thu, 04 Sep 2008) | 1 line Fixed compiler warnings, linked junit test to suite ........ r692255 | josh | 2008-09-04 22:32:17 +0100 (Thu, 04 Sep 2008) | 1 line Made HSSFFormulaEvaluator capable of handling simple named ranges ........ r692300 | josh | 2008-09-05 00:16:15 +0100 (Fri, 05 Sep 2008) | 1 line Fix for bug 45376 - added caching to HSSFFormulaEvaluator ........ r692506 | josh | 2008-09-05 19:22:30 +0100 (Fri, 05 Sep 2008) | 1 line Minor fixes for numeric operators - junit added. Some refactoring. ........ r692538 | josh | 2008-09-05 21:38:51 +0100 (Fri, 05 Sep 2008) | 1 line Modified formula evaluator to handle whole column refs ........ r692541 | josh | 2008-09-05 21:43:37 +0100 (Fri, 05 Sep 2008) | 1 line reverted changes accidentally submitted with r692538 ........ r692612 | josh | 2008-09-06 06:30:31 +0100 (Sat, 06 Sep 2008) | 1 line Fixes for special cases of lookup functions (test cases added) ........ r692614 | josh | 2008-09-06 07:04:01 +0100 (Sat, 06 Sep 2008) | 1 line Minor fixes to YEARFRAC(). Added ISEVEN() and ISODD(). Added test cases. ........ r692893 | yegor | 2008-09-07 17:30:35 +0100 (Sun, 07 Sep 2008) | 1 line fixed bug #45720: cloneSheet breaks autofilters. ........ git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@692932 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org')
-rw-r--r--src/testcases/org/apache/poi/hssf/data/45376.xlsbin27648 -> 0 bytes
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/data/45720.xlsbin0 -> 16384 bytes
-rw-r--r--src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xlsbin153600 -> 153600 bytes
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/data/LookupFunctionsTestCaseData.xlsbin39936 -> 41984 bytes
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/data/externalFunctionExample.xlsbin16384 -> 16896 bytes
-rw-r--r--src/testcases/org/apache/poi/hssf/data/testNames.xlsbin27648 -> 28160 bytes
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/TestExternalFunctionFormulas.java15
-rw-r--r--src/testcases/org/apache/poi/hssf/record/formula/atp/TestYearFracCalculator.java1
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/eval/AllFormulaEvalTests.java2
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/eval/TestCircularReferences.java2
-rw-r--r--src/testcases/org/apache/poi/hssf/record/formula/eval/TestDivideEval.java62
-rw-r--r--src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java69
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/eval/TestPercentEval.java10
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java36
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java1
-rw-r--r--src/testcases/org/apache/poi/hssf/record/formula/functions/TestDate.java29
-rwxr-xr-xsrc/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java1
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java19
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java122
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java82
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java1657
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java12
-rw-r--r--src/testcases/org/apache/poi/hssf/util/TestAreaReference.java53
23 files changed, 1220 insertions, 953 deletions
diff --git a/src/testcases/org/apache/poi/hssf/data/45376.xls b/src/testcases/org/apache/poi/hssf/data/45376.xls
deleted file mode 100644
index 74602fd0b7..0000000000
--- a/src/testcases/org/apache/poi/hssf/data/45376.xls
+++ /dev/null
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/data/45720.xls b/src/testcases/org/apache/poi/hssf/data/45720.xls
new file mode 100755
index 0000000000..9c6c484d62
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/data/45720.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls
index 51e370bfb9..99cb61a588 100644
--- a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls
+++ b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/data/LookupFunctionsTestCaseData.xls b/src/testcases/org/apache/poi/hssf/data/LookupFunctionsTestCaseData.xls
index f4b35fb935..94f16e9840 100755
--- a/src/testcases/org/apache/poi/hssf/data/LookupFunctionsTestCaseData.xls
+++ b/src/testcases/org/apache/poi/hssf/data/LookupFunctionsTestCaseData.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/data/externalFunctionExample.xls b/src/testcases/org/apache/poi/hssf/data/externalFunctionExample.xls
index 07eafb4144..fc81e60a18 100755
--- a/src/testcases/org/apache/poi/hssf/data/externalFunctionExample.xls
+++ b/src/testcases/org/apache/poi/hssf/data/externalFunctionExample.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/data/testNames.xls b/src/testcases/org/apache/poi/hssf/data/testNames.xls
index 7ebbb633af..c5d43cc038 100644
--- a/src/testcases/org/apache/poi/hssf/data/testNames.xls
+++ b/src/testcases/org/apache/poi/hssf/data/testNames.xls
Binary files differ
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/TestExternalFunctionFormulas.java b/src/testcases/org/apache/poi/hssf/record/formula/TestExternalFunctionFormulas.java
index cc5198acfa..1f6d0d3c28 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/TestExternalFunctionFormulas.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/TestExternalFunctionFormulas.java
@@ -74,9 +74,18 @@ public final class TestExternalFunctionFormulas extends TestCase {
public void testEvaluate() {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls");
HSSFSheet sheet = wb.getSheetAt(0);
- HSSFCell cell = sheet.getRow(0).getCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(sheet, wb);
- CellValue evalResult = fe.evaluate(cell);
- evalResult.toString();
+ confirmCellEval(sheet, 0, 0, fe, "YEARFRAC(B1,C1)", 29.0/90.0);
+ confirmCellEval(sheet, 1, 0, fe, "YEARFRAC(B2,C2)", 0.0);
+ confirmCellEval(sheet, 2, 0, fe, "IF(ISEVEN(3),1.2,1.6)", 1.6);
+ confirmCellEval(sheet, 3, 0, fe, "IF(ISODD(3),1.2,1.6)", 1.2);
+ }
+
+ private static void confirmCellEval(HSSFSheet sheet, int rowIx, int colIx,
+ HSSFFormulaEvaluator fe, String expectedFormula, double expectedResult) {
+ HSSFCell cell = sheet.getRow(rowIx).getCell(colIx);
+ assertEquals(expectedFormula, cell.getCellFormula());
+ CellValue cv = fe.evaluate(cell);
+ assertEquals(expectedResult, cv.getNumberValue(), 0.0);
}
}
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/atp/TestYearFracCalculator.java b/src/testcases/org/apache/poi/hssf/record/formula/atp/TestYearFracCalculator.java
index aaf03a238e..890a5c2cbd 100644
--- a/src/testcases/org/apache/poi/hssf/record/formula/atp/TestYearFracCalculator.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/atp/TestYearFracCalculator.java
@@ -38,6 +38,7 @@ public final class TestYearFracCalculator extends TestCase {
confirm(md(1999, 3, 31), md(1999, 4, 3), 1, 0.008219178);
confirm(md(1999, 4, 5), md(1999, 4, 8), 1, 0.008219178);
confirm(md(1999, 4, 4), md(1999, 4, 7), 1, 0.008219178);
+ confirm(md(2000, 2, 5), md(2000, 6, 1), 0, 0.322222222);
}
private void confirm(double startDate, double endDate, int basis, double expectedValue) {
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/AllFormulaEvalTests.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/AllFormulaEvalTests.java
index 8887445ad3..7551061942 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/eval/AllFormulaEvalTests.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/AllFormulaEvalTests.java
@@ -31,6 +31,8 @@ public class AllFormulaEvalTests {
TestSuite result = new TestSuite(AllFormulaEvalTests.class.getName());
result.addTestSuite(TestAreaEval.class);
result.addTestSuite(TestCircularReferences.class);
+ result.addTestSuite(TestDivideEval.class);
+ result.addTestSuite(TestEqualEval.class);
result.addTestSuite(TestExternalFunction.class);
result.addTestSuite(TestFormulaBugs.class);
result.addTestSuite(TestFormulasFromSpreadsheet.class);
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestCircularReferences.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestCircularReferences.java
index ee20479872..07f13a0445 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestCircularReferences.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestCircularReferences.java
@@ -93,7 +93,6 @@ public final class TestCircularReferences extends TestCase {
HSSFCell testCell = row.createCell(0);
testCell.setCellFormula("A1");
- HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb);
CellValue cellValue = evaluateWithCycles(wb, sheet, testCell);
confirmCycleErrorCode(cellValue);
@@ -114,7 +113,6 @@ public final class TestCircularReferences extends TestCase {
HSSFCell testCell = row.createCell(3);
testCell.setCellFormula("A1");
- HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb);
CellValue cellValue = evaluateWithCycles(wb, sheet, testCell);
confirmCycleErrorCode(cellValue);
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestDivideEval.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestDivideEval.java
new file mode 100644
index 0000000000..71bf03e501
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestDivideEval.java
@@ -0,0 +1,62 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.record.formula.eval;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.hssf.record.formula.functions.EvalFactory;
+import org.apache.poi.hssf.record.formula.functions.NumericFunctionInvoker;
+
+/**
+ * Test for divide operator evaluator.
+ *
+ * @author Josh Micich
+ */
+public final class TestDivideEval extends TestCase {
+
+ private static void confirm(ValueEval arg0, ValueEval arg1, double expectedResult) {
+ Eval[] args = {
+ arg0, arg1,
+ };
+
+ double result = NumericFunctionInvoker.invoke(DivideEval.instance, args, 0, 0);
+
+ assertEquals(expectedResult, result, 0);
+ }
+
+ public void testBasic() {
+ confirm(new NumberEval(5), new NumberEval(2), 2.5);
+ confirm(new NumberEval(3), new NumberEval(16), 0.1875);
+ confirm(new NumberEval(-150), new NumberEval(-15), 10.0);
+ confirm(new StringEval("0.2"), new NumberEval(0.05), 4.0);
+ confirm(BoolEval.TRUE, new StringEval("-0.2"), -5.0);
+ }
+
+ public void test1x1Area() {
+ AreaEval ae0 = EvalFactory.createAreaEval("B2:B2", new ValueEval[] { new NumberEval(50), });
+ AreaEval ae1 = EvalFactory.createAreaEval("C2:C2", new ValueEval[] { new NumberEval(10), });
+ confirm(ae0, ae1, 5);
+ }
+ public void testDivZero() {
+ Eval[] args = {
+ new NumberEval(5), NumberEval.ZERO,
+ };
+ Eval result = DivideEval.instance.evaluate(args, 0, (short) 0);
+ assertEquals(ErrorEval.DIV_ZERO, result);
+ }
+}
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java
new file mode 100644
index 0000000000..d1b1db0d16
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestEqualEval.java
@@ -0,0 +1,69 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.record.formula.eval;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.apache.poi.hssf.record.formula.functions.EvalFactory;
+
+/**
+ * Test for unary plus operator evaluator.
+ *
+ * @author Josh Micich
+ */
+public final class TestEqualEval extends TestCase {
+
+ /**
+ * Test for bug observable at svn revision 692218 (Sep 2008)<br/>
+ * The value from a 1x1 area should be taken immediately, regardless of srcRow and srcCol
+ */
+ public void test1x1AreaOperand() {
+
+ ValueEval[] values = { BoolEval.FALSE, };
+ Eval[] args = {
+ EvalFactory.createAreaEval("B1:B1", values),
+ BoolEval.FALSE,
+ };
+ Eval result = EqualEval.instance.evaluate(args, 10, (short)20);
+ if (result instanceof ErrorEval) {
+ if (result == ErrorEval.VALUE_INVALID) {
+ throw new AssertionFailedError("Identified bug in evaluation of 1x1 area");
+ }
+ }
+ assertEquals(BoolEval.class, result.getClass());
+ assertTrue(((BoolEval)result).getBooleanValue());
+ }
+ /**
+ * Empty string is equal to blank
+ */
+ public void testBlankEqualToEmptyString() {
+
+ Eval[] args = {
+ new StringEval(""),
+ BlankEval.INSTANCE,
+ };
+ Eval result = EqualEval.instance.evaluate(args, 10, (short)20);
+ assertEquals(BoolEval.class, result.getClass());
+ BoolEval be = (BoolEval) result;
+ if (!be.getBooleanValue()) {
+ throw new AssertionFailedError("Identified bug blank/empty string equality");
+ }
+ assertTrue(be.getBooleanValue());
+ }
+}
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestPercentEval.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestPercentEval.java
index e027605dfa..ef2340d4a4 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestPercentEval.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestPercentEval.java
@@ -20,7 +20,7 @@ package org.apache.poi.hssf.record.formula.eval;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
-import org.apache.poi.hssf.record.formula.PercentPtg;
+import org.apache.poi.hssf.record.formula.functions.EvalFactory;
import org.apache.poi.hssf.record.formula.functions.NumericFunctionInvoker;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
@@ -41,8 +41,8 @@ public final class TestPercentEval extends TestCase {
arg,
};
- PercentEval opEval = new PercentEval(PercentPtg.instance);
- double result = NumericFunctionInvoker.invoke(opEval, args, -1, (short)-1);
+ OperationEval opEval = PercentEval.instance;
+ double result = NumericFunctionInvoker.invoke(opEval, args, 0, 0);
assertEquals(expectedResult, result, 0);
}
@@ -55,6 +55,10 @@ public final class TestPercentEval extends TestCase {
confirm(BoolEval.TRUE, 0.01);
}
+ public void test1x1Area() {
+ AreaEval ae = EvalFactory.createAreaEval("B2:B2", new ValueEval[] { new NumberEval(50), });
+ confirm(ae, 0.5);
+ }
public void testInSpreadSheet() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java
index 33c38a6c12..726633c406 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java
@@ -1,27 +1,25 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
package org.apache.poi.hssf.record.formula.eval;
import junit.framework.TestCase;
import org.apache.poi.hssf.record.formula.AreaPtg;
-import org.apache.poi.hssf.record.formula.UnaryPlusPtg;
import org.apache.poi.hssf.record.formula.functions.EvalFactory;
import org.apache.poi.hssf.record.formula.functions.NumericFunctionInvoker;
@@ -53,7 +51,7 @@ public final class TestUnaryPlusEval extends TestCase {
EvalFactory.createAreaEval(areaPtg, values),
};
- double result = NumericFunctionInvoker.invoke(new UnaryPlusEval(UnaryPlusPtg.instance), args, 10, (short)20);
+ double result = NumericFunctionInvoker.invoke(UnaryPlusEval.instance, args, 10, (short)20);
assertEquals(35, result, 0);
}
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java
index 5973d7cb2d..2ec7ad005a 100755
--- a/src/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java
@@ -36,6 +36,7 @@ public final class AllIndividualFunctionEvaluationTests {
result.addTestSuite(TestIndex.class);
result.addTestSuite(TestIsBlank.class);
result.addTestSuite(TestLen.class);
+ result.addTestSuite(TestLookupFunctionsFromSpreadsheet.class);
result.addTestSuite(TestMid.class);
result.addTestSuite(TestMathX.class);
result.addTestSuite(TestMatch.class);
diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestDate.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestDate.java
index 83c9fcd34c..68bc43154a 100644
--- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestDate.java
+++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestDate.java
@@ -28,29 +28,29 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
* @author Pavel Krupets (pkrupets at palmtreebusiness dot com)
*/
public final class TestDate extends TestCase {
-
+
private HSSFCell cell11;
private HSSFFormulaEvaluator evaluator;
public void setUp() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
- cell11 = sheet.createRow(0).createCell(0);
+ cell11 = sheet.createRow(0).createCell(0);
cell11.setCellType(HSSFCell.CELL_TYPE_FORMULA);
evaluator = new HSSFFormulaEvaluator(sheet, wb);
}
-
- /**
- * Test disabled pending a fix in the formula evaluator
- * TODO - create MissingArgEval and modify the formula evaluator to handle this
- */
+
+ /**
+ * Test disabled pending a fix in the formula evaluator
+ * TODO - create MissingArgEval and modify the formula evaluator to handle this
+ */
public void DISABLEDtestSomeArgumentsMissing() {
confirm("DATE(, 1, 0)", 0.0);
confirm("DATE(, 1, 1)", 1.0);
}
-
+
public void testValid() {
-
+
confirm("DATE(1900, 1, 1)", 1);
confirm("DATE(1900, 1, 32)", 32);
confirm("DATE(1900, 222, 1)", 6727);
@@ -58,7 +58,7 @@ public final class TestDate extends TestCase {
confirm("DATE(2000, 1, 222)", 36747.00);
confirm("DATE(2007, 1, 1)", 39083);
}
-
+
public void testBugDate() {
confirm("DATE(1900, 2, 29)", 60);
confirm("DATE(1900, 2, 30)", 61);
@@ -66,7 +66,7 @@ public final class TestDate extends TestCase {
confirm("DATE(1900, 1, 2222)", 2222);
confirm("DATE(1900, 1, 22222)", 22222);
}
-
+
public void testPartYears() {
confirm("DATE(4, 1, 1)", 1462.00);
confirm("DATE(14, 1, 1)", 5115.00);
@@ -74,10 +74,11 @@ public final class TestDate extends TestCase {
confirm("DATE(1004, 1, 1)", 366705.00);
}
- private void confirm(String formulaText, double expectedResult) {
+ private void confirm(String formulaText, double expectedResult) {
cell11.setCellFormula(formulaText);
+ evaluator.clearCache();
double actualValue = evaluator.evaluate(cell11).getNumberValue();
- assertEquals(expectedResult, actualValue, 0);
- }
+ assertEquals(expectedResult, actualValue, 0);
+ }
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java
index 772a4fdfc7..72d420cb4f 100755
--- a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java
@@ -46,6 +46,7 @@ public class AllUserModelTests {
result.addTestSuite(TestHSSFConditionalFormatting.class);
result.addTestSuite(TestHSSFDataFormatter.class);
result.addTestSuite(TestHSSFDateUtil.class);
+ result.addTestSuite(TestHSSFFormulaEvaluator.class);
result.addTestSuite(TestHSSFHeaderFooter.class);
result.addTestSuite(TestHSSFHyperlink.class);
result.addTestSuite(TestHSSFOptimiser.class);
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
index e7c7931766..1b5e4cd5dc 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -37,6 +37,7 @@ import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord;
import org.apache.poi.hssf.record.NameRecord;
import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
import org.apache.poi.hssf.record.formula.DeletedArea3DPtg;
+import org.apache.poi.hssf.record.formula.Ptg;
import org.apache.poi.util.TempFile;
/**
@@ -1020,9 +1021,9 @@ public final class TestBugs extends TestCase {
NameRecord r = w.getNameRecord(i);
assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
- List nd = r.getNameDefinition();
- assertEquals(1, nd.size());
- assertTrue(nd.get(0) instanceof DeletedArea3DPtg);
+ Ptg[] nd = r.getNameDefinition();
+ assertEquals(1, nd.length);
+ assertTrue(nd[0] instanceof DeletedArea3DPtg);
}
@@ -1038,9 +1039,9 @@ public final class TestBugs extends TestCase {
NameRecord r = w.getNameRecord(i);
assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
- List nd = r.getNameDefinition();
- assertEquals(1, nd.size());
- assertTrue(nd.get(0) instanceof DeletedArea3DPtg);
+ Ptg[] nd = r.getNameDefinition();
+ assertEquals(1, nd.length);
+ assertTrue(nd[0] instanceof DeletedArea3DPtg);
}
@@ -1055,9 +1056,9 @@ public final class TestBugs extends TestCase {
NameRecord r = w.getNameRecord(i);
assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
- List nd = r.getNameDefinition();
- assertEquals(1, nd.size());
- assertTrue(nd.get(0) instanceof DeletedArea3DPtg);
+ Ptg[] nd = r.getNameDefinition();
+ assertEquals(1, nd.length);
+ assertTrue(nd[0] instanceof DeletedArea3DPtg);
}
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java
index 6ebcf96bb6..f1d838efa3 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulaEvaluatorBugs.java
@@ -19,6 +19,8 @@ package org.apache.poi.hssf.usermodel;
import java.io.File;
import java.io.FileOutputStream;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
import java.util.Iterator;
import junit.framework.AssertionFailedError;
@@ -35,6 +37,7 @@ import org.apache.poi.hssf.record.formula.Ptg;
*/
public final class TestFormulaEvaluatorBugs extends TestCase {
+ private static final boolean OUTPUT_TEST_FILES = false;
private String tmpDirName;
protected void setUp() {
@@ -65,13 +68,15 @@ public final class TestFormulaEvaluatorBugs extends TestCase {
HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
assertEquals(4.2 * 25, row.getCell(3).getNumericCellValue(), 0.0001);
- // Save
- File existing = new File(tmpDirName, "44636-existing.xls");
- FileOutputStream out = new FileOutputStream(existing);
- wb.write(out);
- out.close();
- System.err.println("Existing file for bug #44636 written to " + existing.toString());
-
+ FileOutputStream out;
+ if (OUTPUT_TEST_FILES) {
+ // Save
+ File existing = new File(tmpDirName, "44636-existing.xls");
+ out = new FileOutputStream(existing);
+ wb.write(out);
+ out.close();
+ System.err.println("Existing file for bug #44636 written to " + existing.toString());
+ }
// Now, do a new file from scratch
wb = new HSSFWorkbook();
sheet = wb.createSheet();
@@ -86,12 +91,14 @@ public final class TestFormulaEvaluatorBugs extends TestCase {
HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
assertEquals(5.4, row.getCell(0).getNumericCellValue(), 0.0001);
- // Save
- File scratch = new File(tmpDirName, "44636-scratch.xls");
- out = new FileOutputStream(scratch);
- wb.write(out);
- out.close();
- System.err.println("New file for bug #44636 written to " + scratch.toString());
+ if (OUTPUT_TEST_FILES) {
+ // Save
+ File scratch = new File(tmpDirName, "44636-scratch.xls");
+ out = new FileOutputStream(scratch);
+ wb.write(out);
+ out.close();
+ System.err.println("New file for bug #44636 written to " + scratch.toString());
+ }
}
/**
@@ -281,64 +288,39 @@ public final class TestFormulaEvaluatorBugs extends TestCase {
}
/**
- * Apparently, each subsequent call takes longer, which is very
- * odd.
- * We think it's because the formulas are recursive and crazy
+ * The HSSFFormula evaluator performance benefits greatly from caching of intermediate cell values
*/
- public void DISABLEDtestSlowEvaluate45376() throws Exception {
- HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("45376.xls");
+ public void testSlowEvaluate45376() {
- final String SHEET_NAME = "Eingabe";
- final int row = 6;
- final HSSFSheet sheet = wb.getSheet(SHEET_NAME);
-
- int firstCol = 4;
- int lastCol = 14;
- long[] timings = new long[lastCol-firstCol+1];
- long[] rtimings = new long[lastCol-firstCol+1];
-
- long then, now;
-
- final HSSFRow excelRow = sheet.getRow(row);
- for(int i = firstCol; i <= lastCol; i++) {
- final HSSFCell excelCell = excelRow.getCell(i);
- final HSSFFormulaEvaluator evaluator = new
- HSSFFormulaEvaluator(sheet, wb);
-
- now = System.currentTimeMillis();
- evaluator.evaluate(excelCell);
- then = System.currentTimeMillis();
- timings[i-firstCol] = (then-now);
- System.err.println("Col " + i + " took " + (then-now) + "ms");
- }
- for(int i = lastCol; i >= firstCol; i--) {
- final HSSFCell excelCell = excelRow.getCell(i);
- final HSSFFormulaEvaluator evaluator = new
- HSSFFormulaEvaluator(sheet, wb);
-
- now = System.currentTimeMillis();
- evaluator.evaluate(excelCell);
- then = System.currentTimeMillis();
- rtimings[i-firstCol] = (then-now);
- System.err.println("Col " + i + " took " + (then-now) + "ms");
- }
-
- // The timings for each should be about the same
- long avg = 0;
- for(int i=0; i<timings.length; i++) {
- avg += timings[i];
- }
- avg = (long)( ((double)avg) / timings.length );
-
- // Warn if any took more then 1.5 the average
- // TODO - replace with assert or similar
- for(int i=0; i<timings.length; i++) {
- if(timings[i] > 1.5*avg) {
- System.err.println("Doing col " + (i+firstCol) +
- " took " + timings[i] + "ms, vs avg " +
- avg + "ms"
- );
- }
- }
+ // Firstly set up a sequence of formula cells where each depends on the previous multiple
+ // times. Without caching, each subsequent cell take about 4 times longer to evaluate.
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("Sheet1");
+ HSSFRow row = sheet.createRow(0);
+ for(int i=1; i<10; i++) {
+ HSSFCell cell = row.createCell(i);
+ char prevCol = (char) ('A' + i-1);
+ String prevCell = prevCol + "1";
+ // this formula is inspired by the offending formula of the attachment for bug 45376
+ String formula = "IF(DATE(YEAR(" + prevCell + "),MONTH(" + prevCell + ")+1,1)<=$D$3," +
+ "DATE(YEAR(" + prevCell + "),MONTH(" + prevCell + ")+1,1),NA())";
+ cell.setCellFormula(formula);
+
+ }
+ Calendar cal = new GregorianCalendar(2000, 0, 1, 0, 0, 0);
+ row.createCell(0).setCellValue(cal);
+
+ // Choose cell A9, so that the failing test case doesn't take too long to execute.
+ HSSFCell cell = row.getCell(8);
+ HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb);
+ evaluator.evaluate(cell);
+ int evalCount = evaluator.getEvaluationCount();
+ // With caching, the evaluationCount is 8 which is a big improvement
+ if (evalCount > 10) {
+ // Without caching, evaluating cell 'A9' takes 21845 evaluations which consumes
+ // much time (~3 sec on Core 2 Duo 2.2GHz)
+ System.err.println("Cell A9 took " + evalCount + " intermediate evaluations");
+ throw new AssertionFailedError("Identifed bug 45376 - Formula evaluator should cache values");
+ }
}
} \ No newline at end of file
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java
new file mode 100644
index 0000000000..970b166dd7
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java
@@ -0,0 +1,82 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.usermodel;
+
+import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.ss.usermodel.FormulaEvaluator.CellValue;
+
+import junit.framework.TestCase;
+/**
+ *
+ * @author Josh Micich
+ */
+public final class TestHSSFFormulaEvaluator extends TestCase {
+
+ /**
+ * Test that the HSSFFormulaEvaluator can evaluate simple named ranges
+ * (single cells and rectangular areas)
+ */
+ public void testEvaluateSimple() {
+ HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("testNames.xls");
+ HSSFSheet sheet = wb.getSheetAt(0);
+ HSSFCell cell = sheet.getRow(8).getCell(0);
+ HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(sheet, wb);
+ CellValue cv = fe.evaluate(cell);
+ assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cv.getCellType());
+ assertEquals(3.72, cv.getNumberValue(), 0.0);
+ }
+
+ public void testFullColumnRefs() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("Sheet1");
+ HSSFRow row = sheet.createRow(0);
+ HSSFCell cell0 = row.createCell(0);
+ cell0.setCellFormula("sum(D:D)");
+ HSSFCell cell1 = row.createCell(1);
+ cell1.setCellFormula("sum(D:E)");
+
+ // some values in column D
+ setValue(sheet, 1, 3, 5.0);
+ setValue(sheet, 2, 3, 6.0);
+ setValue(sheet, 5, 3, 7.0);
+ setValue(sheet, 50, 3, 8.0);
+
+ // some values in column E
+ setValue(sheet, 1, 4, 9.0);
+ setValue(sheet, 2, 4, 10.0);
+ setValue(sheet, 30000, 4, 11.0);
+
+ // some other values
+ setValue(sheet, 1, 2, 100.0);
+ setValue(sheet, 2, 5, 100.0);
+ setValue(sheet, 3, 6, 100.0);
+
+
+ HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(sheet, wb);
+ assertEquals(26.0, fe.evaluate(cell0).getNumberValue(), 0.0);
+ assertEquals(56.0, fe.evaluate(cell1).getNumberValue(), 0.0);
+ }
+
+ private static void setValue(HSSFSheet sheet, int rowIndex, int colIndex, double value) {
+ HSSFRow row = sheet.getRow(rowIndex);
+ if (row == null) {
+ row = sheet.createRow(rowIndex);
+ }
+ row.createCell(colIndex).setCellValue(value);
+ }
+}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
index 4c8c8c5d6a..00db13d910 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
@@ -28,15 +28,11 @@ import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.model.Sheet;
-import org.apache.poi.hssf.record.HCenterRecord;
-import org.apache.poi.hssf.record.PasswordRecord;
-import org.apache.poi.hssf.record.ProtectRecord;
-import org.apache.poi.hssf.record.SCLRecord;
-import org.apache.poi.hssf.record.VCenterRecord;
-import org.apache.poi.hssf.record.WSBoolRecord;
-import org.apache.poi.hssf.record.WindowTwoRecord;
+import org.apache.poi.hssf.model.DrawingManager2;
+import org.apache.poi.hssf.record.*;
import org.apache.poi.ss.util.Region;
import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ddf.EscherDgRecord;
/**
* Tests HSSFSheet. This test case is very incomplete at the moment.
@@ -47,806 +43,849 @@ import org.apache.poi.ss.util.CellRangeAddress;
*/
public final class TestHSSFSheet extends TestCase {
- private static HSSFWorkbook openSample(String sampleFileName) {
- return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
- }
-
- /**
- * Test the gridset field gets set as expected.
- */
- public void testBackupRecord() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet();
- Sheet sheet = s.getSheet();
-
- assertEquals(true, sheet.getGridsetRecord().getGridset());
- s.setGridsPrinted(true);
- assertEquals(false, sheet.getGridsetRecord().getGridset());
- }
-
- /**
- * Test vertically centered output.
- */
- public void testVerticallyCenter() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet();
- Sheet sheet = s.getSheet();
- VCenterRecord record = sheet.getPageSettings().getVCenter();
-
- assertEquals(false, record.getVCenter());
- s.setVerticallyCenter(true);
- assertEquals(true, record.getVCenter());
-
- // wb.write(new FileOutputStream("c:\\test.xls"));
- }
-
- /**
- * Test horizontally centered output.
- */
- public void testHorizontallyCenter() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet();
- Sheet sheet = s.getSheet();
- HCenterRecord record = sheet.getPageSettings().getHCenter();
-
- assertEquals(false, record.getHCenter());
- s.setHorizontallyCenter(true);
- assertEquals(true, record.getHCenter());
- }
-
-
- /**
- * Test WSBboolRecord fields get set in the user model.
- */
- public void testWSBool() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet();
- Sheet sheet = s.getSheet();
- WSBoolRecord record =
- (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);
-
- // Check defaults
- assertEquals(true, record.getAlternateExpression());
- assertEquals(true, record.getAlternateFormula());
- assertEquals(false, record.getAutobreaks());
- assertEquals(false, record.getDialog());
- assertEquals(false, record.getDisplayGuts());
- assertEquals(true, record.getFitToPage());
- assertEquals(false, record.getRowSumsBelow());
- assertEquals(false, record.getRowSumsRight());
-
- // Alter
- s.setAlternativeExpression(false);
- s.setAlternativeFormula(false);
- s.setAutobreaks(true);
- s.setDialog(true);
- s.setDisplayGuts(true);
- s.setFitToPage(false);
- s.setRowSumsBelow(true);
- s.setRowSumsRight(true);
-
- // Check
- assertEquals(false, record.getAlternateExpression());
- assertEquals(false, record.getAlternateFormula());
- assertEquals(true, record.getAutobreaks());
- assertEquals(true, record.getDialog());
- assertEquals(true, record.getDisplayGuts());
- assertEquals(false, record.getFitToPage());
- assertEquals(true, record.getRowSumsBelow());
- assertEquals(true, record.getRowSumsRight());
- assertEquals(false, s.getAlternateExpression());
- assertEquals(false, s.getAlternateFormula());
- assertEquals(true, s.getAutobreaks());
- assertEquals(true, s.getDialog());
- assertEquals(true, s.getDisplayGuts());
- assertEquals(false, s.getFitToPage());
- assertEquals(true, s.getRowSumsBelow());
- assertEquals(true, s.getRowSumsRight());
- }
-
- public void testReadBooleans() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet("Test boolean");
- HSSFRow row = sheet.createRow(2);
- HSSFCell cell = row.createCell(9);
- cell.setCellValue(true);
- cell = row.createCell(11);
- cell.setCellValue(true);
-
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
-
- sheet = workbook.getSheetAt(0);
- row = sheet.getRow(2);
- assertNotNull(row);
- assertEquals(2, row.getPhysicalNumberOfCells());
- }
-
- public void testRemoveRow() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet("Test boolean");
- HSSFRow row = sheet.createRow(2);
- sheet.removeRow(row);
- }
-
- public void testRemoveZeroRow() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet("Sheet1");
- HSSFRow row = sheet.createRow(0);
- try {
- sheet.removeRow(row);
- } catch (IllegalArgumentException e) {
- if (e.getMessage().equals("Invalid row number (-1) outside allowable range (0..65535)")) {
- throw new AssertionFailedError("Identified bug 45367");
- }
- throw e;
- }
- }
-
- public void testCloneSheet() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet("Test Clone");
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = row.createCell(0);
- HSSFCell cell2 = row.createCell(1);
- cell.setCellValue(new HSSFRichTextString("clone_test"));
- cell2.setCellFormula("sin(1)");
-
- HSSFSheet clonedSheet = workbook.cloneSheet(0);
- HSSFRow clonedRow = clonedSheet.getRow(0);
-
- //Check for a good clone
- assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
-
- //Check that the cells are not somehow linked
- cell.setCellValue(new HSSFRichTextString("Difference Check"));
- cell2.setCellFormula("cos(2)");
- if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) {
- fail("string cell not properly cloned");
- }
- if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) {
- fail("formula cell not properly cloned");
- }
- assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
- assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)");
- }
-
- /** tests that the sheet name for multiple clones of the same sheet is unique
- * BUG 37416
- */
- public void testCloneSheetMultipleTimes() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet("Test Clone");
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = row.createCell(0);
- cell.setCellValue(new HSSFRichTextString("clone_test"));
- //Clone the sheet multiple times
- workbook.cloneSheet(0);
- workbook.cloneSheet(0);
-
- assertNotNull(workbook.getSheet("Test Clone"));
- assertNotNull(workbook.getSheet("Test Clone(1)"));
- assertNotNull(workbook.getSheet("Test Clone(2)"));
- }
-
- /**
- * Setting landscape and portrait stuff on new sheets
- */
- public void testPrintSetupLandscapeNew() throws Exception {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheetL = workbook.createSheet("LandscapeS");
- HSSFSheet sheetP = workbook.createSheet("LandscapeP");
-
- // Check two aspects of the print setup
- assertFalse(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(0, sheetL.getPrintSetup().getCopies());
- assertEquals(0, sheetP.getPrintSetup().getCopies());
-
- // Change one on each
- sheetL.getPrintSetup().setLandscape(true);
- sheetP.getPrintSetup().setCopies((short)3);
-
- // Check taken
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(0, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetP.getPrintSetup().getCopies());
-
- // Save and re-load, and check still there
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- workbook.write(baos);
- workbook = new HSSFWorkbook(new ByteArrayInputStream(baos.toByteArray()));
-
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(0, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetP.getPrintSetup().getCopies());
- }
-
- /**
- * Setting landscape and portrait stuff on existing sheets
- */
- public void testPrintSetupLandscapeExisting() {
- HSSFWorkbook workbook = openSample("SimpleWithPageBreaks.xls");
-
- assertEquals(3, workbook.getNumberOfSheets());
-
- HSSFSheet sheetL = workbook.getSheetAt(0);
- HSSFSheet sheetPM = workbook.getSheetAt(1);
- HSSFSheet sheetLS = workbook.getSheetAt(2);
-
- // Check two aspects of the print setup
- assertFalse(sheetL.getPrintSetup().getLandscape());
- assertTrue(sheetPM.getPrintSetup().getLandscape());
- assertTrue(sheetLS.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(1, sheetPM.getPrintSetup().getCopies());
- assertEquals(1, sheetLS.getPrintSetup().getCopies());
-
- // Change one on each
- sheetL.getPrintSetup().setLandscape(true);
- sheetPM.getPrintSetup().setLandscape(false);
- sheetPM.getPrintSetup().setCopies((short)3);
-
- // Check taken
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetPM.getPrintSetup().getLandscape());
- assertTrue(sheetLS.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetPM.getPrintSetup().getCopies());
- assertEquals(1, sheetLS.getPrintSetup().getCopies());
-
- // Save and re-load, and check still there
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
-
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetPM.getPrintSetup().getLandscape());
- assertTrue(sheetLS.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetPM.getPrintSetup().getCopies());
- assertEquals(1, sheetLS.getPrintSetup().getCopies());
- }
-
- public void testGroupRows() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet s = workbook.createSheet();
- HSSFRow r1 = s.createRow(0);
- HSSFRow r2 = s.createRow(1);
- HSSFRow r3 = s.createRow(2);
- HSSFRow r4 = s.createRow(3);
- HSSFRow r5 = s.createRow(4);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(0, r3.getOutlineLevel());
- assertEquals(0, r4.getOutlineLevel());
- assertEquals(0, r5.getOutlineLevel());
-
- s.groupRow(2,3);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(1, r3.getOutlineLevel());
- assertEquals(1, r4.getOutlineLevel());
- assertEquals(0, r5.getOutlineLevel());
-
- // Save and re-open
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
-
- s = workbook.getSheetAt(0);
- r1 = s.getRow(0);
- r2 = s.getRow(1);
- r3 = s.getRow(2);
- r4 = s.getRow(3);
- r5 = s.getRow(4);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(1, r3.getOutlineLevel());
- assertEquals(1, r4.getOutlineLevel());
- assertEquals(0, r5.getOutlineLevel());
- }
-
- public void testGroupRowsExisting() {
- HSSFWorkbook workbook = openSample("NoGutsRecords.xls");
-
- HSSFSheet s = workbook.getSheetAt(0);
- HSSFRow r1 = s.getRow(0);
- HSSFRow r2 = s.getRow(1);
- HSSFRow r3 = s.getRow(2);
- HSSFRow r4 = s.getRow(3);
- HSSFRow r5 = s.getRow(4);
- HSSFRow r6 = s.getRow(5);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(0, r3.getOutlineLevel());
- assertEquals(0, r4.getOutlineLevel());
- assertEquals(0, r5.getOutlineLevel());
- assertEquals(0, r6.getOutlineLevel());
-
- // This used to complain about lacking guts records
- s.groupRow(2, 4);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(1, r3.getOutlineLevel());
- assertEquals(1, r4.getOutlineLevel());
- assertEquals(1, r5.getOutlineLevel());
- assertEquals(0, r6.getOutlineLevel());
-
- // Save and re-open
- try {
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
- } catch (OutOfMemoryError e) {
- throw new AssertionFailedError("Identified bug 39903");
- }
-
- s = workbook.getSheetAt(0);
- r1 = s.getRow(0);
- r2 = s.getRow(1);
- r3 = s.getRow(2);
- r4 = s.getRow(3);
- r5 = s.getRow(4);
- r6 = s.getRow(5);
-
- assertEquals(0, r1.getOutlineLevel());
- assertEquals(0, r2.getOutlineLevel());
- assertEquals(1, r3.getOutlineLevel());
- assertEquals(1, r4.getOutlineLevel());
- assertEquals(1, r5.getOutlineLevel());
- assertEquals(0, r6.getOutlineLevel());
- }
-
- public void testGetDrawings() {
- HSSFWorkbook wb1c = openSample("WithChart.xls");
- HSSFWorkbook wb2c = openSample("WithTwoCharts.xls");
-
- // 1 chart sheet -> data on 1st, chart on 2nd
- assertNotNull(wb1c.getSheetAt(0).getDrawingPatriarch());
- assertNotNull(wb1c.getSheetAt(1).getDrawingPatriarch());
- assertFalse(wb1c.getSheetAt(0).getDrawingPatriarch().containsChart());
- assertTrue(wb1c.getSheetAt(1).getDrawingPatriarch().containsChart());
-
- // 2 chart sheet -> data on 1st, chart on 2nd+3rd
- assertNotNull(wb2c.getSheetAt(0).getDrawingPatriarch());
- assertNotNull(wb2c.getSheetAt(1).getDrawingPatriarch());
- assertNotNull(wb2c.getSheetAt(2).getDrawingPatriarch());
- assertFalse(wb2c.getSheetAt(0).getDrawingPatriarch().containsChart());
- assertTrue(wb2c.getSheetAt(1).getDrawingPatriarch().containsChart());
- assertTrue(wb2c.getSheetAt(2).getDrawingPatriarch().containsChart());
- }
-
- /**
- * Test that the ProtectRecord is included when creating or cloning a sheet
- */
- public void testProtect() {
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet hssfSheet = workbook.createSheet();
- Sheet sheet = hssfSheet.getSheet();
- ProtectRecord protect = sheet.getProtect();
-
- assertFalse(protect.getProtect());
-
- // This will tell us that cloneSheet, and by extension,
- // the list forms of createSheet leave us with an accessible
- // ProtectRecord.
- hssfSheet.setProtect(true);
- Sheet cloned = sheet.cloneSheet();
- assertNotNull(cloned.getProtect());
- assertTrue(hssfSheet.getProtect());
- }
-
- public void testProtectSheet() {
- short expected = (short)0xfef1;
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet();
- s.protectSheet("abcdefghij");
- Sheet sheet = s.getSheet();
- ProtectRecord protect = sheet.getProtect();
- PasswordRecord pass = sheet.getPassword();
- assertTrue("protection should be on",protect.getProtect());
- assertTrue("object protection should be on",sheet.isProtected()[1]);
- assertTrue("scenario protection should be on",sheet.isProtected()[2]);
- assertEquals("well known value for top secret hash should be "+Integer.toHexString(expected).substring(4),expected,pass.getPassword());
- }
-
-
- public void testZoom() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- assertEquals(-1, sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid));
- sheet.setZoom(3,4);
- assertTrue(sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid) > 0);
- SCLRecord sclRecord = (SCLRecord) sheet.getSheet().findFirstRecordBySid(SCLRecord.sid);
- assertEquals(3, sclRecord.getNumerator());
- assertEquals(4, sclRecord.getDenominator());
-
- int sclLoc = sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid);
- int window2Loc = sheet.getSheet().findFirstRecordLocBySid(WindowTwoRecord.sid);
- assertTrue(sclLoc == window2Loc + 1);
- }
-
-
- /**
- * When removing one merged region, it would break
- *
- */
- public void testRemoveMerged() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
- sheet.addMergedRegion(region);
- region = new CellRangeAddress(1, 2, 0, 1);
- sheet.addMergedRegion(region);
-
- sheet.removeMergedRegion(0);
-
- region = sheet.getMergedRegion(0);
- assertEquals("Left over region should be starting at row 1", 1, region.getFirstRow());
-
- sheet.removeMergedRegion(0);
-
- assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
-
- //an, add, remove, get(0) would null pointer
- sheet.addMergedRegion(region);
- assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
- sheet.removeMergedRegion(0);
- assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
- //add it again!
- region.setLastRow(4);
-
- sheet.addMergedRegion(region);
- assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
-
- //should exist now!
- assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
- region = sheet.getMergedRegion(0);
- assertEquals("the merged row to doesnt match the one we put in ", 4, region.getLastRow());
- }
-
- public void testShiftMerged() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = row.createCell(0);
- cell.setCellValue(new HSSFRichTextString("first row, first cell"));
-
- row = sheet.createRow(1);
- cell = row.createCell(1);
- cell.setCellValue(new HSSFRichTextString("second row, second cell"));
-
- CellRangeAddress region = new CellRangeAddress(1, 1, 0, 1);
- sheet.addMergedRegion(region);
-
- sheet.shiftRows(1, 1, 1);
-
- region = sheet.getMergedRegion(0);
- assertEquals("Merged region not moved over to row 2", 2, region.getFirstRow());
- }
-
- /**
- * Tests the display of gridlines, formulas, and rowcolheadings.
- * @author Shawn Laubach (slaubach at apache dot org)
- */
- public void testDisplayOptions() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
-
- assertEquals(sheet.isDisplayGridlines(), true);
- assertEquals(sheet.isDisplayRowColHeadings(), true);
- assertEquals(sheet.isDisplayFormulas(), false);
-
- sheet.setDisplayGridlines(false);
- sheet.setDisplayRowColHeadings(false);
- sheet.setDisplayFormulas(true);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
-
- assertEquals(sheet.isDisplayGridlines(), false);
- assertEquals(sheet.isDisplayRowColHeadings(), false);
- assertEquals(sheet.isDisplayFormulas(), true);
- }
-
-
- /**
- * Make sure the excel file loads work
- *
- */
- public void testPageBreakFiles() {
- HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls");
-
- HSSFSheet sheet = wb.getSheetAt(0);
- assertNotNull(sheet);
-
- assertEquals("1 row page break", 1, sheet.getRowBreaks().length);
- assertEquals("1 column page break", 1, sheet.getColumnBreaks().length);
-
- assertTrue("No row page break", sheet.isRowBroken(22));
- assertTrue("No column page break", sheet.isColumnBroken((short)4));
-
- sheet.setRowBreak(10);
- sheet.setColumnBreak((short)13);
-
- assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
- assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
-
- assertTrue("No row page break", sheet.isRowBroken(22));
- assertTrue("No column page break", sheet.isColumnBroken((short)4));
-
- assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
- assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
- }
-
- public void testDBCSName () {
- HSSFWorkbook wb = openSample("DBCSSheetName.xls");
- wb.getSheetAt(1);
- assertEquals ("DBCS Sheet Name 2", wb.getSheetName(1),"\u090f\u0915" );
- assertEquals("DBCS Sheet Name 1", wb.getSheetName(0),"\u091c\u093e");
- }
-
- /**
- * Testing newly added method that exposes the WINDOW2.toprow
- * parameter to allow setting the toprow in the visible view
- * of the sheet when it is first opened.
- */
- public void testTopRow() {
- HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls");
-
- HSSFSheet sheet = wb.getSheetAt(0);
- assertNotNull(sheet);
-
- short toprow = (short) 100;
- short leftcol = (short) 50;
- sheet.showInPane(toprow,leftcol);
- assertEquals("HSSFSheet.getTopRow()", toprow, sheet.getTopRow());
- assertEquals("HSSFSheet.getLeftCol()", leftcol, sheet.getLeftCol());
- }
-
- /** cell with formula becomes null on cloning a sheet*/
- public void test35084() {
-
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet s = wb.createSheet("Sheet1");
- HSSFRow r = s.createRow(0);
- r.createCell(0).setCellValue(1);
- r.createCell(1).setCellFormula("A1*2");
- HSSFSheet s1 = wb.cloneSheet(0);
- r = s1.getRow(0);
- assertEquals("double", r.getCell(0).getNumericCellValue(), 1, 0); // sanity check
- assertNotNull(r.getCell(1));
- assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2");
- }
-
- /** test that new default column styles get applied */
- public void testDefaultColumnStyle() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFCellStyle style = wb.createCellStyle();
- HSSFSheet s = wb.createSheet();
- s.setDefaultColumnStyle((short) 0, style);
- HSSFRow r = s.createRow(0);
- HSSFCell c = r.createCell(0);
- assertEquals("style should match", style.getIndex(), c.getCellStyle().getIndex());
- }
-
-
- /**
- *
- */
- public void testAddEmptyRow() {
- //try to add 5 empty rows to a new sheet
- HSSFWorkbook workbook = new HSSFWorkbook();
- HSSFSheet sheet = workbook.createSheet();
- for (int i = 0; i < 5; i++) {
- sheet.createRow(i);
- }
-
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
-
- //try adding empty rows in an existing worksheet
- workbook = openSample("Simple.xls");
-
- sheet = workbook.getSheetAt(0);
- for (int i = 3; i < 10; i++) sheet.createRow(i);
-
- workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
- }
-
- public void testAutoSizeColumn() {
- HSSFWorkbook wb = openSample("43902.xls");
- String sheetName = "my sheet";
- HSSFSheet sheet = wb.getSheet(sheetName);
-
- // Can't use literal numbers for column sizes, as
- // will come out with different values on different
- // machines based on the fonts available.
- // So, we use ranges, which are pretty large, but
- // thankfully don't overlap!
- int minWithRow1And2 = 6400;
- int maxWithRow1And2 = 7800;
- int minWithRow1Only = 2750;
- int maxWithRow1Only = 3300;
-
- // autoSize the first column and check its size before the merged region (1,0,1,1) is set:
- // it has to be based on the 2nd row width
- sheet.autoSizeColumn((short)0);
- assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) >= minWithRow1And2);
- assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) <= maxWithRow1And2);
-
- //create a region over the 2nd row and auto size the first column
- sheet.addMergedRegion(new CellRangeAddress(1,1,0,1));
- sheet.autoSizeColumn((short)0);
- HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb);
-
- // check that the autoSized column width has ignored the 2nd row
- // because it is included in a merged region (Excel like behavior)
- HSSFSheet sheet2 = wb2.getSheet(sheetName);
- assertTrue(sheet2.getColumnWidth((short)0) >= minWithRow1Only);
- assertTrue(sheet2.getColumnWidth((short)0) <= maxWithRow1Only);
-
- // remove the 2nd row merged region and check that the 2nd row value is used to the autoSizeColumn width
- sheet2.removeMergedRegion(1);
- sheet2.autoSizeColumn((short)0);
- HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
- HSSFSheet sheet3 = wb3.getSheet(sheetName);
- assertTrue(sheet3.getColumnWidth((short)0) >= minWithRow1And2);
- assertTrue(sheet3.getColumnWidth((short)0) <= maxWithRow1And2);
- }
-
- /**
- * Setting ForceFormulaRecalculation on sheets
- */
- public void testForceRecalculation() throws Exception {
- HSSFWorkbook workbook = openSample("UncalcedRecord.xls");
-
- HSSFSheet sheet = workbook.getSheetAt(0);
- HSSFSheet sheet2 = workbook.getSheetAt(0);
- HSSFRow row = sheet.getRow(0);
- row.createCell(0).setCellValue(5);
- row.createCell(1).setCellValue(8);
- assertFalse(sheet.getForceFormulaRecalculation());
- assertFalse(sheet2.getForceFormulaRecalculation());
-
- // Save and manually verify that on column C we have 0, value in template
- File tempFile = new File(System.getProperty("java.io.tmpdir")+"/uncalced_err.xls" );
- tempFile.delete();
- FileOutputStream fout = new FileOutputStream( tempFile );
- workbook.write( fout );
- fout.close();
- sheet.setForceFormulaRecalculation(true);
- assertTrue(sheet.getForceFormulaRecalculation());
-
- // Save and manually verify that on column C we have now 13, calculated value
- tempFile = new File(System.getProperty("java.io.tmpdir")+"/uncalced_succ.xls" );
- tempFile.delete();
- fout = new FileOutputStream( tempFile );
- workbook.write( fout );
- fout.close();
-
- // Try it can be opened
- HSSFWorkbook wb2 = new HSSFWorkbook(new FileInputStream(tempFile));
-
- // And check correct sheet settings found
- sheet = wb2.getSheetAt(0);
- sheet2 = wb2.getSheetAt(1);
- assertTrue(sheet.getForceFormulaRecalculation());
- assertFalse(sheet2.getForceFormulaRecalculation());
-
- // Now turn if back off again
- sheet.setForceFormulaRecalculation(false);
-
- fout = new FileOutputStream( tempFile );
- wb2.write( fout );
- fout.close();
- wb2 = new HSSFWorkbook(new FileInputStream(tempFile));
-
- assertFalse(wb2.getSheetAt(0).getForceFormulaRecalculation());
- assertFalse(wb2.getSheetAt(1).getForceFormulaRecalculation());
- assertFalse(wb2.getSheetAt(2).getForceFormulaRecalculation());
-
- // Now add a new sheet, and check things work
- // with old ones unset, new one set
- HSSFSheet s4 = wb2.createSheet();
- s4.setForceFormulaRecalculation(true);
-
- assertFalse(sheet.getForceFormulaRecalculation());
- assertFalse(sheet2.getForceFormulaRecalculation());
- assertTrue(s4.getForceFormulaRecalculation());
-
- fout = new FileOutputStream( tempFile );
- wb2.write( fout );
- fout.close();
-
- HSSFWorkbook wb3 = new HSSFWorkbook(new FileInputStream(tempFile));
- assertFalse(wb3.getSheetAt(0).getForceFormulaRecalculation());
- assertFalse(wb3.getSheetAt(1).getForceFormulaRecalculation());
- assertFalse(wb3.getSheetAt(2).getForceFormulaRecalculation());
- assertTrue(wb3.getSheetAt(3).getForceFormulaRecalculation());
- }
-
- public void testColumnWidth() {
- //check we can correctly read column widths from a reference workbook
- HSSFWorkbook wb = openSample("colwidth.xls");
-
- //reference values
- int[] ref = {365, 548, 731, 914, 1097, 1280, 1462, 1645, 1828, 2011, 2194, 2377, 2560, 2742, 2925, 3108, 3291, 3474, 3657};
-
- HSSFSheet sh = wb.getSheetAt(0);
- for (char i = 'A'; i <= 'S'; i++) {
- int idx = i - 'A';
- int w = sh.getColumnWidth((short)idx);
- assertEquals(ref[idx], w);
- }
-
- //the second sheet doesn't have overridden column widths
- sh = wb.getSheetAt(1);
- int def_width = sh.getDefaultColumnWidth();
- for (char i = 'A'; i <= 'S'; i++) {
- int idx = i - 'A';
- int w = sh.getColumnWidth((short)idx);
- //getDefaultColumnWidth returns width measued in characters
- //getColumnWidth returns width measued in 1/256th units
- assertEquals(def_width*256, w);
- }
-
- //test new workbook
- wb = new HSSFWorkbook();
- sh = wb.createSheet();
- sh.setDefaultColumnWidth((short)10);
- assertEquals(10, sh.getDefaultColumnWidth());
- assertEquals(256*10, sh.getColumnWidth((short)0));
- assertEquals(256*10, sh.getColumnWidth((short)1));
- assertEquals(256*10, sh.getColumnWidth((short)2));
- for (char i = 'D'; i <= 'F'; i++) {
- short w = (short)(256*12);
- sh.setColumnWidth((short)i, w);
- assertEquals(w, sh.getColumnWidth((short)i));
- }
-
- //serialize and read again
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-
- sh = wb.getSheetAt(0);
- assertEquals(10, sh.getDefaultColumnWidth());
- //columns A-C have default width
- assertEquals(256*10, sh.getColumnWidth((short)0));
- assertEquals(256*10, sh.getColumnWidth((short)1));
- assertEquals(256*10, sh.getColumnWidth((short)2));
- //columns D-F have custom width
- for (char i = 'D'; i <= 'F'; i++) {
- short w = (short)(256*12);
- assertEquals(w, sh.getColumnWidth((short)i));
- }
- }
-
- /**
- * Some utilities write Excel files without the ROW records.
- * Excel, ooo, and google docs are OK with this.
- * Now POI is too.
- */
- public void testMissingRowRecords_bug41187() {
- HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ex41187-19267.xls");
-
- HSSFSheet sheet = wb.getSheetAt(0);
- HSSFRow row = sheet.getRow(0);
- if(row == null) {
- throw new AssertionFailedError("Identified bug 41187 a");
- }
- if (row.getHeight() == 0) {
- throw new AssertionFailedError("Identified bug 41187 b");
- }
- assertEquals("Hi Excel!", row.getCell(0).getRichStringCellValue().getString());
- // check row height for 'default' flag
- assertEquals((short)0xFF, row.getHeight());
-
- HSSFTestDataSamples.writeOutAndReadBack(wb);
- }
+ private static HSSFWorkbook openSample(String sampleFileName) {
+ return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
+ }
+
+ /**
+ * Test the gridset field gets set as expected.
+ */
+ public void testBackupRecord() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ Sheet sheet = s.getSheet();
+
+ assertEquals(true, sheet.getGridsetRecord().getGridset());
+ s.setGridsPrinted(true);
+ assertEquals(false, sheet.getGridsetRecord().getGridset());
+ }
+
+ /**
+ * Test vertically centered output.
+ */
+ public void testVerticallyCenter() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ Sheet sheet = s.getSheet();
+ VCenterRecord record = sheet.getPageSettings().getVCenter();
+
+ assertEquals(false, record.getVCenter());
+ s.setVerticallyCenter(true);
+ assertEquals(true, record.getVCenter());
+
+ // wb.write(new FileOutputStream("c:\\test.xls"));
+ }
+
+ /**
+ * Test horizontally centered output.
+ */
+ public void testHorizontallyCenter() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ Sheet sheet = s.getSheet();
+ HCenterRecord record = sheet.getPageSettings().getHCenter();
+
+ assertEquals(false, record.getHCenter());
+ s.setHorizontallyCenter(true);
+ assertEquals(true, record.getHCenter());
+ }
+
+
+ /**
+ * Test WSBboolRecord fields get set in the user model.
+ */
+ public void testWSBool() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ Sheet sheet = s.getSheet();
+ WSBoolRecord record =
+ (WSBoolRecord) sheet.findFirstRecordBySid(WSBoolRecord.sid);
+
+ // Check defaults
+ assertEquals(true, record.getAlternateExpression());
+ assertEquals(true, record.getAlternateFormula());
+ assertEquals(false, record.getAutobreaks());
+ assertEquals(false, record.getDialog());
+ assertEquals(false, record.getDisplayGuts());
+ assertEquals(true, record.getFitToPage());
+ assertEquals(false, record.getRowSumsBelow());
+ assertEquals(false, record.getRowSumsRight());
+
+ // Alter
+ s.setAlternativeExpression(false);
+ s.setAlternativeFormula(false);
+ s.setAutobreaks(true);
+ s.setDialog(true);
+ s.setDisplayGuts(true);
+ s.setFitToPage(false);
+ s.setRowSumsBelow(true);
+ s.setRowSumsRight(true);
+
+ // Check
+ assertEquals(false, record.getAlternateExpression());
+ assertEquals(false, record.getAlternateFormula());
+ assertEquals(true, record.getAutobreaks());
+ assertEquals(true, record.getDialog());
+ assertEquals(true, record.getDisplayGuts());
+ assertEquals(false, record.getFitToPage());
+ assertEquals(true, record.getRowSumsBelow());
+ assertEquals(true, record.getRowSumsRight());
+ assertEquals(false, s.getAlternateExpression());
+ assertEquals(false, s.getAlternateFormula());
+ assertEquals(true, s.getAutobreaks());
+ assertEquals(true, s.getDialog());
+ assertEquals(true, s.getDisplayGuts());
+ assertEquals(false, s.getFitToPage());
+ assertEquals(true, s.getRowSumsBelow());
+ assertEquals(true, s.getRowSumsRight());
+ }
+
+ public void testReadBooleans() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Test boolean");
+ HSSFRow row = sheet.createRow(2);
+ HSSFCell cell = row.createCell(9);
+ cell.setCellValue(true);
+ cell = row.createCell(11);
+ cell.setCellValue(true);
+
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+
+ sheet = workbook.getSheetAt(0);
+ row = sheet.getRow(2);
+ assertNotNull(row);
+ assertEquals(2, row.getPhysicalNumberOfCells());
+ }
+
+ public void testRemoveRow() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Test boolean");
+ HSSFRow row = sheet.createRow(2);
+ sheet.removeRow(row);
+ }
+
+ public void testRemoveZeroRow() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Sheet1");
+ HSSFRow row = sheet.createRow(0);
+ try {
+ sheet.removeRow(row);
+ } catch (IllegalArgumentException e) {
+ if (e.getMessage().equals("Invalid row number (-1) outside allowable range (0..65535)")) {
+ throw new AssertionFailedError("Identified bug 45367");
+ }
+ throw e;
+ }
+ }
+
+ public void testCloneSheet() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Test Clone");
+ HSSFRow row = sheet.createRow(0);
+ HSSFCell cell = row.createCell(0);
+ HSSFCell cell2 = row.createCell(1);
+ cell.setCellValue(new HSSFRichTextString("clone_test"));
+ cell2.setCellFormula("sin(1)");
+
+ HSSFSheet clonedSheet = workbook.cloneSheet(0);
+ HSSFRow clonedRow = clonedSheet.getRow(0);
+
+ //Check for a good clone
+ assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
+
+ //Check that the cells are not somehow linked
+ cell.setCellValue(new HSSFRichTextString("Difference Check"));
+ cell2.setCellFormula("cos(2)");
+ if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) {
+ fail("string cell not properly cloned");
+ }
+ if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) {
+ fail("formula cell not properly cloned");
+ }
+ assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
+ assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)");
+ }
+
+ /** tests that the sheet name for multiple clones of the same sheet is unique
+ * BUG 37416
+ */
+ public void testCloneSheetMultipleTimes() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Test Clone");
+ HSSFRow row = sheet.createRow(0);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellValue(new HSSFRichTextString("clone_test"));
+ //Clone the sheet multiple times
+ workbook.cloneSheet(0);
+ workbook.cloneSheet(0);
+
+ assertNotNull(workbook.getSheet("Test Clone"));
+ assertNotNull(workbook.getSheet("Test Clone (2)"));
+ assertEquals("Test Clone (3)", workbook.getSheetName(2));
+ assertNotNull(workbook.getSheet("Test Clone (3)"));
+
+ workbook.removeSheetAt(0);
+ workbook.removeSheetAt(0);
+ workbook.removeSheetAt(0);
+ workbook.createSheet("abc ( 123)");
+ workbook.cloneSheet(0);
+ assertEquals("abc (124)", workbook.getSheetName(1));
+ }
+
+ /**
+ * Setting landscape and portrait stuff on new sheets
+ */
+ public void testPrintSetupLandscapeNew() throws Exception {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheetL = workbook.createSheet("LandscapeS");
+ HSSFSheet sheetP = workbook.createSheet("LandscapeP");
+
+ // Check two aspects of the print setup
+ assertFalse(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(0, sheetL.getPrintSetup().getCopies());
+ assertEquals(0, sheetP.getPrintSetup().getCopies());
+
+ // Change one on each
+ sheetL.getPrintSetup().setLandscape(true);
+ sheetP.getPrintSetup().setCopies((short)3);
+
+ // Check taken
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(0, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetP.getPrintSetup().getCopies());
+
+ // Save and re-load, and check still there
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ workbook.write(baos);
+ workbook = new HSSFWorkbook(new ByteArrayInputStream(baos.toByteArray()));
+
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(0, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetP.getPrintSetup().getCopies());
+ }
+
+ /**
+ * Setting landscape and portrait stuff on existing sheets
+ */
+ public void testPrintSetupLandscapeExisting() {
+ HSSFWorkbook workbook = openSample("SimpleWithPageBreaks.xls");
+
+ assertEquals(3, workbook.getNumberOfSheets());
+
+ HSSFSheet sheetL = workbook.getSheetAt(0);
+ HSSFSheet sheetPM = workbook.getSheetAt(1);
+ HSSFSheet sheetLS = workbook.getSheetAt(2);
+
+ // Check two aspects of the print setup
+ assertFalse(sheetL.getPrintSetup().getLandscape());
+ assertTrue(sheetPM.getPrintSetup().getLandscape());
+ assertTrue(sheetLS.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(1, sheetPM.getPrintSetup().getCopies());
+ assertEquals(1, sheetLS.getPrintSetup().getCopies());
+
+ // Change one on each
+ sheetL.getPrintSetup().setLandscape(true);
+ sheetPM.getPrintSetup().setLandscape(false);
+ sheetPM.getPrintSetup().setCopies((short)3);
+
+ // Check taken
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetPM.getPrintSetup().getLandscape());
+ assertTrue(sheetLS.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetPM.getPrintSetup().getCopies());
+ assertEquals(1, sheetLS.getPrintSetup().getCopies());
+
+ // Save and re-load, and check still there
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetPM.getPrintSetup().getLandscape());
+ assertTrue(sheetLS.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetPM.getPrintSetup().getCopies());
+ assertEquals(1, sheetLS.getPrintSetup().getCopies());
+ }
+
+ public void testGroupRows() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet s = workbook.createSheet();
+ HSSFRow r1 = s.createRow(0);
+ HSSFRow r2 = s.createRow(1);
+ HSSFRow r3 = s.createRow(2);
+ HSSFRow r4 = s.createRow(3);
+ HSSFRow r5 = s.createRow(4);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(0, r3.getOutlineLevel());
+ assertEquals(0, r4.getOutlineLevel());
+ assertEquals(0, r5.getOutlineLevel());
+
+ s.groupRow(2,3);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(1, r3.getOutlineLevel());
+ assertEquals(1, r4.getOutlineLevel());
+ assertEquals(0, r5.getOutlineLevel());
+
+ // Save and re-open
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+
+ s = workbook.getSheetAt(0);
+ r1 = s.getRow(0);
+ r2 = s.getRow(1);
+ r3 = s.getRow(2);
+ r4 = s.getRow(3);
+ r5 = s.getRow(4);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(1, r3.getOutlineLevel());
+ assertEquals(1, r4.getOutlineLevel());
+ assertEquals(0, r5.getOutlineLevel());
+ }
+
+ public void testGroupRowsExisting() {
+ HSSFWorkbook workbook = openSample("NoGutsRecords.xls");
+
+ HSSFSheet s = workbook.getSheetAt(0);
+ HSSFRow r1 = s.getRow(0);
+ HSSFRow r2 = s.getRow(1);
+ HSSFRow r3 = s.getRow(2);
+ HSSFRow r4 = s.getRow(3);
+ HSSFRow r5 = s.getRow(4);
+ HSSFRow r6 = s.getRow(5);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(0, r3.getOutlineLevel());
+ assertEquals(0, r4.getOutlineLevel());
+ assertEquals(0, r5.getOutlineLevel());
+ assertEquals(0, r6.getOutlineLevel());
+
+ // This used to complain about lacking guts records
+ s.groupRow(2, 4);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(1, r3.getOutlineLevel());
+ assertEquals(1, r4.getOutlineLevel());
+ assertEquals(1, r5.getOutlineLevel());
+ assertEquals(0, r6.getOutlineLevel());
+
+ // Save and re-open
+ try {
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+ } catch (OutOfMemoryError e) {
+ throw new AssertionFailedError("Identified bug 39903");
+ }
+
+ s = workbook.getSheetAt(0);
+ r1 = s.getRow(0);
+ r2 = s.getRow(1);
+ r3 = s.getRow(2);
+ r4 = s.getRow(3);
+ r5 = s.getRow(4);
+ r6 = s.getRow(5);
+
+ assertEquals(0, r1.getOutlineLevel());
+ assertEquals(0, r2.getOutlineLevel());
+ assertEquals(1, r3.getOutlineLevel());
+ assertEquals(1, r4.getOutlineLevel());
+ assertEquals(1, r5.getOutlineLevel());
+ assertEquals(0, r6.getOutlineLevel());
+ }
+
+ public void testGetDrawings() {
+ HSSFWorkbook wb1c = openSample("WithChart.xls");
+ HSSFWorkbook wb2c = openSample("WithTwoCharts.xls");
+
+ // 1 chart sheet -> data on 1st, chart on 2nd
+ assertNotNull(wb1c.getSheetAt(0).getDrawingPatriarch());
+ assertNotNull(wb1c.getSheetAt(1).getDrawingPatriarch());
+ assertFalse(wb1c.getSheetAt(0).getDrawingPatriarch().containsChart());
+ assertTrue(wb1c.getSheetAt(1).getDrawingPatriarch().containsChart());
+
+ // 2 chart sheet -> data on 1st, chart on 2nd+3rd
+ assertNotNull(wb2c.getSheetAt(0).getDrawingPatriarch());
+ assertNotNull(wb2c.getSheetAt(1).getDrawingPatriarch());
+ assertNotNull(wb2c.getSheetAt(2).getDrawingPatriarch());
+ assertFalse(wb2c.getSheetAt(0).getDrawingPatriarch().containsChart());
+ assertTrue(wb2c.getSheetAt(1).getDrawingPatriarch().containsChart());
+ assertTrue(wb2c.getSheetAt(2).getDrawingPatriarch().containsChart());
+ }
+
+ /**
+ * Test that the ProtectRecord is included when creating or cloning a sheet
+ */
+ public void testProtect() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet hssfSheet = workbook.createSheet();
+ Sheet sheet = hssfSheet.getSheet();
+ ProtectRecord protect = sheet.getProtect();
+
+ assertFalse(protect.getProtect());
+
+ // This will tell us that cloneSheet, and by extension,
+ // the list forms of createSheet leave us with an accessible
+ // ProtectRecord.
+ hssfSheet.setProtect(true);
+ Sheet cloned = sheet.cloneSheet();
+ assertNotNull(cloned.getProtect());
+ assertTrue(hssfSheet.getProtect());
+ }
+
+ public void testProtectSheet() {
+ short expected = (short)0xfef1;
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet();
+ s.protectSheet("abcdefghij");
+ Sheet sheet = s.getSheet();
+ ProtectRecord protect = sheet.getProtect();
+ PasswordRecord pass = sheet.getPassword();
+ assertTrue("protection should be on",protect.getProtect());
+ assertTrue("object protection should be on",sheet.isProtected()[1]);
+ assertTrue("scenario protection should be on",sheet.isProtected()[2]);
+ assertEquals("well known value for top secret hash should be "+Integer.toHexString(expected).substring(4),expected,pass.getPassword());
+ }
+
+
+ public void testZoom() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ assertEquals(-1, sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid));
+ sheet.setZoom(3,4);
+ assertTrue(sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid) > 0);
+ SCLRecord sclRecord = (SCLRecord) sheet.getSheet().findFirstRecordBySid(SCLRecord.sid);
+ assertEquals(3, sclRecord.getNumerator());
+ assertEquals(4, sclRecord.getDenominator());
+
+ int sclLoc = sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid);
+ int window2Loc = sheet.getSheet().findFirstRecordLocBySid(WindowTwoRecord.sid);
+ assertTrue(sclLoc == window2Loc + 1);
+ }
+
+
+ /**
+ * When removing one merged region, it would break
+ *
+ */
+ public void testRemoveMerged() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
+ sheet.addMergedRegion(region);
+ region = new CellRangeAddress(1, 2, 0, 1);
+ sheet.addMergedRegion(region);
+
+ sheet.removeMergedRegion(0);
+
+ region = sheet.getMergedRegion(0);
+ assertEquals("Left over region should be starting at row 1", 1, region.getFirstRow());
+
+ sheet.removeMergedRegion(0);
+
+ assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
+
+ //an, add, remove, get(0) would null pointer
+ sheet.addMergedRegion(region);
+ assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
+ sheet.removeMergedRegion(0);
+ assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
+ //add it again!
+ region.setLastRow(4);
+
+ sheet.addMergedRegion(region);
+ assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
+
+ //should exist now!
+ assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
+ region = sheet.getMergedRegion(0);
+ assertEquals("the merged row to doesnt match the one we put in ", 4, region.getLastRow());
+ }
+
+ public void testShiftMerged() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ HSSFRow row = sheet.createRow(0);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellValue(new HSSFRichTextString("first row, first cell"));
+
+ row = sheet.createRow(1);
+ cell = row.createCell(1);
+ cell.setCellValue(new HSSFRichTextString("second row, second cell"));
+
+ CellRangeAddress region = new CellRangeAddress(1, 1, 0, 1);
+ sheet.addMergedRegion(region);
+
+ sheet.shiftRows(1, 1, 1);
+
+ region = sheet.getMergedRegion(0);
+ assertEquals("Merged region not moved over to row 2", 2, region.getFirstRow());
+ }
+
+ /**
+ * Tests the display of gridlines, formulas, and rowcolheadings.
+ * @author Shawn Laubach (slaubach at apache dot org)
+ */
+ public void testDisplayOptions() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+
+ assertEquals(sheet.isDisplayGridlines(), true);
+ assertEquals(sheet.isDisplayRowColHeadings(), true);
+ assertEquals(sheet.isDisplayFormulas(), false);
+
+ sheet.setDisplayGridlines(false);
+ sheet.setDisplayRowColHeadings(false);
+ sheet.setDisplayFormulas(true);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+
+ assertEquals(sheet.isDisplayGridlines(), false);
+ assertEquals(sheet.isDisplayRowColHeadings(), false);
+ assertEquals(sheet.isDisplayFormulas(), true);
+ }
+
+
+ /**
+ * Make sure the excel file loads work
+ *
+ */
+ public void testPageBreakFiles() {
+ HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls");
+
+ HSSFSheet sheet = wb.getSheetAt(0);
+ assertNotNull(sheet);
+
+ assertEquals("1 row page break", 1, sheet.getRowBreaks().length);
+ assertEquals("1 column page break", 1, sheet.getColumnBreaks().length);
+
+ assertTrue("No row page break", sheet.isRowBroken(22));
+ assertTrue("No column page break", sheet.isColumnBroken((short)4));
+
+ sheet.setRowBreak(10);
+ sheet.setColumnBreak((short)13);
+
+ assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
+ assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+
+ assertTrue("No row page break", sheet.isRowBroken(22));
+ assertTrue("No column page break", sheet.isColumnBroken((short)4));
+
+ assertEquals("row breaks number", 2, sheet.getRowBreaks().length);
+ assertEquals("column breaks number", 2, sheet.getColumnBreaks().length);
+ }
+
+ public void testDBCSName () {
+ HSSFWorkbook wb = openSample("DBCSSheetName.xls");
+ wb.getSheetAt(1);
+ assertEquals ("DBCS Sheet Name 2", wb.getSheetName(1),"\u090f\u0915" );
+ assertEquals("DBCS Sheet Name 1", wb.getSheetName(0),"\u091c\u093e");
+ }
+
+ /**
+ * Testing newly added method that exposes the WINDOW2.toprow
+ * parameter to allow setting the toprow in the visible view
+ * of the sheet when it is first opened.
+ */
+ public void testTopRow() {
+ HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls");
+
+ HSSFSheet sheet = wb.getSheetAt(0);
+ assertNotNull(sheet);
+
+ short toprow = (short) 100;
+ short leftcol = (short) 50;
+ sheet.showInPane(toprow,leftcol);
+ assertEquals("HSSFSheet.getTopRow()", toprow, sheet.getTopRow());
+ assertEquals("HSSFSheet.getLeftCol()", leftcol, sheet.getLeftCol());
+ }
+
+ /** cell with formula becomes null on cloning a sheet*/
+ public void test35084() {
+
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet s = wb.createSheet("Sheet1");
+ HSSFRow r = s.createRow(0);
+ r.createCell(0).setCellValue(1);
+ r.createCell(1).setCellFormula("A1*2");
+ HSSFSheet s1 = wb.cloneSheet(0);
+ r = s1.getRow(0);
+ assertEquals("double", r.getCell(0).getNumericCellValue(), 1, 0); // sanity check
+ assertNotNull(r.getCell(1));
+ assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2");
+ }
+
+ /** test that new default column styles get applied */
+ public void testDefaultColumnStyle() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFCellStyle style = wb.createCellStyle();
+ HSSFSheet s = wb.createSheet();
+ s.setDefaultColumnStyle((short) 0, style);
+ HSSFRow r = s.createRow(0);
+ HSSFCell c = r.createCell(0);
+ assertEquals("style should match", style.getIndex(), c.getCellStyle().getIndex());
+ }
+
+
+ /**
+ *
+ */
+ public void testAddEmptyRow() {
+ //try to add 5 empty rows to a new sheet
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet();
+ for (int i = 0; i < 5; i++) {
+ sheet.createRow(i);
+ }
+
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+
+ //try adding empty rows in an existing worksheet
+ workbook = openSample("Simple.xls");
+
+ sheet = workbook.getSheetAt(0);
+ for (int i = 3; i < 10; i++) sheet.createRow(i);
+
+ workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook);
+ }
+
+ public void testAutoSizeColumn() {
+ HSSFWorkbook wb = openSample("43902.xls");
+ String sheetName = "my sheet";
+ HSSFSheet sheet = wb.getSheet(sheetName);
+
+ // Can't use literal numbers for column sizes, as
+ // will come out with different values on different
+ // machines based on the fonts available.
+ // So, we use ranges, which are pretty large, but
+ // thankfully don't overlap!
+ int minWithRow1And2 = 6400;
+ int maxWithRow1And2 = 7800;
+ int minWithRow1Only = 2750;
+ int maxWithRow1Only = 3300;
+
+ // autoSize the first column and check its size before the merged region (1,0,1,1) is set:
+ // it has to be based on the 2nd row width
+ sheet.autoSizeColumn((short)0);
+ assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) >= minWithRow1And2);
+ assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth((short)0) <= maxWithRow1And2);
+
+ //create a region over the 2nd row and auto size the first column
+ sheet.addMergedRegion(new CellRangeAddress(1,1,0,1));
+ sheet.autoSizeColumn((short)0);
+ HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb);
+
+ // check that the autoSized column width has ignored the 2nd row
+ // because it is included in a merged region (Excel like behavior)
+ HSSFSheet sheet2 = wb2.getSheet(sheetName);
+ assertTrue(sheet2.getColumnWidth((short)0) >= minWithRow1Only);
+ assertTrue(sheet2.getColumnWidth((short)0) <= maxWithRow1Only);
+
+ // remove the 2nd row merged region and check that the 2nd row value is used to the autoSizeColumn width
+ sheet2.removeMergedRegion(1);
+ sheet2.autoSizeColumn((short)0);
+ HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
+ HSSFSheet sheet3 = wb3.getSheet(sheetName);
+ assertTrue(sheet3.getColumnWidth((short)0) >= minWithRow1And2);
+ assertTrue(sheet3.getColumnWidth((short)0) <= maxWithRow1And2);
+ }
+
+ /**
+ * Setting ForceFormulaRecalculation on sheets
+ */
+ public void testForceRecalculation() throws Exception {
+ HSSFWorkbook workbook = openSample("UncalcedRecord.xls");
+
+ HSSFSheet sheet = workbook.getSheetAt(0);
+ HSSFSheet sheet2 = workbook.getSheetAt(0);
+ HSSFRow row = sheet.getRow(0);
+ row.createCell(0).setCellValue(5);
+ row.createCell(1).setCellValue(8);
+ assertFalse(sheet.getForceFormulaRecalculation());
+ assertFalse(sheet2.getForceFormulaRecalculation());
+
+ // Save and manually verify that on column C we have 0, value in template
+ File tempFile = new File(System.getProperty("java.io.tmpdir")+"/uncalced_err.xls" );
+ tempFile.delete();
+ FileOutputStream fout = new FileOutputStream( tempFile );
+ workbook.write( fout );
+ fout.close();
+ sheet.setForceFormulaRecalculation(true);
+ assertTrue(sheet.getForceFormulaRecalculation());
+
+ // Save and manually verify that on column C we have now 13, calculated value
+ tempFile = new File(System.getProperty("java.io.tmpdir")+"/uncalced_succ.xls" );
+ tempFile.delete();
+ fout = new FileOutputStream( tempFile );
+ workbook.write( fout );
+ fout.close();
+
+ // Try it can be opened
+ HSSFWorkbook wb2 = new HSSFWorkbook(new FileInputStream(tempFile));
+
+ // And check correct sheet settings found
+ sheet = wb2.getSheetAt(0);
+ sheet2 = wb2.getSheetAt(1);
+ assertTrue(sheet.getForceFormulaRecalculation());
+ assertFalse(sheet2.getForceFormulaRecalculation());
+
+ // Now turn if back off again
+ sheet.setForceFormulaRecalculation(false);
+
+ fout = new FileOutputStream( tempFile );
+ wb2.write( fout );
+ fout.close();
+ wb2 = new HSSFWorkbook(new FileInputStream(tempFile));
+
+ assertFalse(wb2.getSheetAt(0).getForceFormulaRecalculation());
+ assertFalse(wb2.getSheetAt(1).getForceFormulaRecalculation());
+ assertFalse(wb2.getSheetAt(2).getForceFormulaRecalculation());
+
+ // Now add a new sheet, and check things work
+ // with old ones unset, new one set
+ HSSFSheet s4 = wb2.createSheet();
+ s4.setForceFormulaRecalculation(true);
+
+ assertFalse(sheet.getForceFormulaRecalculation());
+ assertFalse(sheet2.getForceFormulaRecalculation());
+ assertTrue(s4.getForceFormulaRecalculation());
+
+ fout = new FileOutputStream( tempFile );
+ wb2.write( fout );
+ fout.close();
+
+ HSSFWorkbook wb3 = new HSSFWorkbook(new FileInputStream(tempFile));
+ assertFalse(wb3.getSheetAt(0).getForceFormulaRecalculation());
+ assertFalse(wb3.getSheetAt(1).getForceFormulaRecalculation());
+ assertFalse(wb3.getSheetAt(2).getForceFormulaRecalculation());
+ assertTrue(wb3.getSheetAt(3).getForceFormulaRecalculation());
+ }
+
+ public void testColumnWidth() {
+ //check we can correctly read column widths from a reference workbook
+ HSSFWorkbook wb = openSample("colwidth.xls");
+
+ //reference values
+ int[] ref = {365, 548, 731, 914, 1097, 1280, 1462, 1645, 1828, 2011, 2194, 2377, 2560, 2742, 2925, 3108, 3291, 3474, 3657};
+
+ HSSFSheet sh = wb.getSheetAt(0);
+ for (char i = 'A'; i <= 'S'; i++) {
+ int idx = i - 'A';
+ int w = sh.getColumnWidth((short)idx);
+ assertEquals(ref[idx], w);
+ }
+
+ //the second sheet doesn't have overridden column widths
+ sh = wb.getSheetAt(1);
+ int def_width = sh.getDefaultColumnWidth();
+ for (char i = 'A'; i <= 'S'; i++) {
+ int idx = i - 'A';
+ int w = sh.getColumnWidth((short)idx);
+ //getDefaultColumnWidth returns width measued in characters
+ //getColumnWidth returns width measued in 1/256th units
+ assertEquals(def_width*256, w);
+ }
+
+ //test new workbook
+ wb = new HSSFWorkbook();
+ sh = wb.createSheet();
+ sh.setDefaultColumnWidth((short)10);
+ assertEquals(10, sh.getDefaultColumnWidth());
+ assertEquals(256*10, sh.getColumnWidth((short)0));
+ assertEquals(256*10, sh.getColumnWidth((short)1));
+ assertEquals(256*10, sh.getColumnWidth((short)2));
+ for (char i = 'D'; i <= 'F'; i++) {
+ short w = (short)(256*12);
+ sh.setColumnWidth((short)i, w);
+ assertEquals(w, sh.getColumnWidth((short)i));
+ }
+
+ //serialize and read again
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+
+ sh = wb.getSheetAt(0);
+ assertEquals(10, sh.getDefaultColumnWidth());
+ //columns A-C have default width
+ assertEquals(256*10, sh.getColumnWidth((short)0));
+ assertEquals(256*10, sh.getColumnWidth((short)1));
+ assertEquals(256*10, sh.getColumnWidth((short)2));
+ //columns D-F have custom width
+ for (char i = 'D'; i <= 'F'; i++) {
+ short w = (short)(256*12);
+ assertEquals(w, sh.getColumnWidth((short)i));
+ }
+ }
+
+ /**
+ * Some utilities write Excel files without the ROW records.
+ * Excel, ooo, and google docs are OK with this.
+ * Now POI is too.
+ */
+ public void testMissingRowRecords_bug41187() {
+ HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ex41187-19267.xls");
+
+ HSSFSheet sheet = wb.getSheetAt(0);
+ HSSFRow row = sheet.getRow(0);
+ if(row == null) {
+ throw new AssertionFailedError("Identified bug 41187 a");
+ }
+ if (row.getHeight() == 0) {
+ throw new AssertionFailedError("Identified bug 41187 b");
+ }
+ assertEquals("Hi Excel!", row.getCell(0).getRichStringCellValue().getString());
+ // check row height for 'default' flag
+ assertEquals((short)0xFF, row.getHeight());
+
+ HSSFTestDataSamples.writeOutAndReadBack(wb);
+ }
+
+ /**
+ * If we clone a sheet containing drawings,
+ * we must allocate a new ID of the drawing group and re-create shape IDs
+ *
+ * See bug #45720.
+ */
+ public void testCloneSheetWithDrawings() {
+ HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("45720.xls");
+
+ HSSFSheet sheet1 = wb1.getSheetAt(0);
+
+ wb1.getWorkbook().findDrawingGroup();
+ DrawingManager2 dm1 = wb1.getWorkbook().getDrawingManager();
+
+ wb1.cloneSheet(0);
+
+ HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+ wb2.getWorkbook().findDrawingGroup();
+ DrawingManager2 dm2 = wb2.getWorkbook().getDrawingManager();
+
+ //check EscherDggRecord - a workbook-level registry of drawing objects
+ assertEquals(dm1.getDgg().getMaxDrawingGroupId() + 1, dm2.getDgg().getMaxDrawingGroupId());
+
+ HSSFSheet sheet2 = wb2.getSheetAt(1);
+
+ //check that id of the drawing group was updated
+ EscherDgRecord dg1 = (EscherDgRecord)sheet1.getDrawingEscherAggregate().findFirstWithId(EscherDgRecord.RECORD_ID);
+ EscherDgRecord dg2 = (EscherDgRecord)sheet2.getDrawingEscherAggregate().findFirstWithId(EscherDgRecord.RECORD_ID);
+ int dg_id_1 = dg1.getOptions() >> 4;
+ int dg_id_2 = dg2.getOptions() >> 4;
+ assertEquals(dg_id_1 + 1, dg_id_2);
+
+ //TODO: check shapeId in the cloned sheet
+ }
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
index 658a3f4884..1717aeff65 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
@@ -429,9 +429,9 @@ public final class TestHSSFWorkbook extends TestCase {
assertEquals("On2", nr.getNameText());
assertEquals(0, nr.getSheetNumber());
assertEquals(1, nr.getExternSheetNumber());
- assertEquals(1, nr.getNameDefinition().size());
+ assertEquals(1, nr.getNameDefinition().length);
- ptg = (Area3DPtg)nr.getNameDefinition().get(0);
+ ptg = (Area3DPtg)nr.getNameDefinition()[0];
assertEquals(1, ptg.getExternSheetIndex());
assertEquals(0, ptg.getFirstColumn());
assertEquals(0, ptg.getFirstRow());
@@ -452,9 +452,9 @@ public final class TestHSSFWorkbook extends TestCase {
assertEquals("OnOne", nr.getNameText());
assertEquals(0, nr.getSheetNumber());
assertEquals(0, nr.getExternSheetNumber());
- assertEquals(1, nr.getNameDefinition().size());
+ assertEquals(1, nr.getNameDefinition().length);
- ptg = (Area3DPtg)nr.getNameDefinition().get(0);
+ ptg = (Area3DPtg)nr.getNameDefinition()[0];
assertEquals(0, ptg.getExternSheetIndex());
assertEquals(0, ptg.getFirstColumn());
assertEquals(2, ptg.getFirstRow());
@@ -475,9 +475,9 @@ public final class TestHSSFWorkbook extends TestCase {
assertEquals("OnSheet3", nr.getNameText());
assertEquals(0, nr.getSheetNumber());
assertEquals(2, nr.getExternSheetNumber());
- assertEquals(1, nr.getNameDefinition().size());
+ assertEquals(1, nr.getNameDefinition().length);
- ptg = (Area3DPtg)nr.getNameDefinition().get(0);
+ ptg = (Area3DPtg)nr.getNameDefinition()[0];
assertEquals(2, ptg.getExternSheetIndex());
assertEquals(0, ptg.getFirstColumn());
assertEquals(0, ptg.getFirstRow());
diff --git a/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java b/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java
index a5dbb096d4..c9356b8527 100644
--- a/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java
+++ b/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java
@@ -19,7 +19,6 @@ package org.apache.poi.hssf.util;
import java.io.IOException;
import java.io.InputStream;
-import java.util.List;
import junit.framework.TestCase;
@@ -28,6 +27,7 @@ import org.apache.poi.hssf.model.Workbook;
import org.apache.poi.hssf.record.NameRecord;
import org.apache.poi.hssf.record.formula.Area3DPtg;
import org.apache.poi.hssf.record.formula.MemFuncPtg;
+import org.apache.poi.hssf.record.formula.Ptg;
import org.apache.poi.hssf.record.formula.UnionPtg;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFName;
@@ -85,7 +85,7 @@ public final class TestAreaReference extends TestCase {
public void testReferenceWithSheet() {
AreaReference ar;
- ar = new AreaReference("Tabelle1!B5");
+ ar = new AreaReference("Tabelle1!B5:B5");
assertTrue(ar.isSingleCell());
TestCellReference.confirmCell(ar.getFirstCell(), "Tabelle1", 4, 1, false, false, "Tabelle1!B5");
@@ -115,11 +115,11 @@ public final class TestAreaReference extends TestCase {
}
}
- public void testContiguousReferences() throws Exception {
- String refSimple = "$C$10";
+ public void testContiguousReferences() {
+ String refSimple = "$C$10:$C$10";
String ref2D = "$C$10:$D$11";
- String refDCSimple = "$C$10,$D$12,$E$14";
- String refDC2D = "$C$10:$C$11,$D$12,$E$14:$E$20";
+ String refDCSimple = "$C$10:$C$10,$D$12:$D$12,$E$14:$E$14";
+ String refDC2D = "$C$10:$C$11,$D$12:$D$12,$E$14:$E$20";
String refDC3D = "Tabelle1!$C$10:$C$14,Tabelle1!$D$10:$D$12";
// Check that we detect as contiguous properly
@@ -206,13 +206,13 @@ public final class TestAreaReference extends TestCase {
assertNotNull(nr);
assertEquals("test", nr.getNameText());
- List def =nr.getNameDefinition();
- assertEquals(4, def.size());
+ Ptg[] def =nr.getNameDefinition();
+ assertEquals(4, def.length);
- MemFuncPtg ptgA = (MemFuncPtg)def.get(0);
- Area3DPtg ptgB = (Area3DPtg)def.get(1);
- Area3DPtg ptgC = (Area3DPtg)def.get(2);
- UnionPtg ptgD = (UnionPtg)def.get(3);
+ MemFuncPtg ptgA = (MemFuncPtg)def[0];
+ Area3DPtg ptgB = (Area3DPtg)def[1];
+ Area3DPtg ptgC = (Area3DPtg)def[2];
+ UnionPtg ptgD = (UnionPtg)def[3];
assertEquals("", ptgA.toFormulaString(wb));
assertEquals(refA, ptgB.toFormulaString(wb));
assertEquals(refB, ptgC.toFormulaString(wb));
@@ -245,16 +245,16 @@ public final class TestAreaReference extends TestCase {
private static void confirmResolveCellRef(HSSFWorkbook wb, CellReference cref) {
HSSFSheet s = wb.getSheet(cref.getSheetName());
HSSFRow r = s.getRow(cref.getRow());
- HSSFCell c = r.getCell(cref.getCol());
+ HSSFCell c = r.getCell((int)cref.getCol());
assertNotNull(c);
}
public void testSpecialSheetNames() {
AreaReference ar;
- ar = new AreaReference("'Sheet A'!A1");
+ ar = new AreaReference("'Sheet A'!A1:A1");
confirmAreaSheetName(ar, "Sheet A", "'Sheet A'!A1");
- ar = new AreaReference("'Hey! Look Here!'!A1");
+ ar = new AreaReference("'Hey! Look Here!'!A1:A1");
confirmAreaSheetName(ar, "Hey! Look Here!", "'Hey! Look Here!'!A1");
ar = new AreaReference("'O''Toole'!A1:B2");
@@ -270,7 +270,24 @@ public final class TestAreaReference extends TestCase {
assertEquals(expectedFullText, ar.formatAsString());
}
- public static void main(String[] args) {
- junit.textui.TestRunner.run(TestAreaReference.class);
- }
+ public void testWholeColumnRefs() {
+ confirmWholeColumnRef("A:A", 0, 0, false, false);
+ confirmWholeColumnRef("$C:D", 2, 3, true, false);
+ confirmWholeColumnRef("AD:$AE", 29, 30, false, true);
+
+ }
+
+ private static void confirmWholeColumnRef(String ref, int firstCol, int lastCol, boolean firstIsAbs, boolean lastIsAbs) {
+ AreaReference ar = new AreaReference(ref);
+ confirmCell(ar.getFirstCell(), 0, firstCol, true, firstIsAbs);
+ confirmCell(ar.getLastCell(), 0xFFFF, lastCol, true, lastIsAbs);
+ }
+
+ private static void confirmCell(CellReference cell, int row, int col, boolean isRowAbs,
+ boolean isColAbs) {
+ assertEquals(row, cell.getRow());
+ assertEquals(col, cell.getCol());
+ assertEquals(isRowAbs, cell.isRowAbsolute());
+ assertEquals(isColAbs, cell.isColAbsolute());
+ }
}