From fcf232c374f4d5698cb4c3b18157d40914b6396b Mon Sep 17 00:00:00 2001 From: Toshiya Kobayashi Date: Wed, 29 Jan 2025 18:10:48 +0900 Subject: [PATCH] - replace agenda-group with ruleflow-group - adjust unit tests --- .../antlr4/DescrCommonPropertyTest.java | 6 +- .../drl/parser/antlr4/MiscDRLParserTest.java | 22 ++--- .../drl/parser/antlr4/package_attributes.drl | 2 +- .../drl/parser/antlr4/rule_attributes.drl | 2 +- .../drl/parser/antlr4/rule_attributes2.drl | 2 +- .../drl/parser/antlr4/rule_attributes_alt.drl | 2 +- .../drl/parser/antlr4/DRL10Expressions.g4 | 1 - .../drools/drl/parser/antlr4/DRL10Lexer.g4 | 1 - .../drools/drl/parser/antlr4/DRL10Parser.g4 | 2 +- .../org/drools/mvel/CommonTestMethodBase.java | 10 ++ .../codegen/execmodel/BaseModelTest.java | 11 ++- .../JpaPersistentStatefulSessionTest.java | 3 + .../session/AgendaRuleFlowGroupsTest.java | 8 +- .../JpaPersistentStatefulSessionTest.java | 5 +- .../impl/RuleUnitProviderImplTest.java | 2 + .../protobuf/MarshallingTest.java | 2 + .../protobuf/test_Serializable.drl | 6 +- .../DeclarativeAgendaTest.java | 6 +- .../testcoverage/common/util/KieUtil.java | 97 ++++++++++++++++++- 19 files changed, 156 insertions(+), 34 deletions(-) diff --git a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DescrCommonPropertyTest.java b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DescrCommonPropertyTest.java index 2e1a0e8564e..ae374091b65 100644 --- a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DescrCommonPropertyTest.java +++ b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DescrCommonPropertyTest.java @@ -245,7 +245,7 @@ void typeFieldDescr() { void attributeDescr() { final String source = "rule R1\n" + " salience 42\n" + - " agenda-group \"my_group\"\n" + + " ruleflow-group \"my_group\"\n" + " when\n" + " then\n" + "end"; @@ -257,10 +257,10 @@ void attributeDescr() { // Backward compatibility doesn't seem to be required in this case. (If do it, the code would be unnecessarily complicated.) if (DrlParser.ANTLR4_PARSER_ENABLED) { assertProperties(rule.getAttributes().get("salience"), 10, 21, 2, 2, 2, 12); - assertProperties(rule.getAttributes().get("agenda-group"), 24, 47, 3, 2, 3, 24); + assertProperties(rule.getAttributes().get("ruleflow-group"), 24, 49, 3, 2, 3, 26); } else { assertProperties(rule.getAttributes().get("salience"), 19, 21, 2, 11, 2, 12); - assertProperties(rule.getAttributes().get("agenda-group"), 37, 47, 3, 15, 3, 24); + assertProperties(rule.getAttributes().get("ruleflow-group"), 39, 49, 3, 17, 3, 26); } } 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 9a1012d2077..8f96434b385 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 @@ -1765,8 +1765,8 @@ void attributes() { assertThat(at.getName()).isEqualTo("salience"); assertThat(at.getValue()).isEqualTo("42"); - at = (AttributeDescr) attrs.get("agenda-group"); - assertThat(at.getName()).isEqualTo("agenda-group"); + at = (AttributeDescr) attrs.get("ruleflow-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("my_group"); at = (AttributeDescr) attrs.get("no-loop"); @@ -1801,8 +1801,8 @@ void attributes2() { AttributeDescr at = (AttributeDescr) attrs.get("salience"); assertThat(at.getName()).isEqualTo("salience"); assertThat(at.getValue()).isEqualTo("(42)"); - at = (AttributeDescr) attrs.get("agenda-group"); - assertThat(at.getName()).isEqualTo("agenda-group"); + at = (AttributeDescr) attrs.get("ruleflow-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("my_group"); rule = rules.get(1); @@ -1957,8 +1957,8 @@ void attributes_alternateSyntax() { assertThat(at.getName()).isEqualTo("salience"); assertThat(at.getValue()).isEqualTo("42"); - at = attrs.get("agenda-group"); - assertThat(at.getName()).isEqualTo("agenda-group"); + at = attrs.get("ruleflow-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("my_group"); at = attrs.get("no-loop"); @@ -2015,7 +2015,7 @@ void packageAttributes() { "package_attributes.drl"); AttributeDescr at = (AttributeDescr) pkg.getAttributes().get(0); - assertThat(at.getName()).isEqualTo("agenda-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("x"); at = (AttributeDescr) pkg.getAttributes().get(1); assertThat(at.getName()).isEqualTo("dialect"); @@ -2027,8 +2027,8 @@ void packageAttributes() { RuleDescr rule = (RuleDescr) pkg.getRules().get(0); assertThat(rule.getName()).isEqualTo("bar"); - at = (AttributeDescr) rule.getAttributes().get("agenda-group"); - assertThat(at.getName()).isEqualTo("agenda-group"); + at = (AttributeDescr) rule.getAttributes().get("ruleflow-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("x"); at = (AttributeDescr) rule.getAttributes().get("dialect"); assertThat(at.getName()).isEqualTo("dialect"); @@ -2039,8 +2039,8 @@ void packageAttributes() { at = (AttributeDescr) rule.getAttributes().get("dialect"); assertThat(at.getName()).isEqualTo("dialect"); assertThat(at.getValue()).isEqualTo("mvel"); - at = (AttributeDescr) rule.getAttributes().get("agenda-group"); - assertThat(at.getName()).isEqualTo("agenda-group"); + at = (AttributeDescr) rule.getAttributes().get("ruleflow-group"); + assertThat(at.getName()).isEqualTo("ruleflow-group"); assertThat(at.getValue()).isEqualTo("x"); } diff --git a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/package_attributes.drl b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/package_attributes.drl index 156f5c58f6d..5f1cd1b5fd8 100644 --- a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/package_attributes.drl +++ b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/package_attributes.drl @@ -17,7 +17,7 @@ package com.foo; -agenda-group "x" +ruleflow-group "x" import goo.ber import wee.waa diff --git a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes.drl b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes.drl index faf0d0c3351..9b68c4f617a 100644 --- a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes.drl +++ b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes.drl @@ -21,7 +21,7 @@ rule simple_rule // attributes keywork (and colon) is totally optional salience 42 - agenda-group "my_group" + ruleflow-group "my_group" no-loop duration 42 activation-group "my_activation_group" diff --git a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes2.drl b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes2.drl index cece840aa59..279dc33963d 100644 --- a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes2.drl +++ b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes2.drl @@ -20,7 +20,7 @@ package foo.bar rule rule1 salience (42) - agenda-group "my_group" + ruleflow-group "my_group" when Foo() then diff --git a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes_alt.drl b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes_alt.drl index fafc7032171..34a1baa5632 100644 --- a/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes_alt.drl +++ b/drools-drl/drools-drl-parser-tests/src/test/resources/org/drools/drl/parser/antlr4/rule_attributes_alt.drl @@ -20,7 +20,7 @@ rule simple_rule attributes: - salience 42, agenda-group "my_group", no-loop, lock-on-active, duration 42, activation-group "my_activation_group" + salience 42, ruleflow-group "my_group", no-loop, lock-on-active, duration 42, activation-group "my_activation_group" when Foo() then diff --git a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4 b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4 index e5030c2362c..a022c96c121 100644 --- a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4 +++ b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4 @@ -290,7 +290,6 @@ drlKeywords returns [Token token] | DRL_LOCK_ON_ACTIVE | DRL_REFRACT | DRL_DIRECT - | DRL_AGENDA_GROUP | DRL_ACTIVATION_GROUP | DRL_RULEFLOW_GROUP | DRL_DATE_EFFECTIVE diff --git a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Lexer.g4 b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Lexer.g4 index 6ef44add5fd..ed673f881b2 100644 --- a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Lexer.g4 +++ b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Lexer.g4 @@ -115,7 +115,6 @@ DRL_AUTO_FOCUS : 'auto-focus'; DRL_LOCK_ON_ACTIVE : 'lock-on-active'; DRL_REFRACT : 'refract'; DRL_DIRECT : 'direct'; -DRL_AGENDA_GROUP : 'agenda-group'; DRL_ACTIVATION_GROUP : 'activation-group'; DRL_RULEFLOW_GROUP : 'ruleflow-group'; DRL_DATE_EFFECTIVE : 'date-effective'; diff --git a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Parser.g4 b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Parser.g4 index 05f20df5eda..cca81800df4 100644 --- a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Parser.g4 +++ b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Parser.g4 @@ -462,7 +462,7 @@ drlAnnotation attributes : (DRL_ATTRIBUTES COLON?)? attribute ( COMMA? attribute )* ; attribute : name=( DRL_SALIENCE | DRL_ENABLED ) conditionalAttributeValue #expressionAttribute | name=( DRL_NO_LOOP | DRL_AUTO_FOCUS | DRL_LOCK_ON_ACTIVE | DRL_REFRACT | DRL_DIRECT ) BOOL_LITERAL? #booleanAttribute - | name=( DRL_AGENDA_GROUP | DRL_ACTIVATION_GROUP | DRL_RULEFLOW_GROUP | DRL_DATE_EFFECTIVE | DRL_DATE_EXPIRES | DRL_DIALECT ) DRL_STRING_LITERAL #stringAttribute + | name=( DRL_ACTIVATION_GROUP | DRL_RULEFLOW_GROUP | DRL_DATE_EFFECTIVE | DRL_DATE_EXPIRES | DRL_DIALECT ) DRL_STRING_LITERAL #stringAttribute | name=DRL_CALENDARS DRL_STRING_LITERAL ( COMMA DRL_STRING_LITERAL )* #stringListAttribute | name=DRL_TIMER ( DECIMAL_LITERAL | LPAREN chunk RPAREN ) #intOrChunkAttribute | name=DRL_DURATION ( DECIMAL_LITERAL | LPAREN chunk RPAREN ) #intOrChunkAttribute diff --git a/drools-legacy-test-util/src/test/java/org/drools/mvel/CommonTestMethodBase.java b/drools-legacy-test-util/src/test/java/org/drools/mvel/CommonTestMethodBase.java index 9a662471249..c0605331816 100644 --- a/drools-legacy-test-util/src/test/java/org/drools/mvel/CommonTestMethodBase.java +++ b/drools-legacy-test-util/src/test/java/org/drools/mvel/CommonTestMethodBase.java @@ -28,6 +28,7 @@ import org.drools.core.common.InternalAgenda; import org.drools.core.impl.RuleBaseFactory; import org.drools.core.integrationtests.SerializationHelper; +import org.drools.drl.parser.DrlParser; import org.drools.kiesession.rulebase.InternalKnowledgeBase; import org.drools.kiesession.rulebase.KnowledgeBaseFactory; import org.kie.api.KieBase; @@ -126,6 +127,7 @@ protected KieBase loadKnowledgeBaseFromString( protected KieBase loadKnowledgeBaseFromString( KnowledgeBuilderConfiguration config, KieBaseConfiguration kBaseConfig, String... drlContentStrings) { KnowledgeBuilder kbuilder = config == null ? KnowledgeBuilderFactory.newKnowledgeBuilder() : KnowledgeBuilderFactory.newKnowledgeBuilder(config); for (String drlContentString : drlContentStrings) { + drlContentString = replaceAgendaGroupIfRequired(drlContentString); kbuilder.add(ResourceFactory.newByteArrayResource(drlContentString .getBytes()), ResourceType.DRL); } @@ -141,6 +143,14 @@ protected KieBase loadKnowledgeBaseFromString( KnowledgeBuilderConfiguration con return kbase; } + public static String replaceAgendaGroupIfRequired(String drl) { + if (DrlParser.ANTLR4_PARSER_ENABLED) { + // new parser (DRL10) supports only ruleflow-group, dropping agenda-group + return drl.replaceAll("agenda-group", "ruleflow-group"); + } + return drl; + } + protected KieBase loadKnowledgeBase(KnowledgeBuilderConfiguration kbuilderConf, KieBaseConfiguration kbaseConf, String... classPathResources) { Collection knowledgePackages = loadKnowledgePackages(kbuilderConf, classPathResources); diff --git a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/BaseModelTest.java b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/BaseModelTest.java index 20e3bfe6141..9a6dc9e0c0a 100644 --- a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/BaseModelTest.java +++ b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/BaseModelTest.java @@ -27,6 +27,7 @@ import org.drools.compiler.kie.builder.impl.InternalKieModule; import org.drools.core.reteoo.EntryPointNode; import org.drools.core.reteoo.ObjectTypeNode; +import org.drools.drl.parser.DrlParser; import org.drools.kiesession.rulebase.InternalKnowledgeBase; import org.drools.model.codegen.ExecutableModelProject; import org.kie.api.KieServices; @@ -185,7 +186,15 @@ public KieFile( int index, String content ) { public KieFile( String path, String content ) { this.path = path; - this.content = content; + this.content = replaceAgendaGroupIfRequired(content); + } + + public static String replaceAgendaGroupIfRequired(String drl) { + if (DrlParser.ANTLR4_PARSER_ENABLED) { + // new parser (DRL10) supports only ruleflow-group, dropping agenda-group + return drl.replaceAll("agenda-group", "ruleflow-group"); + } + return drl; } } diff --git a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/kie/persistence/session/JpaPersistentStatefulSessionTest.java b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/kie/persistence/session/JpaPersistentStatefulSessionTest.java index 388844d6da8..c1f2ca0c131 100644 --- a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/kie/persistence/session/JpaPersistentStatefulSessionTest.java +++ b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/kie/persistence/session/JpaPersistentStatefulSessionTest.java @@ -34,6 +34,7 @@ import org.drools.commands.impl.CommandBasedStatefulKnowledgeSessionImpl; import org.drools.commands.impl.FireAllRulesInterceptor; import org.drools.commands.impl.LoggingInterceptor; +import org.drools.mvel.CommonTestMethodBase; import org.drools.mvel.compiler.Person; import org.drools.persistence.PersistableRunner; import org.drools.persistence.util.DroolsPersistenceUtil; @@ -329,6 +330,8 @@ public void testSetFocus(String locking) { str += "end\n"; str += "\n"; + str = CommonTestMethodBase.replaceAgendaGroupIfRequired(str); + KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", str ); diff --git a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/AgendaRuleFlowGroupsTest.java b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/AgendaRuleFlowGroupsTest.java index d05f9bcacd4..153638511f8 100644 --- a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/AgendaRuleFlowGroupsTest.java +++ b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/AgendaRuleFlowGroupsTest.java @@ -31,6 +31,7 @@ import org.drools.persistence.util.DroolsPersistenceUtil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.drools.io.ClassPathResource; @@ -98,7 +99,8 @@ public void testRuleFlowGroupOnly(boolean locking) throws Exception { assertThat(groups[0].getName()).isEqualTo("MAIN"); assertThat(groups[1].getName()).isEqualTo("ruleflow-group"); } - + + @DisabledIfSystemProperty(named = "drools.drl.antlr4.parser.enabled", matches = "true") @ParameterizedTest @MethodSource("parameters") public void testAgendaGroupOnly(boolean locking) throws Exception { @@ -126,7 +128,8 @@ public void testAgendaGroupOnly(boolean locking) throws Exception { assertThat(groups[1].getName()).isEqualTo("agenda-group"); } - + + @DisabledIfSystemProperty(named = "drools.drl.antlr4.parser.enabled", matches = "true") @ParameterizedTest @MethodSource("parameters") public void testAgendaGroupAndRuleFlowGroup(boolean locking) throws Exception { @@ -234,6 +237,7 @@ public Void execute(Context context) { } + @DisabledIfSystemProperty(named = "drools.drl.antlr4.parser.enabled", matches = "true") @ParameterizedTest @MethodSource("parameters") public void testConflictingAgendaAndRuleflowGroups() throws Exception { diff --git a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java index 5619f959a91..1579861195b 100644 --- a/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java +++ b/drools-persistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/JpaPersistentStatefulSessionTest.java @@ -37,6 +37,7 @@ import org.drools.core.FlowSessionConfiguration; import org.drools.core.SessionConfiguration; import org.drools.core.impl.RuleBaseFactory; +import org.drools.mvel.CommonTestMethodBase; import org.drools.mvel.compiler.Address; import org.drools.mvel.compiler.Person; import org.drools.persistence.PersistableRunner; @@ -361,7 +362,7 @@ public void testSetFocusWithOOPath() { } private void testFocus(final boolean withOOPath) { - final String str = "package org.kie.test\n" + + String str = "package org.kie.test\n" + "global java.util.List list\n" + "rule rule1\n" + "agenda-group \"badfocus\"" + @@ -372,6 +373,8 @@ private void testFocus(final boolean withOOPath) { "end\n" + "\n"; + str = CommonTestMethodBase.replaceAgendaGroupIfRequired(str); + final KieBase kbase = new KieHelper().addContent(str, ResourceType.DRL).build(); final KieSession ksession = KieServices.get().getStoreServices().newKieSession(kbase, null, env); diff --git a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java index 822ab51fb3d..d13f5782ba3 100644 --- a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java +++ b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java @@ -34,6 +34,7 @@ import org.drools.ruleunits.impl.listener.TestRuleEventListener; import org.drools.ruleunits.impl.listener.TestRuleRuntimeEventListener; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.kie.api.builder.CompilationErrorsException; import org.kie.api.event.rule.ObjectDeletedEvent; import org.kie.api.event.rule.ObjectInsertedEvent; @@ -179,6 +180,7 @@ public void wrongType() { } } + @DisabledIfSystemProperty(named = "drools.drl.antlr4.parser.enabled", matches = "true") @Test public void agendaGroup() { try { diff --git a/drools-serialization-protobuf/src/test/java/org/drools/serialization/protobuf/MarshallingTest.java b/drools-serialization-protobuf/src/test/java/org/drools/serialization/protobuf/MarshallingTest.java index f80c8a7ee42..e49c934cdc9 100644 --- a/drools-serialization-protobuf/src/test/java/org/drools/serialization/protobuf/MarshallingTest.java +++ b/drools-serialization-protobuf/src/test/java/org/drools/serialization/protobuf/MarshallingTest.java @@ -77,6 +77,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.kie.api.KieBase; import org.kie.api.KieBaseConfiguration; import org.kie.api.KieServices; @@ -1560,6 +1561,7 @@ public void testActivationGroups() throws Exception { assertThat(list.get(1)).isEqualTo("rule4"); } + @DisabledIfSystemProperty(named = "drools.drl.antlr4.parser.enabled", matches = "true") @Test public void testAgendaGroups() throws Exception { String rule1 = "package org.drools.compiler.test;\n"; diff --git a/drools-serialization-protobuf/src/test/resources/org/drools/serialization/protobuf/test_Serializable.drl b/drools-serialization-protobuf/src/test/resources/org/drools/serialization/protobuf/test_Serializable.drl index bd4e757963a..c9e9c73503b 100644 --- a/drools-serialization-protobuf/src/test/resources/org/drools/serialization/protobuf/test_Serializable.drl +++ b/drools-serialization-protobuf/src/test/resources/org/drools/serialization/protobuf/test_Serializable.drl @@ -38,7 +38,7 @@ end rule "match Person 2" - agenda-group "xxx" + ruleflow-group "xxx" salience ($age2 - $age1) when $person : Person(name=="mark", $age1 : age ) @@ -53,7 +53,7 @@ rule "match Person 2" end rule "match Person 3" - agenda-group "xxx" + ruleflow-group "xxx" dialect "mvel" when not Person( name == "mark" ) @@ -62,7 +62,7 @@ rule "match Person 3" end rule "match Integer" - agenda-group "yyy" + ruleflow-group "yyy" auto-focus true when Person( name == "bob" ) diff --git a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/DeclarativeAgendaTest.java b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/DeclarativeAgendaTest.java index c1cf2398f5f..38ece70bb54 100644 --- a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/DeclarativeAgendaTest.java +++ b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/integrationtests/DeclarativeAgendaTest.java @@ -919,7 +919,6 @@ public void testFiredRuleDoNotRefireAfterUnblock(KieBaseTestConfiguration kieBas "end\n"; final KieServices ks = KieServices.Factory.get(); - KieFileSystem kfs = ks.newKieFileSystem(); KieModuleModel kmodule = ks.newKieModuleModel(); KieBaseModel baseModel = kmodule.newKieBaseModel("defaultKBase") @@ -928,10 +927,7 @@ public void testFiredRuleDoNotRefireAfterUnblock(KieBaseTestConfiguration kieBas baseModel.newKieSessionModel("defaultKSession") .setDefault(true); - kfs.writeKModuleXML(kmodule.toXML()); - kfs.write("src/main/resources/block_rule.drl", drl); - final KieBuilder kieBuilder = KieUtil.getKieBuilderFromKieFileSystem(kieBaseTestConfiguration, kfs, false); - assertThat(kieBuilder.getResults().getMessages(org.kie.api.builder.Message.Level.ERROR).size()).isEqualTo(0); + KieUtil.getKieBuilderFromDrls(kieBaseTestConfiguration, kmodule, true, drl); KieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); diff --git a/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/common/util/KieUtil.java b/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/common/util/KieUtil.java index 4cf82ef2b13..ff65e96298c 100644 --- a/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/common/util/KieUtil.java +++ b/drools-test-coverage/test-suite/src/test/java/org/drools/testcoverage/common/util/KieUtil.java @@ -18,7 +18,12 @@ */ package org.drools.testcoverage.common.util; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; import java.io.StringReader; +import java.io.UncheckedIOException; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -34,6 +39,13 @@ import org.drools.core.reteoo.JoinNode; import org.drools.core.impl.InternalRuleBase; import org.drools.core.reteoo.ObjectTypeNode; +import org.drools.decisiontable.InputType; +import org.drools.decisiontable.SpreadsheetCompiler; +import org.drools.drl.parser.DrlParser; +import org.drools.io.ClassPathResource; +import org.drools.io.InternalResource; +import org.drools.io.ReaderResource; +import org.drools.mvel.CommonTestMethodBase; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; @@ -46,8 +58,12 @@ import org.kie.api.command.KieCommands; import org.kie.api.io.KieResources; import org.kie.api.io.Resource; +import org.kie.api.io.ResourceConfiguration; +import org.kie.api.io.ResourceType; import org.kie.api.runtime.KieContainer; +import org.kie.internal.builder.DecisionTableConfiguration; import org.kie.internal.builder.conf.AlphaNetworkCompilerOption; +import org.kie.internal.io.ResourceFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -94,19 +110,98 @@ public static KieFileSystem getKieFileSystemWithKieModule(final KieModuleModel k final ReleaseId releaseId, final Resource... resources) { final KieFileSystem fileSystem = KieServices.Factory.get().newKieFileSystem(); fileSystem.generateAndWritePomXML(releaseId); - for (final Resource resource : resources) { + for (Resource resource : resources) { + resource = newResourceForNewParserIfRequired(resource); fileSystem.write(resource); } fileSystem.writeKModuleXML(kieModuleModel.toXML()); return fileSystem; } + private static Resource newResourceForNewParserIfRequired(Resource resource) { + if (DrlParser.ANTLR4_PARSER_ENABLED && resource instanceof InternalResource internalResource) { + if (isDrl(internalResource)) { + String encoding = internalResource.getEncoding(); + String drl; + if (encoding != null) { + try { + drl = new String(internalResource.getBytes(), encoding); + } catch (UnsupportedEncodingException e) { + throw new UncheckedIOException(e); + } + } else { + drl = new String(internalResource.getBytes()); + } + return convertResourceForNewParser(internalResource, drl); + } if (internalResource.getResourceType() == ResourceType.DTABLE) { + ResourceConfiguration resourceConfiguration = internalResource.getConfiguration(); + SpreadsheetCompiler compiler = new SpreadsheetCompiler(); + try (InputStream is = internalResource.getInputStream()) { + String drl; + if (resourceConfiguration instanceof DecisionTableConfiguration decisionTableConfiguration && decisionTableConfiguration.getWorksheetName() != null) { + drl = compiler.compile(is, decisionTableConfiguration.getWorksheetName()); + } else { + drl = compiler.compile(is, getInputType(internalResource)); + } + Resource resourceForNewParser = convertResourceForNewParser(internalResource, drl); + // overwrite + resourceForNewParser.setSourcePath(internalResource.getSourcePath() + ".drl"); + resourceForNewParser.setTargetPath(internalResource.getTargetPath() + ".drl"); + resourceForNewParser.setResourceType(ResourceType.DRL); + return resourceForNewParser; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + } + return resource; + } + + private static boolean isDrl(InternalResource internalResource) { + String sourcePath = internalResource.getSourcePath(); + String targetPath = internalResource.getTargetPath(); + return internalResource.getResourceType() == ResourceType.DRL || + (internalResource.getResourceType() == null && + ((sourcePath != null && sourcePath.endsWith(".drl")) || + (targetPath != null && targetPath.endsWith(".drl")))); + } + + private static Resource convertResourceForNewParser(InternalResource internalResource, String drl) { + Resource resourceForNewParserTest = getResources().newReaderResource(new StringReader(CommonTestMethodBase.replaceAgendaGroupIfRequired(drl))); + resourceForNewParserTest.setSourcePath(internalResource.getSourcePath()); + resourceForNewParserTest.setTargetPath(internalResource.getTargetPath()); + resourceForNewParserTest.setResourceType(internalResource.getResourceType()); + return resourceForNewParserTest; + } + + private static InputType getInputType(InternalResource internalResource) { + if (!(internalResource instanceof ClassPathResource classPathResource)) { + return InputType.CSV; + } + String path = classPathResource.getPath(); + switch (path.substring(path.lastIndexOf('.') + 1)) { + case "xls", "xlsx": + return InputType.XLS; + case "csv": + return InputType.CSV; + default: + throw new IllegalArgumentException("Unsupported input type: " + path); + } + } + public static KieBuilder getKieBuilderFromDrls(final KieBaseTestConfiguration kieBaseTestConfiguration, final boolean failIfBuildError, final String... drls) { final List resources = getResourcesFromDrls(drls); return getKieBuilderFromResources(kieBaseTestConfiguration, failIfBuildError, resources.toArray(new Resource[]{})); } + public static KieBuilder getKieBuilderFromDrls(final KieBaseTestConfiguration kieBaseTestConfiguration, final KieModuleModel kieModuleModel, + final boolean failIfBuildError, final String... drls) { + final List resources = getResourcesFromDrls(drls); + final KieFileSystem kieFileSystem = getKieFileSystemWithKieModule(kieModuleModel, KieServices.get().getRepository().getDefaultReleaseId(), resources.toArray(new Resource[]{})); + return getKieBuilderFromKieFileSystem(kieBaseTestConfiguration, kieFileSystem, failIfBuildError); + } + public static KieBuilder getKieBuilderFromDrls(final KieBaseTestConfiguration kieBaseTestConfiguration,final Map kieModuleConfigurationProperties, final boolean failIfBuildError, final String... drls) { final List resources = getResourcesFromDrls(drls);