[jboss-svn-commits] JBL Code SVN: r23976 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/lang and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Nov 19 22:04:50 EST 2008
Author: tirelli
Date: 2008-11-19 22:04:50 -0500 (Wed, 19 Nov 2008)
New Revision: 23976
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-1854: Fixing CCE in the parser. Adding test case.
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java 2008-11-20 01:18:27 UTC (rev 23975)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java 2008-11-20 03:04:50 UTC (rev 23976)
@@ -5,6 +5,7 @@
import java.util.Map;
import java.util.Map.Entry;
+import org.drools.RuntimeDroolsException;
import org.drools.lang.DroolsTree;
/**
@@ -981,12 +982,14 @@
public BaseDescr setupPatternBiding(DroolsTree label, BaseDescr fact) {
fact.setStartCharacter(getStartOffsetLocation(label));
if (fact instanceof OrDescr) {
- ((PatternDescr) ((OrDescr) fact).getDescrs().get(0))
- .setIdentifier(label.getText());
- ((PatternDescr) ((OrDescr) fact).getDescrs().get(1))
- .setIdentifier(label.getText());
+ OrDescr or = (OrDescr) fact;
+ for( Object descr : or.getDescrs() ) {
+ setupPatternBiding( label, (BaseDescr) descr );
+ }
+ } else if( fact instanceof PatternDescr ) {
+ ((PatternDescr) fact).setIdentifier(label.getText());
} else {
- ((PatternDescr) fact).setIdentifier(label.getText());
+ throw new RuntimeDroolsException("This is a bug. Please contact the Development Team. Only Patterns or OrDescr may have attached bindings. Found: "+fact.getClass().getName());
}
return fact;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2008-11-20 01:18:27 UTC (rev 23975)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2008-11-20 03:04:50 UTC (rev 23976)
@@ -101,6 +101,22 @@
}
+ public void testOrWithSpecialBind() throws Exception {
+ String source = "rule \"A and (B or C or D)\" \n" +
+ " when \n" +
+ " pdo1 : ParametricDataObject( paramID == 101, stringValue == \"1000\" ) and \n" +
+ " pdo2 :(ParametricDataObject( paramID == 101, stringValue == \"1001\" ) or \n" +
+ " ParametricDataObject( paramID == 101, stringValue == \"1002\" ) or \n" +
+ " ParametricDataObject( paramID == 101, stringValue == \"1003\" )) \n" +
+ " then \n"+
+ " System.out.println( \"Rule: A and (B or C or D) Fired. pdo1: \" + pdo1 + \" pdo2: \"+ pdo2); \n" +
+ "end\n";
+ parse("compilation_unit", "compilation_unit", source);
+
+ assertFalse(parser.hasErrors());
+
+ }
+
public void testCompatibleRestriction() throws Exception {
String source = "package com.sample rule test when Test( ( text == null || text2 matches \"\" ) ) then end";
parse("compilation_unit", "compilation_unit", source);
@@ -3208,16 +3224,22 @@
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
+ fail( e.getMessage() );
} catch (SecurityException e) {
e.printStackTrace();
+ fail( e.getMessage() );
} catch (NoSuchMethodException e) {
e.printStackTrace();
+ fail( e.getMessage() );
} catch (IllegalAccessException e) {
e.printStackTrace();
+ fail( e.getMessage() );
} catch (InvocationTargetException e) {
e.printStackTrace();
+ fail( e.getMessage() );
} catch (Exception e) {
e.printStackTrace();
+ fail( e.getMessage() );
}
return treeRuleReturn;
}
More information about the jboss-svn-commits
mailing list