[jboss-svn-commits] JBL Code SVN: r14284 - in labs/jbossrules/trunk/drools-compiler/src/test: java/org/drools/integrationtests and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 15 22:52:25 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-08-15 22:52:25 -0400 (Wed, 15 Aug 2007)
New Revision: 14284

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SpecialString.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedCorrelatedRulesWithForall.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
Log:
JBRULES-1085 Rule fires before calling fireAllRules
-Added unit test to show this stuff works

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SpecialString.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SpecialString.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/SpecialString.java	2007-08-16 02:52:25 UTC (rev 14284)
@@ -0,0 +1,17 @@
+package org.drools;
+
+public class SpecialString {
+    private String text;
+
+    public SpecialString(String text) {
+        this.text = text;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public String toString() {
+        return (getText() + "[" + super.toString() + "]");
+    }
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-08-16 02:22:38 UTC (rev 14283)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-08-16 02:52:25 UTC (rev 14284)
@@ -18,7 +18,9 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
+import org.drools.SpecialString;
 import org.drools.State;
+import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
@@ -641,5 +643,67 @@
         Assert.assertEquals( 6,
                              ((List)results.get(0)).size() );
     }
+    
+    public void testNestedCorelatedRulesWithForall() throws Exception {
 
+        PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( FirstOrderLogicTest.class.getResourceAsStream( "test_NestedCorrelatedRulesWithForall.drl" ) ) );
+
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        rb.addPackage( builder.getPackage() );
+        StatefulSession session = rb.newStatefulSession();
+
+        List list1 = new ArrayList();
+        List list2 = new ArrayList();
+        List list3 = new ArrayList();
+        List list4 = new ArrayList();
+
+        session.setGlobal( "list1",
+                           list1 );
+        session.setGlobal( "list2",
+                           list2 );
+        session.setGlobal( "list3",
+                           list3 );
+        session.setGlobal( "list4",
+                           list4 );
+
+        SpecialString first42 = new SpecialString( "42" );
+        SpecialString second42 = new SpecialString( "42" );
+        SpecialString world = new SpecialString( "World" );
+
+        System.out.println( "Inserting ..." );
+
+        session.insert( world );
+        session.insert( first42 );
+        session.insert( second42 );
+
+        System.out.println( "Done." );
+
+        System.out.println( "Firing rules ..." );
+        
+        // check all lists are empty
+        assertTrue( list1.isEmpty() );
+        assertTrue( list2.isEmpty() );
+        assertTrue( list3.isEmpty() );
+        assertTrue( list4.isEmpty() );
+
+        session.fireAllRules();
+
+        System.out.println( "Done." );
+        
+        // check first list is populated correctly
+        assertEquals(2, list1.size() );
+        assertTrue( list1.contains( first42 ));
+        assertTrue( list1.contains( second42 ));
+
+        // check second list is populated correctly        
+        assertEquals(1, list2.size() );
+        
+        // check third list is populated correctly        
+        assertEquals(1, list3.size() );
+        
+        // check fourth list is populated correctly        
+        assertEquals(0, list4.size() );        
+    }    
+
 }

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedCorrelatedRulesWithForall.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedCorrelatedRulesWithForall.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedCorrelatedRulesWithForall.drl	2007-08-16 02:52:25 UTC (rev 14284)
@@ -0,0 +1,45 @@
+package org.test
+
+import org.drools.SpecialString
+import java.util.List
+
+global List list1;
+global List list2;
+global List list3;
+global List list4;
+
+rule "Strange rule1"
+when
+    x : SpecialString() and
+    forall( y : SpecialString(this != x)
+                SpecialString(this == y, text == "World") )
+then
+    list1.add( x );
+end 
+
+rule "Strange rule2"
+when
+    exists(x : SpecialString() and
+                forall( y : SpecialString(this != x)
+                            SpecialString(this == y, text == "World") ) )
+then
+    list2.add( "true" );
+end 
+
+rule "Strange rule3"
+when
+    not( exists(x : SpecialString() and
+                forall( y : SpecialString(this != x)
+                            SpecialString(this == y, text == "Universe") ) ) )
+then
+    list3.add( "true" );
+end 
+
+rule "Strange rule4"
+when
+    not( exists(x : SpecialString() and
+                forall( y : SpecialString(this != x)
+                            SpecialString(this == y ) ) ) )
+then
+    list4.add( "true" );
+end 
\ No newline at end of file




More information about the jboss-svn-commits mailing list