[jboss-svn-commits] JBL Code SVN: r29434 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 22 11:13:04 EDT 2009
Author: tirelli
Date: 2009-09-22 11:13:03 -0400 (Tue, 22 Sep 2009)
New Revision: 29434
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleExtend.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
Log:
JBRULES-2282: fixing bug when using variables bound in parent rules in the rule's consequence
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2009-09-22 13:55:53 UTC (rev 29433)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2009-09-22 15:13:03 UTC (rev 29434)
@@ -697,8 +697,7 @@
DeclarationScopeResolver resolver = ((RuleBuildContext) context).getDeclarationResolver();
for ( Iterator it = list[0].iterator(); it.hasNext(); ) {
String identifier = (String) it.next();
- Class cls = resolver.getDeclaration( null,
- identifier ).getExtractor().getExtractToClass();
+ Class cls = resolver.getDeclarationClasses( ((RuleBuildContext)context).getRule() ).get( identifier );
parserContext.addInput( identifier,
cls );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-09-22 13:55:53 UTC (rev 29433)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-09-22 15:13:03 UTC (rev 29434)
@@ -157,7 +157,7 @@
/** Run all the tests with the ReteOO engine implementation */
public class MiscTest extends TestCase {
-
+
private final Mockery context = new Mockery();
protected RuleBase getRuleBase() throws Exception {
@@ -1385,14 +1385,13 @@
FactHandle handle = session.insert( mycheese );
session.fireAllRules();
//System.out.println(((List) session.getGlobal( "list" )).toString());
- assertEquals( 2,
+ assertEquals( 2,
((List) session.getGlobal( "list" )).size() );
assertEquals( "rule 4",
- ((List) session.getGlobal( "list" )).get( 0 ) );
+ ((List) session.getGlobal( "list" )).get( 0 ) );
assertEquals( "rule 2b",
((List) session.getGlobal( "list" )).get( 1 ) );
-
//Test 2nd level (parent) to make sure rule honors the extend rule
final List list2 = new ArrayList();
session.setGlobal( "list",
@@ -1447,6 +1446,51 @@
}
+ public void testExtends2() {
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ try {
+ kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_RuleExtend.drl" ) ),
+ ResourceType.DRL );
+
+ assertFalse( kbuilder.getErrors().toString(),
+ kbuilder.hasErrors() );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ final List results = new ArrayList();
+ ksession.setGlobal( "results",
+ results );
+
+ final Cheese stilton = new Cheese( "stilton",
+ 5 );
+ final Cheese cheddar = new Cheese( "cheddar",
+ 7 );
+ final Cheese brie = new Cheese( "brie",
+ 5 );
+
+ ksession.insert( stilton );
+ ksession.insert( cheddar );
+ ksession.insert( brie );
+
+ ksession.fireAllRules();
+
+ assertEquals( 2,
+ results.size() );
+ assertEquals( "stilton",
+ results.get( 0 ) );
+ assertEquals( "brie",
+ results.get( 1 ) );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ if( kbuilder.hasErrors() )
+ System.out.println( kbuilder.getErrors() );
+ fail("Unexpected exception: "+e.getMessage());
+ }
+ }
+
public void testLatinLocale() throws Exception {
Locale defaultLoc = Locale.getDefault();
@@ -4397,19 +4441,21 @@
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_ConstraintConnectorOr.drl" ) ),
ResourceType.DRL );
- assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
-
+ assertFalse( kbuilder.getErrors().toString(),
+ kbuilder.hasErrors() );
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List<Person> results = new ArrayList<Person>();
- ksession.setGlobal( "results", results );
+ ksession.setGlobal( "results",
+ results );
final Person mark = new Person( "Mark" );
mark.setAlive( true );
mark.setHappy( true );
-
+
final Person bush = new Person( "Bush" );
bush.setAlive( true );
bush.setHappy( false );
@@ -4417,19 +4463,20 @@
final Person conan = new Person( "Conan" );
conan.setAlive( false );
conan.setHappy( true );
-
+
final Person nero = new Person( "Nero" );
nero.setAlive( false );
nero.setHappy( false );
-
+
ksession.insert( mark );
ksession.insert( bush );
ksession.insert( conan );
ksession.insert( nero );
-
+
ksession.fireAllRules();
-
- assertEquals( 3, results.size() );
+
+ assertEquals( 3,
+ results.size() );
assertTrue( results.contains( mark ) );
assertTrue( results.contains( bush ) );
assertTrue( results.contains( conan ) );
@@ -6746,7 +6793,7 @@
public void testFireAllWhenFiringUntilHalt() {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
+
Runnable fireUntilHalt = new Runnable() {
public void run() {
ksession.fireUntilHalt();
@@ -6777,16 +6824,18 @@
} catch ( InterruptedException e ) {
}
boolean aliveT1 = t1.isAlive();
- if( t2.isAlive() ){
+ if ( t2.isAlive() ) {
t2.interrupt();
}
- if( t1.isAlive() ) {
+ if ( t1.isAlive() ) {
t1.interrupt();
}
- assertFalse( "T2 should have finished", aliveT2 );
- assertFalse( "T1 should have finished", aliveT1 );
+ assertFalse( "T2 should have finished",
+ aliveT2 );
+ assertFalse( "T1 should have finished",
+ aliveT1 );
}
-
+
public void testDroolsQueryCleanup() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryMemoryLeak.drl",
@@ -6899,16 +6948,16 @@
// Retrieve the generated fact type
FactType cheeseFact = kbase.getFactType( "org.drools.generatedbeans",
"Cheese" );
-
+
assertTrue( "Generated beans must be serializable",
- Serializable.class.isAssignableFrom( cheeseFact.getFactClass() ));
+ Serializable.class.isAssignableFrom( cheeseFact.getFactClass() ) );
// Create a new Fact instance
Object cheese = cheeseFact.newInstance();
cheeseFact.set( cheese,
"type",
"stilton" );
-
+
// another instance
Object cheese2 = cheeseFact.newInstance();
cheeseFact.set( cheese2,
@@ -6945,31 +6994,32 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
+
// creating listener as a jmock proxy
- final org.drools.event.rule.WorkingMemoryEventListener wmeListener = context.mock(org.drools.event.rule.WorkingMemoryEventListener.class);
-
- context.checking(new Expectations() {{
- exactly(2).of(wmeListener).objectInserted( with(any(org.drools.event.rule.ObjectInsertedEvent.class)) );
- }});
-
+ final org.drools.event.rule.WorkingMemoryEventListener wmeListener = context.mock( org.drools.event.rule.WorkingMemoryEventListener.class );
+
+ context.checking( new Expectations() {
+ {
+ exactly( 2 ).of( wmeListener ).objectInserted( with( any( org.drools.event.rule.ObjectInsertedEvent.class ) ) );
+ }
+ } );
+
ksession.addEventListener( wmeListener );
-
+
// listener will be notified of both facts insertion
- ksession.insert( new Cheese("stilton") );
+ ksession.insert( new Cheese( "stilton" ) );
ksession.insert( wmeListener );
-
+
// firing rules will remove listener
ksession.fireAllRules();
-
+
// inserting another object into the working memory, listener should NOT be notified,
// since it is no longer listening.
- ksession.insert( new Cheese("brie") );
+ ksession.insert( new Cheese( "brie" ) );
context.assertIsSatisfied();
}
}
-
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleExtend.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleExtend.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleExtend.drl 2009-09-22 15:13:03 UTC (rev 29434)
@@ -0,0 +1,24 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List results;
+
+rule "test A"
+ salience 10
+when
+ $a: Cheese ( type == "stilton" )
+then
+ results.add( $a.getType() );
+end
+
+rule "test B" extends "test A"
+when
+ $b: Cheese ( type == "cheddar" )
+ $c: Cheese ( type == "brie" )
+then
+ modify( $a ) {
+ setType( $c.getType() )
+ }
+ results.add( $a.getType() );
+end
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2009-09-22 13:55:53 UTC (rev 29433)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java 2009-09-22 15:13:03 UTC (rev 29434)
@@ -441,7 +441,7 @@
*/
public Declaration getDeclaration(final String identifier) {
if ( this.dirty || (this.declarations == null) ) {
- this.declarations = this.lhsRoot.getOuterDeclarations();
+ this.declarations = this.getExtendedLhs(this, null).getOuterDeclarations();
this.declarationArray = (Declaration[]) this.declarations.values().toArray( new Declaration[this.declarations.values().size()] );
this.dirty = false;
}
@@ -478,7 +478,7 @@
*/
public Declaration[] getDeclarations() {
if ( this.dirty || (this.declarationArray == null) ) {
- this.declarations = this.lhsRoot.getOuterDeclarations();
+ this.declarations = this.getExtendedLhs(this, null).getOuterDeclarations();
this.declarationArray = (Declaration[]) this.declarations.values().toArray( new Declaration[this.declarations.values().size()] );
this.dirty = false;
}
More information about the jboss-svn-commits
mailing list