[jboss-svn-commits] JBL Code SVN: r30914 - in labs/jbossrules/trunk/drools-compiler/src: main/resources/org/drools/rule/builder/dialect/java and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jan 4 16:38:47 EST 2010


Author: mark.proctor at jboss.com
Date: 2010-01-04 16:38:47 -0500 (Mon, 04 Jan 2010)
New Revision: 30914

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaDialectBinaryEqualityTest.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
Log:
JBRULES-2394 Equality checks for binary compiled parts fail
-Fixed equality check for Consequence
-Added unit test for all java rule binary parts.

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2010-01-04 17:59:15 UTC (rev 30913)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2010-01-04 21:38:47 UTC (rev 30914)
@@ -93,13 +93,11 @@
         }
 
         final Map<String, Object> map = createVariableContext( className,
-                                                               null,
+                                                               fixedConsequence,
                                                                context,
                                                                declarations,
                                                                null,
                                                                (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
-        map.put( "text",
-                 fixedConsequence );
 
         // Must use the rule declarations, so we use the same order as used in the generated invoker
         final List list = Arrays.asList( context.getRule().getDeclarations() );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2010-01-04 17:59:15 UTC (rev 30913)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2010-01-04 21:38:47 UTC (rev 30914)
@@ -132,7 +132,6 @@
             @end{","} );
     }
 
-
     @includeNamed{"hashCode"}
 
     @includeNamed{"getMethodBytecode"}
@@ -350,9 +349,12 @@
 	        @end{","} );
     }
     
