This is an automated email from the ASF dual-hosted git repository.
mariofusco 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 b154d01f69 MVEL.analyse is not using DataConverter coercions (#5297)
b154d01f69 is described below
commit b154d01f69fa0e74c8a0e3cef77157658f5896f8
Author: mdproctor <[email protected]>
AuthorDate: Fri Feb 9 07:07:43 2024 +0000
MVEL.analyse is not using DataConverter coercions (#5297)
---
.../org/drools/mvel/MVELConstraintBuilder.java | 2 +-
.../java/org/drools/mvel/MVELDateCoercionTest.java | 72 ++++++++++++++++++++++
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git
a/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
b/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
index 7d03ed6cb3..38809896b7 100644
--- a/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
+++ b/drools-mvel/src/main/java/org/drools/mvel/MVELConstraintBuilder.java
@@ -480,7 +480,7 @@ public class MVELConstraintBuilder implements
ConstraintBuilder {
public static class StringCoercionCompatibilityEvaluator extends
CompatibilityStrategy.DefaultCompatibilityEvaluator {
- private static final CompatibilityStrategy.CompatibilityEvaluator
INSTANCE = new StringCoercionCompatibilityEvaluator();
+ public static final CompatibilityStrategy.CompatibilityEvaluator
INSTANCE = new StringCoercionCompatibilityEvaluator();
private StringCoercionCompatibilityEvaluator() { }
diff --git
a/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
b/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
index 4eec3e1416..9e06729024 100644
--- a/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
+++ b/drools-mvel/src/test/java/org/drools/mvel/MVELDateCoercionTest.java
@@ -20,13 +20,23 @@ package org.drools.mvel;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.HashMap;
import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import
org.drools.mvel.MVELConstraintBuilder.StringCoercionCompatibilityEvaluator;
import org.drools.util.DateUtils;
import org.drools.mvel.expr.MVELDateCoercion;
import org.junit.Test;
+import org.mvel2.DataConversion;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.util.CompatibilityStrategy;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.within;
+import static org.mvel2.MVEL.executeExpression;
public class MVELDateCoercionTest {
@@ -51,4 +61,66 @@ public class MVELDateCoercionTest {
assertThat(co.convertFrom(dt)).isEqualTo(dt_);
}
+ @Test
+ public void testCoercionDuringAnalyze() {
+
CompatibilityStrategy.setCompatibilityEvaluator(StringCoercionCompatibilityEvaluator.INSTANCE);
+
+ DataConversion.addConversionHandler(Date.class,
+ new MVELDateCoercion());
+
+ String expr = "f.departureTime >= \"01-Jan-1970\" && f.departureTime
<= \"01-Jan-2018\"";
+
+ ParserContext ctx = new ParserContext();
+ ctx.setStrongTyping(true);
+ ctx.setStrictTypeEnforcement(true);
+ ctx.addInput("f", Flight.class);
+
+ Class cls = MVEL.analyze( expr,
+ ctx );
+
+ assertThat(cls).isNotNull();
+ }
+
+ public static class Flight {
+ private Date departureTime;
+
+ public Flight(Date departureTime) {
+ this.departureTime = departureTime;
+ }
+
+ public Date getDepartureTime() {
+ return departureTime;
+ }
+
+ public void setDepartureTime(Date departureTime) {
+ this.departureTime = departureTime;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ Flight flight = (Flight) o;
+
+ return Objects.equals(departureTime, flight.departureTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return departureTime != null ? departureTime.hashCode() : 0;
+ }
+
+ @Override
+ public String toString() {
+ return "Flight{" +
+ "departureTime=" + departureTime +
+ '}';
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]