This is an automated email from the ASF dual-hosted git repository.
mariofusco pushed a commit to branch dev-new-parser
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/dev-new-parser by this push:
new d57c5da8b7 [incubator-kie-drools-5879] [new-parser] build failure on
kie-dmn-val… (#5899)
d57c5da8b7 is described below
commit d57c5da8b785bca3f35e6a32297bc3ba7a69843b
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Wed May 8 16:20:38 2024 +0900
[incubator-kie-drools-5879] [new-parser] build failure on kie-dmn-val…
(#5899)
* [incubator-kie-drools-5879] [new-parser] build failure on
kie-dmn-validation
- WIP
- test case only
* - nongreedy subrule
* - Add tests
- also fix andRestriction
---
.../drl/parser/antlr4/DRLExprParserTest.java | 108 ++++++++++++++++++++-
.../drl/parser/antlr4/MiscDRLParserTest.java | 56 +++++++++++
.../drools/drl/parser/antlr4/DRL6Expressions.g4 | 4 +-
.../model/codegen/execmodel/CompilerTest.java | 58 +++++++++++
4 files changed, 221 insertions(+), 5 deletions(-)
diff --git
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
index 7a866ec284..2a6d4e96a6 100644
---
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
+++
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
@@ -18,9 +18,6 @@
*/
package org.drools.drl.parser.antlr4;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assumptions.assumeFalse;
-
import java.util.Arrays;
import java.util.List;
@@ -43,6 +40,9 @@ import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.kie.internal.builder.conf.LanguageLevelOption;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
/**
* DRLExprTreeTest
*/
@@ -462,4 +462,106 @@ public class DRLExprParserTest {
assertThat(parser.hasErrors()).isFalse();
}
}
+
+ @Test
+ void orWithMethodCall() {
+ String source = "value == 10 || someMethod() == 4";
+ ConstraintConnectiveDescr result = parser.parse(source);
+
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
+
+ assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND); //
root is AND
+ assertThat(result.getDescrs().size()).isEqualTo(1);
+ ConstraintConnectiveDescr or = (ConstraintConnectiveDescr)
result.getDescrs().get(0);
+ assertThat(or.getConnective()).isEqualTo(ConnectiveType.OR);
+ assertThat(or.getDescrs().size()).isEqualTo(2);
+
+ RelationalExprDescr expr = (RelationalExprDescr) or.getDescrs().get(0);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
+ AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("value");
+ assertThat(right.getExpression()).isEqualTo("10");
+
+ expr = (RelationalExprDescr) or.getDescrs().get(1);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ left = (AtomicExprDescr) expr.getLeft();
+ right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("someMethod()");
+ assertThat(right.getExpression()).isEqualTo("4");
+ }
+
+ @Test
+ void orWithMethodCallWithArg() {
+ String source = "value == 10 || someMethod(value) == 4";
+ ConstraintConnectiveDescr result = parser.parse(source);
+
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
+
+ assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND); //
root is AND
+ assertThat(result.getDescrs().size()).isEqualTo(1);
+ ConstraintConnectiveDescr or = (ConstraintConnectiveDescr)
result.getDescrs().get(0);
+ assertThat(or.getConnective()).isEqualTo(ConnectiveType.OR);
+ assertThat(or.getDescrs().size()).isEqualTo(2);
+
+ RelationalExprDescr expr = (RelationalExprDescr) or.getDescrs().get(0);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
+ AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("value");
+ assertThat(right.getExpression()).isEqualTo("10");
+
+ expr = (RelationalExprDescr) or.getDescrs().get(1);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ left = (AtomicExprDescr) expr.getLeft();
+ right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("someMethod(value)");
+ assertThat(right.getExpression()).isEqualTo("4");
+ }
+
+ @Test
+ void andWithMethodCall() {
+ String source = "value == 10 && someMethod() == 4";
+ ConstraintConnectiveDescr result = parser.parse(source);
+
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
+
+ assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND);
+ assertThat(result.getDescrs().size()).isEqualTo(2);
+
+ RelationalExprDescr expr = (RelationalExprDescr)
result.getDescrs().get(0);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
+ AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("value");
+ assertThat(right.getExpression()).isEqualTo("10");
+
+ expr = (RelationalExprDescr) result.getDescrs().get(1);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ left = (AtomicExprDescr) expr.getLeft();
+ right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("someMethod()");
+ assertThat(right.getExpression()).isEqualTo("4");
+ }
+
+ @Test
+ void andWithMethodCallWithArg() {
+ String source = "value == 10 && someMethod(value) == 4";
+ ConstraintConnectiveDescr result = parser.parse(source);
+
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
+
+ assertThat(result.getConnective()).isEqualTo(ConnectiveType.AND);
+ assertThat(result.getDescrs().size()).isEqualTo(2);
+
+ RelationalExprDescr expr = (RelationalExprDescr)
result.getDescrs().get(0);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ AtomicExprDescr left = (AtomicExprDescr) expr.getLeft();
+ AtomicExprDescr right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("value");
+ assertThat(right.getExpression()).isEqualTo("10");
+
+ expr = (RelationalExprDescr) result.getDescrs().get(1);
+ assertThat(expr.getOperator()).isEqualTo("==");
+ left = (AtomicExprDescr) expr.getLeft();
+ right = (AtomicExprDescr) expr.getRight();
+ assertThat(left.getExpression()).isEqualTo("someMethod(value)");
+ assertThat(right.getExpression()).isEqualTo("4");
+ }
}
diff --git
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
index 376af150e5..94802923bb 100644
---
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
+++
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
@@ -136,6 +136,14 @@ class MiscDRLParserTest {
return pkg.getRules().get(0);
}
+ private ExprConstraintDescr parseAndGetFirstConstraintDescr(String drl) {
+ RuleDescr rule = parseAndGetFirstRuleDescr(drl);
+
assertThat(rule.getLhs().getDescrs().get(0)).isInstanceOf(PatternDescr.class);
+ PatternDescr patternDescr = (PatternDescr)
rule.getLhs().getDescrs().get(0);
+
assertThat(patternDescr.getConstraint().getDescrs().get(0)).isInstanceOf(ExprConstraintDescr.class);
+ return (ExprConstraintDescr)
patternDescr.getConstraint().getDescrs().get(0);
+ }
+
private PackageDescr parseAndGetPackageDescrFromFile(String filename) {
return parseAndGetPackageDescr(readResource(filename));
}
@@ -4695,4 +4703,52 @@ class MiscDRLParserTest {
.map(RuleDescr::getName)
.containsExactly("X", "Y", "Z");
}
+
+ @Test
+ void orWithMethodCall() {
+ final String text =
+ "rule R1\n" +
+ "when\n" +
+ " MyFact( value == 10 || someMethod() == 4 )\n" +
+ "then\n" +
+ "end";
+ ExprConstraintDescr exprConstraintDescr =
parseAndGetFirstConstraintDescr(text);
+ assertThat(exprConstraintDescr.getExpression()).isEqualTo("value == 10
|| someMethod() == 4");
+ }
+
+ @Test
+ void orWithMethodCallWithArg() {
+ final String text =
+ "rule R1\n" +
+ "when\n" +
+ " MyFact( value == 10 || someMethod(value) == 4 )\n" +
+ "then\n" +
+ "end";
+ ExprConstraintDescr exprConstraintDescr =
parseAndGetFirstConstraintDescr(text);
+ assertThat(exprConstraintDescr.getExpression()).isEqualTo("value == 10
|| someMethod(value) == 4");
+ }
+
+ @Test
+ void andWithMethodCall() {
+ final String text =
+ "rule R1\n" +
+ "when\n" +
+ " MyFact( value == 10 && someMethod() == 4 )\n" +
+ "then\n" +
+ "end";
+ ExprConstraintDescr exprConstraintDescr =
parseAndGetFirstConstraintDescr(text);
+ assertThat(exprConstraintDescr.getExpression()).isEqualTo("value == 10
&& someMethod() == 4");
+ }
+
+ @Test
+ void andWithMethodCallWithArg() {
+ final String text =
+ "rule R1\n" +
+ "when\n" +
+ " MyFact( value == 10 && someMethod(value) == 4 )\n" +
+ "then\n" +
+ "end";
+ ExprConstraintDescr exprConstraintDescr =
parseAndGetFirstConstraintDescr(text);
+ assertThat(exprConstraintDescr.getExpression()).isEqualTo("value == 10
&& someMethod(value) == 4");
+ }
}
diff --git
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
index 02c20088f4..27734251f1 100644
---
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
+++
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
@@ -519,7 +519,7 @@ orRestriction returns [BaseDescr result]
$result = descr;
}
}
- )* EOF?
+ )*? EOF?
;
andRestriction returns [BaseDescr result]
@@ -535,7 +535,7 @@ andRestriction returns [BaseDescr result]
$result = descr;
}
}
- )*
+ )*?
;
singleRestriction returns [BaseDescr result]
diff --git
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
index 8badee9ade..702020fb7e 100644
---
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
+++
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
@@ -3161,4 +3161,62 @@ public class CompilerTest extends BaseModelTest {
assertThat(list.size()).isEqualTo(1);
assertThat(list.get(0)).isEqualTo("r1");
}
+
+ @Test
+ public void orWithMethodCall() {
+ final String str =
+ "package org.example\n" +
+ "import " + MyFact.class.getCanonicalName() + ";" +
+ "rule r1 when\n" +
+ " MyFact( value == 10 || someMethod() == 4 )\n" +
+ "then\n" +
+ "end\n";
+
+ KieSession ksession = getKieSession( str );
+
+ ksession.insert(new MyFact(5));
+ int fired = ksession.fireAllRules();
+ assertThat(fired).isEqualTo(1);
+ }
+
+ @Test
+ public void orWithMethodCallWithArg() {
+ final String str =
+ "package org.example\n" +
+ "import " + MyFact.class.getCanonicalName() + ";" +
+ "rule r1 when\n" +
+ " MyFact( value == 10 || someMethod(2) == 4 )\n" +
+ "then\n" +
+ "end\n";
+
+ KieSession ksession = getKieSession( str );
+
+ ksession.insert(new MyFact(5));
+ int fired = ksession.fireAllRules();
+ assertThat(fired).isEqualTo(1);
+ }
+
+ public static class MyFact {
+ private int value;
+
+ public MyFact(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public int someMethod(int input) {
+ return input * 2;
+ }
+
+ public int someMethod() {
+ return 4;
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]