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

📄 smftestframework.java

📁 rule engine drools-2.0-beta-18
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package org.drools.smf;/* * $Id: SMFTestFrameWork.java,v 1.24 2004/11/28 20:01:13 mproctor Exp $ * * Copyright 2004 (C) The Werken Company. All Rights Reserved. * * Redistribution and use of this software and associated documentation * ("Software"), with or without modification, are permitted provided that the * following conditions are met: * * 1. Redistributions of source code must retain copyright statements and * notices. Redistributions must also contain a copy of this document. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The name "drools" must not be used to endorse or promote products derived * from this Software without prior written permission of The Werken Company. * For written permission, please contact bob@werken.com. * * 4. Products derived from this Software may not be called "drools" nor may * "drools" appear in their names without prior written permission of The Werken * Company. "drools" is a trademark of The Werken Company. * * 5. Due credit should be given to The Werken Company. (http://werken.com/) * * THIS SOFTWARE IS PROVIDED BY THE WERKEN COMPANY AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE WERKEN COMPANY OR ITS CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */import junit.framework.TestCase;import org.drools.MockTuple;import org.drools.MockWorkingMemory;import org.drools.WorkingMemory;import org.drools.rule.Declaration;import org.drools.rule.Rule;import org.drools.spi.Condition;import org.drools.spi.ConditionException;import org.drools.spi.Consequence;import org.drools.spi.ConsequenceException;import org.drools.spi.ObjectType;import org.drools.spi.Tuple;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;/** * @author mproctor *  * SMTTestFrameWork is a base class for unit testing Semantic Implementations * The semantic implementation unit test simply needs to extend this class along * with setup method that instructs SMFTEstFrameWork which semantic url to * instantiate for testing. public class JavaSemanticTest extends * SMFTestFrameWork { public JavaSemanticTest( String name ) { super( name ); } *  * public void setUp() throws Exception { super.setUp("java"); } } *  * Each class that extends SMFTestFrameWork must create 3 data files; * conditions.data, consequences.data. Each file is read depending the testType, * a List of the specified tests extracted from the file; usig the delimeter * <!--drools-test--!>to seperate each test block. *  * Each testType has a corresponding private helper method to instantiate a * Condition, Consequence for each test using the specified parameters */public abstract class SMFTestFrameWork extends TestCase{    /** The List of tests extracted from the data file */    private List tests;    /** The test type; conditions, consequences */    private String testType;    /** The SemanticModule implementation return from the SemanticRepository */    private SemanticModule module;    /** The SemanticRepository */    private SemanticsRepository repository;    private String newline = System.getProperty( "line.separator" );    private Set imports;    public SMFTestFrameWork(String name)    {        super( name );        // use the method name, minus the "test" string, to specify the testType        this.testType = name.substring( 4 ).toLowerCase( );    }    /**     * Reads in the specified data file and extracts to a List of tests using     * the delimter <!--drools-test--!>     */    public void setUp(String semantic,                      Set imports) throws Exception    {        if ( !"conditions".equals( testType ) && !"consequences".equals( testType ) )        {            return;        }        ClassLoader cl = Thread.currentThread( ).getContextClassLoader( );        URL semanticTests = cl.getResource( semantic + "-" + testType + ".data" );        BufferedReader in = new BufferedReader( new InputStreamReader( semanticTests.openStream( ) ) );        StringBuffer buffer = new StringBuffer( );        String blockMarker = "<!--drools-test--!>";        String line;        tests = new ArrayList( );        while ( in.ready( ) )        {            line = in.readLine( ) + newline;            if ( line.startsWith( blockMarker ) )            {                tests.add( buffer.toString( ) );                buffer = new StringBuffer( );            }            else            {                buffer.append( line );            }        }        tests.add( buffer.toString( ) );        this.repository = DefaultSemanticsRepository.getInstance( );        module = this.repository.lookupSemanticModule( "http://drools.org/semantics/" + semantic );        this.imports = imports;    }    /**     * Tests each of the extracted tests from conditions.data     */    public void testConditions() throws Exception    {        // Setup        int testNumber = 0;        MockTuple tuple;        MockConfiguration cheeseConfiguration = new MockConfiguration( "test1" );        cheeseConfiguration.setText( Cheese.class.getName( ) );        ObjectTypeFactory objectTypeFactory = module.getObjectTypeFactory( "class" );        ObjectType cheeseType = objectTypeFactory.newObjectType( cheeseConfiguration,                                                                 new HashSet( ) );        tuple = new MockTuple( );        final Rule rule = new Rule( "Test Rule 1" );        rule.setImports( new HashSet( ) );        tuple.setRule( rule );        tuple.setWorkingMemory( new MockWorkingMemory( ) );        // simple condition checks        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 0        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 1        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 2        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 3        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 4        Declaration camembertDecl = rule.addParameterDeclaration( "camembert",                                                                  cheeseType );        Declaration stiltonDecl = rule.addParameterDeclaration( "stilton",                                                                cheeseType );        // condition check with a single declaration        tuple.put( camembertDecl,                   new Cheese( "camembert" ) );        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 5        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 6        // condition check with a single declaration        tuple = new MockTuple( );        rule.setImports( new HashSet( ) );        tuple.setRule( rule );        tuple.setWorkingMemory( new MockWorkingMemory( ) );        tuple.put( stiltonDecl,                   new Cheese( "stilton" ) );        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 7        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 8        // condition check with two declarations        tuple = new MockTuple( );        rule.setImports( new HashSet( ) );        tuple.setRule( rule );        tuple.setWorkingMemory( new MockWorkingMemory( ) );        tuple.put( stiltonDecl,                   new Cheese( "stilton" ) );        tuple.put( camembertDecl,                   new Cheese( "camembert" ) );        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 9        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 10        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 11        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 12        // condition check with 2 declarations and application data        WorkingMemory workingMemory = new MockWorkingMemory( );        workingMemory.setApplicationData( "bites",                                          new Integer( 3 ) );        workingMemory.setApplicationData( "favouriteCheese",                                          new Cheese( "camembert" ) );        tuple.setWorkingMemory( workingMemory );        HashMap applicationData = new HashMap( );        applicationData.put( "bites",                             Integer.class );        applicationData.put( "favouriteCheese",                             Cheese.class );        rule.setApplicationData( applicationData );        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 13        assertFalse( testCondition( testNumber++,                                    tuple,                                    rule ) ); // 14        assertTrue( testCondition( testNumber++,                                   tuple,                                   rule ) ); // 15        // test code works no matter what the order of decl are        tuple = new MockTuple( );        rule.setImports( new HashSet( ) );        rule.setApplicationData( new HashMap( ) );        tuple.setRule( rule );        workingMemory = new MockWorkingMemory( );

⌨️ 快捷键说明

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