[jboss-svn-commits] JBL Code SVN: r34551 - in labs/jbossrules/trunk/drools-core/src: test/java/org/drools/reteoo/test/dsl and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 5 12:58:48 EDT 2010


Author: tirelli
Date: 2010-08-05 12:58:47 -0400 (Thu, 05 Aug 2010)
New Revision: 34551

Added:
   labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest2.nodeTestCase
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/dsl/ExistsNodeStep.java
   labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeAssertRetractTest.nodeTestCase
   labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeIndexTest.nodeTestCase
   labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest.nodeTestCase
   labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/NotNodeModifyTest2.nodeTestCase
Log:
JBRULES-2614: Fixing ExistsNode modifyLeftTuple method to properly propagate modify WMAs

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2010-08-05 16:58:47 UTC (rev 34551)
@@ -345,33 +345,33 @@
                     break;
                 }
             }
+        }
 
-            if ( leftTuple.getBlocker() == null ) {
-                // not blocked
-                memory.getLeftTupleMemory().add( leftTuple ); // add to memory so other fact handles can attempt to match                    
+        if ( leftTuple.getBlocker() == null ) {
+            // not blocked
+            memory.getLeftTupleMemory().add( leftTuple ); // add to memory so other fact handles can attempt to match                    
 
-                if ( leftTuple.firstChild != null ) {
-                    // with previous children, retract
-                    this.sink.propagateRetractLeftTuple( leftTuple,
-                                                         context,
-                                                         workingMemory );
-                }
-                // with no previous children. do nothing.
-            } else if ( leftTuple.firstChild == null ) {
-                // blocked, with no previous children, assert
-                this.sink.propagateAssertLeftTuple( leftTuple,
-                                                    context,
-                                                    workingMemory,
-                                                    true );
-            } else {
-                // blocked, with previous children, modify
-                this.sink.propagateModifyChildLeftTuple( leftTuple,
-                                                         context,
-                                                         workingMemory,
-                                                         true );
+            if ( leftTuple.firstChild != null ) {
+                // with previous children, retract
+                this.sink.propagateRetractLeftTuple( leftTuple,
+                                                     context,
+                                                     workingMemory );
             }
+            // with no previous children. do nothing.
+        } else if ( leftTuple.firstChild == null ) {
+            // blocked, with no previous children, assert
+            this.sink.propagateAssertLeftTuple( leftTuple,
+                                                context,
+                                                workingMemory,
+                                                true );
+        } else {
+            // blocked, with previous children, modify
+            this.sink.propagateModifyChildLeftTuple( leftTuple,
+                                                     context,
+                                                     workingMemory,
+                                                     true );
         }
-
+        
         this.constraints.resetTuple( memory.getContext() );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/dsl/ExistsNodeStep.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/dsl/ExistsNodeStep.java	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/test/dsl/ExistsNodeStep.java	2010-08-05 16:58:47 UTC (rev 34551)
@@ -17,6 +17,7 @@
 package org.drools.reteoo.test.dsl;
 
 import java.beans.IntrospectionException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -29,7 +30,9 @@
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.BehaviorManager;
 import org.drools.rule.Declaration;
+import org.drools.rule.Pattern;
 import org.drools.spi.BetaNodeFieldConstraint;
+import org.mockito.Mockito;
 
 public class ExistsNodeStep
     implements
@@ -53,28 +56,37 @@
 
             LeftTupleSource leftTupleSource;
             if ( "mock".equals( leftInput ) ) {
-                leftTupleSource = new MockTupleSource( buildContext.getNextId() );
+                leftTupleSource = Mockito.mock( LeftTupleSource.class );
             } else {
                 leftTupleSource = (LeftTupleSource) context.get( leftInput );
             }
 
             ObjectSource rightObjectSource;
             if ( "mock".equals( rightInput ) ) {
-                rightObjectSource = new MockObjectSource( buildContext.getNextId() );
+                rightObjectSource = Mockito.mock( ObjectSource.class );
             } else {
                 rightObjectSource = (ObjectSource) context.get( rightInput );
             }
 
             a = args.get( 1 );
-            String fieldName = a[0].trim();
-            String operator = a[1].trim();
-            String var = a[2].trim();
+            String type = a[0].trim();
+            String fieldName = a[1].trim();
+            String operator = a[2].trim();
+            String var = a[3].trim();
 
+            Pattern rightSidePattern = null;
+            try {
+                rightSidePattern = reteTesterHelper.getPattern( 1,
+                                                                type );
+            } catch ( Exception e ) {
+                throw new IllegalArgumentException( "Not possible to process arguments: "+Arrays.toString( a ));
+            }
+            
             Declaration declr = (Declaration) context.get( var );
 
             BetaNodeFieldConstraint betaConstraint;
             try {
-                betaConstraint = this.reteTesterHelper.getBoundVariableConstraint( declr.getPattern(),
+                betaConstraint = this.reteTesterHelper.getBoundVariableConstraint( rightSidePattern,
                                                                                    fieldName,
                                                                                    declr,
                                                                                    operator );

Modified: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeAssertRetractTest.nodeTestCase
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeAssertRetractTest.nodeTestCase	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeAssertRetractTest.nodeTestCase	2010-08-05 16:58:47 UTC (rev 34551)
@@ -13,7 +13,7 @@
 	     p1, 0, org.drools.Person, age;
 	ExistsNode:
 	    exists1, lian1, otnRight1;
-	    age, !=, p1;
+	    org.drools.Person, age, !=, p1;
 	JoinNode:
 	    join2, exists1, otnRight2;
 	    age, !=, p1;

Modified: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeIndexTest.nodeTestCase
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeIndexTest.nodeTestCase	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeIndexTest.nodeTestCase	2010-08-05 16:58:47 UTC (rev 34551)
@@ -13,7 +13,7 @@
 	     p1, 0, org.drools.Person, age;
 	ExistsNode:
 	    not1, lian1, otnRight1;
-	    age, ==, p1;
+	    org.drools.Person, age, ==, p1;
 	JoinNode:
 	    join2, not1, otnRight2;
 	    age, ==, p1;

Modified: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest.nodeTestCase
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest.nodeTestCase	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest.nodeTestCase	2010-08-05 16:58:47 UTC (rev 34551)
@@ -13,7 +13,7 @@
 	     p1, 0, org.drools.Person, age;
 	ExistsNode:
 	    not1, lian1, otnRight1;
-	    age, !=, p1;
+	    org.drools.Person, age, !=, p1;
 	JoinNode:
 	    join2, not1, otnRight2;
 	    age, !=, p1;

Added: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest2.nodeTestCase
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest2.nodeTestCase	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest2.nodeTestCase	2010-08-05 16:58:47 UTC (rev 34551)
@@ -0,0 +1,43 @@
+TestCase "Exists node modify test 2"
+
+import org.drools.Cheese;
+import org.drools.Person;
+
+Setup
+	Binding:
+	    $likes, 0, Person, likes;
+	ExistsNode:
+	    exists, mock, mock;
+	    Cheese, type, ==, $likes;
+	LeftTupleSink:
+	    sink, exists;
+	Facts:
+	    new Person('darth', 35, "brie"),     // h0     
+	    new Person('bobba', 36, 'stilton'),  // h1
+	    new Cheese('brie', 10),              // h2
+	    new Cheese('brie', 12),              // h3
+	    new Cheese('stilton', 15),           // h4
+	    new Cheese('brie', 12);              // h5
+
+Test "exists node test 1 left, 1 right and modify"	     
+	assert:
+	    exists, [[h0]];
+	exists:
+	    leftMemory, [[h0]]; 
+	    rightMemory, [];
+    assert:	    
+	    exists, [h2];
+	exists:
+	    leftMemory, []; // h0 was blocked by h2, so it was removed from the node memory 
+	    rightMemory, [h2];    
+    sink:
+	    verify, assertLeft, count, 1;
+	    verify, assertLeft, tuple0, isTuple( [h0] );
+	    verify, modifyLeft, count, 0;
+	modify:
+	    exists, [[h0]];
+    sink:
+	    verify, assertLeft, count, 1; // still 1
+	    verify, modifyLeft, count, 1; // modify was propagated
+	    verify, modifyLeft, tuple0, isTuple( [h0] );
+	    


Property changes on: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/ExistsNodeModifyTest2.nodeTestCase
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/NotNodeModifyTest2.nodeTestCase
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/NotNodeModifyTest2.nodeTestCase	2010-08-05 15:06:43 UTC (rev 34550)
+++ labs/jbossrules/trunk/drools-core/src/test/resources/org/drools/reteoo/test/NotNodeModifyTest2.nodeTestCase	2010-08-05 16:58:47 UTC (rev 34551)
@@ -9,8 +9,8 @@
 	LeftTupleSink:
 	    sink, not;
 	Facts:
-	    new Person('darth', 35),  // h0 
-	    new Person('bobba', 35),  // h1
+	    new Person('darth', 35, "brie"),  // h0 
+	    new Person('bobba', 35, "stilton"),  // h1
 	    new Cheese('stilton', 10); // h2
 	
 /**        
@@ -42,3 +42,21 @@
 	    verify, retractLeft, count, 1; 
 	    verify, modifyLeft, count, 0; // not node does not propagate a modify from the right  
 	    
+Test "not node test 1 left and modify"	     
+	assert:
+	    not, [[h0]];
+	not:
+	    leftMemory, [[h0]]; 
+	    rightMemory, [];
+    sink:
+	    verify, assertLeft, count, 1;
+	    verify, assertLeft, tuple0, isTuple( [h0] );
+	    verify, modifyLeft, count, 0;
+	modify:
+	    not, [[h0]];
+    sink:
+	    verify, assertLeft, count, 1; // still 1
+	    verify, modifyLeft, count, 1; // modify was propagated
+	    verify, modifyLeft, tuple0, isTuple( [h0] );
+	    
+	    
\ No newline at end of file



More information about the jboss-svn-commits mailing list