📄 integrationcases.java
字号:
"food",
40 );
final Primitives p2 = new Primitives();
p2.setArrayAttribute( null );
workingMemory.assertObject( p1 );
workingMemory.assertObject( p2 );
workingMemory.fireAllRules();
assertEquals( 2,
foo.size() );
}
public void testExists() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "exists_rule_test.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final Cheese cheddar = new Cheese( "cheddar",
7 );
final FactHandle cheddarHandle = workingMemory.assertObject( cheddar );
workingMemory.fireAllRules();
assertEquals( 0,
list.size() );
final Cheese stilton = new Cheese( "stilton",
5 );
final FactHandle stiltonHandle = workingMemory.assertObject( stilton );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
final Cheese brie = new Cheese( "brie",
5 );
final FactHandle brieHandle = workingMemory.assertObject( brie );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
}
public void testExists2() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_exists.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final Cheese cheddar = new Cheese( "cheddar",
7 );
final Cheese provolone = new Cheese( "provolone",
5 );
final Person edson = new Person( "Edson",
"cheddar" );
final Person bob = new Person( "Bob",
"muzzarela" );
workingMemory.assertObject( cheddar );
workingMemory.fireAllRules();
assertEquals( 0,
list.size() );
workingMemory.assertObject( provolone );
workingMemory.fireAllRules();
assertEquals( 0,
list.size() );
workingMemory.assertObject( edson );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
workingMemory.assertObject( bob );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
}
public void testWithInvalidRule() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "invalid_rule.drl" ) ) );
final Package pkg = builder.getPackage();
//Mark: please check if the conseqeuence/should/shouldn't be built
// Rule badBoy = pkg.getRules()[0];
// assertFalse(badBoy.isValid());
RuntimeException runtime = null;
//this should ralph all over the place.
final RuleBase ruleBase = getRuleBase();
try {
ruleBase.addPackage( pkg );
fail( "Should have thrown an exception as the rule is NOT VALID." );
} catch ( final RuntimeException e ) {
assertNotNull( e.getMessage() );
runtime = e;
}
assertTrue( builder.getErrors().length > 0 );
final String pretty = builder.printErrors();
assertFalse( pretty.equals( "" ) );
assertEquals( pretty,
runtime.getMessage() );
}
public void testErrorLineNumbers() throws Exception {
//this test aims to test semantic errors
//parser errors are another test case
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "errors_in_rule.drl" ) ) );
final Package pkg = builder.getPackage();
final DroolsError err = builder.getErrors()[0];
final RuleError ruleErr = (RuleError) err;
assertNotNull( ruleErr.getDescr() );
assertTrue( ruleErr.getLine() != -1 );
DroolsError errs[] = builder.getErrors();
assertEquals( 3,
builder.getErrors().length );
//check that its getting it from the ruleDescr
assertEquals( ruleErr.getLine(),
ruleErr.getDescr().getLine() );
//check the absolute error line number (there are more).
assertEquals( 11,
ruleErr.getLine() );
//now check the RHS, not being too specific yet, as long as it has the rules line number, not zero
final RuleError rhs = (RuleError) builder.getErrors()[2];
assertTrue( rhs.getLine() > 7 ); //not being too specific - may need to change this when we rework the error reporting
}
public void testErrorsParser() throws Exception {
final DrlParser parser = new DrlParser();
assertEquals( 0,
parser.getErrors().size() );
parser.parse( new InputStreamReader( getClass().getResourceAsStream( "errors_parser_multiple.drl" ) ) );
assertTrue( parser.hasErrors() );
assertTrue( parser.getErrors().size() > 0 );
assertTrue( parser.getErrors().get( 0 ) instanceof ParserError );
final ParserError first = ((ParserError) parser.getErrors().get( 0 ));
assertTrue( first.getMessage() != null );
assertFalse( first.getMessage().equals( "" ) );
}
public void testFunction() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FunctionInConsequence.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final Cheese stilton = new Cheese( "stilton",
5 );
workingMemory.assertObject( stilton );
workingMemory.fireAllRules();
assertEquals( new Integer( 5 ),
list.get( 0 ) );
}
public void testDynamicFunction() throws Exception {
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction1.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final Cheese stilton = new Cheese( "stilton",
5 );
workingMemory.assertObject( stilton );
workingMemory.fireAllRules();
assertEquals( new Integer( 5 ),
list.get( 0 ) );
// Check a function can be removed from a package.
// Once removed any efforts to use it should throw an Exception
pkg.removeFunction( "addFive" );
final Cheese cheddar = new Cheese( "cheddar",
5 );
workingMemory.assertObject( cheddar );
try {
workingMemory.fireAllRules();
fail( "Function should have been removed and NoClassDefFoundError thrown from the Consequence" );
} catch ( final NoClassDefFoundError e ) {
}
// Check a new function can be added to replace an old function
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction2.drl" ) ) );
ruleBase.addPackage( builder.getPackage() );
final Cheese brie = new Cheese( "brie",
5 );
workingMemory.assertObject( brie );
workingMemory.fireAllRules();
assertEquals( new Integer( 6 ),
list.get( 1 ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction3.drl" ) ) );
ruleBase.addPackage( builder.getPackage() );
final Cheese feta = new Cheese( "feta",
5 );
workingMemory.assertObject( feta );
workingMemory.fireAllRules();
assertEquals( new Integer( 5 ),
list.get( 2 ) );
}
public void testAssertRetract() throws Exception {
//postponed while I sort out KnowledgeHelperFixer
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "assert_retract.drl" ) ) );
final Package pkg = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final PersonInterface person = new Person( "michael",
"cheese" );
person.setStatus( "start" );
workingMemory.assertObject( person );
workingMemory.fireAllRules();
assertEquals( 5,
list.size() );
assertTrue( list.contains( "first" ) );
assertTrue( list.contains( "second" ) );
assertTrue( list.contains( "third" ) );
assertTrue( list.contains( "fourth" ) );
assertTrue( list.contains( "fifth" ) );
}
public void testWithExpanderDSL() throws Exception {
final PackageBuilder builder = new PackageBuilder();
final Reader source = new InputStreamReader( getClass().getResourceAsStream( "rule_with_expander_dsl.drl" ) );
final Reader dsl = new InputStreamReader( getClass().getResourceAsStream( "test_expander.dsl" ) );
builder.addPackageFromDrl( source,
dsl );
//the compiled package
final Package pkg = builder.getPackage();
assertTrue( pkg.isValid() );
assertEquals( null,
pkg.getErrorSummary() );
//Check errors
final String err = builder.printErrors();
assertEquals( "",
err );
assertEquals( 0,
builder.getErrors().length );
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
final WorkingMemory wm = ruleBase.newWorkingMemory();
wm.assertObject( new Person( "Bob",
"http://foo.bar" ) );
wm.assertObject( new Cheese( "stilton",
42 ) );
final List messages = new ArrayList();
wm.setGlobal( "messages",
messages );
wm.fireAllRules();
//should have fired
assertEquals( 1,
messages.size() );
}
public void testWithExpanderMore() throws Exception {
final PackageBuilder builder = new PackageBuilder();
final Reader source = new InputStreamReader( getClass().getResourceAsStream( "rule_with_expander_dsl_more.drl" ) );
final Reader dsl = new InputStreamReader( getClass().getResourceAsStream( "test_expander.dsl" ) );
builder.addPackageFromDrl( source,
dsl );
//the compiled package
final Package pkg = builder.getPackage();
assertTrue( pkg.isValid() );
assertEquals( null,
pkg.getErrorSummary() );
//Check errors
final String err = builder.printErrors();
assertEquals( "",
err );
assertEquals( 0,
builder.getErrors().length );
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -