This is an automated email from the ASF dual-hosted git repository.

gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new 60829671f2 [Incubator kie issues#1811] Range starting with null not 
permitted (#6266)
60829671f2 is described below

commit 60829671f24edb401cda11ca84d048b09ba5f1a6
Author: AthiraHari77 <[email protected]>
AuthorDate: Mon Mar 3 17:28:30 2025 +0530

    [Incubator kie issues#1811] Range starting with null not permitted (#6266)
    
    * [incubator-kie-issues#1811] Code fix to return null when  functions are 
used as non literal
    
    * [incubator-kie-issues#1820] Code fix for range starting with null
    
    * [incubator-kie-issues#1820] WIP
    
    * [incubator-kie-issues#1820] WIP
    
    * [incubator-kie-issues#1820] Update test cases
    
    * [incubator-kie-issues#1820] Update test cases
    
    * [incubator-kie-issues#1820] Testcase update
    
    ---------
    
    Co-authored-by: athira <[email protected]>
---
 .../java/org/kie/dmn/feel/lang/ast/RangeNode.java  |  4 +-
 .../dmn/feel/runtime/functions/RangeFunction.java  |  3 +-
 .../org/kie/dmn/feel/lang/ast/RangeNodeTest.java   | 22 ++++++++
 .../org/kie/dmn/feel/runtime/FEELRangesTest.java   |  8 ++-
 .../feel/runtime/functions/RangeFunctionTest.java  | 62 +++++-----------------
 5 files changed, 44 insertions(+), 55 deletions(-)

diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
index 5ef569e051..c0608ec1cb 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -111,7 +111,7 @@ public class RangeNode
     public Range evaluate(EvaluationContext ctx) {
         Object s = start.evaluate( ctx );
         Object e = end.evaluate( ctx );
-        if (s == null && e == null) {
+        if (s == null || e == null) {
             return null;
         }
         
diff --git 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
index fe4719167f..b4429da1a0 100644
--- 
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
+++ 
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
@@ -60,7 +60,6 @@ public class RangeFunction extends BaseFEELFunction {
     private static EvaluationContext STUBBED;
     private static final Range DEFAULT_VALUE = new 
RangeImpl(Range.RangeBoundary.OPEN, BigDecimal.ZERO, BigDecimal.ZERO, 
Range.RangeBoundary.OPEN);
 
-
     private static final List<Predicate<BaseNode>> ALLOWED_NODES = 
Arrays.asList(baseNode -> baseNode instanceof NullNode,
             baseNode -> baseNode instanceof NumberNode,
             baseNode -> baseNode instanceof StringNode,
@@ -148,7 +147,7 @@ public class RangeFunction extends BaseFEELFunction {
 
     static Range getReturnedValue(Object left, Object right, 
Range.RangeBoundary startBoundary,
                                   Range.RangeBoundary endBoundary) {
-        return (left == null && right == null) ? null :
+        return (left == null || right == null) ? null :
                 new RangeImpl(startBoundary, (Comparable) left, (Comparable) 
right, endBoundary);
     }
 
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
index d7f9e7e174..bc9c2b2062 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
@@ -81,6 +81,28 @@ class RangeNodeTest {
         
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
     }
 
+    @Test
+    void isRangeStartNullTest() {
+        BaseNode startNode = new NullNode("null");
+        BigDecimal end = BigDecimal.TEN;
+        BaseNode endNode = new NumberNode(end, end.toString());
+        RangeNode rangeNode = new RangeNode(RangeNode.IntervalBoundary.CLOSED, 
RangeNode.IntervalBoundary.CLOSED,
+                startNode, endNode, "[null..10]");
+        assertThat(rangeNode).isNotNull();
+        
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
+    }
+
+    @Test
+    void isRangeEndNullTest() {
+        BigDecimal start = BigDecimal.TEN;
+        BaseNode startNode = new NumberNode(start, start.toString());
+        BaseNode endNode = new NullNode("null");
+        RangeNode rangeNode = new RangeNode(RangeNode.IntervalBoundary.CLOSED, 
RangeNode.IntervalBoundary.CLOSED,
+                startNode, endNode, "[10..null]");
+        assertThat(rangeNode).isNotNull();
+        
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
+    }
+
     private static Collection<RangeNode> ascendingRanges() {
         return Arrays.asList(
                 getNumericRangeNode("[1..3]", BigDecimal.ONE, 
BigDecimal.valueOf(3), RangeNode.IntervalBoundary.CLOSED, 
RangeNode.IntervalBoundary.CLOSED),
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
index 506ae00c07..462e4a3cfb 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -49,7 +49,11 @@ public class FEELRangesTest extends BaseFEELTest {
                 {"(>=1)", new RangeImpl(Range.RangeBoundary.CLOSED, 
BigDecimal.ONE, new UndefinedValueComparable(), Range.RangeBoundary.OPEN), 
null},
                 {"(<1)", new RangeImpl(Range.RangeBoundary.OPEN, new 
UndefinedValueComparable(), BigDecimal.ONE, Range.RangeBoundary.OPEN), null},
                 {"(<=1)", new RangeImpl(Range.RangeBoundary.OPEN, new 
UndefinedValueComparable(), BigDecimal.ONE, Range.RangeBoundary.CLOSED), null},
-                {"(null..10)", new RangeImpl(Range.RangeBoundary.OPEN, null, 
BigDecimal.valueOf(10), Range.RangeBoundary.OPEN), null},
+                {"(null..10)", null, null},
+                {"(10..null)", null, null},
+                {"(null..date(\"1978-10-13\"))", null, null},
+                {"(\"a\"..null)", null, null},
+                {"(null..null)", null, null},
 
                 {"[null..null]", null, null},
                 {"[1..2]", new RangeImpl(Range.RangeBoundary.CLOSED, 
BigDecimal.ONE, BigDecimal.valueOf(2), Range.RangeBoundary.CLOSED), null},
diff --git 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
index 93f05e4378..7da85c9505 100644
--- 
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
+++ 
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -74,35 +74,17 @@ class RangeFunctionTest {
     @Test
     void invoke_LeftNull() {
         String from = "(..2)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
null, BigDecimal.valueOf(2),
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(..\"z\")";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
null, "z", Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(..\"yz\")";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
null, "yz", Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(..date(\"1978-10-13\"))";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
null, LocalDate.of(1978, 10, 13),
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(..duration(\"P3DT20H14M\"))";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
null, Duration.parse("P3DT20H14M"),
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(..duration(\"P2Y6M\"))";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN,
-                                                    null,
-                                                    new 
ComparablePeriod(Period.parse("P2Y6M")),
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "[..2]";
         FunctionTestUtil.assertResultError(rangeFunction.invoke(from),
                                       InvalidParametersEvent.class,
@@ -112,35 +94,17 @@ class RangeFunctionTest {
     @Test
     void invoke_RightNull() {
         String from = "(1..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
BigDecimal.ONE, null,
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(\"a\"..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
"a", null, Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(\"ab\"..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
"ab", null, Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(date(\"1978-09-12\")..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
LocalDate.of(1978, 9, 12), null,
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(duration(\"P2DT20H14M\")..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN, 
Duration.parse("P2DT20H14M"), null,
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "(duration(\"P1Y6M\")..)";
-        FunctionTestUtil.assertResult(rangeFunction.invoke(from),
-                                      new RangeImpl(Range.RangeBoundary.OPEN,
-                                                    new 
ComparablePeriod(Period.parse("P1Y6M")),
-                                                    null,
-                                                    Range.RangeBoundary.OPEN),
-                                      from);
+        FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
         from = "[1..]";
         FunctionTestUtil.assertResultError(rangeFunction.invoke(from),
                                            InvalidParametersEvent.class,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to