-    public java.util.List getMethodBytecode() {
-        return null;
-    }    
+
+    @includeNamed{"hashCode"}
+
+    @includeNamed{"getMethodBytecode"}
+
+    @includeNamed{"equals"}
 }
 @end{}
 

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaDialectBinaryEqualityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaDialectBinaryEqualityTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaDialectBinaryEqualityTest.java	2010-01-04 21:38:47 UTC (rev 30914)
@@ -0,0 +1,171 @@
+package org.drools.rule.builder.dialect.java;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Person;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
+import org.drools.io.ResourceFactory;
+import org.drools.rule.EvalCondition;
+import org.drools.rule.Pattern;
+import org.drools.rule.PredicateConstraint;
+import org.drools.rule.ReturnValueConstraint;
+import org.drools.rule.Rule;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.spi.EvalExpression;
+import org.drools.spi.PredicateExpression;
+import org.drools.spi.ReturnValueExpression;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.hamcrest.Matchers.*;
+
+
+public class JavaDialectBinaryEqualityTest{
+    
+    @Test
+    public void test1() {
+        KnowledgePackage pkg1 = getKnowledgePackage1();
+        KnowledgePackage pkg2 = getKnowledgePackage1();
+        KnowledgePackage pkg3 = getKnowledgePackage2();
+        
+        Rule rule1 = ((KnowledgePackageImp)pkg1).pkg.getRule( "rule1" );
+        Rule rule2 = ((KnowledgePackageImp)pkg2).pkg.getRule( "rule1" );
+        Rule rule3 = ((KnowledgePackageImp)pkg3).pkg.getRule( "rule1" );               
+        
+        // test return value
+        Pattern p1 = ( Pattern ) rule1.getLhs().getChildren().get( 0 );
+        ReturnValueConstraint rvc1 = ( ReturnValueConstraint ) p1.getConstraints().get( 1 );
+        ReturnValueExpression rve1 = rvc1.getExpression();
+        
+        Pattern p2 = ( Pattern ) rule2.getLhs().getChildren().get( 0 );
+        ReturnValueConstraint rvc2 = ( ReturnValueConstraint ) p2.getConstraints().get( 1 );
+        ReturnValueExpression rve2 = rvc2.getExpression();
+        assertNotSame( rve1, rve2 );
+        assertEquals( rve1, rve2 );
+        
+        Pattern p3 = ( Pattern ) rule3.getLhs().getChildren().get( 0 );
+        ReturnValueConstraint rvc3 = ( ReturnValueConstraint ) p3.getConstraints().get( 1 );
+        ReturnValueExpression rve3 = rvc3.getExpression();                
+        assertNotSame( rve1, rve3 );
+        assertThat(rve1, not( equalTo( rve3 ) ) );
+        
+        // test inline eval
+        PredicateConstraint pc1 = ( PredicateConstraint )  p1.getConstraints().get( 2 );
+        PredicateExpression pe1 = ( PredicateExpression ) pc1.getPredicateExpression();
+
+        PredicateConstraint pc2 = ( PredicateConstraint )  p2.getConstraints().get( 2 );
+        PredicateExpression pe2 = ( PredicateExpression ) pc2.getPredicateExpression();
+        assertNotSame( pe1, pe2 );
+        assertEquals( pe1, pe2 );
+        
+        PredicateConstraint pc3 = ( PredicateConstraint )  p3.getConstraints().get( 2 );
+        PredicateExpression pe3 = ( PredicateExpression ) pc3.getPredicateExpression();        
+        assertNotSame( pe1, pe3 );
+        assertThat(pe1, not( equalTo( pe3 ) ) );
+        
+       // test inline eval
+        EvalCondition ec1 = ( EvalCondition ) rule1.getLhs().getChildren().get( 1 );
+        EvalExpression ee1 =( EvalExpression) ec1.getEvalExpression();
+
+        EvalCondition ec2 = ( EvalCondition ) rule2.getLhs().getChildren().get( 1 );
+        EvalExpression ee2 =( EvalExpression) ec2.getEvalExpression();
+        assertNotSame( ee1, ee2 );
+        assertEquals(ee1, ee2 );        
+        
+        EvalCondition ec3 = ( EvalCondition ) rule3.getLhs().getChildren().get( 1 );
+        EvalExpression ee3 =( EvalExpression) ec3.getEvalExpression();
+        assertNotSame( ee1,ee3 );
+        assertThat(ee1, not( equalTo( ee3 ) ) );        
+        
+        // test consequence
+        assertNotSame( rule1.getConsequence(), rule2.getConsequence() );
+        assertEquals(rule1.getConsequence(), rule2.getConsequence() );
+        assertNotSame( rule1.getConsequence(), rule3.getConsequence() );
+        assertThat(rule1.getConsequence(), not( equalTo( rule3.getConsequence() ) ) ); 
+        
+        // check LHS equals
+        assertNotSame(  rule1.getLhs(), rule2.getLhs() );
+        assertEquals( rule1.getLhs(), rule2.getLhs() );  
+        
+        assertNotSame( rule1.getLhs(), rule3.getLhs() );
+        assertThat(rule1.getLhs(), not( equalTo( rule3.getLhs() ) ) );         
+    }
+    
+    public KnowledgePackage getKnowledgePackage1() {
+      
+        String str = "";
+        str += "package org.drools\n";
+        str += "global java.util.List list\n";
+        str += "rule rule1 dialect\"java\" \n";
+        str += "when\n";
+        str += "   $p : Person( age : age == ( 17 + 17 ), eval( age == 34 ))\n";
+        str += "   eval( $p.getAge() == 34 )\n";
+        str += "then\n";
+        str += "   list.add( $p );\n";
+        str += "end\n";
+        
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+        
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        List list = new ArrayList();
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.setGlobal( "list", list );
+        ksession.insert( new Person("darth", 34) );
+        ksession.fireAllRules();
+        
+        assertEquals( new Person( "darth", 34 ), list.get( 0 ) );
+        
+        return kbase.getKnowledgePackage( "org.drools" );
+    }
+    
+    public KnowledgePackage getKnowledgePackage2() {
+        
+        String str = "";
+        str += "package org.drools\n";
+        str += "global java.util.List list\n";
+        str += "rule rule1 dialect\"java\" \n";
+        str += "when\n";
+        str += "   $p : Person( age : age == ( 18 + 18 ), eval( age == 36 ))\n";
+        str += "   eval( $p.getAge() == 36 )\n";
+        str += "then\n";
+        str += "   System.out.println( $p );\n";
+        str += "   list.add( $p );\n";
+        str += "end\n";
+        
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+        
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        List list = new ArrayList();
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.setGlobal( "list", list );
+        ksession.insert( new Person("darth", 36) );
+        ksession.fireAllRules();
+        
+        assertEquals( new Person( "darth", 36 ), list.get( 0 ) );
+        
+        return kbase.getKnowledgePackage( "org.drools" );
+    }    
+}



More information about the jboss-svn-commits mailing list