[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