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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 16 00:31:55 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-01-16 00:31:54 -0500 (Fri, 16 Jan 2009)
New Revision: 24747

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java
Log:
JBRULES-1719 EvalConditionNode removal throws ClassCastException

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2009-01-16 04:46:05 UTC (rev 24746)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2009-01-16 05:31:54 UTC (rev 24747)
@@ -264,7 +264,7 @@
         
         if ( !this.isInUse() ) {
             for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
-                BetaMemory memory = ( BetaMemory ) workingMemories[i].getNodeMemory( this );
+                EvalMemory memory = ( EvalMemory ) workingMemories[i].getNodeMemory( this );
                 Iterator it = memory.getLeftTupleMemory().iterator();
                 for ( LeftTuple leftTuple = (LeftTuple) it.next(); leftTuple != null; leftTuple = (LeftTuple) it.next() ) {
                     leftTuple.unlinkFromLeftParent();
@@ -343,6 +343,10 @@
 
         }
 
+        public LeftTupleList getLeftTupleMemory() {
+            return this.tupleMemory;
+        }
+
         public EvalMemory(final boolean tupleMemoryEnabled,
                           final Object context) {
             this.context = context;

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java	2009-01-16 04:46:05 UTC (rev 24746)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/EvalConditionNodeTest.java	2009-01-16 05:31:54 UTC (rev 24747)
@@ -20,6 +20,7 @@
 import org.drools.FactException;
 import org.drools.RuleBaseFactory;
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalWorkingMemory;
 import org.drools.common.PropagationContextImpl;
 import org.drools.reteoo.EvalConditionNode.EvalMemory;
 import org.drools.reteoo.builder.BuildContext;
@@ -311,4 +312,66 @@
         assertLength( 1,
                       sink2.getAsserted() );
     }
+    
+    /**
+     * If a eval allows an incoming Object, then the Object MUST be
+     * propagated. This tests that the memory is updated
+     * 
+     * @throws FactException
+     */
+    public void testDoRemove() throws FactException {
+        final MockEvalCondition eval = new MockEvalCondition( true );
+        
+        final EvalConditionNode parent = new EvalConditionNode( 1,
+                                                              new MockTupleSource( 15 ),
+                                                              eval,
+                                                              buildContext );
+
+        // Create a test node that always returns false 
+        final EvalConditionNode node = new EvalConditionNode( 2,
+                                                              parent,
+                                                              eval,
+                                                              buildContext );
+        
+        parent.addTupleSink( node );
+
+        final MockLeftTupleSink sink = new MockLeftTupleSink();
+        node.addTupleSink( sink );
+
+        // Create the Tuple
+        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
+                                                            "stilton" );
+        final LeftTuple tuple0 = new LeftTuple( f0, sink,
+                                                true );
+
+        // Tuple should pass and propagate 
+        node.assertLeftTuple( tuple0,
+                          this.context,
+                          this.workingMemory );
+
+        // Check memory was populated
+        EvalMemory memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
+
+        assertEquals( 1,
+                      memory.tupleMemory.size() );
+
+        assertTrue( memory.tupleMemory.contains( tuple0 ) );
+
+        // make sure assertions were propagated
+        assertEquals( 1,
+                      sink.getAsserted().size() );
+        
+        RuleRemovalContext removalContext = new RuleRemovalContext();
+        InternalWorkingMemory[] workingMemories = new InternalWorkingMemory[] { this.workingMemory};
+        
+        // This use to throw ClassCastException JBRULES-1719
+        node.remove( removalContext, this.ruleBase.getReteooBuilder(), sink,  workingMemories);       
+        
+        memory = (EvalMemory) this.workingMemory.getNodeMemory( node );
+
+        assertEquals( 0,
+                      memory.tupleMemory.size() );
+
+        assertFalse( memory.tupleMemory.contains( tuple0 ) );
+    }    
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list