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