⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agendatest.java

📁 rule engine drools-2.0-beta-18
💻 JAVA
字号:
package org.drools.reteoo;import org.drools.DroolsTestCase;import org.drools.RuleBase;import org.drools.WorkingMemory;import org.drools.rule.Rule;import org.drools.spi.Activation;import org.drools.spi.AgendaFilter;import org.drools.spi.MockObjectType;/** * @author mproctor */public class AgendaTest extends DroolsTestCase{    public void testAddToAgenda() throws Exception    {        RuleBase ruleBase = new RuleBaseImpl( new Rete( ) );        WorkingMemoryImpl workingMemory = ( WorkingMemoryImpl ) ruleBase.newWorkingMemory();        final Agenda agenda = workingMemory.getAgenda( );        final Rule rule = new Rule( "test-rule" );        rule.addParameterDeclaration( "paramVar", new MockObjectType( true ) );        //add consequence        rule.setConsequence( new org.drools.spi.Consequence( )        {            public void invoke(org.drools.spi.Tuple tuple, WorkingMemory workingMemory )            {                agenda.addToAgenda( ( ReteTuple ) tuple,                                    rule );            }        } );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        ReteTuple tuple = new ReteTuple( workingMemory );        assertEquals( 0, agenda.size( ) );        /*         * This is not recursive so a rule should not be able to activate itself         */        rule.setNoLoop( true );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( null );        assertEquals( 0, agenda.size( ) );        /*         * This is recursive so a rule should be able to activate itself         */        rule.setNoLoop( false );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( null );        assertEquals( 1, agenda.size( ) );        agenda.clearAgenda();    }    public void testFilters() throws Exception    {        RuleBase ruleBase = new RuleBaseImpl( new Rete() );        WorkingMemoryImpl workingMemory = ( WorkingMemoryImpl ) ruleBase.newWorkingMemory();        final Agenda agenda = workingMemory.getAgenda( );        final Rule rule = new Rule( "test-rule" );        rule.addParameterDeclaration( "paramVar", new MockObjectType( true ) );        //add consequence        rule.setConsequence( new org.drools.spi.Consequence( )        {            public void invoke(org.drools.spi.Tuple tuple,                               WorkingMemory workingMemory)            {                agenda.addToAgenda( ( ReteTuple ) tuple,                                    rule );            }        } );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        ReteTuple tuple = new ReteTuple( workingMemory );        assertEquals( 0, agenda.size( ) );        /*         * Add to agenda         */        rule.setNoLoop( false );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( null );        assertEquals( 1, agenda.size( ) );        agenda.clearAgenda();        /*         * True filter, activations should always add         */        AgendaFilter filterTrue = new AgendaFilter( )        {            public boolean accept(Activation item)            {                return true;            }        };        rule.setNoLoop( false );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( filterTrue );        assertEquals( 1, agenda.size( ) );        agenda.clearAgenda();        /*         * False filter, activations should always be denied         */        AgendaFilter filterFalse = new AgendaFilter( )        {            public boolean accept(Activation item)            {                return false;            }        };        rule.setNoLoop( false );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( filterFalse );        assertEquals( 0, agenda.size( ) );    }    public void testClearAgenda() throws Exception    {        RuleBase ruleBase = new RuleBaseImpl( new Rete() );        WorkingMemoryImpl workingMemory = ( WorkingMemoryImpl ) ruleBase.newWorkingMemory();        final Agenda agenda = workingMemory.getAgenda( );        final Rule rule = new Rule( "test-rule" );        rule.addParameterDeclaration( "paramVar", new MockObjectType( true ) );        //add consequence        rule.setConsequence( new org.drools.spi.Consequence( )        {            public void invoke(org.drools.spi.Tuple tuple,                               WorkingMemory workingMemory)            {                agenda.addToAgenda( ( ReteTuple ) tuple,                                    rule );                workingMemory.clearAgenda();            }        } );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        //add condition        rule.addCondition( new org.drools.spi.InstrumentedCondition( ) );        ReteTuple tuple = new ReteTuple( workingMemory );        assertEquals( 0, agenda.size( ) );        /*         * This is recursive so a rule should be able to activate itself         * But then we clear the agenda afterwards to size should still be 0         */        rule.setNoLoop( false );        agenda.addToAgenda( tuple, rule );        assertEquals( 1, agenda.size( ) );        agenda.fireNextItem( null );        assertEquals( 0, agenda.size( ) );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -