[jboss-svn-commits] JBL Code SVN: r12282 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/lang and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jun 1 08:01:54 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-06-01 08:01:53 -0400 (Fri, 01 Jun 2007)
New Revision: 12282

Removed:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/bad_expander.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DefaultExpander.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderTest.java
Log:
JBRULES-807 Line number error reporting

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DefaultExpander.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DefaultExpander.java	2007-06-01 11:40:03 UTC (rev 12281)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/dsl/DefaultExpander.java	2007-06-01 12:01:53 UTC (rev 12282)
@@ -124,22 +124,30 @@
     private StringBuffer expandConstructions(final String drl) {
         // parse and expand specific areas
         final Matcher m = finder.matcher( drl );
+        
+        
+        
         final StringBuffer buf = new StringBuffer();
         while ( m.find() ) {
             final StringBuffer expanded = new StringBuffer();
             final String constr = m.group( 1 ).trim();
             if ( constr.startsWith( "rule" ) ) {
                 // match rule
-                expanded.append( m.group( 2 ) ); // adding rule header and attributes
-                expanded.append( this.expandLHS( m.group( 3 ) ) ); // adding expanded LHS
-                expanded.append( m.group( 4 ) ); // adding "then" header
-                expanded.append( this.expandRHS( m.group( 5 ) ) ); // adding expanded RHS
+                String headerFragment = m.group( 2 );
+                expanded.append( headerFragment ); // adding rule header and attributes
+                String lhsFragment = m.group( 3 );
+                expanded.append( this.expandLHS( lhsFragment, countNewlines( headerFragment ) + 1 ) ); // adding expanded LHS
+                String thenFragment = m.group( 4 ); 
+                
+                expanded.append( thenFragment ); // adding "then" header
+                expanded.append( this.expandRHS( m.group( 5 ), countNewlines( headerFragment + lhsFragment + thenFragment ) + 1 ) ); // adding expanded RHS
                 expanded.append( m.group( 6 ) ); // adding rule trailer
                 expanded.append( "\n" );
             } else if ( constr.startsWith( "query" ) ) {
                 // match query
-                expanded.append( m.group( 7 ) ); // adding query header and attributes
-                expanded.append( this.expandLHS( m.group( 8 ) ) ); // adding expanded LHS
+                String fragment = m.group( 7 );
+                expanded.append( fragment ); // adding query header and attributes
+                expanded.append( this.expandLHS( m.group( 8 ), countNewlines( fragment ) + 1 ) ); // adding expanded LHS
                 expanded.append( m.group( 9 ) ); // adding query trailer
                 expanded.append( "\n" );
             } else {
@@ -155,6 +163,15 @@
         return buf;
     }
 
+    private int countNewlines(final String drl) {
+        char[] cs = drl.toCharArray();
+        int count = 0;
+        for ( int i = 0; i < cs.length; i++ ) {
+            { if (cs[i] == '\n') count++; }
+        }
+        return count;
+    }
+
     /**
      * Clean up constructions that exists only in the unexpanded code
      * 
@@ -188,9 +205,10 @@
     /**
      * Expand LHS for a construction
      * @param lhs
+     * @param lineOffset 
      * @return
      */
-    private String expandLHS(final String lhs) {
+    private String expandLHS(final String lhs, int lineOffset) {
         final StringBuffer buf = new StringBuffer();
         final String[] lines = lhs.split( "\n" ); // since we assembled the string, we know line breaks are \n
         final String[] expanded = new String[lines.length]; // buffer for expanded lines
@@ -217,7 +235,7 @@
                 if ( lines[i].equals( expanded[lastExpanded] ) ) {
                     // report error
                     this.addError( new ExpanderException( "Unable to expand: [" + lines[i] + "]",
-                                                          i ) );
+                                                          i + lineOffset ) );
                 }
                 // but if the original starts with a "-", it means we need to add it
                 // as a constraint to the previous pattern
@@ -241,7 +259,7 @@
                         // error, pattern not found to add constraint to
                         // TODO: can we report character position?
                         this.addError( new ExpanderException( "No pattern was found to add the constraint to: " + lines[i],
-                                                              i ) );
+                                                              i + lineOffset ) );
                     }
                     lastExpanded--;
                 } else {
@@ -263,7 +281,7 @@
      * @param lhs
      * @return
      */
-    private String expandRHS(final String lhs) {
+    private String expandRHS(final String lhs, int lineOffset) {
         final StringBuffer buf = new StringBuffer();
         final String[] lines = lhs.split( "\n" ); // since we assembled the string, we know line breaks are \n
         for ( int i = 0; i < lines.length; i++ ) {
@@ -285,7 +303,7 @@
                 if ( lines[i].equals( expanded ) ) {
                     // report error
                     this.addError( new ExpanderException( "Unable to expand: " + lines[i],
-                                                          i ) );
+                                                          i + lineOffset ) );
                 }
             }
             buf.append( "\n" );

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	2007-06-01 11:40:03 UTC (rev 12281)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-06-01 12:01:53 UTC (rev 12282)
@@ -2133,18 +2133,7 @@
         assertFalse( this.parser.hasErrors() );
     }
 
-    // FIXME
-    public void FIXME_testExpanderBad() throws Exception {
-        final DRLParser parser = parseResource( "bad_expander.drl" );
-        try {
-            parser.compilation_unit();
-            fail( "Should have thrown a wobbly." );
-        } catch ( final IllegalArgumentException e ) {
-            assertNotNull( e.getMessage() );
-        }
 
-        assertFalse( parser.hasErrors() );
-    }
 
     public void testInvalidSyntax_Catches() throws Exception {
         parseResource( "invalid_syntax.drl" ).compilation_unit();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderTest.java	2007-06-01 11:40:03 UTC (rev 12281)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/dsl/DefaultExpanderTest.java	2007-06-01 12:01:53 UTC (rev 12282)
@@ -100,22 +100,25 @@
 
     }
 
-    // FIXME
-    public void FIXME_testLineNumberError() throws Exception {
+
+    public void testLineNumberError() throws Exception {
         DSLMappingFile file = new DSLMappingFile();
         String dsl = "[when]foo=Foo()\n[then]bar {num}=baz({num});";
         file.parseAndLoad( new StringReader( dsl ) );
 
         DefaultExpander ex = new DefaultExpander();
         ex.addDSLMapping( file.getMapping() );
-        String source = "rule 'q'\nagenda-group 'x'\nwhen\n    __  \nthen\n    bar 42\nend";
+        String source = "rule 'q'\nagenda-group 'x'\nwhen\n    __  \nthen\n    bar 42\n\tgoober\nend";
         ex.expand( source );
         assertTrue( ex.hasErrors() );
-        assertEquals( 1,
+        assertEquals( 2,
                       ex.getErrors().size() );
         ExpanderException err = (ExpanderException) ex.getErrors().get( 0 );
         assertEquals( 4,
                       err.getLine() );
+        err = (ExpanderException) ex.getErrors().get( 1 );
+        assertEquals( 7,
+                      err.getLine() );
 
     }
     

Deleted: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/bad_expander.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/bad_expander.drl	2007-06-01 11:40:03 UTC (rev 12281)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/bad_expander.drl	2007-06-01 12:01:53 UTC (rev 12282)
@@ -1,11 +0,0 @@
-#this will show a bad expander
-package foo
-
-expander booboo.dsl
-
-rule foo
-	when 
-		Bar()
-	then
-		ya();
-end




More information about the jboss-svn-commits mailing list