[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