From 2e8d3848e02b1ae0478088617f3b0e915c2fb7f6 Mon Sep 17 00:00:00 2001 From: ANN JOY Date: Thu, 23 Jan 2025 12:18:00 +0530 Subject: [PATCH 1/2] org.mvel:mvel2 library upgraded to version 2.5.2.Final (#6226) --- build-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-parent/pom.xml b/build-parent/pom.xml index fc3ad8dcb09..1037e774854 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -120,7 +120,7 @@ 4.0.0 1.6.4 5.10.2 - 2.5.1.Final + 2.5.2.Final 2.0.7 2.0.6 From afde3730d2b6dae20dfc8b9090c1525fc3fdb3c6 Mon Sep 17 00:00:00 2001 From: Gabriele Cardosi Date: Thu, 23 Jan 2025 16:36:15 +0100 Subject: [PATCH 2/2] [incubator-kie-issues#1771] Fixing BooleanEvalHelper to avoid class cast exceptions (#6229) Co-authored-by: Gabriele-Cardosi --- .../kie/dmn/feel/util/BooleanEvalHelper.java | 16 ++++----- .../feel/runtime/FEELTernaryLogicTest.java | 9 +++-- .../dmn/feel/util/BooleanEvalHelperTest.java | 34 +++++++++++++++++++ 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/BooleanEvalHelper.java b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/BooleanEvalHelper.java index 9ebcb598d82..104002e898d 100644 --- a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/BooleanEvalHelper.java +++ b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/util/BooleanEvalHelper.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 @@ -205,15 +205,13 @@ public static boolean isEqualsStringCompare(Object value, Object itemFromList) { * @return */ public static Boolean getBooleanOrDialectDefault(Object rawReturn, FEELDialect feelDialect) { - if (feelDialect.equals(FEELDialect.BFEEL)) { - if (rawReturn instanceof Boolean bool) { - return bool; - } else { - return false; - } - } else { - return (Boolean) rawReturn; + Boolean toReturn = null; + if (rawReturn instanceof Boolean bool) { + toReturn = bool; + } else if (feelDialect.equals(FEELDialect.BFEEL)) { + toReturn = false; } + return toReturn; } /** diff --git a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELTernaryLogicTest.java b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELTernaryLogicTest.java index 42f779a768f..43a13c3a8c7 100644 --- a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELTernaryLogicTest.java +++ b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELTernaryLogicTest.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 @@ -58,7 +58,12 @@ private static Collection data() { { "false and false or true", Boolean.TRUE , null}, { "false and (false or true)", Boolean.FALSE , null}, { "true or false and false", Boolean.TRUE , null}, - { "(true or false) and false", Boolean.FALSE , null} + { "(true or false) and false", Boolean.FALSE , null}, + // + { "123 and false", Boolean.FALSE , null}, + { "\"true\" and false", Boolean.FALSE , null}, + { "123 or true", Boolean.TRUE , null}, + { "\"true\" or true", Boolean.TRUE , null} }; return addAdditionalParameters(cases, false); } diff --git a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/BooleanEvalHelperTest.java b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/BooleanEvalHelperTest.java index b869e0ab199..2e9dd2ff92b 100644 --- a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/BooleanEvalHelperTest.java +++ b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/util/BooleanEvalHelperTest.java @@ -28,6 +28,8 @@ import org.mockito.Mockito; import static org.assertj.core.api.Assertions.assertThat; +import static org.kie.dmn.feel.util.BooleanEvalHelper.getBooleanOrDialectDefault; +import static org.kie.dmn.feel.util.BooleanEvalHelper.getFalseOrDialectDefault; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @@ -50,6 +52,38 @@ void numericValuesComparative() { assertThat(BooleanEvalHelper.compare(BigInteger.valueOf(1), 2.3, FEELDialect.FEEL,(l, r) -> l.compareTo(r) == 0)).isFalse(); } + @Test + void getBooleanOrDialectDefaultFEEL() { + assertThat(getBooleanOrDialectDefault(false, FEELDialect.FEEL)).isEqualTo(Boolean.FALSE); + assertThat(getBooleanOrDialectDefault(true, FEELDialect.FEEL)).isEqualTo(Boolean.TRUE); + assertThat(getBooleanOrDialectDefault("true", FEELDialect.FEEL)).isNull(); + assertThat(getBooleanOrDialectDefault(null, FEELDialect.FEEL)).isNull(); + } + + @Test + void getBooleanOrDialectDefaultBFEEL() { + assertThat(getBooleanOrDialectDefault(false, FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + assertThat(getBooleanOrDialectDefault(true, FEELDialect.BFEEL)).isEqualTo(Boolean.TRUE); + assertThat(getBooleanOrDialectDefault("true", FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + assertThat(getBooleanOrDialectDefault(null, FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + } + + @Test + void getFalseOrDialectDefaultFEEL() { + assertThat(getFalseOrDialectDefault(false, FEELDialect.FEEL)).isEqualTo(Boolean.FALSE); + assertThat(getFalseOrDialectDefault(true, FEELDialect.FEEL)).isNull(); + assertThat(getFalseOrDialectDefault("true", FEELDialect.FEEL)).isNull(); + assertThat(getFalseOrDialectDefault(null, FEELDialect.FEEL)).isNull(); + } + + @Test + void getFalseOrDialectDefaultBFEEL() { + assertThat(getFalseOrDialectDefault(false, FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + assertThat(getFalseOrDialectDefault(true, FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + assertThat(getFalseOrDialectDefault("true", FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + assertThat(getFalseOrDialectDefault(null, FEELDialect.BFEEL)).isEqualTo(Boolean.FALSE); + } + @Test void isEqualsSCWithStringValue() { assertThat(BooleanEvalHelper.isEqualsStringCompare("", "")).isTrue();