You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/12/27 23:00:20 UTC
svn commit: r1872041 [19/23] - in /poi/trunk/src:
excelant/testcases/org/apache/poi/ss/examples/formula/
excelant/testcases/org/apache/poi/ss/excelant/
excelant/testcases/org/apache/poi/ss/excelant/util/
java/org/apache/poi/hssf/record/aggregates/ java...
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestNetworkdaysFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestNetworkdaysFunction.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestNetworkdaysFunction.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestNetworkdaysFunction.java Fri Dec 27 23:00:13 2019
@@ -19,6 +19,7 @@ package org.apache.poi.ss.formula.atp;
import static org.apache.poi.ss.formula.eval.ErrorEval.NAME_INVALID;
import static org.apache.poi.ss.formula.eval.ErrorEval.VALUE_INVALID;
+import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
@@ -30,10 +31,9 @@ import org.apache.poi.ss.formula.eval.Ar
import org.apache.poi.ss.formula.eval.NumericValueEval;
import org.apache.poi.ss.formula.eval.StringEval;
import org.apache.poi.ss.formula.eval.ValueEval;
+import org.junit.Test;
-import junit.framework.TestCase;
-
-public class TestNetworkdaysFunction extends TestCase {
+public class TestNetworkdaysFunction {
private static final String STARTING_DATE = "2008/10/01";
private static final String END_DATE = "2009/03/01";
@@ -43,46 +43,54 @@ public class TestNetworkdaysFunction ext
private static final OperationEvaluationContext EC = new OperationEvaluationContext(null, null, 1, 1, 1, null);
+ @Test
public void testFailWhenNoArguments() {
assertEquals(VALUE_INVALID, NetworkdaysFunction.instance.evaluate(new ValueEval[0], null));
}
+ @Test
public void testFailWhenLessThan2Arguments() {
assertEquals(VALUE_INVALID, NetworkdaysFunction.instance.evaluate(new ValueEval[1], null));
}
+ @Test
public void testFailWhenMoreThan3Arguments() {
assertEquals(VALUE_INVALID, NetworkdaysFunction.instance.evaluate(new ValueEval[4], null));
}
+ @Test
public void testFailWhenArgumentsAreNotDates() {
assertEquals(VALUE_INVALID, NetworkdaysFunction.instance.evaluate(new ValueEval[]{ new StringEval("Potato"),
new StringEval("Cucumber") }, EC));
}
+ @Test
public void testFailWhenStartDateAfterEndDate() {
assertEquals(NAME_INVALID, NetworkdaysFunction.instance.evaluate(new ValueEval[]{ new StringEval(END_DATE),
new StringEval(STARTING_DATE) }, EC));
}
+ @Test
public void testReturnNetworkdays() {
assertEquals(108, (int) ((NumericValueEval) NetworkdaysFunction.instance.evaluate(new ValueEval[]{
new StringEval(STARTING_DATE), new StringEval(END_DATE) }, EC)).getNumberValue());
}
+ @Test
public void testReturnNetworkdaysWithAHoliday() {
assertEquals(107, (int) ((NumericValueEval) NetworkdaysFunction.instance.evaluate(new ValueEval[]{
new StringEval(STARTING_DATE), new StringEval(END_DATE), new StringEval(FIRST_HOLIDAY) },
EC)).getNumberValue());
}
+ @Test
public void testReturnNetworkdaysWithManyHolidays() {
assertEquals(105, (int) ((NumericValueEval) NetworkdaysFunction.instance.evaluate(new ValueEval[]{
new StringEval(STARTING_DATE), new StringEval(END_DATE),
- new MockAreaEval(FIRST_HOLIDAY, SECOND_HOLIDAY, THIRD_HOLIDAY) }, EC)).getNumberValue());
+ new MockAreaEval(FIRST_HOLIDAY, SECOND_HOLIDAY, THIRD_HOLIDAY)}, EC)).getNumberValue());
}
- private class MockAreaEval extends AreaEvalBase {
+ private static class MockAreaEval extends AreaEvalBase {
private List<ValueEval> holidays;
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestPercentile.java Fri Dec 27 23:00:13 2019
@@ -16,6 +16,8 @@
==================================================================== */
package org.apache.poi.ss.formula.atp;
+import static org.junit.Assert.assertEquals;
+
import org.apache.poi.ss.formula.eval.AreaEval;
import org.apache.poi.ss.formula.eval.BlankEval;
import org.apache.poi.ss.formula.eval.BoolEval;
@@ -24,24 +26,12 @@ import org.apache.poi.ss.formula.eval.Nu
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.AggregateFunction;
import org.apache.poi.ss.formula.functions.EvalFactory;
-
-import junit.framework.TestCase;
+import org.junit.Test;
/**
* Testcase for Excel function PERCENTILE()
- *
- * @author T. Gordon
*/
-public class TestPercentile extends TestCase {
-
- public void testPercentile() {
- testBasic();
- testUnusualArgs();
- testUnusualArgs2();
- testUnusualArgs3();
- testErrors();
- testErrors2();
- }
+public class TestPercentile {
private static ValueEval invokePercentile(ValueEval[] args, ValueEval percentile) {
AreaEval aeA = EvalFactory.createAreaEval("A1:A" + args.length, args);
@@ -62,6 +52,7 @@ public class TestPercentile extends Test
assertEquals(expectedError.getErrorCode(), ((ErrorEval) result).getErrorCode());
}
+ @Test
public void testBasic() {
ValueEval[] values = { new NumberEval(210.128), new NumberEval(65.2182), new NumberEval(32.231),
new NumberEval(12.123), new NumberEval(45.32) };
@@ -69,6 +60,7 @@ public class TestPercentile extends Test
confirmPercentile(percentile, values, 181.14604);
}
+ @Test
public void testBlanks() {
ValueEval[] values = { new NumberEval(210.128), new NumberEval(65.2182), new NumberEval(32.231),
BlankEval.instance, new NumberEval(45.32) };
@@ -76,6 +68,7 @@ public class TestPercentile extends Test
confirmPercentile(percentile, values, 188.39153);
}
+ @Test
public void testUnusualArgs() {
ValueEval[] values = { new NumberEval(1), new NumberEval(2), BoolEval.TRUE, BoolEval.FALSE };
ValueEval percentile = new NumberEval(0.95);
@@ -83,6 +76,7 @@ public class TestPercentile extends Test
}
//percentile has to be between 0 and 1 - here we test less than zero
+ @Test
public void testUnusualArgs2() {
ValueEval[] values = { new NumberEval(1), new NumberEval(2), };
ValueEval percentile = new NumberEval(-0.1);
@@ -90,6 +84,7 @@ public class TestPercentile extends Test
}
//percentile has to be between 0 and 1 - here we test more than 1
+ @Test
public void testUnusualArgs3() {
ValueEval[] values = { new NumberEval(1), new NumberEval(2) };
ValueEval percentile = new NumberEval(1.1);
@@ -97,6 +92,7 @@ public class TestPercentile extends Test
}
//here we test where there are errors as part of inputs
+ @Test
public void testErrors() {
ValueEval[] values = { new NumberEval(1), ErrorEval.NAME_INVALID, new NumberEval(3), ErrorEval.DIV_ZERO, };
ValueEval percentile = new NumberEval(0.95);
@@ -104,6 +100,7 @@ public class TestPercentile extends Test
}
//here we test where there are errors as part of inputs
+ @Test
public void testErrors2() {
ValueEval[] values = { new NumberEval(1), new NumberEval(2), new NumberEval(3), ErrorEval.DIV_ZERO, };
ValueEval percentile = new NumberEval(0.95);
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestRandBetween.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestRandBetween.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestRandBetween.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/atp/TestRandBetween.java Fri Dec 27 23:00:13 2019
@@ -16,7 +16,8 @@
==================================================================== */
package org.apache.poi.ss.formula.atp;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.ss.formula.eval.ErrorEval;
@@ -26,38 +27,37 @@ import org.apache.poi.ss.usermodel.Formu
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
+import org.junit.Before;
+import org.junit.Test;
/**
* Testcase for 'Analysis Toolpak' function RANDBETWEEN()
- *
- * @author Brendan Nolan
*/
-public class TestRandBetween extends TestCase {
+public class TestRandBetween {
private Workbook wb;
private FormulaEvaluator evaluator;
private Cell bottomValueCell;
private Cell topValueCell;
private Cell formulaCell;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
+
+ @Before
+ public void setUp() throws Exception {
wb = HSSFTestDataSamples.openSampleWorkbook("TestRandBetween.xls");
evaluator = wb.getCreationHelper().createFormulaEvaluator();
-
+
Sheet sheet = wb.createSheet("RandBetweenSheet");
Row row = sheet.createRow(0);
bottomValueCell = row.createCell(0);
topValueCell = row.createCell(1);
formulaCell = row.createCell(2, CellType.FORMULA);
}
-
+
/**
* Check where values are the same
*/
+ @Test
public void testRandBetweenSameValues() {
-
evaluator.clearAllCachedResultValues();
formulaCell.setCellFormula("RANDBETWEEN(1,1)");
evaluator.evaluateFormulaCell(formulaCell);
@@ -69,6 +69,7 @@ public class TestRandBetween extends Tes
}
+ @Test
public void testRandBetweenLargeLongs() {
for (int i = 0; i < 100; i++) {
evaluator.clearAllCachedResultValues();
@@ -79,70 +80,70 @@ public class TestRandBetween extends Tes
assertTrue("rand is less than or equal to upperbound", value <= 9999999999.0);
}
}
-
+
/**
- * Check special case where rounded up bottom value is greater than
+ * Check special case where rounded up bottom value is greater than
* top value.
*/
+ @Test
public void testRandBetweenSpecialCase() {
-
-
- bottomValueCell.setCellValue(0.05);
+ bottomValueCell.setCellValue(0.05);
topValueCell.setCellValue(0.1);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(1, formulaCell.getNumericCellValue(), 0);
- bottomValueCell.setCellValue(-0.1);
+ bottomValueCell.setCellValue(-0.1);
topValueCell.setCellValue(-0.05);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(0, formulaCell.getNumericCellValue(), 0);
- bottomValueCell.setCellValue(-1.1);
+ bottomValueCell.setCellValue(-1.1);
topValueCell.setCellValue(-1.05);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(-1, formulaCell.getNumericCellValue(), 0);
- bottomValueCell.setCellValue(-1.1);
+ bottomValueCell.setCellValue(-1.1);
topValueCell.setCellValue(-1.1);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(-1, formulaCell.getNumericCellValue(), 0);
}
-
+
/**
* Check top value of BLANK which Excel will evaluate as 0
*/
+ @Test
public void testRandBetweenTopBlank() {
-
- bottomValueCell.setCellValue(-1);
+ bottomValueCell.setCellValue(-1);
topValueCell.setBlank();
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertTrue(formulaCell.getNumericCellValue() == 0 || formulaCell.getNumericCellValue() == -1);
-
+
}
/**
* Check where input values are of wrong type
*/
+ @Test
public void testRandBetweenWrongInputTypes() {
// Check case where bottom input is of the wrong type
- bottomValueCell.setCellValue("STRING");
+ bottomValueCell.setCellValue("STRING");
topValueCell.setCellValue(1);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(CellType.ERROR, formulaCell.getCachedFormulaResultType());
assertEquals(ErrorEval.VALUE_INVALID.getErrorCode(), formulaCell.getErrorCellValue());
-
-
+
+
// Check case where top input is of the wrong type
bottomValueCell.setCellValue(1);
- topValueCell.setCellValue("STRING");
+ topValueCell.setCellValue("STRING");
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
@@ -151,29 +152,28 @@ public class TestRandBetween extends Tes
// Check case where both inputs are of wrong type
bottomValueCell.setCellValue("STRING");
- topValueCell.setCellValue("STRING");
+ topValueCell.setCellValue("STRING");
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(CellType.ERROR, formulaCell.getCachedFormulaResultType());
assertEquals(ErrorEval.VALUE_INVALID.getErrorCode(), formulaCell.getErrorCellValue());
-
}
-
+
/**
* Check case where bottom is greater than top
*/
+ @Test
public void testRandBetweenBottomGreaterThanTop() {
-
// Check case where bottom is greater than top
- bottomValueCell.setCellValue(1);
+ bottomValueCell.setCellValue(1);
topValueCell.setCellValue(0);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
assertEquals(CellType.ERROR, formulaCell.getCachedFormulaResultType());
- assertEquals(ErrorEval.NUM_ERROR.getErrorCode(), formulaCell.getErrorCellValue());
- bottomValueCell.setCellValue(1);
+ assertEquals(ErrorEval.NUM_ERROR.getErrorCode(), formulaCell.getErrorCellValue());
+ bottomValueCell.setCellValue(1);
topValueCell.setBlank();
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
@@ -181,19 +181,17 @@ public class TestRandBetween extends Tes
assertEquals(CellType.ERROR, formulaCell.getCachedFormulaResultType());
assertEquals(ErrorEval.NUM_ERROR.getErrorCode(), formulaCell.getErrorCellValue());
}
-
+
/**
* Boundary check of Double MIN and MAX values
*/
+ @Test
public void testRandBetweenBoundaryCheck() {
-
- bottomValueCell.setCellValue(Double.MIN_VALUE);
+ bottomValueCell.setCellValue(Double.MIN_VALUE);
topValueCell.setCellValue(Double.MAX_VALUE);
formulaCell.setCellFormula("RANDBETWEEN($A$1,$B$1)");
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(formulaCell);
- assertTrue(formulaCell.getNumericCellValue() >= Double.MIN_VALUE && formulaCell.getNumericCellValue() <= Double.MAX_VALUE);
-
+ assertTrue(formulaCell.getNumericCellValue() >= Double.MIN_VALUE && formulaCell.getNumericCellValue() <= Double.MAX_VALUE);
}
-
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/BaseTestCircularReferences.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/BaseTestCircularReferences.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/BaseTestCircularReferences.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/BaseTestCircularReferences.java Fri Dec 27 23:00:13 2019
@@ -18,8 +18,9 @@ package org.apache.poi.ss.formula.eval;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.IOException;
@@ -33,8 +34,6 @@ import org.apache.poi.ss.usermodel.Sheet
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;
-import junit.framework.AssertionFailedError;
-
/**
* Common superclass for testing cases of circular references
* both for HSSF and XSSF
@@ -54,13 +53,13 @@ public abstract class BaseTestCircularRe
/**
* Translates StackOverflowError into AssertionFailedError
*/
- private CellValue evaluateWithCycles(Workbook wb, Cell testCell)
- throws AssertionFailedError {
+ private CellValue evaluateWithCycles(Workbook wb, Cell testCell) {
FormulaEvaluator evaluator = _testDataProvider.createFormulaEvaluator(wb);
try {
return evaluator.evaluate(testCell);
} catch (StackOverflowError e) {
- throw new AssertionFailedError( "circular reference caused stack overflow error");
+ fail( "circular reference caused stack overflow error");
+ return null;
}
}
/**
@@ -78,28 +77,28 @@ public abstract class BaseTestCircularRe
*/
@Test
public void testIndexFormula() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet("Sheet1");
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet("Sheet1");
- int colB = 1;
- sheet.createRow(0).createCell(colB).setCellValue(1);
- sheet.createRow(1).createCell(colB).setCellValue(2);
- sheet.createRow(2).createCell(colB).setCellValue(3);
- Row row4 = sheet.createRow(3);
- Cell testCell = row4.createCell(0);
- // This formula should evaluate to the contents of B2,
- testCell.setCellFormula("INDEX(A1:B4,2,2)");
- // However the range A1:B4 also includes the current cell A4. If the other parameters
- // were 4 and 1, this would represent a circular reference. Prior to v3.2 POI would
- // 'fully' evaluate ref arguments before invoking operators, which raised the possibility of
- // cycles / StackOverflowErrors.
-
-
- CellValue cellValue = evaluateWithCycles(wb, testCell);
-
- assertSame(cellValue.getCellType(), CellType.NUMERIC);
- assertEquals(2, cellValue.getNumberValue(), 0);
- wb.close();
+ int colB = 1;
+ sheet.createRow(0).createCell(colB).setCellValue(1);
+ sheet.createRow(1).createCell(colB).setCellValue(2);
+ sheet.createRow(2).createCell(colB).setCellValue(3);
+ Row row4 = sheet.createRow(3);
+ Cell testCell = row4.createCell(0);
+ // This formula should evaluate to the contents of B2,
+ testCell.setCellFormula("INDEX(A1:B4,2,2)");
+ // However the range A1:B4 also includes the current cell A4. If the other parameters
+ // were 4 and 1, this would represent a circular reference. Prior to v3.2 POI would
+ // 'fully' evaluate ref arguments before invoking operators, which raised the possibility of
+ // cycles / StackOverflowErrors.
+
+
+ CellValue cellValue = evaluateWithCycles(wb, testCell);
+ assertNotNull(cellValue);
+ assertSame(cellValue.getCellType(), CellType.NUMERIC);
+ assertEquals(2, cellValue.getNumberValue(), 0);
+ }
}
/**
@@ -107,18 +106,18 @@ public abstract class BaseTestCircularRe
*/
@Test
public void testSimpleCircularReference() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet("Sheet1");
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet("Sheet1");
- Row row = sheet.createRow(0);
- Cell testCell = row.createCell(0);
- testCell.setCellFormula("A1");
-
- CellValue cellValue = evaluateWithCycles(wb, testCell);
-
- confirmCycleErrorCode(cellValue);
-
- wb.close();
+ Row row = sheet.createRow(0);
+ Cell testCell = row.createCell(0);
+ testCell.setCellFormula("A1");
+
+ CellValue cellValue = evaluateWithCycles(wb, testCell);
+ assertNotNull(cellValue);
+ confirmCycleErrorCode(cellValue);
+
+ }
}
/**
@@ -126,67 +125,66 @@ public abstract class BaseTestCircularRe
*/
@Test
public void testMultiLevelCircularReference() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet("Sheet1");
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet("Sheet1");
- Row row = sheet.createRow(0);
- row.createCell(0).setCellFormula("B1");
- row.createCell(1).setCellFormula("C1");
- row.createCell(2).setCellFormula("D1");
- Cell testCell = row.createCell(3);
- testCell.setCellFormula("A1");
-
- CellValue cellValue = evaluateWithCycles(wb, testCell);
-
- confirmCycleErrorCode(cellValue);
-
- wb.close();
+ Row row = sheet.createRow(0);
+ row.createCell(0).setCellFormula("B1");
+ row.createCell(1).setCellFormula("C1");
+ row.createCell(2).setCellFormula("D1");
+ Cell testCell = row.createCell(3);
+ testCell.setCellFormula("A1");
+
+ CellValue cellValue = evaluateWithCycles(wb, testCell);
+ assertNotNull(cellValue);
+ confirmCycleErrorCode(cellValue);
+ }
}
@Test
public void testIntermediateCircularReferenceResults_bug46898() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet("Sheet1");
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet("Sheet1");
+
+ Row row = sheet.createRow(0);
- Row row = sheet.createRow(0);
+ Cell cellA1 = row.createCell(0);
+ Cell cellB1 = row.createCell(1);
+ Cell cellC1 = row.createCell(2);
+ Cell cellD1 = row.createCell(3);
+ Cell cellE1 = row.createCell(4);
+
+ cellA1.setCellFormula("IF(FALSE, 1+B1, 42)");
+ cellB1.setCellFormula("1+C1");
+ cellC1.setCellFormula("1+D1");
+ cellD1.setCellFormula("1+E1");
+ cellE1.setCellFormula("1+A1");
+
+ FormulaEvaluator fe = _testDataProvider.createFormulaEvaluator(wb);
+ CellValue cv;
+
+ // Happy day flow - evaluate A1 first
+ cv = fe.evaluate(cellA1);
+ assertEquals(CellType.NUMERIC, cv.getCellType());
+ assertEquals(42.0, cv.getNumberValue(), 0.0);
+ cv = fe.evaluate(cellB1); // no circ-ref-error because A1 result is cached
+ assertEquals(CellType.NUMERIC, cv.getCellType());
+ assertEquals(46.0, cv.getNumberValue(), 0.0);
+
+ // Show the bug - evaluate another cell from the loop first
+ fe.clearAllCachedResultValues();
+ cv = fe.evaluate(cellB1);
+ // Identified bug 46898
+ assertNotEquals(cv.getCellType(), ErrorEval.CIRCULAR_REF_ERROR.getErrorCode());
+ assertEquals(CellType.NUMERIC, cv.getCellType());
+ assertEquals(46.0, cv.getNumberValue(), 0.0);
+
+ // start evaluation on another cell
+ fe.clearAllCachedResultValues();
+ cv = fe.evaluate(cellE1);
+ assertEquals(CellType.NUMERIC, cv.getCellType());
+ assertEquals(43.0, cv.getNumberValue(), 0.0);
- Cell cellA1 = row.createCell(0);
- Cell cellB1 = row.createCell(1);
- Cell cellC1 = row.createCell(2);
- Cell cellD1 = row.createCell(3);
- Cell cellE1 = row.createCell(4);
-
- cellA1.setCellFormula("IF(FALSE, 1+B1, 42)");
- cellB1.setCellFormula("1+C1");
- cellC1.setCellFormula("1+D1");
- cellD1.setCellFormula("1+E1");
- cellE1.setCellFormula("1+A1");
-
- FormulaEvaluator fe = _testDataProvider.createFormulaEvaluator(wb);
- CellValue cv;
-
- // Happy day flow - evaluate A1 first
- cv = fe.evaluate(cellA1);
- assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(42.0, cv.getNumberValue(), 0.0);
- cv = fe.evaluate(cellB1); // no circ-ref-error because A1 result is cached
- assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(46.0, cv.getNumberValue(), 0.0);
-
- // Show the bug - evaluate another cell from the loop first
- fe.clearAllCachedResultValues();
- cv = fe.evaluate(cellB1);
- // Identified bug 46898
- assertNotEquals(cv.getCellType(), ErrorEval.CIRCULAR_REF_ERROR.getErrorCode());
- assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(46.0, cv.getNumberValue(), 0.0);
-
- // start evaluation on another cell
- fe.clearAllCachedResultValues();
- cv = fe.evaluate(cellE1);
- assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(43.0, cv.getNumberValue(), 0.0);
-
- wb.close();
+ }
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestAreaEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestAreaEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestAreaEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestAreaEval.java Fri Dec 27 23:00:13 2019
@@ -17,21 +17,22 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import org.apache.poi.ss.SpreadsheetVersion;
-import org.apache.poi.ss.formula.ptg.AreaPtg;
import org.apache.poi.ss.formula.functions.EvalFactory;
+import org.apache.poi.ss.formula.ptg.AreaPtg;
import org.apache.poi.ss.util.AreaReference;
+import org.junit.Test;
/**
* Tests for <tt>AreaEval</tt>
- *
- * @author Josh Micich
*/
-public final class TestAreaEval extends TestCase {
+public final class TestAreaEval {
+ @Test
public void testGetValue_bug44950() {
// TODO - this test probably isn't testing much anymore
AreaPtg ptg = new AreaPtg(new AreaReference("B2:D3", SpreadsheetVersion.EXCEL97));
@@ -45,9 +46,7 @@ public final class TestAreaEval extends
new NumberEval(6),
};
AreaEval ae = EvalFactory.createAreaEval(ptg, values);
- if (one == ae.getAbsoluteValue(1, 2)) {
- throw new AssertionFailedError("Identified bug 44950 a");
- }
+ assertNotEquals("Identified bug 44950 a", one, ae.getAbsoluteValue(1, 2));
confirm(1, ae, 1, 1);
confirm(2, ae, 1, 2);
confirm(3, ae, 1, 3);
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestDivideEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestDivideEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestDivideEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestDivideEval.java Fri Dec 27 23:00:13 2019
@@ -17,17 +17,16 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
import org.apache.poi.ss.formula.functions.EvalFactory;
import org.apache.poi.ss.formula.functions.NumericFunctionInvoker;
+import org.junit.Test;
/**
* Test for divide operator evaluator.
- *
- * @author Josh Micich
*/
-public final class TestDivideEval extends TestCase {
+public final class TestDivideEval {
private static void confirm(ValueEval arg0, ValueEval arg1, double expectedResult) {
ValueEval[] args = {
@@ -39,6 +38,7 @@ public final class TestDivideEval extend
assertEquals(expectedResult, result, 0);
}
+ @Test
public void testBasic() {
confirm(new NumberEval(5), new NumberEval(2), 2.5);
confirm(new NumberEval(3), new NumberEval(16), 0.1875);
@@ -47,11 +47,14 @@ public final class TestDivideEval extend
confirm(BoolEval.TRUE, new StringEval("-0.2"), -5.0);
}
+ @Test
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);
}
+
+ @Test
public void testDivZero() {
ValueEval[] args = {
new NumberEval(5), NumberEval.ZERO,
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestEqualEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestEqualEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestEqualEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestEqualEval.java Fri Dec 27 23:00:13 2019
@@ -17,25 +17,23 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
import org.apache.poi.ss.formula.functions.EvalFactory;
import org.apache.poi.ss.formula.functions.Function;
+import org.junit.Test;
/**
- * Test for {@link EqualEval}
- *
- * @author Josh Micich
+ * Test for EqualEval
*/
-public final class TestEqualEval extends TestCase {
- // convenient access to namepace
- private static final EvalInstances EI = null;
-
+public final class TestEqualEval {
/**
* 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
*/
+ @Test
public void test1x1AreaOperand() {
ValueEval[] values = { BoolEval.FALSE, };
@@ -44,17 +42,15 @@ public final class TestEqualEval extends
BoolEval.FALSE,
};
ValueEval result = evaluate(EvalInstances.Equal, args, 10, 10);
- if (result instanceof ErrorEval) {
- if (result == ErrorEval.VALUE_INVALID) {
- throw new AssertionFailedError("Identified bug in evaluation of 1x1 area");
- }
- }
- assertEquals(BoolEval.class, result.getClass());
+ assertNotEquals("Identified bug in evaluation of 1x1 area", ErrorEval.VALUE_INVALID, result);
+ assertTrue(result instanceof BoolEval);
assertTrue(((BoolEval)result).getBooleanValue());
}
+
/**
* Empty string is equal to blank
*/
+ @Test
public void testBlankEqualToEmptyString() {
ValueEval[] args = {
@@ -64,19 +60,14 @@ public final class TestEqualEval extends
ValueEval result = evaluate(EvalInstances.Equal, args, 10, 10);
assertEquals(BoolEval.class, result.getClass());
BoolEval be = (BoolEval) result;
- if (!be.getBooleanValue()) {
- throw new AssertionFailedError("Identified bug blank/empty string equality");
- }
- assertTrue(be.getBooleanValue());
+ assertTrue("Identified bug blank/empty string equality", be.getBooleanValue());
}
/**
* Test for bug 46613 (observable at svn r737248)
*/
+ @Test
public void testStringInsensitive_bug46613() {
- if (!evalStringCmp("abc", "aBc", EvalInstances.Equal)) {
- throw new AssertionFailedError("Identified bug 46613");
- }
assertTrue(evalStringCmp("abc", "aBc", EvalInstances.Equal));
assertTrue(evalStringCmp("ABC", "azz", EvalInstances.LessThan));
assertTrue(evalStringCmp("abc", "AZZ", EvalInstances.LessThan));
@@ -95,6 +86,7 @@ public final class TestEqualEval extends
return be.getBooleanValue();
}
+ @Test
public void testBooleanCompares() {
confirmCompares(BoolEval.TRUE, new StringEval("TRUE"), +1);
confirmCompares(BoolEval.TRUE, new NumberEval(1.0), +1);
@@ -106,6 +98,7 @@ public final class TestEqualEval extends
confirmCompares(BoolEval.FALSE, new NumberEval(0.0), +1);
confirmCompares(BoolEval.FALSE, BoolEval.FALSE, 0);
}
+
private static void confirmCompares(ValueEval a, ValueEval b, int expRes) {
confirm(a, b, expRes>0, EvalInstances.GreaterThan);
confirm(a, b, expRes>=0, EvalInstances.GreaterEqual);
@@ -119,6 +112,7 @@ public final class TestEqualEval extends
confirm(b, a, expRes>=0, EvalInstances.LessEqual);
confirm(b, a, expRes>0, EvalInstances.LessThan);
}
+
private static void confirm(ValueEval a, ValueEval b, boolean expectedResult, Function cmpOp) {
ValueEval[] args = { a, b, };
ValueEval result = evaluate(cmpOp, args, 10, 20);
@@ -135,22 +129,21 @@ public final class TestEqualEval extends
* "Excel considers -0.0 to be equal to 0.0" which is NQR
* See {@link TestMinusZeroResult} for more specific tests regarding -0.0.
*/
+ @Test
public void testZeroEquality_bug47198() {
NumberEval zero = new NumberEval(0.0);
NumberEval mZero = (NumberEval) evaluate(UnaryMinusEval.instance, new ValueEval[] { zero, }, 0, 0);
- if (Double.doubleToLongBits(mZero.getNumberValue()) == 0x8000000000000000L) {
- throw new AssertionFailedError("Identified bug 47198: unary minus should convert -0.0 to 0.0");
- }
+ assertNotEquals("Identified bug 47198: unary minus should convert -0.0 to 0.0",
+ 0x8000000000000000L, Double.doubleToLongBits(mZero.getNumberValue()));
ValueEval[] args = { zero, mZero, };
BoolEval result = (BoolEval) evaluate(EvalInstances.Equal, args, 0, 0);
- if (!result.getBooleanValue()) {
- throw new AssertionFailedError("Identified bug 47198: -0.0 != 0.0");
- }
+ assertTrue("Identified bug 47198: -0.0 != 0.0", result.getBooleanValue());
}
+ @Test
public void testRounding_bug47598() {
double x = 1+1.0028-0.9973; // should be 1.0055, but has IEEE rounding
- assertFalse(x == 1.0055);
+ assertNotEquals(1.0055, x, 0.0);
NumberEval a = new NumberEval(x);
NumberEval b = new NumberEval(1.0055);
@@ -158,9 +151,7 @@ public final class TestEqualEval extends
ValueEval[] args = { a, b, };
BoolEval result = (BoolEval) evaluate(EvalInstances.Equal, args, 0, 0);
- if (!result.getBooleanValue()) {
- throw new AssertionFailedError("Identified bug 47598: 1+1.0028-0.9973 != 1.0055");
- }
+ assertTrue("Identified bug 47598: 1+1.0028-0.9973 != 1.0055", result.getBooleanValue());
}
private static ValueEval evaluate(Function oper, ValueEval[] args, int srcRowIx, int srcColIx) {
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestExternalFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestExternalFunction.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestExternalFunction.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestExternalFunction.java Fri Dec 27 23:00:13 2019
@@ -17,81 +17,67 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
import org.apache.poi.hssf.HSSFTestDataSamples;
-import org.apache.poi.ss.formula.functions.FreeRefFunction;
-import org.apache.poi.ss.formula.udf.DefaultUDFFinder;
-import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
-import org.apache.poi.ss.formula.udf.UDFFinder;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.OperationEvaluationContext;
+import org.apache.poi.ss.formula.functions.FreeRefFunction;
+import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
+import org.apache.poi.ss.formula.udf.DefaultUDFFinder;
+import org.apache.poi.ss.formula.udf.UDFFinder;
+import org.junit.Test;
-/**
- * @author Josh Micich
- * @author Petr Udalau - registering UDFs in workbook and using ToolPacks.
- */
-public final class TestExternalFunction extends TestCase {
-
- private static class MyFunc implements FreeRefFunction {
- public MyFunc() {
- //
- }
+public final class TestExternalFunction {
- @Override
- public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
- if (args.length != 1 || !(args[0] instanceof StringEval)) {
- return ErrorEval.VALUE_INVALID;
- }
- StringEval input = (StringEval) args[0];
- return new StringEval(input.getStringValue() + "abc");
+ private static ValueEval myFunc1(ValueEval[] args, OperationEvaluationContext ec) {
+ if (args.length != 1 || !(args[0] instanceof StringEval)) {
+ return ErrorEval.VALUE_INVALID;
}
+ StringEval input = (StringEval) args[0];
+ return new StringEval(input.getStringValue() + "abc");
}
- private static class MyFunc2 implements FreeRefFunction {
- public MyFunc2() {
- //
- }
-
- @Override
- public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
- if (args.length != 1 || !(args[0] instanceof StringEval)) {
- return ErrorEval.VALUE_INVALID;
- }
- StringEval input = (StringEval) args[0];
- return new StringEval(input.getStringValue() + "abc2");
+ private static ValueEval myFunc2(ValueEval[] args, OperationEvaluationContext ec) {
+ if (args.length != 1 || !(args[0] instanceof StringEval)) {
+ return ErrorEval.VALUE_INVALID;
}
+ StringEval input = (StringEval) args[0];
+ return new StringEval(input.getStringValue() + "abc2");
}
/**
- * Checks that an external function can get invoked from the formula
- * evaluator.
+ * Checks that an external function can get invoked from the formula evaluator.
*/
- public void testInvoke() {
- HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("testNames.xls");
- HSSFSheet sheet = wb.getSheetAt(0);
-
- /**
- * register the two test UDFs in a UDF finder, to be passed to the evaluator
- */
- UDFFinder udff1 = new DefaultUDFFinder(new String[] { "myFunc", },
- new FreeRefFunction[] { new MyFunc(), });
- UDFFinder udff2 = new DefaultUDFFinder(new String[] { "myFunc2", },
- new FreeRefFunction[] { new MyFunc2(), });
- UDFFinder udff = new AggregatingUDFFinder(udff1, udff2);
-
-
- HSSFRow row = sheet.getRow(0);
- HSSFCell myFuncCell = row.getCell(1); // =myFunc("_")
-
- HSSFCell myFunc2Cell = row.getCell(2); // =myFunc2("_")
-
- HSSFFormulaEvaluator fe = HSSFFormulaEvaluator.create(wb, null, udff);
- assertEquals("_abc", fe.evaluate(myFuncCell).getStringValue());
- assertEquals("_abc2", fe.evaluate(myFunc2Cell).getStringValue());
+ @Test
+ public void testInvoke() throws IOException {
+ try (HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("testNames.xls")) {
+ HSSFSheet sheet = wb.getSheetAt(0);
+
+ /*
+ * register the two test UDFs in a UDF finder, to be passed to the evaluator
+ */
+ UDFFinder udff1 = new DefaultUDFFinder(new String[]{"myFunc",},
+ new FreeRefFunction[]{TestExternalFunction::myFunc1});
+ UDFFinder udff2 = new DefaultUDFFinder(new String[]{"myFunc2",},
+ new FreeRefFunction[]{TestExternalFunction::myFunc2,});
+ UDFFinder udff = new AggregatingUDFFinder(udff1, udff2);
+
+
+ HSSFRow row = sheet.getRow(0);
+ HSSFCell myFuncCell = row.getCell(1); // =myFunc("_")
+
+ HSSFCell myFunc2Cell = row.getCell(2); // =myFunc2("_")
+
+ HSSFFormulaEvaluator fe = HSSFFormulaEvaluator.create(wb, null, udff);
+ assertEquals("_abc", fe.evaluate(myFuncCell).getStringValue());
+ assertEquals("_abc2", fe.evaluate(myFunc2Cell).getStringValue());
+ }
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestFormulasFromSpreadsheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestFormulasFromSpreadsheet.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestFormulasFromSpreadsheet.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestFormulasFromSpreadsheet.java Fri Dec 27 23:00:13 2019
@@ -43,8 +43,6 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
-import junit.framework.AssertionFailedError;
-
/**
* Tests formulas and operators as loaded from a test data spreadsheet.<p>
* This class does not test implementors of <tt>Function</tt> and <tt>OperationEval</tt> in
@@ -60,11 +58,11 @@ public final class TestFormulasFromSprea
private static Sheet sheet;
private static HSSFFormulaEvaluator evaluator;
private static Locale userLocale;
-
+
/**
* This class defines constants for navigating around the test data spreadsheet used for these tests.
*/
- private static interface SS {
+ private interface SS {
/**
* Name of the test spreadsheet (found in the standard test data folder)
@@ -99,6 +97,7 @@ public final class TestFormulasFromSprea
int NUMBER_OF_ROWS_PER_FUNCTION = 4;
}
+ @SuppressWarnings("DefaultAnnotationParam")
@Parameter(value = 0)
public String targetFunctionName;
@Parameter(value = 1)
@@ -113,7 +112,7 @@ public final class TestFormulasFromSprea
}
@Parameters(name="{0}")
- public static Collection<Object[]> data() throws Exception {
+ public static Collection<Object[]> data() {
// Function "Text" uses custom-formats which are locale specific
// can't set the locale on a per-testrun execution, as some settings have been
// already set, when we would try to change the locale by then
@@ -123,24 +122,23 @@ public final class TestFormulasFromSprea
workbook = HSSFTestDataSamples.openSampleWorkbook(SS.FILENAME);
sheet = workbook.getSheetAt( 0 );
evaluator = new HSSFFormulaEvaluator(workbook);
-
+
List<Object[]> data = new ArrayList<>();
-
- processFunctionGroup(data, SS.START_OPERATORS_ROW_INDEX, null);
- processFunctionGroup(data, SS.START_FUNCTIONS_ROW_INDEX, null);
+
+ processFunctionGroup(data, SS.START_OPERATORS_ROW_INDEX);
+ processFunctionGroup(data, SS.START_FUNCTIONS_ROW_INDEX);
// example for debugging individual functions/operators:
// processFunctionGroup(data, SS.START_OPERATORS_ROW_INDEX, "ConcatEval");
// processFunctionGroup(data, SS.START_FUNCTIONS_ROW_INDEX, "Text");
return data;
}
-
+
/**
* @param startRowIndex row index in the spreadsheet where the first function/operator is found
- * @param testFocusFunctionName name of a single function/operator to test alone.
* Typically pass <code>null</code> to test all functions
*/
- private static void processFunctionGroup(List<Object[]> data, int startRowIndex, String testFocusFunctionName) {
+ private static void processFunctionGroup(List<Object[]> data, int startRowIndex) {
for (int rowIndex = startRowIndex; true; rowIndex += SS.NUMBER_OF_ROWS_PER_FUNCTION) {
Row r = sheet.getRow(rowIndex);
String targetFunctionName = getTargetFunctionName(r);
@@ -151,16 +149,14 @@ public final class TestFormulasFromSprea
// found end of functions list
break;
}
- if(testFocusFunctionName == null || targetFunctionName.equalsIgnoreCase(testFocusFunctionName)) {
- // expected results are on the row below
- Row expectedValuesRow = sheet.getRow(rowIndex + 1);
- int missingRowNum = rowIndex + 2; //+1 for 1-based, +1 for next row
- assertNotNull("Missing expected values row for function '"
- + targetFunctionName + " (row " + missingRowNum + ")", expectedValuesRow);
+ // expected results are on the row below
+ Row expectedValuesRow = sheet.getRow(rowIndex + 1);
+ int missingRowNum = rowIndex + 2; //+1 for 1-based, +1 for next row
+ assertNotNull("Missing expected values row for function '"
+ + targetFunctionName + " (row " + missingRowNum + ")", expectedValuesRow);
- data.add(new Object[]{targetFunctionName, rowIndex, rowIndex + 1});
- }
+ data.add(new Object[]{targetFunctionName, rowIndex, rowIndex + 1});
}
}
@@ -235,7 +231,7 @@ public final class TestFormulasFromSprea
return cell.getRichStringCellValue().getString();
}
- throw new AssertionFailedError("Bad cell type for 'function name' column: ("
- + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")");
+ fail("Bad cell type for 'function name' column: (" + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")");
+ return null;
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMinusZeroResult.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMinusZeroResult.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMinusZeroResult.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMinusZeroResult.java Fri Dec 27 23:00:13 2019
@@ -17,11 +17,12 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.ComparisonFailure;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import org.apache.poi.ss.formula.functions.Function;
-import org.apache.poi.util.HexDump;
+import org.junit.Test;
/**
* IEEE 754 defines a quantity '-0.0' which is distinct from '0.0'.
@@ -35,11 +36,11 @@ import org.apache.poi.util.HexDump;
* <li>For most operation results '-0.0' is converted to '0.0'.</li>
* <li>Comparison operators have slightly different rules regarding '-0.0'.</li>
* </ol>
- * @author Josh Micich
*/
-public final class TestMinusZeroResult extends TestCase {
+public final class TestMinusZeroResult {
private static final double MINUS_ZERO = -0.0;
+ @Test
public void testSimpleOperators() {
// unary plus is a no-op
@@ -61,12 +62,14 @@ public final class TestMinusZeroResult e
* These results are hard to see in Excel (since -0.0 is usually converted to +0.0 before it
* gets to the comparison operator)
*/
+ @Test
public void testComparisonOperators() {
checkEval(false, EvalInstances.Equal, 0.0, MINUS_ZERO);
checkEval(true, EvalInstances.GreaterThan, 0.0, MINUS_ZERO);
checkEval(true, EvalInstances.LessThan, MINUS_ZERO, 0.0);
}
+ @Test
public void testTextRendering() {
confirmTextRendering(MINUS_ZERO);
// sub-normal negative numbers also display as '-0'
@@ -103,6 +106,7 @@ public final class TestMinusZeroResult e
/**
* Not really a POI test - just shows similar behaviour of '-0.0' in Java.
*/
+ @Test
public void testJava() {
assertEquals(0x8000000000000000L, Double.doubleToLongBits(MINUS_ZERO));
@@ -141,9 +145,6 @@ public final class TestMinusZeroResult e
private static void assertDouble(double a, double b) {
long bitsA = Double.doubleToLongBits(a);
long bitsB = Double.doubleToLongBits(b);
- if (bitsA != bitsB) {
- throw new ComparisonFailure("value different to expected",
- HexDump.longToHex(bitsA), HexDump.longToHex(bitsB));
- }
+ assertEquals(bitsA, bitsB);
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMissingArgEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMissingArgEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMissingArgEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMissingArgEval.java Fri Dec 27 23:00:13 2019
@@ -17,58 +17,56 @@
package org.apache.poi.ss.formula.eval;
-import java.util.EmptyStackException;
+import static org.junit.Assert.assertEquals;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellValue;
+import org.junit.Test;
/**
* Tests for {@link MissingArgEval}
- *
- * @author Josh Micich
*/
-public final class TestMissingArgEval extends TestCase {
-
- public void testEvaluateMissingArgs() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- HSSFSheet sheet = wb.createSheet("Sheet1");
- HSSFCell cell = sheet.createRow(0).createCell(0);
-
- cell.setCellFormula("if(true,)");
- fe.clearAllCachedResultValues();
- CellValue cv;
- try {
- cv = fe.evaluate(cell);
- } catch (EmptyStackException e) {
- throw new AssertionFailedError("Missing args evaluation not implemented (bug 43354");
+public final class TestMissingArgEval {
+
+ @Test
+ public void testEvaluateMissingArgs() throws IOException {
+ try (HSSFWorkbook wb = new HSSFWorkbook()) {
+ HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+ HSSFSheet sheet = wb.createSheet("Sheet1");
+ HSSFCell cell = sheet.createRow(0).createCell(0);
+
+ cell.setCellFormula("if(true,)");
+ fe.clearAllCachedResultValues();
+ // EmptyStackException -> Missing args evaluation not implemented (bug 43354)
+ CellValue cv = fe.evaluate(cell);
+ // MissingArg -> BlankEval -> zero (as formula result)
+ assertEquals(0.0, cv.getNumberValue(), 0.0);
+
+ // MissingArg -> BlankEval -> empty string (in concatenation)
+ cell.setCellFormula("\"abc\"&if(true,)");
+ fe.clearAllCachedResultValues();
+ assertEquals("abc", fe.evaluate(cell).getStringValue());
}
- // MissingArg -> BlankEval -> zero (as formula result)
- assertEquals(0.0, cv.getNumberValue(), 0.0);
-
- // MissingArg -> BlankEval -> empty string (in concatenation)
- cell.setCellFormula("\"abc\"&if(true,)");
- fe.clearAllCachedResultValues();
- assertEquals("abc", fe.evaluate(cell).getStringValue());
}
-
- public void testCountFuncs() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- HSSFSheet sheet = wb.createSheet("Sheet1");
- HSSFCell cell = sheet.createRow(0).createCell(0);
-
- cell.setCellFormula("COUNT(C5,,,,)"); // 4 missing args, C5 is blank
- assertEquals(4.0, fe.evaluate(cell).getNumberValue(), 0.0);
-
- cell.setCellFormula("COUNTA(C5,,)"); // 2 missing args, C5 is blank
- fe.clearAllCachedResultValues();
- assertEquals(2.0, fe.evaluate(cell).getNumberValue(), 0.0);
+
+ @Test
+ public void testCountFuncs() throws IOException {
+ try (HSSFWorkbook wb = new HSSFWorkbook()) {
+ HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+ HSSFSheet sheet = wb.createSheet("Sheet1");
+ HSSFCell cell = sheet.createRow(0).createCell(0);
+
+ cell.setCellFormula("COUNT(C5,,,,)"); // 4 missing args, C5 is blank
+ assertEquals(4.0, fe.evaluate(cell).getNumberValue(), 0.0);
+
+ cell.setCellFormula("COUNTA(C5,,)"); // 2 missing args, C5 is blank
+ fe.clearAllCachedResultValues();
+ assertEquals(2.0, fe.evaluate(cell).getNumberValue(), 0.0);
+ }
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMultiSheetEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMultiSheetEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMultiSheetEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestMultiSheetEval.java Fri Dec 27 23:00:13 2019
@@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.eval;
-import java.io.PrintStream;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.Locale;
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -34,21 +36,16 @@ import org.apache.poi.ss.usermodel.CellT
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
/**
* Tests formulas for multi sheet reference (i.e. SUM(Sheet1:Sheet5!A1))
*/
-public final class TestMultiSheetEval extends TestCase {
- private static final POILogger logger = POILogFactory.getLogger(TestFormulasFromSpreadsheet.class);
-
- private static final class Result {
- public static final int SOME_EVALUATIONS_FAILED = -1;
- public static final int ALL_EVALUATIONS_SUCCEEDED = +1;
- public static final int NO_EVALUATIONS_FOUND = 0;
- }
-
+@RunWith(Parameterized.class)
+public final class TestMultiSheetEval {
/**
* This class defines constants for navigating around the test data spreadsheet used for these tests.
*/
@@ -89,250 +86,116 @@ public final class TestMultiSheetEval ex
public static final String TEST_SHEET_NAME = "test";
}
- private HSSFWorkbook workbook;
- private Sheet sheet;
- // Note - multiple failures are aggregated before ending.
- // If one or more functions fail, a single AssertionFailedError is thrown at the end
- private int _functionFailureCount;
- private int _functionSuccessCount;
- private int _evaluationFailureCount;
- private int _evaluationSuccessCount;
-
- private static void confirmExpectedResult(String msg, Cell expected, CellValue actual) {
- if (expected == null) {
- throw new AssertionFailedError(msg + " - Bad setup data expected value is null");
- }
- if(actual == null) {
- throw new AssertionFailedError(msg + " - actual value was null");
- }
-
- final CellType cellType = expected.getCellType();
+ private static HSSFFormulaEvaluator evaluator;
+ private static Collection<String> funcs;
- switch (cellType) {
- case BLANK:
- assertEquals(msg, CellType.BLANK, actual.getCellType());
- break;
- case BOOLEAN:
- assertEquals(msg, CellType.BOOLEAN, actual.getCellType());
- assertEquals(msg, expected.getBooleanCellValue(), actual.getBooleanValue());
- break;
- case ERROR:
- assertEquals(msg, CellType.ERROR, actual.getCellType());
- assertEquals(msg, ErrorEval.getText(expected.getErrorCellValue()), ErrorEval.getText(actual.getErrorValue()));
- break;
- case FORMULA: // will never be used, since we will call method after formula evaluation
- throw new AssertionFailedError("Cannot expect formula as result of formula evaluation: " + msg);
- case NUMERIC:
- assertEquals(msg, CellType.NUMERIC, actual.getCellType());
- TestMathX.assertEquals(msg, expected.getNumericCellValue(), actual.getNumberValue(), TestMathX.POS_ZERO, TestMathX.DIFF_TOLERANCE_FACTOR);
- break;
- case STRING:
- assertEquals(msg, CellType.STRING, actual.getCellType());
- assertEquals(msg, expected.getRichStringCellValue().getString(), actual.getStringValue());
- break;
- default:
- throw new AssertionFailedError("Unexpected cell type: " + cellType);
- }
- }
+ @SuppressWarnings("DefaultAnnotationParam")
+ @Parameter(value = 0)
+ public String testName;
+
+ @Parameter(value = 1)
+ public String functionName;
+
+ @Parameter(value = 2)
+ public Cell expected;
+
+ @Parameter(value = 3)
+ public Row testRow;
+
+ @Parameterized.Parameters(name="{0}")
+ public static Collection<Object[]> data() {
+ HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook(SS.FILENAME);
+ Sheet sheet = workbook.getSheet(SS.TEST_SHEET_NAME);
+ evaluator = new HSSFFormulaEvaluator(workbook);
+ funcs = FunctionEval.getSupportedFunctionNames();
+ List<Object[]> data = new ArrayList<>();
+ for (int rowIndex = SS.START_FUNCTIONS_ROW_INDEX;true;rowIndex++) {
+ Row r = sheet.getRow(rowIndex);
- @Override
- protected void setUp() {
- if (workbook == null) {
- workbook = HSSFTestDataSamples.openSampleWorkbook(SS.FILENAME);
- sheet = workbook.getSheet( SS.TEST_SHEET_NAME );
- }
- _functionFailureCount = 0;
- _functionSuccessCount = 0;
- _evaluationFailureCount = 0;
- _evaluationSuccessCount = 0;
- }
+ // only evaluate non empty row
+ if (r == null) {
+ continue;
+ }
- public void testFunctionsFromTestSpreadsheet() {
+ String targetFunctionName = getTargetFunctionName(r);
+ assertNotNull("Expected function name or '" + SS.FUNCTION_NAMES_END_SENTINEL + "'", targetFunctionName);
+ if (targetFunctionName.equals(SS.FUNCTION_NAMES_END_SENTINEL)) {
+ // found end of functions list
+ break;
+ }
+ String targetTestName = getTargetTestName(r);
- processFunctionGroup(SS.START_FUNCTIONS_ROW_INDEX, null);
+ // expected results are on the row below
+ Cell expectedValueCell = r.getCell(SS.COLUMN_INDEX_EXPECTED_VALUE);
+ assertNotNull("Missing expected values cell for function '" + targetFunctionName, expectedValueCell);
- // confirm results
- String successMsg = "There were "
- + _evaluationSuccessCount + " successful evaluation(s) and "
- + _functionSuccessCount + " function(s) without error";
- if(_functionFailureCount > 0) {
- String msg = _functionFailureCount + " function(s) failed in "
- + _evaluationFailureCount + " evaluation(s). " + successMsg;
- throw new AssertionFailedError(msg);
+ data.add(new Object[]{ targetTestName, targetFunctionName, expectedValueCell, r });
}
- logger.log(POILogger.INFO, getClass().getName() + ": " + successMsg);
- }
- /**
- * @param startRowIndex row index in the spreadsheet where the first function/operator is found
- * @param testFocusFunctionName name of a single function/operator to test alone.
- * Typically pass <code>null</code> to test all functions
- */
- private void processFunctionGroup(int startRowIndex, String testFocusFunctionName) {
- HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(workbook);
- Collection<String> funcs = FunctionEval.getSupportedFunctionNames();
-
- int rowIndex = startRowIndex;
- while (true) {
- Row r = sheet.getRow(rowIndex);
-
- // only evaluate non empty row
- if( r != null )
- {
- String targetFunctionName = getTargetFunctionName(r);
- String targetTestName = getTargetTestName(r);
- if(targetFunctionName == null) {
- throw new AssertionFailedError("Test spreadsheet cell empty on row ("
- + (rowIndex+1) + "). Expected function name or '"
- + SS.FUNCTION_NAMES_END_SENTINEL + "'");
- }
- if(targetFunctionName.equals(SS.FUNCTION_NAMES_END_SENTINEL)) {
- // found end of functions list
- break;
- }
- if(testFocusFunctionName == null || targetFunctionName.equalsIgnoreCase(testFocusFunctionName)) {
-
- // expected results are on the row below
- Cell expectedValueCell = r.getCell(SS.COLUMN_INDEX_EXPECTED_VALUE);
- if(expectedValueCell == null) {
- int missingRowNum = rowIndex + 1;
- throw new AssertionFailedError("Missing expected values cell for function '"
- + targetFunctionName + ", test" + targetTestName + " (row " +
- missingRowNum + ")");
- }
-
- switch(processFunctionRow(evaluator, targetFunctionName, targetTestName, r, expectedValueCell)) {
- case Result.ALL_EVALUATIONS_SUCCEEDED: _functionSuccessCount++; break;
- case Result.SOME_EVALUATIONS_FAILED: _functionFailureCount++; break;
- default:
- throw new RuntimeException("unexpected result");
- case Result.NO_EVALUATIONS_FOUND: // do nothing
- String uname = targetFunctionName.toUpperCase(Locale.ROOT);
- if(startRowIndex >= SS.START_FUNCTIONS_ROW_INDEX &&
- funcs.contains(uname)) {
- logger.log(POILogger.WARN, uname + ": function is supported but missing test data");
- }
- break;
- }
- }
- }
- rowIndex ++;
- }
+ return data;
}
- /**
- *
- * @return a constant from the local Result class denoting whether there were any evaluation
- * cases, and whether they all succeeded.
- */
- private int processFunctionRow(HSSFFormulaEvaluator evaluator, String targetFunctionName,
- String targetTestName, Row formulasRow, Cell expectedValueCell) {
-
- int result = Result.NO_EVALUATIONS_FOUND; // so far
+ @Test
+ public void testFunction() {
- Cell c = formulasRow.getCell(SS.COLUMN_INDEX_ACTUAL_VALUE);
+ Cell c = testRow.getCell(SS.COLUMN_INDEX_ACTUAL_VALUE);
if (c == null || c.getCellType() != CellType.FORMULA) {
- return result;
+ // missing test data
+ assertTrue(testRow.getRowNum() >= SS.START_FUNCTIONS_ROW_INDEX);
+ assertTrue("unsupported function", funcs.contains(functionName.toUpperCase(Locale.ROOT)));
+ return;
}
- CellValue actualValue = evaluator.evaluate(c);
+ CellValue actual = evaluator.evaluate(c);
- try {
- confirmExpectedResult("Function '" + targetFunctionName + "': Test: '" + targetTestName + "' Formula: " + c.getCellFormula()
- + " @ " + formulasRow.getRowNum() + ":" + SS.COLUMN_INDEX_ACTUAL_VALUE,
- expectedValueCell, actualValue);
- _evaluationSuccessCount ++;
- if(result != Result.SOME_EVALUATIONS_FAILED) {
- result = Result.ALL_EVALUATIONS_SUCCEEDED;
- }
- } catch (AssertionFailedError e) {
- _evaluationFailureCount ++;
- printShortStackTrace(System.err, e);
- result = Result.SOME_EVALUATIONS_FAILED;
- }
-
- return result;
- }
+ assertNotNull("Bad setup data expected value is null", expected);
+ assertNotNull("actual value was null", actual);
- /**
- * Useful to keep output concise when expecting many failures to be reported by this test case
- */
- private static void printShortStackTrace(PrintStream ps, AssertionFailedError e) {
- StackTraceElement[] stes = e.getStackTrace();
+ final CellType cellType = expected.getCellType();
- int startIx = 0;
- // skip any top frames inside junit.framework.Assert
- while(startIx<stes.length) {
- if(!stes[startIx].getClassName().equals(Assert.class.getName())) {
+ switch (cellType) {
+ case BLANK:
+ assertEquals(CellType.BLANK, actual.getCellType());
break;
- }
- startIx++;
- }
- // skip bottom frames (part of junit framework)
- int endIx = startIx+1;
- while(endIx < stes.length) {
- if(stes[endIx].getClassName().equals(TestCase.class.getName())) {
+ case BOOLEAN:
+ assertEquals(CellType.BOOLEAN, actual.getCellType());
+ assertEquals(expected.getBooleanCellValue(), actual.getBooleanValue());
+ break;
+ case ERROR:
+ assertEquals(CellType.ERROR, actual.getCellType());
+ assertEquals(ErrorEval.getText(expected.getErrorCellValue()), ErrorEval.getText(actual.getErrorValue()));
+ break;
+ case FORMULA: // will never be used, since we will call method after formula evaluation
+ fail("Cannot expect formula as result of formula evaluation.");
+ break;
+ case NUMERIC:
+ assertEquals(CellType.NUMERIC, actual.getCellType());
+ TestMathX.assertEquals("", expected.getNumericCellValue(), actual.getNumberValue(), TestMathX.POS_ZERO, TestMathX.DIFF_TOLERANCE_FACTOR);
+ break;
+ case STRING:
+ assertEquals(CellType.STRING, actual.getCellType());
+ assertEquals(expected.getRichStringCellValue().getString(), actual.getStringValue());
+ break;
+ default:
+ fail("Unexpected cell type: " + cellType);
break;
- }
- endIx++;
- }
- if(startIx >= endIx) {
- // something went wrong. just print the whole stack trace
- e.printStackTrace(ps);
- }
- endIx -= 4; // skip 4 frames of reflection invocation
- ps.println(e);
- for(int i=startIx; i<endIx; i++) {
- ps.println("\tat " + stes[i]);
}
}
- /**
- * @return <code>null</code> if cell is missing, empty or blank
- */
private static String getTargetFunctionName(Row r) {
- if(r == null) {
- System.err.println("Warning - given null row, can't figure out function name");
- return null;
- }
+ assertNotNull("given null row, can't figure out function name", r);
Cell cell = r.getCell(SS.COLUMN_INDEX_FUNCTION_NAME);
- if(cell == null) {
- System.err.println("Warning - Row " + r.getRowNum() + " has no cell " + SS.COLUMN_INDEX_FUNCTION_NAME + ", can't figure out function name");
- return null;
- }
- if(cell.getCellType() == CellType.BLANK) {
- return null;
- }
- if(cell.getCellType() == CellType.STRING) {
- return cell.getRichStringCellValue().getString();
- }
-
- throw new AssertionFailedError("Bad cell type for 'function name' column: ("
- + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")");
+ assertNotNull("Row " + r.getRowNum() + " has no cell " + SS.COLUMN_INDEX_FUNCTION_NAME + ", can't figure out function name", cell);
+ assertEquals(CellType.STRING, cell.getCellType());
+ return cell.getRichStringCellValue().getString();
}
- /**
- * @return <code>null</code> if cell is missing, empty or blank
- */
+
private static String getTargetTestName(Row r) {
- if(r == null) {
- System.err.println("Warning - given null row, can't figure out test name");
- return null;
- }
+ assertNotNull("Given null row, can't figure out test name", r);
Cell cell = r.getCell(SS.COLUMN_INDEX_TEST_NAME);
- if(cell == null) {
- System.err.println("Warning - Row " + r.getRowNum() + " has no cell " + SS.COLUMN_INDEX_TEST_NAME + ", can't figure out test name");
- return null;
- }
- if(cell.getCellType() == CellType.BLANK) {
- return null;
- }
- if(cell.getCellType() == CellType.STRING) {
- return cell.getRichStringCellValue().getString();
- }
-
- throw new AssertionFailedError("Bad cell type for 'test name' column: ("
- + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")");
+ assertNotNull("Row " + r.getRowNum() + " has no cell " + SS.COLUMN_INDEX_TEST_NAME + ", can't figure out test name", cell);
+ assertEquals(CellType.STRING, cell.getCellType());
+ return cell.getRichStringCellValue().getString();
}
-
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestOperandResolver.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestOperandResolver.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestOperandResolver.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestOperandResolver.java Fri Dec 27 23:00:13 2019
@@ -17,67 +17,62 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import java.util.LinkedHashMap;
import java.util.Map;
+import org.junit.Test;
+
/**
* Tests for <tt>OperandResolver</tt>
- *
- * @author Brendan Nolan
*/
-public final class TestOperandResolver extends TestCase {
-
+public final class TestOperandResolver {
+ @Test
public void testParseDouble_bug48472() {
- final Double resolvedValue;
-
- try {
- resolvedValue = OperandResolver.parseDouble("-");
- } catch (StringIndexOutOfBoundsException e) {
- throw new AssertionFailedError("Identified bug 48472");
- }
-
+ // bug 48472 - StringIndexOutOfBoundsException
+ Double resolvedValue = OperandResolver.parseDouble("-");
assertNull(resolvedValue);
}
-
+
+ @Test
public void testParseDouble_bug49723() {
String value = ".1";
-
Double resolvedValue = OperandResolver.parseDouble(value);
-
+
assertNotNull("Identified bug 49723", resolvedValue);
}
-
+
/**
- *
* Tests that a list of valid strings all return a non null value from {@link OperandResolver#parseDouble(String)}
- *
*/
+ @Test
public void testParseDoubleValidStrings() {
String[] values = new String[]{".19", "0.19", "1.9", "1E4", "-.19", "-0.19",
"8.5","-1E4", ".5E6","+1.5","+1E5", " +1E5 ", " 123 ", "1E4", "-123" };
for (String value : values) {
- assertNotNull(OperandResolver.parseDouble(value));
- assertEquals(OperandResolver.parseDouble(value), Double.parseDouble(value));
+ Double act = OperandResolver.parseDouble(value);
+ assertNotNull(act);
+ assertEquals(act, Double.parseDouble(value), 0);
}
}
-
+
/**
- *
* Tests that a list of invalid strings all return null from {@link OperandResolver#parseDouble(String)}
- *
*/
+ @Test
public void testParseDoubleInvalidStrings() {
String[] values = new String[]{"-", "ABC", "-X", "1E5a", "Infinity", "NaN", ".5F", "1,000"};
-
+
for (String value : values) {
assertNull(OperandResolver.parseDouble(value));
}
}
+ @Test
public void testCoerceDateStringToNumber() throws EvaluationException {
Map<String, Double> values = new LinkedHashMap<>();
values.put("2019/1/18", 43483.);
@@ -90,6 +85,7 @@ public final class TestOperandResolver e
}
}
+ @Test
public void testCoerceTimeStringToNumber() throws EvaluationException {
Map<String, Double> values = new LinkedHashMap<>();
values.put("00:00", 0.0);
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPercentEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPercentEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPercentEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPercentEval.java Fri Dec 27 23:00:13 2019
@@ -17,25 +17,25 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
-import org.apache.poi.ss.formula.functions.EvalFactory;
-import org.apache.poi.ss.formula.functions.NumericFunctionInvoker;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.formula.functions.EvalFactory;
+import org.apache.poi.ss.formula.functions.NumericFunctionInvoker;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CellValue;
+import org.junit.Test;
/**
* Test for percent operator evaluator.
- *
- * @author Josh Micich
*/
-public final class TestPercentEval extends TestCase {
+public final class TestPercentEval {
private static void confirm(ValueEval arg, double expectedResult) {
ValueEval[] args = {
@@ -47,6 +47,7 @@ public final class TestPercentEval exten
assertEquals(expectedResult, result, 0);
}
+ @Test
public void testBasic() {
confirm(new NumberEval(5), 0.05);
confirm(new NumberEval(3000), 30.0);
@@ -55,30 +56,27 @@ public final class TestPercentEval exten
confirm(BoolEval.TRUE, 0.01);
}
+ @Test
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");
- HSSFRow row = sheet.createRow(0);
- HSSFCell cell = row.createCell(0);
- cell.setCellFormula("B1%");
- row.createCell(1).setCellValue(50.0);
-
- HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- CellValue cv;
- try {
- cv = fe.evaluate(cell);
- } catch (RuntimeException e) {
- if(e.getCause() instanceof NullPointerException) {
- throw new AssertionFailedError("Identified bug 44608");
- }
- // else some other unexpected error
- throw e;
+
+ @Test
+ public void testInSpreadSheet() throws IOException {
+ try (HSSFWorkbook wb = new HSSFWorkbook()) {
+ HSSFSheet sheet = wb.createSheet("Sheet1");
+ HSSFRow row = sheet.createRow(0);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellFormula("B1%");
+ row.createCell(1).setCellValue(50.0);
+
+ HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+
+ // bug 44608 - NullPointerException
+ CellValue cv = fe.evaluate(cell);
+ assertEquals(CellType.NUMERIC, cv.getCellType());
+ assertEquals(0.5, cv.getNumberValue(), 0.0);
}
- assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(0.5, cv.getNumberValue(), 0.0);
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPowerEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPowerEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPowerEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestPowerEval.java Fri Dec 27 23:00:13 2019
@@ -17,29 +17,29 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.formula.functions.Function;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.CellValue;
+import org.junit.Test;
/**
* Tests for power operator evaluator.
- *
- * @author Bob van den Berge
*/
-public final class TestPowerEval extends TestCase {
-
+public final class TestPowerEval {
+ @Test
public void testPositiveValues() {
confirm(0, 0, 1);
confirm(1, 1, 0);
confirm(9, 3, 2);
}
+ @Test
public void testNegativeValues() {
confirm(-1, -1, 1);
confirm(1, 1, -1);
@@ -47,18 +47,22 @@ public final class TestPowerEval extends
confirm((1.0/3), 3, -1);
}
+ @Test
public void testPositiveDecimalValues() {
confirm(3, 27, (1/3.0));
}
+ @Test
public void testNegativeDecimalValues() {
confirm(-3, -27, (1/3.0));
}
+ @Test
public void testErrorValues() {
confirmError(-1.00001, 1.1);
}
+ @Test
public void testInSpreadSheet() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
@@ -72,27 +76,27 @@ public final class TestPowerEval extends
CellValue cv = fe.evaluate(cell);
assertEquals(CellType.NUMERIC, cv.getCellType());
- assertEquals(-3.0, cv.getNumberValue());
+ assertEquals(-3.0, cv.getNumberValue(), 0);
}
private void confirm(double expected, double a, double b) {
- NumberEval result = (NumberEval) evaluate(EvalInstances.Power, a, b);
+ NumberEval result = (NumberEval) evaluate(a, b);
- assertEquals(expected, result.getNumberValue());
+ assertEquals(expected, result.getNumberValue(), 0);
}
private void confirmError(double a, double b) {
- ErrorEval result = (ErrorEval) evaluate(EvalInstances.Power, a, b);
+ ErrorEval result = (ErrorEval) evaluate(a, b);
assertEquals("#NUM!", result.getErrorString());
}
- private static ValueEval evaluate(Function instance, double... dArgs) {
+ private static ValueEval evaluate(double... dArgs) {
ValueEval[] evalArgs;
evalArgs = new ValueEval[dArgs.length];
for (int i = 0; i < evalArgs.length; i++) {
evalArgs[i] = new NumberEval(dArgs[i]);
}
- return instance.evaluate(evalArgs, -1, (short) -1);
+ return EvalInstances.Power.evaluate(evalArgs, -1, (short) -1);
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestRangeEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestRangeEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestRangeEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestRangeEval.java Fri Dec 27 23:00:13 2019
@@ -17,8 +17,8 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
@@ -34,14 +34,13 @@ import org.apache.poi.ss.formula.ptg.Are
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
+import org.junit.Test;
/**
* Test for unary plus operator evaluator.
- *
- * @author Josh Micich
*/
-public final class TestRangeEval extends TestCase {
-
+public final class TestRangeEval {
+ @Test
public void testPermutations() {
confirm("B3", "D7", "B3:D7");
@@ -58,7 +57,7 @@ public final class TestRangeEval extends
createRefEval(refA),
createRefEval(refB),
};
- List<SpreadsheetVersion> versions = Arrays.asList(new SpreadsheetVersion[] {SpreadsheetVersion.EXCEL97, SpreadsheetVersion.EXCEL2007});
+ List<SpreadsheetVersion> versions = Arrays.asList(SpreadsheetVersion.EXCEL97, SpreadsheetVersion.EXCEL2007);
for(SpreadsheetVersion version : versions) {
AreaReference ar = new AreaReference(expectedAreaRef, version);
ValueEval result = EvalInstances.Range.evaluate(args, 0, (short)0);
@@ -136,6 +135,7 @@ public final class TestRangeEval extends
}
}
+ @Test
public void testRangeUsingOffsetFunc_bug46948() {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFRow row = wb.createSheet("Sheet1").createRow(0);
@@ -151,15 +151,8 @@ public final class TestRangeEval extends
cellB1.setCellValue(1.0); // range will be C1:D1
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- CellValue cv;
- try {
- cv = fe.evaluate(cellA1);
- } catch (IllegalArgumentException e) {
- if (e.getMessage().equals("Unexpected ref arg class (org.apache.poi.ss.formula.LazyAreaEval)")) {
- throw new AssertionFailedError("Identified bug 46948");
- }
- throw e;
- }
+ // bug 46948 - Unexpected ref arg class (org.apache.poi.ss.formula.LazyAreaEval)
+ CellValue cv = fe.evaluate(cellA1);
assertEquals(12.0, cv.getNumberValue(), 0.0);
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestUnaryPlusEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestUnaryPlusEval.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestUnaryPlusEval.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/TestUnaryPlusEval.java Fri Dec 27 23:00:13 2019
@@ -17,23 +17,23 @@
package org.apache.poi.ss.formula.eval;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
-import org.apache.poi.ss.formula.ptg.AreaPtg;
import org.apache.poi.ss.formula.functions.EvalFactory;
import org.apache.poi.ss.formula.functions.NumericFunctionInvoker;
+import org.apache.poi.ss.formula.ptg.AreaPtg;
+import org.junit.Test;
/**
* Test for unary plus operator evaluator.
- *
- * @author Josh Micich
*/
-public final class TestUnaryPlusEval extends TestCase {
+public final class TestUnaryPlusEval {
/**
* Test for bug observable at svn revision 618865 (5-Feb-2008)<br>
* The code for handling column operands had been copy-pasted from the row handling code.
*/
+ @Test
public void testColumnOperand() {
short firstRow = (short)8;
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestFunctionMetadataRegistry.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestFunctionMetadataRegistry.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestFunctionMetadataRegistry.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestFunctionMetadataRegistry.java Fri Dec 27 23:00:13 2019
@@ -17,14 +17,13 @@
package org.apache.poi.ss.formula.function;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
-/**
- *
- * @author Josh Micich
- */
-public final class TestFunctionMetadataRegistry extends TestCase {
+import org.junit.Test;
+public final class TestFunctionMetadataRegistry {
+ @Test
public void testWellKnownFunctions() {
confirmFunction(0, "COUNT");
confirmFunction(1, "IF");
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestParseMissingBuiltInFuncs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestParseMissingBuiltInFuncs.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestParseMissingBuiltInFuncs.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/function/TestParseMissingBuiltInFuncs.java Fri Dec 27 23:00:13 2019
@@ -18,6 +18,7 @@
package org.apache.poi.ss.formula.function;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import java.io.IOException;
@@ -29,7 +30,6 @@ import org.apache.poi.ss.formula.ptg.Fun
import org.apache.poi.ss.formula.ptg.Ptg;
import org.junit.Test;
-import junit.framework.AssertionFailedError;
/**
* Tests parsing of some built-in functions that were not properly
* registered in POI as of bug #44675, #44733 (March/April 2008).
@@ -42,33 +42,30 @@ public final class TestParseMissingBuilt
book.close();
return ptgs;
}
-
+
private static void confirmFunc(String formula, int expPtgArraySize, boolean isVarArgFunc, int funcIx)
throws IOException {
Ptg[] ptgs = parse(formula);
Ptg ptgF = ptgs[ptgs.length-1]; // func is last RPN token in all these formulas
-
+
// Check critical things in the Ptg array encoding.
if(!(ptgF instanceof AbstractFunctionPtg)) {
throw new RuntimeException("function token missing");
}
AbstractFunctionPtg func = (AbstractFunctionPtg) ptgF;
- if(func.getFunctionIndex() == 255) {
- throw new AssertionFailedError("Failed to recognise built-in function in formula '"
- + formula + "'");
- }
+ assertNotEquals("Failed to recognise built-in function in formula", 255, func.getFunctionIndex());
assertEquals(expPtgArraySize, ptgs.length);
assertEquals(funcIx, func.getFunctionIndex());
Class<? extends AbstractFunctionPtg> expCls = isVarArgFunc ? FuncVarPtg.class : FuncPtg.class;
assertEquals(expCls, ptgF.getClass());
-
+
// check that parsed Ptg array converts back to formula text OK
HSSFWorkbook book = new HSSFWorkbook();
String reRenderedFormula = HSSFFormulaParser.toFormulaString(book, ptgs);
assertEquals(formula, reRenderedFormula);
book.close();
}
-
+
@Test
public void testDatedif() throws IOException {
int expSize = 4; // NB would be 5 if POI added tAttrVolatile properly
@@ -79,12 +76,12 @@ public final class TestParseMissingBuilt
public void testDdb() throws IOException {
confirmFunc("DDB(1,1,1,1,1)", 6, true, 144);
}
-
+
@Test
public void testAtan() throws IOException {
confirmFunc("ATAN(1)", 2, false, 18);
}
-
+
@Test
public void testUsdollar() throws IOException {
confirmFunc("USDOLLAR(1)", 2, true, 204);
@@ -94,12 +91,12 @@ public final class TestParseMissingBuilt
public void testDBCS() throws IOException {
confirmFunc("DBCS(\"abc\")", 2, false, 215);
}
-
+
@Test
public void testIsnontext() throws IOException {
confirmFunc("ISNONTEXT(\"abc\")", 2, false, 190);
}
-
+
@Test
public void testDproduct() throws IOException {
confirmFunc("DPRODUCT(C1:E5,\"HarvestYield\",G1:H2)", 4, false, 189);
Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/NumericFunctionInvoker.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/NumericFunctionInvoker.java?rev=1872041&r1=1872040&r2=1872041&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/NumericFunctionInvoker.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/NumericFunctionInvoker.java Fri Dec 27 23:00:13 2019
@@ -17,17 +17,15 @@
package org.apache.poi.ss.formula.functions;
-import junit.framework.AssertionFailedError;
+import static org.junit.Assert.fail;
import org.apache.poi.ss.formula.eval.ErrorEval;
+import org.apache.poi.ss.formula.eval.NotImplementedException;
import org.apache.poi.ss.formula.eval.NumericValueEval;
import org.apache.poi.ss.formula.eval.ValueEval;
-import org.apache.poi.ss.formula.eval.NotImplementedException;
/**
* Test helper class for invoking functions with numeric results.
- *
- * @author Josh Micich
*/
public final class NumericFunctionInvoker {
@@ -64,8 +62,8 @@ public final class NumericFunctionInvoke
try {
return invokeInternal(f, args, srcCellRow, srcCellCol);
} catch (NumericEvalEx e) {
- throw new AssertionFailedError("Evaluation of function (" + f.getClass().getName()
- + ") failed: " + e.getMessage());
+ fail("Evaluation of function (" + f.getClass().getName() + ") failed: " + e.getMessage());
+ return -1;
}
}
/**
@@ -96,16 +94,9 @@ public final class NumericFunctionInvoke
NumericValueEval result = (NumericValueEval) evalResult;
return result.getNumberValue();
}
+
private static String formatErrorMessage(ErrorEval ee) {
- if(errorCodesAreEqual(ee, ErrorEval.VALUE_INVALID)) {
- return "Error code: #VALUE! (invalid value)";
- }
- return "Error code=" + ee.getErrorCode();
- }
- private static boolean errorCodesAreEqual(ErrorEval a, ErrorEval b) {
- if(a==b) {
- return true;
- }
- return a.getErrorCode() == b.getErrorCode();
+ boolean b = (ee == ErrorEval.VALUE_INVALID || ee.getErrorCode() == ErrorEval.VALUE_INVALID.getErrorCode());
+ return b ? "Error code: #VALUE! (invalid value)" : "Error code=" + ee.getErrorCode();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org