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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Apr 7 20:50:25 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-04-07 20:50:24 -0400 (Sat, 07 Apr 2007)
New Revision: 10815

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
Log:
JBRULES-780 no-loop results in NullPointer in RuleTerminalNode.retractTuple
-went with a tuple == null check for now, although I worry this might hide future errors

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-04-08 00:50:18 UTC (rev 10814)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2007-04-08 00:50:24 UTC (rev 10815)
@@ -174,7 +174,7 @@
         assertEquals( 1,
                       list.size() );
     }
-    
+
     public void testFactBindings() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FactBindings.drl" ) ) );
@@ -185,36 +185,43 @@
         ruleBase.addPackage( pkg );
 
         final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
-        
+
         final List events = new ArrayList();
         WorkingMemoryEventListener listener = new DefaultWorkingMemoryEventListener() {
-        	public void objectModified(ObjectModifiedEvent event) {
-        		events.add( event );
-        	}
+            public void objectModified(ObjectModifiedEvent event) {
+                events.add( event );
+            }
         };
-        
+
         workingMemory.addEventListener( listener );
 
-//        final List list = new ArrayList();
-//        workingMemory.setGlobal( "list",
-//                                 list );  
-        Person bigCheese = new Person("big cheese");
-        Cheese cheddar = new Cheese( "cheddar", 15 );
+        // final List list = new ArrayList();
+        // workingMemory.setGlobal( "list",
+        // list );
+        Person bigCheese = new Person( "big cheese" );
+        Cheese cheddar = new Cheese( "cheddar",
+                                     15 );
         bigCheese.setCheese( cheddar );
-        
+
         FactHandle bigCheeseHandle = workingMemory.assertObject( bigCheese );
         FactHandle cheddarHandle = workingMemory.assertObject( cheddar );
         workingMemory.fireAllRules();
