[jboss-svn-commits] JBL Code SVN: r32946 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 18 23:22:33 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-05-18 23:22:33 -0400 (Tue, 18 May 2010)
New Revision: 32946

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
JBRULES-2240 True modify
-Self Joins had bad index lookup, when seeing if the bucket had changed, if the index value had changed. Use lookup by reference, rather than value. Added integration test.

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	2010-05-19 02:35:37 UTC (rev 32945)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-05-19 03:22:33 UTC (rev 32946)
@@ -4715,7 +4715,53 @@
         assertEquals( 0,
                       results.size() );
     }
+    
+    public void testSelfJoinWithIndex() {
+        String drl = "";
+        drl += "package org.test\n";
+        drl += "import org.drools.Person\n";
+        drl += "global java.util.List list\n";
+        drl += "rule test1\n";
+        drl += "when\n";
+        drl += "   $p1 : Person( $name : name, $age : age )\n";
+        drl += "   $p2 : Person( name == $name, age < $age)\n";
+        drl += "then\n";
+        drl += "    list.add( $p1 );\n";
+        drl += "end\n";
 
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newReaderResource( new StringReader( drl ) ),
+                      ResourceType.DRL );
+        KnowledgeBuilderErrors errors = kbuilder.getErrors();
+        if ( errors.size() > 0 ) {
+            for ( KnowledgeBuilderError error : errors ) {
+                System.err.println( error );
+            }
+            throw new IllegalArgumentException( "Could not parse knowledge." );
+        }
+        assertFalse( kbuilder.hasErrors() );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        
+        List list = new ArrayList();
+        ksession.setGlobal( "list", list );
+        
+        Person p1 = new Person("darth", 30);
+        org.drools.runtime.rule.FactHandle fh1 = ksession.insert( p1 );
+
+        Person p2 = new Person("darth", 25);
+        org.drools.runtime.rule.FactHandle fh2 = ksession.insert( p2 ); // creates activation.
+        
+        p1.setName( "yoda" );
+        ksession.update( fh1, p1 );  // creates activation
+              
+        ksession.fireAllRules();
+        
+        assertEquals( 0, list.size() );
+    }
+
     public void testMergingDifferentPackages() throws Exception {
         // using the same builder
         try {



More information about the jboss-svn-commits mailing list