📄 ruleparsertest.java
字号:
assertEquals( "simple_query",
query.getName() );
final AndDescr lhs = query.getLhs();
assertNotNull( lhs );
assertEquals( 3,
lhs.getDescrs().size() );
// Check first column
final ColumnDescr first = (ColumnDescr) lhs.getDescrs().get( 0 );
assertEquals( "foo3",
first.getIdentifier() );
assertEquals( "Bar",
first.getObjectType() );
assertEquals( 1,
first.getDescrs().size() );
LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
assertNotNull( constraint );
assertEquals( "a",
constraint.getFieldName() );
assertEquals( "==",
constraint.getEvaluator() );
assertEquals( "3",
constraint.getText() );
// Check second column
final ColumnDescr second = (ColumnDescr) lhs.getDescrs().get( 1 );
assertEquals( "foo4",
second.getIdentifier() );
assertEquals( "Bar",
second.getObjectType() );
assertEquals( 2,
second.getDescrs().size() );
//check it has field bindings.
final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) second.getDescrs().get( 0 );
assertEquals( "a",
fieldBindingDescr.getFieldName() );
assertEquals( "a4",
fieldBindingDescr.getIdentifier() );
constraint = (LiteralDescr) second.getDescrs().get( 1 );
assertNotNull( constraint );
assertEquals( "a",
constraint.getFieldName() );
assertEquals( "==",
constraint.getEvaluator() );
assertEquals( "4",
constraint.getText() );
assertFalse( this.parser.hasErrors() );
}
public void testQueryRuleMixed() throws Exception {
final RuleParser parser = parseResource( "query_and_rule.drl" );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertEquals( 4,
pack.getRules().size() ); //as queries are rules
RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( "bar",
rule.getName() );
QueryDescr query = (QueryDescr) pack.getRules().get( 1 );
assertEquals( "simple_query",
query.getName() );
rule = (RuleDescr) pack.getRules().get( 2 );
assertEquals( "bar2",
rule.getName() );
query = (QueryDescr) pack.getRules().get( 3 );
assertEquals( "simple_query2",
query.getName() );
assertFalse( parser.hasErrors() );
}
public void testMultipleRules() throws Exception {
final RuleParser parser = parseResource( "multiple_rules.drl" );
parser.compilation_unit();
final PackageDescr pkg = parser.getPackageDescr();
final List rules = pkg.getRules();
assertEquals( 2,
rules.size() );
final RuleDescr rule0 = (RuleDescr) rules.get( 0 );
assertEquals( "Like Stilton",
rule0.getName() );
final RuleDescr rule1 = (RuleDescr) rules.get( 1 );
assertEquals( "Like Cheddar",
rule1.getName() );
//checkout the first rule
AndDescr lhs = rule1.getLhs();
assertNotNull( lhs );
assertEquals( 1,
lhs.getDescrs().size() );
assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
rule0.getConsequence() );
// Check first column
ColumnDescr first = (ColumnDescr) lhs.getDescrs().get( 0 );
assertEquals( "Cheese",
first.getObjectType() );
//checkout the second rule
lhs = rule1.getLhs();
assertNotNull( lhs );
assertEquals( 1,
lhs.getDescrs().size() );
assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
rule1.getConsequence() );
// Check first column
first = (ColumnDescr) lhs.getDescrs().get( 0 );
assertEquals( "Cheese",
first.getObjectType() );
assertFalse( parser.hasErrors() );
}
public void testSimpleExpander() throws Exception {
final RuleParser parser = parseResource( "simple_expander.drl" );
final MockExpanderResolver mockExpanderResolver = new MockExpanderResolver();
parser.setExpanderResolver( mockExpanderResolver );
parser.compilation_unit();
final PackageDescr pack = parser.getPackageDescr();
assertNotNull( pack );
assertEquals( 1,
pack.getRules().size() );
assertTrue( mockExpanderResolver.checkCalled( "foo.dsl" ) );
final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
assertEquals( "simple_rule",
rule.getName() );
//now check out the LHS
assertEquals( 4,
rule.getLhs().getDescrs().size() );
//The rain in spain ... ----> foo : Bar(a==3) (via MockExpander)
ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get( 0 );
assertEquals( "Bar",
col.getObjectType() );
assertEquals( "foo1",
col.getIdentifier() );
assertEquals( 1,
col.getDescrs().size() );
assertEquals( 6,
col.getLine() );
LiteralDescr lit = (LiteralDescr) col.getDescrs().get( 0 );
assertEquals( "==",
lit.getEvaluator() );
assertEquals( "a",
lit.getFieldName() );
assertEquals( "1",
lit.getText() );
//>Baz() --> not expanded, as it has the magical escape character '>' !!
col = (ColumnDescr) rule.getLhs().getDescrs().get( 1 );
assertEquals( "Baz",
col.getObjectType() );
assertEquals( 7,
col.getLine() );
//The rain in spain ... ----> foo : Bar(a==3) (via MockExpander), again...
col = (ColumnDescr) rule.getLhs().getDescrs().get( 2 );
assertEquals( "Bar",
col.getObjectType() );
assertEquals( "foo2",
col.getIdentifier() );
assertEquals( 1,
col.getDescrs().size() );
assertEquals( 8,
col.getLine() );
lit = (LiteralDescr) col.getDescrs().get( 0 );
assertEquals( "==",
lit.getEvaluator() );
assertEquals( "a",
lit.getFieldName() );
assertEquals( "2",
lit.getText() );
//>Bar() --> not expanded, as it has the magical escape character '>' !!
col = (ColumnDescr) rule.getLhs().getDescrs().get( 3 );
assertEquals( "Bar",
col.getObjectType() );
assertEquals( 9,
col.getLine() );
assertEqualsIgnoreWhitespace( "bar foo3 : Bar(a==3) baz foo4 : Bar(a==4)",
rule.getConsequence() );
assertTrue( mockExpanderResolver.checkExpanded( "when,The rain in spain falls mainly" ) );
assertTrue( mockExpanderResolver.checkExpanded( "then,Something else" ) );
assertTrue( mockExpanderResolver.checkExpanded( "then,Hey dude" ) );
assertFalse( parser.hasErrors() );
}
public void testExpanderErrorsAfterExpansion() throws Exception {
final ExpanderResolver res = new ExpanderResolver() {
public Expander get(String name,
String config) {
return new Expander() {
public String expand(String scope,
String pattern) {
return pattern;
}
};
}
};
final RuleParser parser = parseResource( "expander_post_errors.drl" );
parser.setExpanderResolver( res );
parser.compilation_unit();
assertTrue( parser.hasErrors() );
final RecognitionException err = (RecognitionException) parser.getErrors().get( 0 );
assertEquals( 5,
err.line );
}
public void testExpanderLineSpread() throws Exception {
final RuleParser parser = parseResource( "expander_spread_lines.drl" );
final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader( this.getClass().getResourceAsStream( "complex.dsl" ) ) );
parser.setExpanderResolver( res );
parser.setExpanderDebug( true );
parser.compilation_unit();
// List errorMessages = parser.getErrorMessages();
// for ( Iterator iter = errorMessages.iterator(); iter.hasNext(); ) {
// String element = (String) iter.next();
// System.out.println(element);
//
// }
assertFalse( parser.hasErrors() );
final PackageDescr pkg = parser.getPackageDescr();
final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
assertEquals( 1,
rule.getLhs().getDescrs().size() );
final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
assertEquals( 2,
or.getDescrs().size() );
assertNotNull( rule.getConsequence() );
}
public void testExpanderMultipleConstraints() throws Exception {
final RuleParser parser = parseResource( "expander_multiple_constraints.drl" );
final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader(
this.getClass().getResourceAsStream( "multiple_constraints.dsl" ) ) );
parser.setExpanderResolver( res );
parser.setExpanderDebug( true );
parser.compilation_unit();
assertFalse( parser.hasErrors() );
final PackageDescr pkg = parser.getPackageDescr();
final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
assertEquals(2, rule.getLhs().getDescrs().size());
ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get(0);
assertEquals("Person", col.getObjectType());
assertEquals(2, col.getDescrs().size());
assertEquals("age", ((LiteralDescr) col.getDescrs().get(0)).getFieldName());
assertEquals("location", ((BoundVariableDescr) col.getDescrs().get(1)).getFieldName());
col = (ColumnDescr) rule.getLhs().getDescrs().get(1);
assertEquals("Bar", col.getObjectType());
assertNotNull( rule.getConsequence() );
}
public void testExpanderMultipleConstraintsFlush() throws Exception {
//this is similar to the other test, but it requires a flush to add the constraints
final RuleParser parser = parseResource( "expander_multiple_constraints_flush.drl" );
final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader(
this.getClass().getResourceAsStream( "multiple_constraints.dsl" ) ) );
parser.setExpanderResolver( res );
parser.setExpanderDebug( true );
parser.compilation_unit();
assertFalse( parser.hasErrors() );
final PackageDescr pkg = parser.getPackageDescr();
final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
assertEquals(1, rule.getLhs().getDescrs().size());
ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get(0);
assertEquals("Person", col.getObjectType());
assertEquals(2, col.getDescrs().size());
assertEquals("age", ((LiteralDescr) col.getDescrs().get(0)).getFieldName());
assertEquals("location", ((BoundVariableDescr) col.getDescrs().get(1)).getFieldName());
assertNotNull( rule.getConsequence() );
}
public void testExpanderUnExpandableErrorLines() throws Exception {
//stubb expander
final ExpanderResolver res = new ExpanderResolver() {
public Expander get(String name,
String config) {
return new Expander() {
public String expand(String scope,
String pattern) {
if ( pattern.startsWith( "Good" ) ) {
return pattern;
} else {
throw new IllegalArgumentException( "whoops" );
}
}
};
}
};
final RuleParser parser = parseResource( "expander_line_errors.drl" );
parser.setExpanderResolver( res );
parser.compilation_unit();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -