@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 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 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 testParseForall() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseForall.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); ForallDescr forall = (ForallDescr) obj.getLhs().getDescrs().get( 0 ); List forallPaterns = forall.getDescrs(); PatternDescr pattarnState = (PatternDescr) forallPaterns.get( 0 ); PatternDescr personState = (PatternDescr) forallPaterns.get( 1 ); PatternDescr cheeseState = (PatternDescr) forallPaterns.get( 2 ); assertEquals( pattarnState.getObjectType(), "State" ); assertEquals( personState.getObjectType(), "Person" ); assertEquals( cheeseState.getObjectType(), "Cheese" ); }
@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 testAccumulateWithNestedFrom() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "accumulate_with_nested_from.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 accumulate = (AccumulateDescr) out.getSource(); PatternDescr person = (PatternDescr) accumulate.getInputPattern(); assertEquals( "Person", person.getObjectType() ); final CollectDescr collect2 = (CollectDescr) person.getSource(); final PatternDescr people = collect2.getInputPattern(); assertEquals( "People", people.getObjectType() ); }
@Test public void testForall() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "forall.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final ForallDescr forall = (ForallDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( 2, forall.getDescrs().size() ); final PatternDescr pattern = forall.getBasePattern(); assertEquals( "Person", pattern.getObjectType() ); final List<BaseDescr> remaining = forall.getRemainingPatterns(); assertEquals( 1, remaining.size() ); final PatternDescr cheese = (PatternDescr) remaining.get( 0 ); assertEquals( "Cheese", cheese.getObjectType() ); }
@Test public void testCollectWithNestedFrom() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "collect_with_nested_from.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 CollectDescr collect = (CollectDescr) out.getSource(); PatternDescr person = (PatternDescr) collect.getInputPattern(); assertEquals( "Person", person.getObjectType() ); final CollectDescr collect2 = (CollectDescr) person.getSource(); final PatternDescr people = collect2.getInputPattern(); assertEquals( "People", people.getObjectType() ); }
@Test public void testNestedCEs() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "nested_conditional_elements.drl" ); assertNotNull( rule ); final AndDescr root = rule.getLhs(); final NotDescr not1 = (NotDescr) root.getDescrs().get( 0 ); final AndDescr and1 = (AndDescr) not1.getDescrs().get( 0 ); final PatternDescr state = (PatternDescr) and1.getDescrs().get( 0 ); final NotDescr not2 = (NotDescr) and1.getDescrs().get( 1 ); final AndDescr and2 = (AndDescr) not2.getDescrs().get( 0 ); final PatternDescr person = (PatternDescr) and2.getDescrs().get( 0 ); final PatternDescr cheese = (PatternDescr) and2.getDescrs().get( 1 ); final PatternDescr person2 = (PatternDescr) root.getDescrs().get( 1 ); final OrDescr or = (OrDescr) root.getDescrs().get( 2 ); final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get( 0 ); final PatternDescr cheese3 = (PatternDescr) or.getDescrs().get( 1 ); assertEquals( state.getObjectType(), "State" ); assertEquals( person.getObjectType(), "Person" ); assertEquals( cheese.getObjectType(), "Cheese" ); assertEquals( person2.getObjectType(), "Person" ); assertEquals( cheese2.getObjectType(), "Cheese" ); assertEquals( cheese3.getObjectType(), "Cheese" ); }
@Test public void testBasicBinding() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "basic_binding.drl" ); final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 ); final AndDescr lhs = ruleDescr.getLhs(); assertEquals( 1, lhs.getDescrs().size() ); final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get( 0 ); assertEquals( "Cheese", cheese.getObjectType() ); assertEquals( 1, cheese.getConstraint().getDescrs().size() ); final ExprConstraintDescr fieldBinding = (ExprConstraintDescr) cheese.getDescrs().get( 0 ); assertEquals( "$type:type", fieldBinding.getExpression() ); }
@Test public void testParseExists() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseExists.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); Object existdescr = obj.getLhs().getDescrs().get( 0 ); assertTrue( existdescr instanceof ExistsDescr ); Object patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 ); assertTrue( patternDescriptor instanceof PatternDescr ); assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Person" ); Object notDescr = obj.getLhs().getDescrs().get( 1 ); assertEquals( notDescr.getClass().getName(), NotDescr.class.getName() ); existdescr = ((NotDescr) notDescr).getDescrs().get( 0 ); patternDescriptor = ((ExistsDescr) existdescr).getDescrs().get( 0 ); assertTrue( patternDescriptor instanceof PatternDescr ); assertEquals( ((PatternDescr) patternDescriptor).getObjectType(), "Cheese" ); }
@Test public void testWithRetval() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "with_retval.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 ); assertEquals( 1, col.getConstraint().getDescrs().size() ); assertEquals( "Foo", col.getObjectType() ); final ExprConstraintDescr fld = (ExprConstraintDescr) col.getConstraint().getDescrs().get( 0 ); assertEquals( "name== (a + b)", fld.getExpression() ); }
@Test public void testOrNesting() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "or_nesting.drl" ); assertNotNull( pkg ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "simple_rule", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( 2, or.getDescrs().size() ); final PatternDescr first = (PatternDescr) or.getDescrs().get( 0 ); assertEquals( "Person", first.getObjectType() ); final AndDescr and = (AndDescr) or.getDescrs().get( 1 ); assertEquals( 2, and.getDescrs().size() ); final PatternDescr left = (PatternDescr) and.getDescrs().get( 0 ); assertEquals( "Person", left.getObjectType() ); final PatternDescr right = (PatternDescr) and.getDescrs().get( 1 ); assertEquals( "Cheese", right.getObjectType() ); }
@Test public void testEmptyPattern() throws Exception { PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "test_EmptyPattern.drl" ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "simple rule", ruleDescr.getName() ); assertNotNull( ruleDescr.getLhs() ); assertEquals( 1, ruleDescr.getLhs().getDescrs().size() ); final PatternDescr patternDescr = (PatternDescr) ruleDescr.getLhs().getDescrs().get( 0 ); assertEquals( 0, patternDescr.getConstraint().getDescrs().size() ); // this assertEquals( "Cheese", patternDescr.getObjectType() ); }
@Test public void testRuleParseLhs3() throws Exception { final String text = "rule X when (or\nnot Person()\n(and Cheese()\nMeat()\nWine())) then end"; AndDescr pattern = ((RuleDescr) parse( "rule", text )).getLhs(); assertEquals( 1, pattern.getDescrs().size() ); OrDescr or = (OrDescr) pattern.getDescrs().get( 0 ); assertEquals( 2, or.getDescrs().size() ); NotDescr not = (NotDescr) or.getDescrs().get( 0 ); AndDescr and = (AndDescr) or.getDescrs().get( 1 ); assertEquals( 1, not.getDescrs().size() ); PatternDescr person = (PatternDescr) not.getDescrs().get( 0 ); assertEquals( "Person", person.getObjectType() ); assertEquals( 3, and.getDescrs().size() ); PatternDescr cheese = (PatternDescr) and.getDescrs().get( 0 ); assertEquals( "Cheese", cheese.getObjectType() ); PatternDescr meat = (PatternDescr) and.getDescrs().get( 1 ); assertEquals( "Meat", meat.getObjectType() ); PatternDescr wine = (PatternDescr) and.getDescrs().get( 2 ); assertEquals( "Wine", wine.getObjectType() ); }
@Test public void testInlineEval() throws Exception { final String text = "rule \"inline eval\"\n" + "when\n" + " Person( eval( name.startsWith(\"b\") && name.finishesWith(\"b\")) )\n" + "then\n" + "end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertEquals( "Person", pattern.getObjectType() ); ExprConstraintDescr constr = (ExprConstraintDescr) pattern.getConstraint().getDescrs().get( 0 ); assertEquals( "eval( name.startsWith(\"b\") && name.finishesWith(\"b\"))", constr.getText() ); }
pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); final AndDescr rootAnd = (AndDescr) rule.getLhs(); rootAnd.getDescrs().size() ); final OrDescr leftOr = (OrDescr) rootAnd.getDescrs().get( 0 ); leftOr.getDescrs().size() ); final NotDescr not = (NotDescr) leftOr.getDescrs().get( 0 ); final PatternDescr foo1 = (PatternDescr) not.getDescrs().get( 0 ); assertEquals( "Foo", foo1.getObjectType() ); final PatternDescr foo2 = (PatternDescr) leftOr.getDescrs().get( 1 ); assertEquals( "Foo", foo2.getObjectType() ); final OrDescr rightOr = (OrDescr) rootAnd.getDescrs().get( 1 ); final PatternDescr shoes = (PatternDescr) rightOr.getDescrs().get( 0 ); assertEquals( "Shoes", shoes.getObjectType() ); final PatternDescr butt = (PatternDescr) rightOr.getDescrs().get( 1 ); assertEquals( "Butt", butt.getObjectType() );
@Test public void testOrCE() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "or_ce.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 2, rule.getLhs().getDescrs().size() ); final PatternDescr person = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "Person", person.getObjectType() ); assertEquals( "$p", person.getIdentifier() ); final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( 2, or.getDescrs().size() ); final PatternDescr cheese1 = (PatternDescr) or.getDescrs().get( 0 ); assertEquals( "Cheese", cheese1.getObjectType() ); assertEquals( "$c", cheese1.getIdentifier() ); final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get( 1 ); assertEquals( "Cheese", cheese2.getObjectType() ); assertNull( cheese2.getIdentifier() ); }
@Test public void testPluggableOperators2() throws Exception { final String text = "rule \"tt\"\n" + " dialect \"mvel\"\n" + "when\n" + " exists (TelephoneCall( this finishes [1m] \"25-May-2011\" ))\n" + "then\n" + "end"; PatternDescr pattern = (PatternDescr) ((ExistsDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 )).getDescrs().get( 0 ); assertEquals( "TelephoneCall", pattern.getObjectType() ); ExprConstraintDescr constr = (ExprConstraintDescr) pattern.getConstraint().getDescrs().get( 0 ); assertEquals( "this finishes [1m] \"25-May-2011\"", constr.getText() ); }
@Test public void testInfinityLiteral() throws Exception { final String text = "rule \"infinity\"\n" + "when\n" + " StockTick( this after[-*,*] $another )\n" + "then\n" + "end"; PatternDescr pattern = (PatternDescr) ((RuleDescr) parse( "rule", text )).getLhs().getDescrs().get( 0 ); assertEquals( "StockTick", pattern.getObjectType() ); ExprConstraintDescr constr = (ExprConstraintDescr) pattern.getConstraint().getDescrs().get( 0 ); assertEquals( "this after[-*,*] $another", constr.getText() ); }