[jboss-svn-commits] JBL Code SVN: r26520 - 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
Wed May 13 20:19:05 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-05-13 20:19:05 -0400 (Wed, 13 May 2009)
New Revision: 26520

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TestObject.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
Log:
JBRULES-1759 Exception when compiling a rule with "dialect mvel"
-added unit test, to confirm that this now works.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2009-05-13 22:41:17 UTC (rev 26519)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2009-05-14 00:19:05 UTC (rev 26520)
@@ -4,6 +4,7 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.Serializable;
+import java.io.StringReader;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
@@ -44,7 +45,7 @@
         RuleBase ruleBase = loadRuleBase( reader );
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
+        
         final List list = new ArrayList();
         workingMemory.setGlobal( "list",
                                  list );
@@ -53,20 +54,25 @@
         workingMemory.setGlobal( "list2",
                                  list2 );
 
-
-        Cheese c = new Cheese("stilton", 10) ;
-        workingMemory.insert( c);
+        Cheese c = new Cheese( "stilton",
+                               10 );
+        workingMemory.insert( c );
         workingMemory.fireAllRules();
-        assertEquals( 2, list.size() );
-        assertEquals( new Integer(30), list.get(0));
-        assertEquals( new Integer(22), list.get(1));
+        assertEquals( 2,
+                      list.size() );
+        assertEquals( new Integer( 30 ),
+                      list.get( 0 ) );
+        assertEquals( new Integer( 22 ),
+                      list.get( 1 ) );
 
-        assertEquals( "hello world", list2.get(0));
+        assertEquals( "hello world",
+                      list2.get( 0 ) );
 
         Date dt = DateUtils.parseDate( "10-Jul-1974" );
-        assertEquals(dt, c.getUsedBy());
+        assertEquals( dt,
+                      c.getUsedBy() );
     }
-    
+
     public void testIncrementOperator() throws Exception {
         String str = "";
         str += "package org.drools \n";
@@ -80,28 +86,32 @@
         str += "    i += 5; \n";
         str += "    list.add( i ); \n";
         str += "end \n";
-        
+
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-        
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
         assertFalse( kbuilder.hasErrors() );
-        
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        
+
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List list = new ArrayList();
-        ksession.setGlobal( "list", list );
-        ksession.insert( 5 );        
-        
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( 5 );
+
         ksession.fireAllRules();
-        
-        assertEquals( 1, list.size() );
-        assertEquals( 10, list.get( 0 ) );
+
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( 10,
+                      list.get( 0 ) );
     }
-    
-    public void testEvalWithBigDecimal() throws Exception {        
+
+    public void testEvalWithBigDecimal() throws Exception {
         String str = "";
         str += "package org.drools \n";
         str += "import java.math.BigDecimal; \n";
@@ -110,34 +120,38 @@
         str += "    dialect \"mvel\" \n";
         str += "when \n";
         str += "    $bd : BigDecimal() \n";
-        str += "    eval( $bd.compareTo( BigDecimal.ZERO ) > 0 ) \n";        
+        str += "    eval( $bd.compareTo( BigDecimal.ZERO ) > 0 ) \n";
         str += "then \n";
         str += "    list.add( $bd ); \n";
         str += "end \n";
-        
+
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-        
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
         if ( kbuilder.hasErrors() ) {
             System.err.println( kbuilder.getErrors() );
         }
         assertFalse( kbuilder.hasErrors() );
-        
+
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        
+
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
         List list = new ArrayList();
-        ksession.setGlobal( "list", list );
-        ksession.insert( new BigDecimal( 1.5 ) );        
-        
+        ksession.setGlobal( "list",
+                            list );
+        ksession.insert( new BigDecimal( 1.5 ) );
+
         ksession.fireAllRules();
-        
-        assertEquals( 1, list.size() );
-        assertEquals( new BigDecimal( 1.5 ), list.get( 0 ) );
-    }      
 
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( new BigDecimal( 1.5 ),
+                      list.get( 0 ) );
+    }
+
     public void testLocalVariableMVELConsequence() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_LocalVariableMVELConsequence.drl" ) ) );
@@ -145,7 +159,7 @@
 
         RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        ruleBase    = SerializationHelper.serializeObject(ruleBase);
+        ruleBase = SerializationHelper.serializeObject( ruleBase );
 
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -153,8 +167,10 @@
         workingMemory.setGlobal( "results",
                                  list );
 
-        workingMemory.insert( new Person( "bob", "stilton" ) );
-        workingMemory.insert( new Person( "mark", "brie" ) );
+        workingMemory.insert( new Person( "bob",
+                                          "stilton" ) );
+        workingMemory.insert( new Person( "mark",
+                                          "brie" ) );
 
         try {
             workingMemory.fireAllRules();
@@ -163,9 +179,9 @@
                           2,
                           list.size() );
 
-        } catch (Exception e) {
+        } catch ( Exception e ) {
             e.printStackTrace();
-            fail( "Should not raise any exception");
+            fail( "Should not raise any exception" );
         }
 
     }
