[jboss-svn-commits] JBL Code SVN: r10872 - in labs/jbossrules/trunk/drools-compiler/src/test: resources/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Apr 10 19:26:14 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-04-10 19:26:14 -0400 (Tue, 10 Apr 2007)
New Revision: 10872

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyActivationCreationNoLoop.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl
Log:
JBRULES-787 no-loop blocks all dependant tuples for modify
-Added context.getActivationOrigin().getTuple().equals( tuple ) to the no-loop check

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-04-10 23:09:20 UTC (rev 10871)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-04-10 23:26:14 UTC (rev 10872)
@@ -67,6 +67,9 @@
 import org.drools.TestParam;
 import org.drools.WorkingMemory;
 import org.drools.Cheesery.Maturity;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.InternalWorkingMemoryActions;
+import org.drools.common.PropagationContextImpl;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsError;
 import org.drools.compiler.DroolsParserException;
@@ -97,8 +100,10 @@
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.ruleflow.common.instance.IProcessInstance;
+import org.drools.spi.Activation;
 import org.drools.spi.ActivationGroup;
 import org.drools.spi.AgendaGroup;
+import org.drools.spi.PropagationContext;
 import org.drools.xml.XmlDumper;
 
 /**
@@ -3585,7 +3590,59 @@
 
         wm.fireAllRules();
     }
+    
+    public void testModifyActivationCreationNoLoop() throws Exception {
+        // JBRULES-787, no-loop blocks all dependant tuples for modify 
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_ModifyActivationCreationNoLoop.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
 
+        final InternalWorkingMemoryActions wm = ( InternalWorkingMemoryActions ) ruleBase.newWorkingMemory();        
+        final List created = new ArrayList();
+        final List cancelled = new ArrayList();        
+        AgendaEventListener l = new DefaultAgendaEventListener() {
+            public void activationCreated(ActivationCreatedEvent event,
+                                          WorkingMemory workingMemory) {
+                created.add(  event  );
+            }            
+            
+          public void activationCancelled(ActivationCancelledEvent event,
+                                            WorkingMemory workingMemory) {
+              cancelled.add(  event  );
+            }
+          
+        };
+        
+        wm.addEventListener( l );        
+        
+        Cheese stilton = new Cheese( "stilton",
+                                     15 );
+        FactHandle stiltonHandle = wm.assertObject( stilton );
+        
+        Person p1 = new Person( "p1");
+        p1.setCheese( stilton );
+        wm.assertObject( p1 );
+
+        Person p2 = new Person( "p2");
+        p2.setCheese( stilton );
+        wm.assertObject( p2 );
+        
+        Person p3 = new Person( "p3");
+        p3.setCheese( stilton );
+        wm.assertObject( p3 );                
+
+        assertEquals( 3, created.size() );
+        assertEquals( 0, cancelled.size() );        
+
+        Activation item = ((ActivationCreatedEvent) created.get( 2 )).getActivation();
+        
+        // simulate a modify inside a consequence
+        wm.modifyObject( stiltonHandle, stilton, item.getRule(), item );
+        
+        // the two of the three tuples should re-activate
+        assertEquals( 5, created.size() );
+        assertEquals( 3, cancelled.size() );
+    }    
+
     public void testDoubleQueryWithExists() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DoubleQueryWithExists.drl" ) ) );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyActivationCreationNoLoop.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyActivationCreationNoLoop.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyActivationCreationNoLoop.drl	2007-04-10 23:26:14 UTC (rev 10872)
@@ -0,0 +1,15 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+import org.drools.Person;
+
+rule "test1"
+	no-loop true
+	when
+        cheese : Cheese( price == 15 )
+        $p : Person( cheese == cheese )
+    then
+
+end
+
+

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl	2007-04-10 23:09:20 UTC (rev 10871)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl	2007-04-10 23:26:14 UTC (rev 10872)
@@ -6,7 +6,7 @@
 	salience 10
 	no-loop true
 	when
-        cheese : Cheese( price == 15 );
+        cheese : Cheese( price == 15 )
     then
     	modify(cheese);
 end
@@ -16,7 +16,7 @@
 	salience 0
 	no-loop true
 	when
-        cheese : Cheese( price == 15 );
+        cheese : Cheese( price == 15 )
     then
     	cheese.setPrice( 14 );
 		modify(cheese);




More information about the jboss-svn-commits mailing list