You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/10/03 12:28:19 UTC
svn commit: r1893851 - in /poi/trunk/poi/src:
main/java/org/apache/poi/ss/formula/functions/WeekNum.java
test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java
Author: fanningpj
Date: Sun Oct 3 12:28:19 2021
New Revision: 1893851
URL: http://svn.apache.org/viewvc?rev=1893851&view=rev
Log:
[bug-65606] allow return type (second param) to be omitted - still other scenarios to be fixed though
Added:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java
- copied, changed from r1893846, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekdayFunc.java
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/WeekNum.java
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/WeekNum.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/WeekNum.java?rev=1893851&r1=1893850&r2=1893851&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/WeekNum.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/WeekNum.java Sun Oct 3 12:28:19 2021
@@ -44,6 +44,7 @@ import org.apache.poi.util.LocaleUtil;
*/
public class WeekNum extends Fixed2ArgFunction implements FreeRefFunction {
public static final FreeRefFunction instance = new WeekNum();
+ private static final NumberEval DEFAULT_RETURN_TYPE = new NumberEval(1);
@Override
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval serialNumVE, ValueEval returnTypeVE) {
@@ -82,7 +83,9 @@ public class WeekNum extends Fixed2ArgFu
@Override
public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
- if (args.length == 2) {
+ if (args.length == 1) {
+ return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], DEFAULT_RETURN_TYPE);
+ } else if (args.length == 2) {
return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]);
}
return ErrorEval.VALUE_INVALID;
Copied: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java (from r1893846, poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekdayFunc.java)
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java?p2=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java&p1=poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekdayFunc.java&r1=1893846&r2=1893851&rev=1893851&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekdayFunc.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWeekNumFunc.java Sun Oct 3 12:28:19 2021
@@ -17,77 +17,60 @@
package org.apache.poi.ss.formula.functions;
+import org.apache.poi.ss.formula.OperationEvaluationContext;
import org.apache.poi.ss.formula.eval.*;
+import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.util.StringUtil;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import java.time.LocalDate;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
/**
- * Tests WEEKDAY(serial_number[, return_type]) excep function
- * https://support.office.com/en-us/article/WEEKDAY-function-60E44483-2ED1-439F-8BD0-E404C190949A
+ * Tests WEEKNUM(date[, return_type]) excep function
+ * https://support.microsoft.com/en-us/office/weeknum-function-e5c43a03-b4ab-426c-b411-b18c13c75340
*/
-class TestWeekdayFunc {
+class TestWeekNumFunc {
private static final double TOLERANCE = 0.001;
- private void assertEvaluateEquals(double expected, double serial_number) {
- String formula = "WEEKDAY(" + serial_number + ")";
- ValueEval[] args = new ValueEval[] { new NumberEval(serial_number) };
- NumberEval result = (NumberEval) WeekdayFunc.instance.evaluate(args, 0, 0);
- assertEquals(expected, result.getNumberValue(), TOLERANCE, formula);
- }
- private void assertEvaluateEquals(double expected, double serial_number, double return_type) {
- String formula = "WEEKDAY(" + serial_number + ", " + return_type + ")";
- ValueEval[] args = new ValueEval[] { new NumberEval(serial_number), new NumberEval(return_type) };
- NumberEval result = (NumberEval) WeekdayFunc.instance.evaluate(args, 0, 0);
- assertEquals(expected, result.getNumberValue(), TOLERANCE, formula);
- }
-
-
@Test
void testEvaluate() {
- assertEvaluateEquals(2.0, 1.0);
- assertEvaluateEquals(2.0, 1.0, 1.0);
- assertEvaluateEquals(1.0, 1.0, 2.0);
- assertEvaluateEquals(0.0, 1.0, 3.0);
- assertEvaluateEquals(1.0, 1.0, 11.0);
- assertEvaluateEquals(7.0, 1.0, 12.0);
- assertEvaluateEquals(6.0, 1.0, 13.0);
- assertEvaluateEquals(5.0, 1.0, 14.0);
- assertEvaluateEquals(4.0, 1.0, 15.0);
- assertEvaluateEquals(3.0, 1.0, 16.0);
- assertEvaluateEquals(2.0, 1.0, 17.0);
-
-
- assertEvaluateEquals(3.0, 39448.0);
- assertEvaluateEquals(3.0, 39448.0, 1.0);
- assertEvaluateEquals(2.0, 39448.0, 2.0);
- assertEvaluateEquals(1.0, 39448.0, 3.0);
- assertEvaluateEquals(2.0, 39448.0, 11.0);
- assertEvaluateEquals(1.0, 39448.0, 12.0);
- assertEvaluateEquals(7.0, 39448.0, 13.0);
- assertEvaluateEquals(6.0, 39448.0, 14.0);
- assertEvaluateEquals(5.0, 39448.0, 15.0);
- assertEvaluateEquals(4.0, 39448.0, 16.0);
- assertEvaluateEquals(3.0, 39448.0, 17.0);
+ assertEvaluateEquals(10.0, DateUtil.getExcelDate(LocalDate.parse("2012-03-09")));
+ //next assert returns 10 when it should be 11.0.
+ //assertEvaluateEquals(11.0, DateUtil.getExcelDate(LocalDate.parse("2012-03-09")), 2);
}
+ private static final OperationEvaluationContext DEFAULT_CONTEXT =
+ new OperationEvaluationContext(null, null, 0, 1, 0, null);
+
// for testing invalid invocations
private void assertEvaluateEquals(String message, ErrorEval expected, ValueEval... args) {
- String formula = "WEEKDAY(" + StringUtil.join(args, ", ") + ")";
- ValueEval result = WeekdayFunc.instance.evaluate(args, 0, 0);
+ String formula = "WEEKNUM(" + StringUtil.join(args, ", ") + ")";
+ ValueEval result = WeekNum.instance.evaluate(args, DEFAULT_CONTEXT);
assertEquals(expected, result, formula + ": " + message);
}
- @Test
- void testEvaluateInvalid() {
- assertEvaluateEquals("no args", ErrorEval.VALUE_INVALID);
- assertEvaluateEquals("too many args", ErrorEval.VALUE_INVALID, new NumberEval(1.0), new NumberEval(1.0), new NumberEval(1.0));
- assertEvaluateEquals("negative date", ErrorEval.NUM_ERROR, new NumberEval(-1.0));
- assertEvaluateEquals("cannot coerce serial_number to number", ErrorEval.VALUE_INVALID, new StringEval(""));
- assertEvaluateEquals("cannot coerce return_type to number", ErrorEval.VALUE_INVALID, new StringEval("1"), new StringEval(""));
- assertEvaluateEquals("return_type is blank", ErrorEval.NUM_ERROR, new StringEval("2"), BlankEval.instance);
- assertEvaluateEquals("return_type is missing", ErrorEval.NUM_ERROR, new StringEval("3"), MissingArgEval.instance);
- assertEvaluateEquals("invalid return_type", ErrorEval.NUM_ERROR, new NumberEval(1.0), new NumberEval(18.0));
+ private void assertEvaluateEquals(double expected, double dateValue) {
+ String formula = "WEEKNUM(" + dateValue + ")";
+ ValueEval[] args = new ValueEval[] { new NumberEval(dateValue) };
+ ValueEval result = WeekNum.instance.evaluate(args, DEFAULT_CONTEXT);
+ if (result instanceof NumberEval) {
+ assertEquals(expected, ((NumberEval)result).getNumberValue(), TOLERANCE, formula);
+ } else {
+ fail("unexpected eval result " + result);
+ }
+ }
+
+ private void assertEvaluateEquals(double expected, double dateValue, double return_type) {
+ String formula = "WEEKNUM(" + dateValue + ", " + return_type + ")";
+ ValueEval[] args = new ValueEval[] { new NumberEval(dateValue), new NumberEval(return_type) };
+ ValueEval result = WeekNum.instance.evaluate(args, DEFAULT_CONTEXT);
+ if (result instanceof NumberEval) {
+ assertEquals(expected, ((NumberEval)result).getNumberValue(), TOLERANCE, formula);
+ } else {
+ fail("unexpected eval result " + result);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org