[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