@Test public void testLineNumberIncludingCommentsInRHS() throws Exception { PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "test_CommentLineNumbersInConsequence.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); final String rhs = (String) ((RuleDescr) pkg.getRules().get( 0 )).getConsequence(); String expected = "\\s*//woot$\\s*first$\\s*$\\s*//$\\s*$\\s*/\\* lala$\\s*$\\s*\\*/$\\s*second$\\s*"; assertTrue( Pattern.compile( expected, Pattern.DOTALL | Pattern.MULTILINE ).matcher( rhs ).matches() ); }
@Test public void testRuleWithoutEnd() throws Exception { String source = "rule \"Invalid customer id\" \n" + " when \n" + " o: Order( ) \n" + " then \n" + " System.err.println(\"Invalid customer id found!\"); \n"; parse( "compilationUnit", source ); assertTrue( parser.hasErrors() ); }
@Test public void testConsequenceWithDeclaration() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "declaration-in-consequence.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "myrule", rule.getName() ); final String expected = "int i = 0; i = 1; i / 1; i == 1; i(i); i = 'i'; i.i.i; i\\i; i<i; i>i; i=\"i\"; ++i;" + "i++; --i; i--; i += i; i -= i; i *= i; i /= i;" + "int i = 5;" + "for(int j; j<i; ++j) {" + "System.out.println(j);}" + "Object o = new String(\"Hello\");" + "String s = (String) o;"; assertEqualsIgnoreWhitespace( expected, (String) rule.getConsequence() ); assertTrue( ((String) rule.getConsequence()).indexOf( "++" ) > 0 ); assertTrue( ((String) rule.getConsequence()).indexOf( "--" ) > 0 ); assertTrue( ((String) rule.getConsequence()).indexOf( "+=" ) > 0 ); assertTrue( ((String) rule.getConsequence()).indexOf( "==" ) > 0 ); // System.out.println(( String ) rule.getConsequence()); // note, need to assert that "i++" is preserved as is, no extra spaces. }
@Test public void testPackageWithError() throws Exception { final String source = "package 12 foo.bar.baz"; final DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); final PackageDescr pkg = parser.parse( true, new StringReader( source ) ); assertTrue( parser.hasErrors() ); assertEquals( "foo.bar.baz", pkg.getName() ); }
@Test public void testPackageWithError2() throws Exception { final String source = "package 12 12312 231"; final DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); final PackageDescr pkg = parser.parse( true, new StringReader( source ) ); assertTrue( parser.hasErrors() ); assertEquals( "", pkg.getName() ); }
@Test public void testRuleMetadata() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "Rule_with_Metadata.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); // @fooAttribute(barValue) // @fooAtt2(barVal2) RuleDescr rule = pkg.getRules().get( 0 ); assertTrue( rule.getAnnotationNames().contains( "fooMeta1" ) ); assertEquals( "barVal1", rule.getAnnotation( "fooMeta1" ).getValue() ); assertTrue( rule.getAnnotationNames().contains( "fooMeta2" ) ); assertEquals( "barVal2", rule.getAnnotation( "fooMeta2" ).getValue() ); assertEqualsIgnoreWhitespace( "System.out.println(\"Consequence\");", (String) rule.getConsequence() ); }
@Test public void testUnificationBinding() throws Exception { final String text = "rule X when $p := Person( $name := name, $loc : location ) then end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertEquals( "$p", pattern.getIdentifier() ); assertTrue( pattern.isUnification() ); assertEquals( 2, pattern.getDescrs().size() ); ExprConstraintDescr bindingDescr = (ExprConstraintDescr) pattern.getDescrs().get( 0 ); assertEquals( "$name := name", bindingDescr.getExpression() ); bindingDescr = (ExprConstraintDescr) pattern.getDescrs().get( 1 ); assertEquals( "$loc : location", bindingDescr.getExpression() ); }
@Test public void testAccumulateExternalFunction() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "accumulateExternalFunction.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); final AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertEqualsIgnoreWhitespace( "$age", accum.getFunctions().get( 0 ).getParams()[0] ); assertEqualsIgnoreWhitespace( "average", accum.getFunctions().get( 0 ).getFunction() ); assertTrue( accum.isExternalFunction() ); final PatternDescr pattern = (PatternDescr) accum.getInputPattern(); assertEquals( "Person", pattern.getObjectType() ); }
@Test public void testRuleExtends() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "Rule_with_Extends.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); RuleDescr rule = pkg.getRules().get( 0 ); assertTrue( rule.getParentName() != null ); assertEquals( "rule1", rule.getParentName() ); AndDescr lhs = rule.getLhs(); assertNotNull( lhs ); assertEquals( 1, lhs.getDescrs().size() ); PatternDescr pattern = (PatternDescr) lhs.getDescrs().get( 0 ); assertEquals( "foo", pattern.getObjectType() ); assertEquals( "$foo", pattern.getIdentifier() ); }
out.getObjectType() ); AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertTrue( accum.isExternalFunction() );
out.getObjectType() ); AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertTrue( accum.isExternalFunction() );
out.getObjectType() ); AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertTrue( accum.isExternalFunction() );
out.getConstraint().getDescrs().get( 1 ).toString() ); AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertTrue( accum.isExternalFunction() );
@Test public void testIsQuery() throws Exception { final String text = "rule X when ?person( \"Mark\", 42; ) then end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertTrue( pattern.isQuery() ); assertEquals( 2, pattern.getDescrs().size() ); ExprConstraintDescr fcd = (ExprConstraintDescr) pattern.getDescrs().get( 0 ); assertEquals( "\"Mark\"", fcd.getExpression() ); assertEquals( 0, fcd.getPosition() ); assertEquals( ExprConstraintDescr.Type.POSITIONAL, fcd.getType() ); fcd = (ExprConstraintDescr) pattern.getDescrs().get( 1 ); assertEquals( "42", fcd.getExpression() ); assertEquals( 1, fcd.getPosition() ); assertEquals( ExprConstraintDescr.Type.POSITIONAL, fcd.getType() ); }
@Test public void testFromWithTernaryFollowedByQuery() throws Exception { // the 'from' expression requires a ";" to disambiguate the "?" // prefix for queries from the ternary operator "? :" final String text = "rule X when Cheese() from (isFull ? $cheesery : $market) ?person( \"Mark\", 42; ) then end"; RuleDescr rule = (RuleDescr) parse( "rule", text ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "Cheese", pattern.getObjectType() ); assertEquals( "from (isFull ? $cheesery : $market)", pattern.getSource().getText() ); assertFalse( pattern.isQuery() ); pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( "person", pattern.getObjectType() ); assertTrue( pattern.isQuery() ); }
@Test public void testFromFollowedByQuery() throws Exception { // the 'from' expression requires a ";" to disambiguate the "?" // prefix for queries from the ternary operator "? :" final String text = "rule X when Cheese() from $cheesery ?person( \"Mark\", 42; ) then end"; RuleDescr rule = (RuleDescr) parse( "rule", text ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "Cheese", pattern.getObjectType() ); assertEquals( "from $cheesery", pattern.getSource().getText() ); assertFalse( pattern.isQuery() ); pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( "person", pattern.getObjectType() ); assertTrue( pattern.isQuery() ); }
out.getObjectType() ); AccumulateDescr accum = (AccumulateDescr) out.getSource(); assertTrue( accum.isExternalFunction() );
assertEquals( 2, d.getFields().size() ); assertTrue( d.getFields().containsKey( "name" ) ); assertTrue( d.getFields().containsKey( "age" ) );