[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