[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