[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