[jboss-jira] [JBoss JIRA] Created: (JBRULES-586) DefaultExpander incorrectly strips leading and trailing spaces

Adam Lewandowski (JIRA) jira-events at jboss.com
Wed Dec 13 08:51:38 EST 2006


DefaultExpander incorrectly strips leading and trailing spaces
--------------------------------------------------------------

                 Key: JBRULES-586
                 URL: http://jira.jboss.com/jira/browse/JBRULES-586
             Project: JBoss Rules
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: Drl Parser/Builder
    Affects Versions: 3.0.5
            Reporter: Adam Lewandowski
         Assigned To: Mark Proctor


When using a DSL expander, token values with leading or trailing spaces get the spaces stripped when inserted into the target template. This causes the resulting rule definition to be incorrect.

Example:
DSL: [when]String is "{value}"=SomeFact(value=="{value}")
Input string (note the trailing space): String is "blah "
Expanded string (note the lack of a trailing space): SomeFact(value=="blah")

The same thing occurs for leading spaces as well. Internal spaces are fine.
Also interesting is that if there are more than one leading/trailing space, NLExpressionCompiler throws an IllegalArgumentException: Expression was not expandable: String is "  blah"

The problem seems to be in the org.drools.lang.dsl.template.Chunk class. It is stripping the leading/trailing spaces from values in the map populated by buildValueMap().

Unit Test:
import java.io.StringReader;
import org.drools.lang.dsl.DefaultExpander;
import junit.framework.TestCase;

public class DroolsDslTemplateTest extends TestCase {
	
	private DefaultExpander expander;

	public void setUp() {
		String DSL = "[when]String is \"{value}\"=SomeFact(value==\"{value}\")";
		StringReader dslSrc = new StringReader(DSL);		
		expander = new DefaultExpander(dslSrc);		
	}
	
	public void testExpandNoSpaces() {		
		String result = expander.expand("when", "String is \"blah\"");
		assertEquals("SomeFact(value==\"blah\")", result);
	}

	public void testExpandWithLeadingSpace() {		
		String result = expander.expand("when", "String is \" blah\"");
		assertEquals("SomeFact(value==\" blah\")", result);
	}

	public void testExpandWithMultipleLeadingSpaces() {		
		String result = expander.expand("when", "String is \"  blah\"");
		assertEquals("SomeFact(value==\"  blah\")", result);
	}
	
	public void testExpandWithTrailingSpace() {		
		String result = expander.expand("when", "String is \" blah \"");
		assertEquals("SomeFact(value==\"blah \")", result);
	}
	
	public void testExpandWithMultipleTrailingSpaces() {		
		String result = expander.expand("when", "String is \"blah  \"");
		assertEquals("SomeFact(value==\"blah  \")", result);
	}
	
	public void testExpandWithInternalSpace() {		
		String result = expander.expand("when", "String is \"bl ah\"");
		assertEquals("SomeFact(value==\"bl ah\")", result);
	}
	
	public void testExpandWithMultipleInternalSpaces() {		
		String result = expander.expand("when", "String is \"bl  ah\"");
		assertEquals("SomeFact(value==\"bl  ah\")", result);
	}
	
}


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list