@Test public void testSoundsLike() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "soundslike_operator.drl" ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); PatternDescr pat = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); pat.getConstraint(); }
@Test public void testQuotedStringNameRule() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "quoted_string_name_rule.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "quoted string name", rule.getName() ); assertNotNull( rule.getLhs() ); assertEquals( "", ((String) rule.getConsequence()).trim() ); }
@Test public void testQualifiedClassname() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "qualified_classname.drl" ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); final PatternDescr p = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "com.cheeseco.Cheese", p.getObjectType() ); }
@Test public void testEval() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "eval_parsing.drl" ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule1.getLhs().getDescrs().size() ); }
@Test public void testEvalMultiple() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "eval_multiple.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 4, rule.getLhs().getDescrs().size() ); final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get( 0 ); assertEqualsIgnoreWhitespace( "abc(\"foo\") + 5", (String) eval.getContent() ); final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( "Foo", pattern.getObjectType() ); }
@Test public void testCollect() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "collect.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); final CollectDescr collect = (CollectDescr) outPattern.getSource(); final PatternDescr pattern = (PatternDescr) collect.getInputPattern(); assertEquals( "Person", pattern.getObjectType() ); }
@Test public void testEvalConstraintWithMvelOperator() { String drl = "rule \"yeah\" " + "\tdialect \"mvel\"\n when " + "Foo( eval( field soundslike \"water\" ) )" + " then " + "end"; DrlParser drlParser = new DrlParser(); PackageDescr packageDescr; try { packageDescr = drlParser.parse( true, drl ); } catch (DroolsParserException e) { throw new RuntimeException( e ); } RuleDescr r = packageDescr.getRules().get( 0 ); PatternDescr pd = (PatternDescr) r.getLhs().getDescrs().get( 0 ); assertEquals( 1, pd.getConstraint().getDescrs().size() ); }
@Test public void testMemberof() throws Exception { final String text = "rule X when Country( $cities : city )\nPerson( city memberOf $cities )\n then end"; AndDescr descrs = ((RuleDescr) parse( "rule", text )).getLhs(); assertEquals( 2, descrs.getDescrs().size() ); PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 ); ExprConstraintDescr fieldConstr = (ExprConstraintDescr) pat.getConstraint().getDescrs().get( 0 ); assertEquals( "city memberOf $cities", fieldConstr.getExpression() ); }
@Test public void testRestrictions() throws Exception { final String text = "rule X when Foo( bar > 1 || == 1 ) then end\n"; AndDescr descrs = (AndDescr) ((RuleDescr) parse( "rule", text )).getLhs(); assertEquals( 1, descrs.getDescrs().size() ); PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 0 ); ExprConstraintDescr fieldConstr = (ExprConstraintDescr) pat.getConstraint().getDescrs().get( 0 ); assertEquals( "bar > 1 || == 1", fieldConstr.getExpression() ); }
@Test public void testEndPosition() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "test_EndPosition.drl" ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( 21, col.getLine() ); assertEquals( 23, col.getEndLine() ); }
@Test public void testStringEscapes() throws Exception { String source = "package com.sample rule test when Cheese( type matches \"\\..*\\\\.\" ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertEquals( "com.sample", pkg.getName() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "test", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); AndDescr constraint = (AndDescr) pattern.getConstraint(); assertEquals( 1, constraint.getDescrs().size() ); assertEquals( "type matches \"\\..*\\\\.\"", constraint.getDescrs().get( 0 ).toString() ); }
@Test public void testWithEval() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "with_eval.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 3, rule.getLhs().getDescrs().size() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "Foo", pattern.getObjectType() ); pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( "Bar", pattern.getObjectType() ); final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get( 2 ); assertEqualsIgnoreWhitespace( "abc(\"foo\")", (String) eval.getContent() ); assertEqualsIgnoreWhitespace( "Kapow", (String) rule.getConsequence() ); }
@Test public void testWithPredicate() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "with_predicate.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); AndDescr and = (AndDescr) col.getConstraint(); assertEquals( 2, and.getDescrs().size() ); final ExprConstraintDescr field = (ExprConstraintDescr) col.getDescrs().get( 0 ); final ExprConstraintDescr pred = (ExprConstraintDescr) and.getDescrs().get( 1 ); assertEquals( "$age2:age", field.getExpression() ); assertEqualsIgnoreWhitespace( "$age2 == $age1+2", pred.getExpression() ); }
@Test public void testNotWithConstraint() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "not_with_constraint.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 2, rule.getLhs().getDescrs().size() ); PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); final ExprConstraintDescr fieldBinding = (ExprConstraintDescr) pattern.getDescrs().get( 0 ); assertEquals( "$likes:like", fieldBinding.getExpression() ); final NotDescr not = (NotDescr) rule.getLhs().getDescrs().get( 1 ); pattern = (PatternDescr) not.getDescrs().get( 0 ); final ExprConstraintDescr fld = (ExprConstraintDescr) pattern.getConstraint().getDescrs().get( 0 ); assertEquals( "type == $likes", fld.getExpression() ); }
@Test public void testNotMemberof() throws Exception { final String text = "rule X when Country( $cities : city )\nPerson( city not memberOf $cities ) then end\n"; AndDescr descrs = ((RuleDescr) parse( "rule", text )).getLhs(); assertEquals( 2, descrs.getDescrs().size() ); PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 ); ExprConstraintDescr fieldConstr = (ExprConstraintDescr) pat.getConstraint().getDescrs().get( 0 ); assertEquals( "city not memberOf $cities", fieldConstr.getExpression() ); }
@Test public void testSemicolon() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "semicolon.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( "org.drools.compiler", pkg.getName() ); assertEquals( 1, pkg.getGlobals().size() ); assertEquals( 3, pkg.getRules().size() ); final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 2, rule1.getLhs().getDescrs().size() ); final RuleDescr query1 = (RuleDescr) pkg.getRules().get( 1 ); assertEquals( 3, query1.getLhs().getDescrs().size() ); final RuleDescr rule2 = (RuleDescr) pkg.getRules().get( 2 ); assertEquals( 2, rule2.getLhs().getDescrs().size() ); }
@Test public void testConstraintOrConnective() throws Exception { final String text = "rule X when Person( age < 42 || location==\"atlanta\") then end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertEquals( 1, pattern.getDescrs().size() ); ExprConstraintDescr fcd = (ExprConstraintDescr) pattern.getDescrs().get( 0 ); assertEquals( "age < 42 || location==\"atlanta\"", fcd.getExpression() ); }
@Test public void testPredicate2() throws Exception { // predicates are also prefixed by the eval keyword final RuleDescr rule = (RuleDescr) parse( "rule", "rule X when Foo(eval( $var.equals(\"xyz\") )) then end" ); final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); final List< ? > constraints = pattern.getConstraint().getDescrs(); assertEquals( 1, constraints.size() ); final ExprConstraintDescr predicate = (ExprConstraintDescr) constraints.get( 0 ); assertEquals( "eval( $var.equals(\"xyz\") )", predicate.getExpression() ); }
@Test public void testConstraintAndConnective() throws Exception { final String text = "rule X when Person( age < 42 && location==\"atlanta\") then end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertEquals( 1, pattern.getDescrs().size() ); ExprConstraintDescr fcd = (ExprConstraintDescr) pattern.getDescrs().get( 0 ); assertEquals( "age < 42 && location==\"atlanta\"", fcd.getExpression() ); }