-        
-        ObjectModifiedEvent event = ( ObjectModifiedEvent ) events.get( 0 );
-        assertSame( cheddarHandle, event.getFactHandle() );
-        assertSame( cheddar, event.getOldObject() );
-        assertSame( cheddar, event.getObject() );
-        
-        event = ( ObjectModifiedEvent ) events.get( 1 );
-        assertSame( bigCheeseHandle, event.getFactHandle() );
-        assertSame( bigCheese, event.getOldObject() );
-        assertSame( bigCheese, event.getObject() );        
+
+        ObjectModifiedEvent event = (ObjectModifiedEvent) events.get( 0 );
+        assertSame( cheddarHandle,
+                    event.getFactHandle() );
+        assertSame( cheddar,
+                    event.getOldObject() );
+        assertSame( cheddar,
+                    event.getObject() );
+
+        event = (ObjectModifiedEvent) events.get( 1 );
+        assertSame( bigCheeseHandle,
+                    event.getFactHandle() );
+        assertSame( bigCheese,
+                    event.getOldObject() );
+        assertSame( bigCheese,
+                    event.getObject() );
     }
 
     public void testNullHandling() throws Exception {
@@ -1745,7 +1752,7 @@
         final XmlDumper xmlDumper = new XmlDumper();
         final String xmlResult = xmlDumper.dump( pkg );
 
-        //System.out.println( xmlResult );
+        // System.out.println( xmlResult );
 
         builder = new PackageBuilder();
         builder.addPackageFromXml( new StringReader( xmlResult ) );
@@ -1968,12 +1975,12 @@
         final Cheesery cheesery1 = new Cheesery();
         cheesery1.setStatus( Cheesery.SELLING_CHEESE );
         cheesery1.setMaturity( Maturity.OLD );
-        workingMemory.assertObject( cheesery1);
-        
+        workingMemory.assertObject( cheesery1 );
+
         final Cheesery cheesery2 = new Cheesery();
-        cheesery2.setStatus( Cheesery.MAKING_CHEESE);
+        cheesery2.setStatus( Cheesery.MAKING_CHEESE );
         cheesery2.setMaturity( Maturity.YOUNG );
-        workingMemory.assertObject( cheesery2 );        
+        workingMemory.assertObject( cheesery2 );
 
         workingMemory.fireAllRules();
 
@@ -1983,7 +1990,7 @@
         assertEquals( cheesery1,
                       list.get( 0 ) );
         assertEquals( cheesery2,
-                      list.get( 1 ) );         
+                      list.get( 1 ) );
     }
 
     public void testDynamicRuleAdditions() throws Exception {
@@ -2753,7 +2760,7 @@
         workingMemory.assertObject( c3 );
         workingMemory.fireAllRules();
 
-        //  Check logical assertions where made for  c2 and c3
+        // Check logical assertions where made for c2 and c3
         list = workingMemory.getObjects( Person.class );
         assertEquals( 2,
                       list.size() );
@@ -2770,7 +2777,7 @@
 
         workingMemory.fireAllRules();
 
-        // check all now have just one logical assertion  each
+        // check all now have just one logical assertion each
         list = workingMemory.getObjects( Person.class );
         assertEquals( 3,
                       list.size() );
@@ -2778,7 +2785,7 @@
         assertTrue( list.contains( new Person( c2.getType() ) ) );
         assertTrue( list.contains( new Person( c3.getType() ) ) );
 
-        // check the packages  are correctly populated
+        // check the packages are correctly populated
         assertEquals( "org.drools.test",
                       ruleBase.getPackages()[0].getName() );
         assertEquals( "org.drools.test2",
@@ -2797,7 +2804,7 @@
             // ruleBase.getPackages()[0].getRules()[0].getName() );
         }
 
-        //  Check the rule was correctly remove
+        // Check the rule was correctly remove
         assertEquals( 0,
                       ruleBase.getPackages()[0].getRules().length );
         assertEquals( 1,
@@ -3233,7 +3240,7 @@
         final RuleBase ruleBase = loadRuleBase( reader );
         final WorkingMemory wm = ruleBase.newWorkingMemory();
 
-        //now create some test data
+        // now create some test data
         Driver driver = new Driver();
         Policy policy = new Policy();
 
@@ -3363,7 +3370,7 @@
         wm.assertObject( new Cheese( "provolone",
                                      150 ) );
         wm.assertObject( new Person( "Bob",
-                                     "stilton", 
+                                     "stilton",
                                      20 ) );
         wm.assertObject( new Person( "Mark",
                                      "provolone" ) );
@@ -3556,24 +3563,30 @@
         // should not have fired as per constraint
         Assert.assertEquals( fireCount,
                              results.size() );
+    }
 
+    public void testAssertRetractNoloop() throws Exception {
+        // read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Assert_Retract_Noloop.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
+
+        final WorkingMemory wm = ruleBase.newWorkingMemory();
+        wm.assertObject( new Cheese( "stilton",
+                                     15 ) );
+
+        wm.fireAllRules();
     }
 
-    public void testAssertRetractNoloop() {
-        try {
-            // read in the source
-            final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Assert_Retract_Noloop.drl" ) );
-            final RuleBase ruleBase = loadRuleBase( reader );
+    public void testModifyNoLoop() throws Exception {
+        // JBRULES-780, throws a NullPointer or infinite loop if there is an issue
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_ModifyNoloop.drl" ) );
+        final RuleBase ruleBase = loadRuleBase( reader );
 
-            final WorkingMemory wm = ruleBase.newWorkingMemory();
-            wm.assertObject( new Cheese( "stilton",
-                                         15 ) );
+        final WorkingMemory wm = ruleBase.newWorkingMemory();
+        wm.assertObject( new Cheese( "stilton",
+                                     15 ) );
 
-            wm.fireAllRules();
-        } catch ( Exception e ) {
-            e.printStackTrace();
-            fail( "test should not throw exception" );
-        }
+        wm.fireAllRules();
     }
 
     public void testDoubleQueryWithExists() throws Exception {
@@ -4332,7 +4345,7 @@
         final RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
         final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
-        
+
         final List results = new ArrayList();
         workingMemory.setGlobal( "results",
                                  results );
@@ -4346,28 +4359,29 @@
         workingMemory.assertObject( bob );
 
         cheese.setType( "stilton" );
-        workingMemory.modifyObject( handle, cheese );
+        workingMemory.modifyObject( handle,
+                                    cheese );
         workingMemory.fireAllRules();
         assertEquals( 2,
                       results.size() );
     }
-    
-    public void testEventModel() throws Exception  {
+
+    public void testEventModel() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EventModel.drl" ) ) );
         final Package pkg = builder.getPackage();
 
         final RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        final WorkingMemory wm = ruleBase.newWorkingMemory();        
-        
+        final WorkingMemory wm = ruleBase.newWorkingMemory();
+
         final List agendaList = new ArrayList();
         AgendaEventListener agendaEventListener = new AgendaEventListener() {
 
             public void activationCancelled(ActivationCancelledEvent event,
                                             WorkingMemory workingMemory) {
                 agendaList.add( event );
-                
+
             }
 
             public void activationCreated(ActivationCreatedEvent event,
@@ -4394,14 +4408,14 @@
                                               WorkingMemory workingMemory) {
                 agendaList.add( event );
             }
-           
+
         };
-        
+
         final List wmList = new ArrayList();
         WorkingMemoryEventListener workingMemoryListener = new WorkingMemoryEventListener() {
 
             public void objectAsserted(ObjectAssertedEvent event) {
-                wmList.add( event );                
+                wmList.add( event );
             }
 
             public void objectModified(ObjectModifiedEvent event) {
@@ -4411,29 +4425,34 @@
             public void objectRetracted(ObjectRetractedEvent event) {
                 wmList.add( event );
             }
-            
+
         };
-        
+
         wm.addEventListener( workingMemoryListener );
-        
-        Cheese stilton = new Cheese("stilton",15);
-        Cheese cheddar = new Cheese("cheddar",17);
-        
+
+        Cheese stilton = new Cheese( "stilton",
+                                     15 );
+        Cheese cheddar = new Cheese( "cheddar",
+                                     17 );
+
         FactHandle stiltonHandle = wm.assertObject( stilton );
-        
+
         ObjectAssertedEvent oae = (ObjectAssertedEvent) wmList.get( 0 );
-        assertSame(  stiltonHandle, oae.getFactHandle() );
-        
-        wm.modifyObject( stiltonHandle, stilton );
+        assertSame( stiltonHandle,
+                    oae.getFactHandle() );
+
+        wm.modifyObject( stiltonHandle,
+                         stilton );
         ObjectModifiedEvent ome = (ObjectModifiedEvent) wmList.get( 1 );
-        assertSame( stiltonHandle, ome.getFactHandle() );                
-        
+        assertSame( stiltonHandle,
+                    ome.getFactHandle() );
+
         wm.retractObject( stiltonHandle );
         ObjectRetractedEvent ore = (ObjectRetractedEvent) wmList.get( 2 );
-        assertSame( stiltonHandle, ore.getFactHandle() );
-        
-        
-        wm.assertObject( cheddar );        
+        assertSame( stiltonHandle,
+                    ore.getFactHandle() );
+
+        wm.assertObject( cheddar );
     }
 
     public void testImplicitDeclarations() throws Exception {
@@ -4444,11 +4463,12 @@
         final RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
         final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
-        
+
         final List results = new ArrayList();
         workingMemory.setGlobal( "results",
                                  results );
-        workingMemory.setGlobal( "factor", new Double( 1.2 ) );
+        workingMemory.setGlobal( "factor",
+                                 new Double( 1.2 ) );
 
         Cheese cheese = new Cheese( "stilton",
                                     10 );
@@ -4467,9 +4487,10 @@
         final RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
         final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
-        
-        workingMemory.setGlobal( "value", new Integer( 20 ) );
 
+        workingMemory.setGlobal( "value",
+                                 new Integer( 20 ) );
+
         workingMemory.fireAllRules();
     }
 
@@ -4478,10 +4499,11 @@
         final PackageBuilder builder = new PackageBuilder();
         Reader drlReader = new InputStreamReader( getClass().getResourceAsStream( "literal_rule.drl" ) );
         Reader dslReader = new StringReader( DSL );
-        
-        builder.addPackageFromDrl( drlReader, dslReader );
+
+        builder.addPackageFromDrl( drlReader,
+                                   dslReader );
         final Package pkg = builder.getPackage();
-        
+
         assertFalse( pkg.isValid() );
     }
 

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ModifyNoloop.drl	2007-04-08 00:50:24 UTC (rev 10815)
@@ -0,0 +1,25 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+rule "test1"
+	salience 10
+	no-loop true
+	when
+        cheese : Cheese( price == 15 );
+    then
+    	modify(cheese);
+end
+
+
+rule "test2"
+	salience 0
+	no-loop true
+	when
+        cheese : Cheese( price == 15 );
+    then
+    	cheese.setPrice( 14 );
+		modify(cheese);
+end
+
+




More information about the jboss-svn-commits mailing list