[jboss-svn-commits] JBL Code SVN: r33607 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 23 12:06:30 EDT 2010
Author: tirelli
Date: 2010-06-23 12:06:29 -0400 (Wed, 23 Jun 2010)
New Revision: 33607
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleChaining.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
Log:
JBRULES-2558: fixing the problem when a consequence has multiple logical inserts. Test case added.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-06-23 13:43:46 UTC (rev 33606)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-06-23 16:06:29 UTC (rev 33607)
@@ -22,6 +22,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.never;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -93,6 +94,7 @@
import org.drools.WorkingMemory;
import org.drools.Cheesery.Maturity;
import org.drools.Order.OrderStatus;
+import org.drools.audit.WorkingMemoryFileLogger;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
@@ -7186,4 +7188,45 @@
// assertThat( values.get( 1 ).getFactHandle(), is( petFH ) );
}
+ public void testRuleChainingWithLogicalInserts() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_RuleChaining.drl",
+ getClass() ),
+ ResourceType.DRL );
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.err.println( error );
+ }
+ throw new IllegalArgumentException( "Could not parse knowledge." );
+ }
+ assertFalse( kbuilder.hasErrors() );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ // create working memory mock listener
+ org.drools.event.rule.WorkingMemoryEventListener wml = Mockito.mock( org.drools.event.rule.WorkingMemoryEventListener.class );
+ org.drools.event.rule.AgendaEventListener ael = Mockito.mock( org.drools.event.rule.AgendaEventListener.class );
+
+ ksession.addEventListener( wml );
+ ksession.addEventListener( ael );
+
+ int fired = ksession.fireAllRules();
+ assertEquals( 3,
+ fired );
+
+ // capture the arguments and check that the rules fired in the proper sequence
+ ArgumentCaptor<org.drools.event.rule.AfterActivationFiredEvent> actvs = ArgumentCaptor.forClass(org.drools.event.rule.AfterActivationFiredEvent.class);
+ verify( ael, times(3) ).afterActivationFired( actvs.capture() );
+ List<org.drools.event.rule.AfterActivationFiredEvent> values = actvs.getAllValues();
+ assertThat( values.get( 0 ).getActivation().getRule().getName(), is( "init" ) );
+ assertThat( values.get( 1 ).getActivation().getRule().getName(), is( "r1" ) );
+ assertThat( values.get( 2 ).getActivation().getRule().getName(), is( "r2" ) );
+
+ verify( ael, never() ).activationCancelled( any( org.drools.event.rule.ActivationCancelledEvent.class ) );
+ verify( wml, times(2) ).objectInserted( any( org.drools.event.rule.ObjectInsertedEvent.class ) );
+ verify( wml, never() ).objectRetracted( any( org.drools.event.rule.ObjectRetractedEvent.class ) );
+ }
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleChaining.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleChaining.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleChaining.drl 2010-06-23 16:06:29 UTC (rev 33607)
@@ -0,0 +1,39 @@
+package com.sample
+
+declare Some
+ field : int
+end
+
+rule "init"
+salience 9999
+ dialect "mvel"
+ when
+ then
+ with( s0 = new Some() ) {
+ field = 0
+ }
+ insertLogical(s0);
+ with( s1 = new Some() ) {
+ field = 1
+ }
+ insertLogical(s1);
+end
+
+
+rule "r1"
+salience 100
+when
+ Some( field == 0 )
+ Some( $f : field == 1)
+then
+ // noop
+end
+
+
+rule "r2"
+salience 10
+when
+ $s : Some( $f : field == 0 )
+then
+ // noop
+end
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2010-06-23 13:43:46 UTC (rev 33606)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2010-06-23 16:06:29 UTC (rev 33607)
@@ -102,6 +102,10 @@
this.rule = agendaItem.getRule();
this.subrule = agendaItem.getSubRule();
this.activation = agendaItem;
+ // -- JBRULES-2558: logical inserts must be properly preserved
+ this.previousJustified = agendaItem.getLogicalDependencies();
+ agendaItem.setLogicalDependencies( null );
+ // -- JBRULES-2558: end
this.tuple = agendaItem.getTuple();
}
@@ -137,11 +141,6 @@
public void insertLogical(final Object object,
final boolean dynamic) throws FactException {
- if ( this.previousJustified == null ) {
- this.previousJustified = this.activation.getLogicalDependencies();
- this.activation.setLogicalDependencies( null );
- }
-
// iterate to find previous equal logical insertion
LogicalDependency dep = null;
if ( this.previousJustified != null ) {
@@ -151,8 +150,6 @@
break;
}
}
-
-
}
if ( dep != null ) {
More information about the jboss-svn-commits
mailing list