[jboss-svn-commits] JBL Code SVN: r6729 - in labs/jbossrules/branches/3.0.x: drools-compiler/src/test/java/org/drools/integrationtests drools-compiler/src/test/resources/org/drools/integrationtests drools-core/src/main/java/org/drools/reteoo
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 10 14:53:06 EDT 2006
Author: tirelli
Date: 2006-10-10 14:52:45 -0400 (Tue, 10 Oct 2006)
New Revision: 6729
Added:
labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Assert_Retract_Noloop.drl
Modified:
labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
Log:
JBRULES-506:
* Fixing a noloop issue.
* Integration test added.
Modified: labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-10-10 16:58:28 UTC (rev 6728)
+++ labs/jbossrules/branches/3.0.x/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-10-10 18:52:45 UTC (rev 6729)
@@ -39,6 +39,7 @@
import org.drools.Cheese;
import org.drools.CheeseEqual;
import org.drools.Cheesery;
+import org.drools.FactException;
import org.drools.FactHandle;
import org.drools.IndexedNumber;
import org.drools.Person;
@@ -2860,5 +2861,33 @@
}
+
+ public void testAssertRetractNoloop() {
+ try {
+ //read in the source
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Assert_Retract_Noloop.drl" ) );
+ final DrlParser parser = new DrlParser();
+ final PackageDescr packageDescr = parser.parse( reader );
+ //pre build the package
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackage( packageDescr );
+ final Package pkg = builder.getPackage();
+
+ //add the package to a rulebase
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ //load up the rulebase
+
+ final WorkingMemory wm = ruleBase.newWorkingMemory();
+ wm.assertObject( new Cheese("stilton", 15) );
+
+ wm.fireAllRules();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ fail("test should not throw exception");
+ }
+ }
+
+
}
Added: labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Assert_Retract_Noloop.drl
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Assert_Retract_Noloop.drl 2006-10-10 16:58:28 UTC (rev 6728)
+++ labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Assert_Retract_Noloop.drl 2006-10-10 18:52:45 UTC (rev 6729)
@@ -0,0 +1,25 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+rule "test1"
+ salience 10
+ no-loop true
+ when
+ cheese : Cheese();
+ then
+ retract(cheese);
+ assert(cheese);
+end;
+
+
+rule "test2"
+ salience 0
+ no-loop true
+ when
+ cheese : Cheese();
+ then
+ retract(cheese);
+end;
+
+
Property changes on: labs/jbossrules/branches/3.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Assert_Retract_Noloop.drl
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ native
Modified: labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java
===================================================================
--- labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-10-10 16:58:28 UTC (rev 6728)
+++ labs/jbossrules/branches/3.0.x/drools-core/src/main/java/org/drools/reteoo/TerminalNode.java 2006-10-10 18:52:45 UTC (rev 6729)
@@ -213,14 +213,18 @@
final PropagationContext context,
final ReteooWorkingMemory workingMemory) {
final Activation activation = tuple.getActivation();
- if ( activation.isActivated() ) {
- activation.remove();
- workingMemory.getAgendaEventSupport().fireActivationCancelled( activation );
+ // a noloop attribute in the rule may cause an activation to never be
+ // created, so we need to check for null activation here.
+ if( activation != null ) {
+ if ( activation.isActivated() ) {
+ activation.remove();
+ workingMemory.getAgendaEventSupport().fireActivationCancelled( activation );
+ }
+
+ workingMemory.getTruthMaintenanceSystem().removeLogicalDependencies( activation,
+ context,
+ this.rule );
}
-
- workingMemory.getTruthMaintenanceSystem().removeLogicalDependencies( activation,
- context,
- this.rule );
}
public void modifyTuple(final ReteTuple tuple,
More information about the jboss-svn-commits
mailing list