[jboss-svn-commits] JBL Code SVN: r12906 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/compiler and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 27 22:29:01 EDT 2007


Author: michael.neale at jboss.com
Date: 2007-06-27 22:29:01 -0400 (Wed, 27 Jun 2007)
New Revision: 12906

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
Log:
JBRULES-955

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2007-06-28 01:49:41 UTC (rev 12905)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2007-06-28 02:29:01 UTC (rev 12906)
@@ -29,6 +29,7 @@
 import org.drools.lang.DRLLexer;
 import org.drools.lang.DRLParser;
 import org.drools.lang.Expander;
+import org.drools.lang.ExpanderException;
 import org.drools.lang.Location;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.dsl.DefaultExpanderResolver;
@@ -109,6 +110,37 @@
         return this.parse( expanded );
     }
 
+    /**
+     * This will expand the DRL.
+     * useful for debugging.
+     * @param source - the source which use a DSL
+     * @param dsl - the DSL itself.
+     * @throws DroolsParserException If unable to expand in any way.
+     */
+    public String getExpandedDRL(final String source, final Reader dsl) throws DroolsParserException {
+        DefaultExpanderResolver resolver;
+        try {
+            resolver = new DefaultExpanderResolver( dsl );
+        } catch ( final IOException e ) {
+            throw new DroolsParserException( "Error parsing the DSL.",
+                                             e );
+        }
+        final Expander expander = resolver.get( "*",
+                                          null );
+        final String expanded = expander.expand( source );
+        
+        if ( expander.hasErrors() ) {
+            String err = "";
+            for ( Iterator iter = expander.getErrors().iterator(); iter.hasNext(); ) {
+                ExpanderException ex = (ExpanderException) iter.next();
+                err  = err + "\n Line:[" + ex.getLine() + "] " + ex.getMessage();
+                
+            }
+            throw new DroolsParserException(err);
+        }    
+        return expanded;
+    }
+    
     private StringBuffer getDRLText(final Reader reader) throws IOException {
         final StringBuffer text = new StringBuffer();
 

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java	2007-06-28 02:29:01 UTC (rev 12906)
@@ -0,0 +1,29 @@
+package org.drools.compiler;
+
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+
+public class DrlParserTest extends TestCase {
+
+    public void testExpandDRL() throws Exception {
+        String dsl = "[condition]Something=Something()\n[then]another=another();";
+        String drl = "rule 'foo' \n when \n Something \n then \n another \nend";
+        
+        DrlParser parser = new DrlParser();
+        String result = parser.getExpandedDRL( drl, new StringReader(dsl));
+        assertEqualsIgnoreWhitespace( "rule 'foo' \n when \n Something() \n then \n another(); \nend", result );
+    }
+    
+    
+    private void assertEqualsIgnoreWhitespace(final String expected,
+                                              final String actual) {
+        final String cleanExpected = expected.replaceAll( "\\s+",
+                                                          "" );
+        final String cleanActual = actual.replaceAll( "\\s+",
+                                                      "" );
+
+        assertEquals( cleanExpected,
+                      cleanActual );
+    }    
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list