@Test public void testOrWithSpecialBind() throws Exception { String source = "rule \"A and (B or C or D)\" \n" + " when \n" + " pdo1 : ParametricDataObject( paramID == 101, stringValue == \"1000\" ) and \n" + " pdo2 :(ParametricDataObject( paramID == 101, stringValue == \"1001\" ) or \n" + " ParametricDataObject( paramID == 101, stringValue == \"1002\" ) or \n" + " ParametricDataObject( paramID == 101, stringValue == \"1003\" )) \n" + " then \n" + " System.out.println( \"Rule: A and (B or C or D) Fired. pdo1: \" + pdo1 + \" pdo2: \"+ pdo2); \n" + "end\n"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); RuleDescr rule = pkg.getRules().get( 0 ); AndDescr lhs = rule.getLhs(); assertEquals( 2, lhs.getDescrs().size() ); PatternDescr pdo1 = (PatternDescr) lhs.getDescrs().get( 0 ); assertEquals( "pdo1", pdo1.getIdentifier() ); OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 1 ); assertEquals( 3, or.getDescrs().size() ); for ( BaseDescr pdo2 : or.getDescrs() ) { assertEquals( "pdo2", ((PatternDescr) pdo2).getIdentifier() ); } }
@Test public void testParseFrom() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseFrom.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 0 ); PatternDescr patterndescr = (PatternDescr) obj.getLhs().getDescrs().get( 0 ); FromDescr from = (FromDescr) patterndescr.getSource(); MVELExprDescr accessordescriptor = (MVELExprDescr) from.getDataSource(); assertEquals( "cheesery.getCheeses(i+4)", accessordescriptor.getExpression() ); assertEquals( patterndescr.getObjectType(), "Cheese" ); assertEquals( patterndescr.getIdentifier(), "cheese" ); }
@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 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() ); }
leftPattern.getObjectType() ); assertEquals( "foo", leftPattern.getIdentifier() ); rightPattern.getObjectType() ); assertEquals( "foo", rightPattern.getIdentifier() ); cheeseDescr.getObjectType() ); assertEquals( null, cheeseDescr.getIdentifier() );
@Test public void testRuleOldSyntax1() throws Exception { final String source = "rule \"Test\" when ( not $r :LiteralRestriction( operator == Operator.EQUAL ) ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "Test", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); assertEquals( 1, ((NotDescr) rule.getLhs().getDescrs().get( 0 )).getDescrs().size() ); NotDescr notDescr = (NotDescr) rule.getLhs().getDescrs().get( 0 ); PatternDescr patternDescr = (PatternDescr) notDescr.getDescrs().get( 0 ); assertEquals( "$r", patternDescr.getIdentifier() ); assertEquals( 1, patternDescr.getDescrs().size() ); ExprConstraintDescr fieldConstraintDescr = (ExprConstraintDescr) patternDescr.getDescrs().get( 0 ); assertEquals( "operator == Operator.EQUAL", fieldConstraintDescr.getExpression() ); }
@Test public void testOrBindingWithBrackets() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "or_binding_with_brackets.drl" ); assertEquals( 1, pkg.getRules().size() ); final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( 1, rule.getLhs().getDescrs().size() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( 2, or.getDescrs().size() ); // first fact final PatternDescr firstFact = (PatternDescr) or.getDescrs().get( 0 ); assertEquals( "Person", firstFact.getObjectType() ); assertEquals( "foo", firstFact.getIdentifier() ); // second "option" final PatternDescr secondFact = (PatternDescr) or.getDescrs().get( 0 ); assertEquals( "Person", secondFact.getObjectType() ); assertEquals( "foo", secondFact.getIdentifier() ); assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );", (String) rule.getConsequence() ); }
@Test public void testRuleOldSyntax2() throws Exception { final String source = "rule \"Test\" when ( $r :LiteralRestriction( operator == Operator.EQUAL ) ) then end"; PackageDescr pkg = (PackageDescr) parse( "compilationUnit", source ); assertFalse( parser.getErrors().toString(), parser.hasErrors() ); RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 ); assertEquals( "Test", rule.getName() ); assertEquals( 1, rule.getLhs().getDescrs().size() ); PatternDescr patternDescr = (PatternDescr) rule.getLhs().getDescrs().get( 0 ); assertEquals( "$r", patternDescr.getIdentifier() ); assertEquals( 1, patternDescr.getDescrs().size() ); ExprConstraintDescr fieldConstraintDescr = (ExprConstraintDescr) patternDescr.getDescrs().get( 0 ); assertEquals( "operator == Operator.EQUAL", fieldConstraintDescr.getExpression() ); }
firstFact.getObjectType() ); assertEquals( "foo", firstFact.getIdentifier() ); secondFact.getConstraint().getDescrs().size() ); assertEquals( "foo", secondFact.getIdentifier() );
@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() ); }
first.getIdentifier() ); assertEquals( "Bar", first.getObjectType() ); second.getIdentifier() ); assertEquals( "Bar", second.getObjectType() );
@Test public void testAccumulateMultiPattern() throws Exception { final XmlPackageReader xmlPackageReader = getXmReader(); xmlPackageReader.read( new InputStreamReader( getClass().getResourceAsStream( "test_ParseAccumulate.xml" ) ) ); final PackageDescr packageDescr = xmlPackageReader.getPackageDescr(); assertNotNull( packageDescr ); RuleDescr obj = (RuleDescr) packageDescr.getRules().get( 1 ); Object patternobj = obj.getLhs().getDescrs().get( 0 ); assertTrue( patternobj instanceof PatternDescr ); final PatternDescr patterncheese = (PatternDescr) patternobj; assertEquals( patterncheese.getIdentifier(), "cheese" ); assertEquals( patterncheese.getObjectType(), "Cheese" ); AccumulateDescr accumulatedescr = (AccumulateDescr) patterncheese.getSource(); assertEquals( "total += $cheese.getPrice();", accumulatedescr.getActionCode() ); assertEquals( "int total = 0;", accumulatedescr.getInitCode() ); assertEquals( "new Integer( total ) );", accumulatedescr.getResultCode() ); AndDescr anddescr = (AndDescr) accumulatedescr.getInput(); List descrlist = anddescr.getDescrs(); PatternDescr[] listpattern = (PatternDescr[]) descrlist.toArray( new PatternDescr[descrlist.size()] ); assertEquals( listpattern[0].getObjectType(), "Milk" ); assertEquals( listpattern[1].getObjectType(), "Cup" ); }
first.getIdentifier() ); assertEquals( "Bar", first.getObjectType() ); second.getIdentifier() ); assertEquals( "Bar", second.getObjectType() ); assertNull( third.getIdentifier() ); assertEquals( "Baz", third.getObjectType() );
@Test public void testAccumulateMultiPattern() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "accumulate_multi_pattern.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 AccumulateDescr accum = (AccumulateDescr) outPattern.getSource(); assertEqualsIgnoreWhitespace( "$counter", outPattern.getIdentifier() ); assertEqualsIgnoreWhitespace( "int x = 0 ;", accum.getInitCode() ); assertEqualsIgnoreWhitespace( "x++;", accum.getActionCode() ); assertEqualsIgnoreWhitespace( "new Integer(x)", accum.getResultCode() ); final AndDescr and = (AndDescr) accum.getInput(); assertEquals( 2, and.getDescrs().size() ); final PatternDescr person = (PatternDescr) and.getDescrs().get( 0 ); final PatternDescr cheese = (PatternDescr) and.getDescrs().get( 1 ); assertEquals( "Person", person.getObjectType() ); assertEquals( "Cheese", cheese.getObjectType() ); }
@Test public void testAccumulateWithBindings() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "accumulate_with_bindings.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 AccumulateDescr accum = (AccumulateDescr) outPattern.getSource(); assertEqualsIgnoreWhitespace( "$counter", outPattern.getIdentifier() ); assertEqualsIgnoreWhitespace( "int x = 0 ;", accum.getInitCode() ); assertEqualsIgnoreWhitespace( "x++;", accum.getActionCode() ); assertEqualsIgnoreWhitespace( "new Integer(x)", accum.getResultCode() ); final PatternDescr pattern = (PatternDescr) accum.getInputPattern(); assertEquals( "Person", pattern.getObjectType() ); }
eventA.getIdentifier() ); assertEquals( "EventA", eventA.getObjectType() ); eventB.getIdentifier() ); assertEquals( "EventB", eventB.getObjectType() ); eventC.getIdentifier() ); assertEquals( "EventC", eventC.getObjectType() ); eventD.getIdentifier() ); assertEquals( "EventD", eventD.getObjectType() ); eventE.getIdentifier() ); assertEquals( "EventE", eventE.getObjectType() );
assertTrue( patternobj instanceof PatternDescr ); final PatternDescr patterncheese = (PatternDescr) patternobj; assertEquals( patterncheese.getIdentifier(), "cheese" ); assertEquals( patterncheese.getObjectType(), assertEquals( patternmax.getIdentifier(), "max" ); assertEquals( patternmax.getObjectType(),
first.getIdentifier() ); assertEquals( "Bar", first.getObjectType() ); second.getIdentifier() ); assertEquals( "Bar", second.getObjectType() ); assertNull( third.getIdentifier() ); assertEquals( "Baz", third.getObjectType() );
first.getIdentifier() ); assertEquals( "Bar", first.getObjectType() ); second.getIdentifier() ); assertEquals( "Bar", second.getObjectType() );
assertNotNull( pd ); assertEquals( "$s", pd.getIdentifier() ); assertEquals( "StockTick", pd.getObjectType() );