Index: drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java =================================================================== --- drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java (revision 5521) +++ drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java (working copy) @@ -58,12 +58,6 @@ import org.drools.compiler.PackageBuilderConfiguration; import org.drools.compiler.ParserError; import org.drools.compiler.RuleError; -import org.drools.event.ActivationCancelledEvent; -import org.drools.event.ActivationCreatedEvent; -import org.drools.event.AfterActivationFiredEvent; -import org.drools.event.AgendaEventListener; -import org.drools.event.BeforeActivationFiredEvent; -import org.drools.event.DefaultAgendaEventListener; import org.drools.facttemplates.Fact; import org.drools.facttemplates.FactTemplate; import org.drools.integrationtests.helloworld.Message; @@ -2715,4 +2709,39 @@ assertEquals(1, list.size() ); } + public void testExists387() throws Exception { + final PackageBuilder builder = new PackageBuilder(); + builder.addPackageFromDrl( new InputStreamReader( + getClass().getResourceAsStream( "test_Exists387.drl" ) ) ); + final Package pkg = builder.getPackage(); + + final RuleBase ruleBase = getRuleBase(); + ruleBase.addPackage( pkg ); + final WorkingMemory workingMemory = ruleBase.newWorkingMemory(); + + Person p1 = new Person( "p1", "stilton", 20 ); + p1.setStatus("europe"); + workingMemory.assertObject( p1 ); + Person p2 = new Person( "p2", "stilton", 30 ); + p2.setStatus("europe"); + FactHandle c2FactHandle = workingMemory.assertObject( p2 ); + Person p3 = new Person( "p3", "stilton", 40 ); + p3.setStatus("europe"); + workingMemory.assertObject( p3 ); + workingMemory.fireAllRules(); + + List cheeseList = workingMemory.getObjects( Cheese.class ); + assertEquals( 2, cheeseList.size() ); + + p2.setStatus("america"); + workingMemory.modifyObject( c2FactHandle, p2 ); + workingMemory.fireAllRules(); + + cheeseList = workingMemory.getObjects( Cheese.class ); + // cheeseList still contains a cheese for the person with a age of 30 + // but that should have been logically retracted + assertEquals( 1, cheeseList.size() ); + + } + } Index: drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists387.drl =================================================================== --- drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists387.drl (revision 0) +++ drools-compiler/src/test/resources/org/drools/integrationtests/test_Exists387.drl (revision 0) @@ -0,0 +1,12 @@ +package com.sample + +import org.drools.Cheese +import org.drools.Person + +rule "Supply cheese for every 2 persons with the same status" + when + p : Person($status : status, $age : age) + exists Person(status == $status, age > $age); + then + assertLogical(new Cheese("Cheese for person with age " + $age, 10)); +end \ No newline at end of file