@Test public void testRegexp() throws Exception { this.expander.addDSLMapping(this.file.getMapping()); final Reader rules = new InputStreamReader(this.getClass().getResourceAsStream("test_expansion.dslr")); final String result = this.expander.expand(rules); }
@Test public void testANTLRRegexp() throws Exception { this.expander.addDSLMapping(this.tokenizedFile.getMapping()); final Reader rules = new InputStreamReader(this.getClass().getResourceAsStream("test_expansion.dslr")); final String result = this.expander.expand(rules); }
@Test public void testExpandSpaces() throws IOException { DSLMappingEntry entry = this.setupEntry(); DefaultExpander ex = makeExpander( entry ); String[] strs = new String[]{ "0_sp", " 1_sp", " 3_sp", "0_sp_1 ", "0_sp_3 ", "0_sp 1_sp 2_sp", " 3_sp 3_sp 1_sp 1_sp_2 " }; StringBuilder sb = new StringBuilder( "rule x\n" + "when\n" ); for( String str: strs ){ sb.append( "String is \"" + str + "\"" + NL ); } sb.append( "then\n" + "end\n" ); String dslr = sb.toString(); String drl = ex.expand( dslr ); for( String str: strs ){ assertTrue( drl.contains( '"' + str + '"' ) ); } }
@Test public void testExpandWithDots() throws IOException { DSLMappingEntry entry1 = this.createEntry( "- {prop} is not {val} ", "{prop} != {val}" ); DSLMappingEntry entry2 = this.createEntry( "- {prop} is {val} ", "{prop} == {val}" ); DSLMappingEntry entry3 = this.createEntry( "- {prop} is_not {val} ", "{prop} != {val}" ); DefaultExpander ex = makeExpander( entry1, entry2, entry3 ); StringBuilder sb = new StringBuilder( "rule x\n" ).append( "when\n" ); sb.append( "> Foo()").append( NL ); sb.append( "- type1 is ClientServiceType.TypeGOLD" ).append( NL ); sb.append( "- type2 is_not ClientServiceType.TypeGOLD" ).append( NL ); sb.append( "- type3 is not ClientServiceType.TypeGOLD" ).append( NL ); sb.append( "then\n" ).append( "end\n" ); String dslr = sb.toString(); String drl = ex.expand( dslr ); System.out.println( dslr ); System.out.println( drl ); assertTrue( "failure type1", drl.contains( "type1 == ClientServiceType.TypeGOLD" ) ); assertTrue( "failure type2", drl.contains( "type2 != ClientServiceType.TypeGOLD" ) ); assertTrue( "failure type3", drl.contains( "type3 != ClientServiceType.TypeGOLD" ) ); }
@Test public void testMe() throws Exception{ DSLTokenizedMappingFile tokenizedFile = null; final String filename = "test_antlr.dsl"; final Reader reader = new InputStreamReader( this.getClass().getResourceAsStream( filename ) ); tokenizedFile = new DSLTokenizedMappingFile(); tokenizedFile.parseAndLoad( reader ); reader.close(); for (Iterator it = tokenizedFile.getMapping().getEntries().iterator(); it.hasNext();) { DSLMappingEntry entry = (DSLMappingEntry) it.next(); // System.out.println("ENTRY: " + entry.getKeyPattern() + " ::::: " + entry.getValuePattern()); } DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping( tokenizedFile.getMapping() ); System.err.println(ex.expand( "rule 'x' \n when \n address is present where name is \"foo\" and age is \"32\" \n then \n end" )); }
@Test public void testExpandKeyword() throws Exception { DSLMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[keyword]key {param}=Foo( attr=={param} )"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule x" + NL + "when" + NL + " key 1 " + NL + " key 2 " + NL + "then" + NL + "end"; String drl = ex.expand(source); System.out.println(drl); assertTrue(drl.contains("attr==1")); assertTrue(drl.contains("attr==2")); //System.err.println(ex.expand( "rule 'x' " + NL + " when " + NL + " foo " + NL + " then " + NL + " end" )); }
@Test public void testParseFileWithEscapes() { String file = "[then]TEST=System.out.println(\"DO_SOMETHING\");" + NL + "" + "[when]code {code1} occurs and sum of all digit not equal \\( {code2} \\+ {code3} \\)=AAAA( cd1 == {code1}, cd2 != ( {code2} + {code3} ))" + NL + "" + "[when]code {code1} occurs=BBBB" + NL + ""; try { final Reader reader = new StringReader( file ); this.file = new DSLTokenizedMappingFile(); final boolean parsingResult = this.file.parseAndLoad( reader ); reader.close(); assertTrue( this.file.getErrors().toString(), parsingResult ); assertTrue( this.file.getErrors().isEmpty() ); final String LHS = "code 1041 occurs and sum of all digit not equal ( 1034 + 1035 )"; final String rule = "rule \"x\"" + NL + "when" + NL + "" + LHS + "" + NL + "then" + NL + "TEST" + NL + "end"; DefaultExpander de = new DefaultExpander(); de.addDSLMapping( this.file.getMapping() ); final String ruleAfterExpansion = de.expand( rule ); final String expected = "rule \"x\"" + NL + "when" + NL + "AAAA( cd1 == 1041, cd2 != ( 1034 + 1035 ))" + NL + "then" + NL + "System.out.println(\"DO_SOMETHING\");" + NL + "end"; assertEquals( expected, ruleAfterExpansion ); } catch ( final IOException e ) { e.printStackTrace(); fail( "Should not raise exception " ); } }
private void checkExpansion(String source, String expected) throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]There is an TestObject=TestObject()" + NL + "[when]-startDate is before {date}=startDate>DateUtils.parseDate(\"{date}\")" + NL + "[when]-endDate is after {date}=endDate>DateUtils.parseDate(\"{date}\")"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String drl = ex.expand(source); assertFalse(ex.hasErrors()); assertEquals(expected, drl); }
@Test public void testParseFileWithEscapes() { String file = "[then]TEST=System.out.println(\"DO_SOMETHING\");" + NL + "" + "[when]code {code1} occurs and sum of all digit not equal \\( {code2} \\+ {code3} \\)=AAAA( cd1 == {code1}, cd2 != ( {code2} + {code3} ))" + NL + "" + "[when]code {code1} occurs=BBBB" + NL + ""; try { final Reader reader = new StringReader( file ); this.file = new DSLTokenizedMappingFile(); final boolean parsingResult = this.file.parseAndLoad( reader ); reader.close(); assertTrue( this.file.getErrors().toString(), parsingResult ); assertTrue( this.file.getErrors().isEmpty() ); final String LHS = "code 1041 occurs and sum of all digit not equal ( 1034 + 1035 )"; final String rule = "rule \"x\"" + NL + "when" + NL + "" + LHS + "" + NL + "then" + NL + "TEST" + NL + "end"; DefaultExpander de = new DefaultExpander(); de.addDSLMapping(this.file.getMapping()); final String ruleAfterExpansion = de.expand(rule); final String expected = "rule \"x\"" + NL + "when" + NL + "AAAA( cd1 == 1041, cd2 != ( 1034 + 1035 ))" + NL + "then" + NL + "System.out.println(\"DO_SOMETHING\");" + NL + "end"; assertEquals( expected, ruleAfterExpansion ); } catch ( final IOException e ) { e.printStackTrace(); fail( "Should not raise exception " ); } }
@Test(timeout = 1000) public void testExpandInfiniteLoop() throws Exception { // DROOLS-73 DSLMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]Foo with {var} bars=Foo( bars == {var} )"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule 'dsl rule'" + NL + "when" + NL + " Foo with {var} bars" + NL + "then" + NL + NL + "end"; ex.expand(source); assertFalse(ex.hasErrors()); }
/** * Right now this test fails because there is no RHS for the rule. It connects the "then" and "end" to "thenend". */ @Test public void testNoRHS() { String file = "[then]TEST=System.out.println(\"DO_SOMETHING\");" + NL + "" + "[when]code {code1} occurs and sum of all digit not equal \\( {code2} \\+ {code3} \\)=AAAA( cd1 == {code1}, cd2 != ( {code2} + {code3} ))" + NL + "" + "[when]code {code1} occurs=BBBB" + NL + ""; try { final Reader reader = new StringReader( file ); this.file = new DSLTokenizedMappingFile(); final boolean parsingResult = this.file.parseAndLoad( reader ); reader.close(); assertTrue( this.file.getErrors().toString(), parsingResult ); assertTrue( this.file.getErrors().isEmpty() ); final String LHS = "code 1041 occurs and sum of all digit not equal ( 1034 + 1035 )"; final String rule = "rule \"x\"" + NL + "when" + NL + "" + LHS + "" + NL + "then" + NL + "end"; DefaultExpander de = new DefaultExpander(); de.addDSLMapping( this.file.getMapping() ); final String ruleAfterExpansion = de.expand( rule ); final String expected = "rule \"x\"" + NL + "when" + NL + "AAAA( cd1 == 1041, cd2 != ( 1034 + 1035 ))" + NL + "then" + NL + "end"; assertEquals( expected, ruleAfterExpansion ); } catch ( final IOException e ) { e.printStackTrace(); fail( "Should not raise exception " ); } }
@Test public void testANTLRExpandFailure() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]foo=Foo()" + NL + "[then]bar {num}=baz({num});"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule 'q'" + NL + "agenda-group 'x'" + NL + "when" + NL + " foo " + NL + "then" + NL + " bar 42" + NL + "end"; String drl = ex.expand(source); assertFalse(ex.hasErrors()); ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); source = "rule 'q' agenda-group 'x'" + NL + "when" + NL + " foos " + NL + "then" + NL + " bar 42" + NL + " end"; drl = ex.expand(source); //System.out.println( drl ); assertTrue(ex.hasErrors()); assertEquals(1, ex.getErrors().size()); //System.err.println(( (ExpanderException) ex.getErrors().get( 0 )).getMessage()); }
@Test public void testExpandFailure() throws Exception { DSLMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]foo=Foo()" + NL + "[then]bar {num}=baz({num});"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule 'q'" + NL + "agenda-group 'x'" + NL + "when" + NL + " foo " + NL + "then" + NL + " bar 42" + NL + "end"; String drl = ex.expand(source); assertFalse(ex.hasErrors()); ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); source = "rule 'q' agenda-group 'x'" + NL + "when" + NL + " foos " + NL + "then" + NL + " bar 42" + NL + " end"; drl = ex.expand(source); //System.out.println( drl ); assertTrue(ex.hasErrors()); assertEquals(1, ex.getErrors().size()); //System.err.println(( (ExpanderException) ex.getErrors().get( 0 )).getMessage()); }
@Test public void testExpandWithKeywordClashes() throws Exception { DSLMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]Invoke rule executor=ruleExec: RuleExecutor()" + NL + "[then]Execute rule \"{id}\"=ruleExec.ExecuteSubRule( new Long({id}));"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "package something;" + NL + NL + "rule \"1\"" + NL + "when" + NL + " Invoke rule executor" + NL + "then" + NL + " Execute rule \"5\"" + NL + "end"; String expected = "package something;" + NL + NL + "rule \"1\"" + NL + "when" + NL + " ruleExec: RuleExecutor()" + NL + "then" + NL + " ruleExec.ExecuteSubRule( new Long(5));" + NL + "end" + NL; String drl = ex.expand(source); // System.out.println("["+drl+"]" ); // System.out.println("["+expected+"]" ); assertFalse(ex.hasErrors()); equalsIgnoreWhiteSpace(expected, drl); }
@Test public void testANTLRExpandWithKeywordClashes() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]Invoke rule executor=ruleExec: RuleExecutor()" + NL + "[then]Execute rule \"{id}\"=ruleExec.ExecuteSubRule( new Long({id}));"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "package something;" + NL + NL + "rule \"1\"" + NL + "when" + NL + " Invoke rule executor" + NL + "then" + NL + " Execute rule \"5\"" + NL + "end"; String expected = "package something;" + NL + NL + "rule \"1\"" + NL + "when" + NL + " ruleExec: RuleExecutor()" + NL + "then" + NL + " ruleExec.ExecuteSubRule( new Long(5));" + NL + "end"; String drl = ex.expand(source); // System.out.println("["+drl+"]" ); // System.out.println("["+expected+"]" ); assertFalse(ex.hasErrors()); assertEquals(expected, drl); }
@Test public void testLineNumberError() throws Exception { DSLMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]foo=Foo()" + NL + "[then]bar {num}=baz({num});"; file.parseAndLoad(new StringReader(dsl)); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule 'q'" + NL + "agenda-group 'x'" + NL + "when" + NL + " __ " + NL + "then" + NL + " bar 42" + NL + "\tgoober" + NL + "end"; ex.expand(source); assertTrue(ex.hasErrors()); 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()); }
@Test public void testANTLRLineNumberError() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]foo=Foo()" + NL + "[then]bar {num}=baz({num});"; file.parseAndLoad(new StringReader(dsl)); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule 'q'" + NL + "agenda-group 'x'" + NL + "when" + NL + " __ " + NL + "then" + NL + " bar 42" + NL + "\tgoober" + NL + "end"; ex.expand(source); assertTrue(ex.hasErrors()); 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()); }
@Test public void testExpandQuery() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]There is a person=Person()" + NL + "[when]- {field:\\w*} {operator} {value:\\d*}={field} {operator} {value}" + NL + "[when]is greater than=>"; String source = "query \"isMature\"" + NL + "There is a person" + NL + "- age is greater than 18" + NL + "end" + NL; String expected = "query \"isMature\"" + NL + "Person(age > 18)" + NL + "end" + NL; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String drl = ex.expand(source); assertFalse(ex.hasErrors()); assertEquals(expected, drl); }
@Test public void testANTLREnumExpand() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]When the credit rating is {rating:ENUM:Applicant.creditRating} = applicant:Applicant(credit=={rating})"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String source = "rule \"TestNewDslSetup\"" + NL + "dialect \"mvel\"" + NL + "when" + NL + "When the credit rating is AA" + NL + "then " + NL + "end"; // String source="rule \"TestNewDslSetup\"" + NL+ // "dialect \"mvel\"" + NL+ // "when" + NL+ // "When the credit rating is OK" + NL+ // "then" + NL+ // "end" + NL; String drl = ex.expand(source); String expected = "rule \"TestNewDslSetup\"" + NL + "dialect \"mvel\"" + NL + "when" + NL + "applicant:Applicant(credit==AA)" + NL + "then " + NL + "end"; assertFalse(ex.getErrors().toString(), ex.hasErrors()); assertEquals(expected, drl); //System.err.println(ex.expand( "rule 'x' " + NL + " when " + NL + " foo " + NL + " then " + NL + " end" )); }
@Test public void testExpandExpr() throws Exception { DSLTokenizedMappingFile file = new DSLTokenizedMappingFile(); String dsl = "[when]Name of Applicant {nameVar:CF:Applicant.age}= System.out.println({nameVar})"; String source = "rule \"test rule for custom form in DSL\"" + NL + " dialect \"mvel\"" + NL + " when" + NL + " Name of Applicant Bojan Oklahoma and NJ,Andrew AMW Test" + NL + " then" + NL + "end"; String expected = "rule \"test rule for custom form in DSL\"" + NL + " dialect \"mvel\"" + NL + " when" + NL + " System.out.println(Bojan Oklahoma and NJ,Andrew AMW Test)" + NL + " then" + NL + "end"; file.parseAndLoad(new StringReader(dsl)); assertEquals(0, file.getErrors().size()); DefaultExpander ex = new DefaultExpander(); ex.addDSLMapping(file.getMapping()); String drl = ex.expand(source); assertFalse(ex.hasErrors()); assertEquals(expected, drl); }