📄 ruleparsertest.java
字号:
assertTrue( parser.hasErrors() );
final List messages = parser.getErrorMessages();
assertEquals( messages.size(),
parser.getErrors().size() );
assertEquals( 4,
parser.getErrors().size() );
assertEquals( ExpanderException.class,
parser.getErrors().get( 0 ).getClass() );
assertEquals( 8,
((RecognitionException) parser.getErrors().get( 0 )).line );
assertEquals( 10,
((RecognitionException) parser.getErrors().get( 1 )).line );
assertEquals( 12,
((RecognitionException) parser.getErrors().get( 2 )).line );
assertEquals( 13,
((RecognitionException) parser.getErrors().get( 3 )).line );
final PackageDescr pack = parser.getPackageDescr();
assertNotNull( pack );
final ExpanderException ex = (ExpanderException) parser.getErrors().get( 0 );
assertTrue( ex.getMessage().indexOf( "whoops" ) > -1 );
}
public void testBasicBinding() throws Exception {
final RuleParser parser = parseResource( "basic_binding.drl" );
parser.compilation_unit();
final PackageDescr pkg = parser.getPackageDescr();
final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );
final AndDescr lhs = ruleDescr.getLhs();
assertEquals( 1,
lhs.getDescrs().size() );
final ColumnDescr cheese = (ColumnDescr) lhs.getDescrs().get( 0 );
assertEquals( 1,
cheese.getDescrs().size() );
assertEquals( "Cheese",
cheese.getObjectType() );
assertEquals( 1,
lhs.getDescrs().size() );
final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
assertEquals( "type",
fieldBinding.getFieldName() );
assertFalse( parser.hasErrors() );
}
public void testBoundVariables() throws Exception {
final RuleParser parser = parseResource( "bindings.drl" );
parser.compilation_unit();
final PackageDescr pkg = parser.getPackageDescr();
final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );
final AndDescr lhs = ruleDescr.getLhs();
assertEquals( 2,
lhs.getDescrs().size() );
final ColumnDescr cheese = (ColumnDescr) lhs.getDescrs().get( 0 );
assertEquals( "Cheese",
cheese.getObjectType() );
assertEquals( 2,
lhs.getDescrs().size() );
FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
assertEquals( "type",
fieldBinding.getFieldName() );
LiteralDescr literalDescr = (LiteralDescr) cheese.getDescrs().get( 1 );
assertEquals( "type",
literalDescr.getFieldName() );
assertEquals( "==",
literalDescr.getEvaluator() );
assertEquals( "stilton",
literalDescr.getText() );
final ColumnDescr person = (ColumnDescr) lhs.getDescrs().get( 1 );
fieldBinding = (FieldBindingDescr) person.getDescrs().get( 0 );
assertEquals( "name",
fieldBinding.getFieldName() );
literalDescr = (LiteralDescr) person.getDescrs().get( 1 );
assertEquals( "name",
literalDescr.getFieldName() );
assertEquals( "==",
literalDescr.getEvaluator() );
assertEquals( "bob",
literalDescr.getText() );
final BoundVariableDescr variableDescr = (BoundVariableDescr) person.getDescrs().get( 2 );
assertEquals( "likes",
variableDescr.getFieldName() );
assertEquals( "==",
variableDescr.getEvaluator() );
assertEquals( "$type",
variableDescr.getIdentifier() );
assertFalse( parser.hasErrors() );
}
public void testOrNesting() throws Exception {
final RuleParser parser = parseResource( "or_nesting.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertNotNull( pack );
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( "simple_rule",
rule.getName() );
assertEquals(1, rule.getLhs().getDescrs().size());
OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
assertEquals(2, or.getDescrs().size());
ColumnDescr first = (ColumnDescr) or.getDescrs().get( 0 );
assertEquals("Person", first.getObjectType());
AndDescr and = (AndDescr) or.getDescrs().get( 1 );
assertEquals(2, and.getDescrs().size());
ColumnDescr left = (ColumnDescr) and.getDescrs().get( 0 );
assertEquals("Person", left.getObjectType());
ColumnDescr right = (ColumnDescr) and.getDescrs().get( 1 );
assertEquals("Cheese", right.getObjectType());
}
/** Test that explicit "&&", "||" works as expected */
public void testAndOrRules() throws Exception {
final RuleParser parser = parseResource( "and_or_rule.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertNotNull( pack );
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( "simple_rule",
rule.getName() );
//we will have 2 children under the main And node
final AndDescr and = rule.getLhs();
assertEquals( 2,
and.getDescrs().size() );
//check the "&&" part
final AndDescr join = (AndDescr) and.getDescrs().get( 0 );
assertEquals( 2,
join.getDescrs().size() );
ColumnDescr left = (ColumnDescr) join.getDescrs().get( 0 );
ColumnDescr right = (ColumnDescr) join.getDescrs().get( 1 );
assertEquals( "Person",
left.getObjectType() );
assertEquals( "Cheese",
right.getObjectType() );
assertEquals( 1,
left.getDescrs().size() );
LiteralDescr literal = (LiteralDescr) left.getDescrs().get( 0 );
assertEquals( "==",
literal.getEvaluator() );
assertEquals( "name",
literal.getFieldName() );
assertEquals( "mark",
literal.getText() );
assertEquals( 1,
right.getDescrs().size() );
literal = (LiteralDescr) right.getDescrs().get( 0 );
assertEquals( "==",
literal.getEvaluator() );
assertEquals( "type",
literal.getFieldName() );
assertEquals( "stilton",
literal.getText() );
//now the "||" part
final OrDescr or = (OrDescr) and.getDescrs().get( 1 );
assertEquals( 2,
or.getDescrs().size() );
left = (ColumnDescr) or.getDescrs().get( 0 );
right = (ColumnDescr) or.getDescrs().get( 1 );
assertEquals( "Person",
left.getObjectType() );
assertEquals( "Cheese",
right.getObjectType() );
assertEquals( 1,
left.getDescrs().size() );
literal = (LiteralDescr) left.getDescrs().get( 0 );
assertEquals( "==",
literal.getEvaluator() );
assertEquals( "name",
literal.getFieldName() );
assertEquals( "mark",
literal.getText() );
assertEquals( 1,
right.getDescrs().size() );
literal = (LiteralDescr) right.getDescrs().get( 0 );
assertEquals( "==",
literal.getEvaluator() );
assertEquals( "type",
literal.getFieldName() );
assertEquals( "stilton",
literal.getText() );
assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" );",
rule.getConsequence() );
assertFalse( parser.hasErrors() );
}
/** test basic foo : Fact() || Fact() stuff */
public void testOrWithBinding() throws Exception {
final RuleParser parser = parseResource( "or_binding.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( 2,
rule.getLhs().getDescrs().size() );
final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
assertEquals( 2,
or.getDescrs().size() );
final ColumnDescr leftCol = (ColumnDescr) or.getDescrs().get( 0 );
assertEquals( "Person",
leftCol.getObjectType() );
assertEquals( "foo",
leftCol.getIdentifier() );
final ColumnDescr rightCol = (ColumnDescr) or.getDescrs().get( 1 );
assertEquals( "Person",
rightCol.getObjectType() );
assertEquals( "foo",
rightCol.getIdentifier() );
final ColumnDescr cheeseDescr = (ColumnDescr) rule.getLhs().getDescrs().get( 1 );
assertEquals("Cheese", cheeseDescr.getObjectType());
assertEquals(null, cheeseDescr.getIdentifier());
assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
rule.getConsequence() );
assertFalse( parser.hasErrors() );
}
/** test basic foo : Fact() || Fact() stuff binding to an "or"*/
public void testOrBindingComplex() throws Exception {
final RuleParser parser = parseResource( "or_binding_complex.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.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 ColumnDescr firstFact = (ColumnDescr) or.getDescrs().get( 0 );
assertEquals( "Person",
firstFact.getObjectType() );
assertEquals( "foo",
firstFact.getIdentifier() );
//second "option"
final ColumnDescr secondFact = (ColumnDescr) or.getDescrs().get( 1 );
assertEquals( "Person",
secondFact.getObjectType() );
assertEquals(1, secondFact.getDescrs().size());
assertEquals("foo", secondFact.getIdentifier());
assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
rule.getConsequence() );
assertFalse( parser.hasErrors() );
}
public void testOrBindingWithBrackets() throws Exception {
final RuleParser parser = parseResource( "or_binding_with_brackets.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.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 ColumnDescr firstFact = (ColumnDescr) or.getDescrs().get( 0 );
assertEquals( "Person",
firstFact.getObjectType() );
assertEquals( "foo",
firstFact.getIdentifier() );
//second "option"
final ColumnDescr secondFact = (ColumnDescr) or.getDescrs().get( 0 );
assertEquals( "Person",
secondFact.getObjectType() );
assertEquals( "foo",
secondFact.getIdentifier() );
assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
rule.getConsequence() );
assertFalse( parser.hasErrors() );
}
/** */
public void testBracketsPrecedence() throws Exception {
final RuleParser parser = parseResource( "brackets_precedence.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertEquals( 1,
pack.getRules().size() );
final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( 1,
rule.getLhs().getDescrs().size() );
final AndDescr rootAnd = (AndDescr) rule.getLhs().getDescrs().get( 0 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -