@Test public void testDurationExpression() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "rule_duration_expression.drl" ); assertEquals( "simple_rule", rule.getName() ); assertEqualsIgnoreWhitespace( "bar();", (String) rule.getConsequence() ); final Map<String, AttributeDescr> attrs = rule.getAttributes(); assertEquals( 2, attrs.size() ); AttributeDescr at = (AttributeDescr) attrs.get( "duration" ); assertEquals( "duration", at.getName() ); assertEquals( "1h30m", at.getValue() ); at = (AttributeDescr) attrs.get( "lock-on-active" ); assertEquals( "lock-on-active", at.getName() ); assertEquals( "true", at.getValue() ); }
protected void visit( final RuleDescr descr ) { checkResource(descr); for( AttributeDescr d : descr.getAttributes().values() ) { visit(d); } visit(descr.getLhs()); visitConsequence(descr.getConsequence()); for( Object o : descr.getNamedConsequences().values() ) { visitConsequence(o); } }
@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() ); }
private void createEvalRule( final PackageDescr packageDescr, final String expression ) { final RuleDescr ruleDescr = new RuleDescr( "rule-1" ); packageDescr.addRule( ruleDescr ); final AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); packageDescr.addGlobal( new GlobalDescr( "map", "java.util.Map" ) ); final EvalDescr evalDescr = new EvalDescr( expression ); lhs.addDescr( evalDescr ); ruleDescr.setConsequence( "" ); }
@Test public void testEmptyRule() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "empty_rule.drl" ); assertNotNull( rule ); assertEquals( "empty", rule.getName() ); assertNotNull( rule.getLhs() ); assertNotNull( rule.getConsequence() ); }
protected void visit(final RuleDescr descr) { // This is the NAME of the rule, not a reference to it!! String ruleName = getPackagePrefix() + descr.getName(); addResource(ruleName, ResourceType.RULE); // This is, on other hand, is a reference to the parent rule (because it's used in inheritance) String parentRuleName = descr.getParentName(); if (parentRuleName != null) { addResourceReference(parentRuleName, ResourceType.RULE); } for (AttributeDescr d : descr.getAttributes().values()) { visit(d); } visit(descr.getLhs()); visitConsequence(descr.getConsequence()); // need compilation for this.. for (String namedConsequence : descr.getNamedConsequences().keySet()) { // TODO // ? addResourceReference(namedConsequence, PartType.NAMED_CONSEQUENCE); } visitAnnos(descr); }
@Test public void testAttributeRefract() throws Exception { final String source = "rule Test refract when Person() 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() ); Map<String, AttributeDescr> attributes = rule.getAttributes(); assertEquals( 1, attributes.size() ); AttributeDescr refract = attributes.get( "refract" ); assertNotNull( refract ); assertEquals( "true", refract.getValue() ); }
model.name = ruleDescr.getName(); model.parentName = ruleDescr.getParentName(); for (AnnotationDescr annotation : ruleDescr.getAnnotations()) { model.addMetadata(new RuleMetadata(annotation.getName(), annotation.getValuesAsString())); ruleDescr.getAttributes()); Map<String, String> boundParams = parseLhs(model, ruleDescr.getLhs(), isJavaDialect, expandedDRLInfo, dmo); parseRhs(model, expandedDRLInfo.consequence != null ? expandedDRLInfo.consequence : (String) ruleDescr.getConsequence(), isJavaDialect, boundParams,
@Test public void testFrom() throws Exception { final RuleDescr rule = (RuleDescr) parseResource( "rule", "from.drl" ); assertFalse( parser.getErrorMessages().toString(), parser.hasErrors() ); assertNotNull( rule ); assertEquals( "using_from", rule.getName() ); assertEquals( 9, rule.getLhs().getDescrs().size() ); }
@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() ); }
private RuleModel getRuleModel( ExpandedDRLInfo expandedDRLInfo ) { //De-serialize model RuleDescr ruleDescr = parseDrl( expandedDRLInfo ); RuleModel model = new RuleModel(); model.name = ruleDescr.getName(); //De-serialize Package name final String packageName = PackageNameParser.parsePackageName( expandedDRLInfo.plainDrl ); model.setPackageName( packageName ); //De-serialize imports final Imports imports = ImportsParser.parseImports( expandedDRLInfo.plainDrl ); for ( Import item : imports.getImports() ) { model.getImports().addImport( item ); } boolean isJavaDialect = parseAttributes( model, ruleDescr.getAttributes() ); Map<String, String> boundParams = parseLhs( model, ruleDescr.getLhs(), expandedDRLInfo ); parseRhs( model, expandedDRLInfo.consequence != null ? expandedDRLInfo.consequence : (String)ruleDescr.getConsequence(), isJavaDialect, boundParams, expandedDRLInfo ); return model; }
@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 testRuleTwoLines() throws Exception { final String text = "rule \"another test\" salience 10 when eval( true ) then System.out.println(1);\n end"; RuleDescr rule = (RuleDescr) parse( "rule", text ); assertEquals( "another test", rule.getName() ); assertEquals( "System.out.println(1);\n ", rule.getConsequence() ); }
assertNull(mockDialect2.getRuleDescr()); RuleDescr ruleDescr = new RuleDescr("test rule"); ruleDescr.addAttribute(new AttributeDescr("dialect", "mock")); ruleDescr.setLhs(new AndDescr()); EvalDescr evalDescr = new EvalDescr(); ruleDescr.getLhs().addDescr(evalDescr); evalDescr.getContent()); assertEquals("consequence was built", ruleDescr.getConsequence()); assertTrue(mockDialect2.isCompileAll());
KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl( pkg, conf ); ruleDescr = new RuleDescr( "test consequence builder" ); ruleDescr.setConsequence( consequence ); ruleDescr.addAttribute( new AttributeDescr("dialect", "mvel") ); ruleDescr.addNamedConsequences( entry.getKey(), entry.getValue() ); RuleImpl rule = new RuleImpl( ruleDescr.getName() ); rule.addPattern( new Pattern( 0, new ClassObjectType( Cheese.class ),
@Test public void testRuleNamesStartingWithNumbers() throws Exception { final PackageDescr pkg = (PackageDescr) parseResource( "compilationUnit", "rule_names_number_prefix.drl" ); assertEquals( 2, pkg.getRules().size() ); assertEquals( "1. Do Stuff!", ((RuleDescr) pkg.getRules().get( 0 )).getName() ); assertEquals( "2. Do More Stuff!", ((RuleDescr) pkg.getRules().get( 1 )).getName() ); }
@Test public void testAttributeOverriding() { PackageDescr desc = new PackageDescr("foo"); AttributeDescr at1 = new AttributeDescr("foo", "bar"); AttributeDescr at2 = new AttributeDescr("foo2", "default"); desc.addAttribute( at1 ); desc.addAttribute( at2 ); RuleDescr rule = new RuleDescr("abc"); rule.addAttribute( new AttributeDescr("foo", "overridden") ); desc.addRule( rule ); List pkgAts = desc.getAttributes(); assertEquals("bar", ((AttributeDescr)pkgAts.get( 0 )).getValue()); assertEquals("default", ((AttributeDescr)pkgAts.get( 1 )).getValue()); desc.afterRuleAdded( rule ); Map<String, AttributeDescr> ruleAts = rule.getAttributes(); assertEquals("overridden", ((AttributeDescr)ruleAts.get( "foo" )).getValue()); assertEquals("default", ((AttributeDescr)ruleAts.get( "foo2" )).getValue()); }
@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() ); }
private PackageDescr createBasicPackageWithOneRule(int line, int col) { PackageDescr packageDescr = new PackageDescr( "p1" ); RuleDescr ruleDescr = new RuleDescr( "rule-1" ); ruleDescr.setLocation( line, col ); packageDescr.addRule( ruleDescr ); AndDescr lhs = new AndDescr(); ruleDescr.setLhs( lhs ); PatternDescr patternDescr = new PatternDescr( Cheese.class.getName(), "stilton" ); FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" ); literalDescr.addRestriction( new LiteralRestrictionDescr( "==", null ) ); patternDescr.addConstraint( literalDescr ); ruleDescr.setConsequence( "" ); return packageDescr; }
@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() ); }