@@ -185,7 +201,7 @@
         } catch ( Exception e ) {
             MVELDebugHandler.setDebugMode( false );
             e.printStackTrace();
-            fail("Should not raise exceptions");
+            fail( "Should not raise exceptions" );
         }
 
     }
@@ -193,13 +209,64 @@
     public void testDuplicateLocalVariableMVELConsequence() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DuplicateLocalVariableMVELConsequence.drl" ) ) );
+
+        assertTrue( builder.hasErrors() );
+    }
+
+    public void testArrays() throws Exception {
+        String text = "package test_mvel;\n";
+        text += "import org.drools.integrationtests.TestObject;\n";
+        text += "import function org.drools.integrationtests.TestObject.array;\n";;
+        text += "no-loop true\n";
+        text += "dialect \"mvel\"\n";
+        text += "rule \"1\"\n";
+        text += "salience 1\n";
+        text += "when\n";
+        text += "    $fact: TestObject()\n";
+        text += "    eval($fact.checkHighestPriority(\"mvel\", 2))\n";
+        text += "    eval($fact.stayHasDaysOfWeek(\"mvel\", false, new String[][]{{\"2008-04-01\", \"2008-04-10\"}}))\n";
+        text += "then\n";
+        text += "    $fact.applyValueAddPromo(1,2,3,4,\"mvel\");\n";
+        text += "end";
         
-        assertTrue ( builder.hasErrors() );
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase( );
+        // get the java dialect
+        ruleBase.addPackage( compileRule( text.replaceAll( "mvel",
+                                                          "java" ) ) );
+        // get the mvel dialect
+        ruleBase.addPackage( compileRule( text ) );
+
+        List<String> list = new ArrayList<String>();
+        
+        ruleBase.newStatelessSession().execute( new TestObject( list ) );
+        
+        assertEquals( 6, list.size() );
+        
+        assertEquals("TestObject.checkHighestPriority: java|2", list.get(0));
+        assertEquals("TestObject.stayHasDaysOfWeek: java|false|[2008-04-01, 2008-04-10]", list.get(1));
+        assertEquals("TestObject.checkHighestPriority: mvel|2", list.get(2));
+        assertEquals("TestObject.stayHasDaysOfWeek: mvel|false|[2008-04-01, 2008-04-10]", list.get(3));
+        assertEquals("TestObject.applyValueAddPromo: 1|2|3|4|java", list.get(4));
+        assertEquals("TestObject.applyValueAddPromo: 1|2|3|4|mvel", list.get(5));
     }
 
+    private Package compileRule(String drl) throws Exception {
+        PackageBuilder builder = new PackageBuilder( new PackageBuilderConfiguration() );
+
+        builder.addPackageFromDrl( new StringReader( drl ) );
+        Package pkg = builder.getPackage();
+
+        if ( !pkg.isValid() ) {
+            throw new DroolsParserException( pkg.getErrorSummary() );
+        }
+        return pkg;
+    }
+    
     public Object compiledExecute(String ex) {
-        Serializable compiled = MVEL.compileExpression(ex);
-        return MVEL.executeExpression(compiled, new Object(), new HashMap());
+        Serializable compiled = MVEL.compileExpression( ex );
+        return MVEL.executeExpression( compiled,
+                                       new Object(),
+                                       new HashMap() );
     }
 
     private RuleBase loadRuleBase(final Reader reader) throws IOException,
@@ -221,7 +288,7 @@
         // add the package to a rulebase
         RuleBase ruleBase = getRuleBase();
         ruleBase.addPackage( pkg );
-        ruleBase    = SerializationHelper.serializeObject(ruleBase);
+        ruleBase = SerializationHelper.serializeObject( ruleBase );
         // load up the rulebase
         return ruleBase;
     }

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TestObject.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TestObject.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TestObject.java	2009-05-14 00:19:05 UTC (rev 26520)
@@ -0,0 +1,41 @@
+/**
+ * 
+ */
+package org.drools.integrationtests;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class TestObject {
+    private List list;
+
+    public TestObject(List list) {
+        this.list = list;
+    }
+
+    public boolean checkHighestPriority(String promoType,
+                                        long priority) {
+        this.list.add( "TestObject.checkHighestPriority: " + promoType + '|' + priority );
+        return true;
+    }
+
+    public boolean stayHasDaysOfWeek(String daysOfWeek,
+                                     boolean allDaysRequired,
+                                     String[][] days) {
+        this.list.add( "TestObject.stayHasDaysOfWeek: " + daysOfWeek + '|' + allDaysRequired + '|' + Arrays.toString( days[0] ) );
+        return true;
+    }
+
+    public void applyValueAddPromo(long aRuleId,
+                                   int aRuleVersion,
+                                   long aValueAddDctCode,
+                                   int aPromoType,
+                                   String aPromoCode) {
+        this.list.add( "TestObject.applyValueAddPromo: " + aRuleId + '|' + aRuleVersion + '|' + aValueAddDctCode + '|' + aPromoType + '|' + aPromoCode );
+    }
+
+    public static String[][] array(String arg1,
+                                   String arg2) {
+        return new String[][]{{arg1, arg2}};
+    }
+}
\ No newline at end of file




More information about the jboss-svn-commits mailing list