📄 integrationcases.java
字号:
assertEquals( "MAIN",
list.get( 1 ) );
assertEquals( "1 1",
list.get( 2 ) );
}
public void testXorGroups() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ActivationGroups.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 brie = new Cheese( "brie",
12 );
workingMemory.assertObject( brie );
final ActivationGroup activationGroup0 = workingMemory.getAgenda().getActivationGroup( "activation-group-0" );
assertEquals( 2,
activationGroup0.size() );
final ActivationGroup activationGroup3 = workingMemory.getAgenda().getActivationGroup( "activation-group-3" );
assertEquals( 1,
activationGroup3.size() );
final AgendaGroup agendaGroup3 = workingMemory.getAgenda().getAgendaGroup( "agenda-group-3" );
assertEquals( 1,
agendaGroup3.size() );
final AgendaGroup agendaGroupMain = workingMemory.getAgenda().getAgendaGroup( "MAIN" );
assertEquals( 3,
agendaGroupMain.size() );
workingMemory.clearAgendaGroup( "agenda-group-3" );
assertEquals( 0,
activationGroup3.size() );
assertEquals( 0,
agendaGroup3.size() );
workingMemory.fireAllRules();
assertEquals( 0,
activationGroup0.size() );
assertEquals( 2,
list.size() );
assertEquals( "rule0",
list.get( 0 ) );
assertEquals( "rule2",
list.get( 1 ) );
}
public void testDuration() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration.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 brie = new Cheese( "brie",
12 );
final FactHandle brieHandle = workingMemory.assertObject( brie );
workingMemory.fireAllRules();
// now check for update
assertEquals( 0,
list.size() );
// sleep for 300ms
Thread.sleep( 300 );
// now check for update
assertEquals( 1,
list.size() );
}
public void testDurationWithNoLoop() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Duration_with_NoLoop.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 brie = new Cheese( "brie",
12 );
final FactHandle brieHandle = workingMemory.assertObject( brie );
workingMemory.fireAllRules();
// now check for update
assertEquals( 0,
list.size() );
// sleep for 300ms
Thread.sleep( 300 );
// now check for update
assertEquals( 1,
list.size() );
}
public void testFireRuleAfterDuration() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_FireRuleAfterDuration.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 brie = new Cheese( "brie",
12 );
final FactHandle brieHandle = workingMemory.assertObject( brie );
workingMemory.fireAllRules();
// now check for update
assertEquals( 0,
list.size() );
// sleep for 300ms
Thread.sleep( 300 );
workingMemory.fireAllRules();
// now check for update
assertEquals( 2,
list.size() );
}
public void testContainsCheese() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ContainsCheese.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",
12 );
final FactHandle brieHandle = workingMemory.assertObject( stilton );
final Cheesery cheesery = new Cheesery();
cheesery.getCheeses().add( stilton );
workingMemory.assertObject( cheesery );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
assertEquals( stilton,
list.get( 0 ) );
}
public void testStaticFieldReference() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_StaticField.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 Cheesery cheesery = new Cheesery();
cheesery.setStatus( Cheesery.SELLING_CHEESE );
workingMemory.assertObject( cheesery );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
assertEquals( cheesery,
list.get( 0 ) );
}
public void testDynamicRuleAdditions() throws Exception {
Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) );
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
final Package pkg1 = builder.getPackage();
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg1 );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
workingMemory.setGlobal( "total",
new Integer( 0 ) );
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
// Adding person in advance. There is no Person() object
// type node in memory yet, but the rule engine is supposed
// to handle that correctly
final PersonInterface bob = new Person( "bob",
"stilton" );
bob.setStatus( "Not evaluated" );
workingMemory.assertObject( bob );
final Cheese stilton = new Cheese( "stilton",
5 );
workingMemory.assertObject( stilton );
final Cheese cheddar = new Cheese( "cheddar",
5 );
workingMemory.assertObject( cheddar );
workingMemory.fireAllRules();
assertEquals( 1,
list.size() );
assertEquals( "stilton",
list.get( 0 ) );
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic2.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
final Package pkg2 = builder.getPackage();
ruleBase.addPackage( pkg2 );
assertEquals( 3,
list.size() );
assertEquals( "stilton",
list.get( 0 ) );
assertTrue( "cheddar".equals( list.get( 1 ) ) || "cheddar".equals( list.get( 2 ) ) );
assertTrue( "stilton".equals( list.get( 1 ) ) || "stilton".equals( list.get( 2 ) ) );
list.clear();
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
final Package pkg3 = builder.getPackage();
ruleBase.addPackage( pkg3 );
// Package 3 has a rule working on Person instances.
// As we added person instance in advance, rule should fire now
workingMemory.fireAllRules();
Assert.assertEquals( "Rule from package 3 should have been fired",
"match Person ok",
bob.getStatus() );
assertEquals( 1,
list.size() );
assertEquals( bob,
list.get( 0 ) );
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
final Package pkg4 = builder.getPackage();
ruleBase.addPackage( pkg4 );
Assert.assertEquals( "Rule from package 4 should have been fired",
"Who likes Stilton ok",
bob.getStatus() );
assertEquals( 2,
list.size() );
assertEquals( bob,
list.get( 1 ) );
}
public void testDynamicRuleRemovals() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) ) );
final Package pkg = builder.getPackage();
org.drools.reteoo.ReteooRuleBase reteooRuleBase = null;
org.drools.leaps.LeapsRuleBase leapsRuleBase = null;
final RuleBase ruleBase = getRuleBase();
//org.drools.reteoo.RuleBaseImpl ruleBase = new org.drools.reteoo.RuleBaseImpl();
if ( ruleBase instanceof org.drools.reteoo.ReteooRuleBase ) {
reteooRuleBase = (org.drools.reteoo.ReteooRuleBase) ruleBase;
} else if ( ruleBase instanceof org.drools.leaps.LeapsRuleBase ) {
leapsRuleBase = (org.drools.leaps.LeapsRuleBase) ruleBase;
}
ruleBase.addPackage( pkg );
PackageBuilder builder2 = new PackageBuilder();
builder2.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic2.drl" ) ) );
ruleBase.addPackage( builder2.getPackage() );
final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
final List list = new ArrayList();
workingMemory.setGlobal( "list",
list );
final PersonInterface bob = new Person( "bob",
"stilton" );
bob.setStatus( "Not evaluated" );
workingMemory.assertObject( bob );
final Cheese stilton1 = new Cheese( "sti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -