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

📄 packagebuildertest.java

📁 jboss规则引擎
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        assertLength( 0,
                      builder.getErrors() );
    }

    public void testDuplicateRuleNames() throws Exception {

        final PackageBuilder builder = new PackageBuilder();

        final PackageDescr packageDescr = new PackageDescr( "p1" );

        RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );
        AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );
        ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
                                                   "stilton" );
        LiteralDescr literalDescr = new LiteralDescr( "type",
                                                      "==",
                                                      null );
        columnDescr.addDescr( literalDescr );
        ruleDescr.setConsequence( "" );

        ruleDescr = new RuleDescr( "rule-1" );
        ruleDescr.setLocation( 42,
                               43 );
        packageDescr.addRule( ruleDescr );
        lhs = new AndDescr();
        ruleDescr.setLhs( lhs );
        columnDescr = new ColumnDescr( Cheese.class.getName(),
                                       "stilton" );
        literalDescr = new LiteralDescr( "type",
                                         "!=",
                                         null );
        columnDescr.addDescr( literalDescr );
        ruleDescr.setConsequence( "" );

        ruleDescr = new RuleDescr( "rule-2" );
        ruleDescr.setLocation( 42,
                               43 );
        packageDescr.addRule( ruleDescr );
        lhs = new AndDescr();
        ruleDescr.setLhs( lhs );
        columnDescr = new ColumnDescr( Cheese.class.getName(),
                                       "stilton" );
        literalDescr = new LiteralDescr( "type",
                                         "!=",
                                         null );
        columnDescr.addDescr( literalDescr );
        ruleDescr.setConsequence( "" );

        builder.addPackage( packageDescr );

        assertLength( 1,
                      builder.getErrors() );
        ParserError err = (ParserError) builder.getErrors()[0];
        assertEquals( 42,
                      err.getRow() );
        assertEquals( 43,
                      err.getCol() );

    }

    public void testDuplicateDeclaration() {
        final PackageBuilder builder = new PackageBuilder();

        final PackageDescr packageDescr = new PackageDescr( "p1" );
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        final ColumnDescr column1 = new ColumnDescr( Cheese.class.getName() );
        lhs.addDescr( column1 );

        final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "type",
                                                                           "$type" );        
        
        final LiteralDescr listeralDescr = new LiteralDescr( "type",
                                                             "==",
                                                             "stilton" );

        column1.addDescr( fieldBindingDescr );
        column1.addDescr( listeralDescr );
        
        final ColumnDescr column2 = new ColumnDescr( Cheese.class.getName() );
        lhs.addDescr( column2 );
        column2.addDescr( fieldBindingDescr );

        ruleDescr.setConsequence( "modify(stilton);" );

        builder.addPackage( packageDescr );        

        assertLength( 2,
                      builder.getErrors() );
    }

    public void testCompilerConfiguration() throws  Exception {
    	// test default is eclipse jdt core
    	PackageBuilder builder = new PackageBuilder( );;    	
    	Field compilerField = builder.getClass().getDeclaredField( "compiler" );
    	compilerField.setAccessible(true);
    	JavaCompiler compiler = ( JavaCompiler ) compilerField.get( builder );
    	assertSame( EclipseJavaCompiler.class, compiler.getClass() );
    	
    	// test JANINO with property settings
    	PackageBuilderConfiguration conf = new PackageBuilderConfiguration();    	
    	conf.setCompiler( PackageBuilderConfiguration.JANINO );
    	builder = new PackageBuilder( conf );;    	
    	compiler = ( JavaCompiler ) compilerField.get( builder );
    	assertSame( JaninoJavaCompiler.class, compiler.getClass() );
    	
    	// test eclipse jdt core with property settings and default source level
    	conf = new PackageBuilderConfiguration();    	
    	conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
    	builder = new PackageBuilder( conf );;    	
    	compiler = ( JavaCompiler ) compilerField.get( builder );
    	assertSame( EclipseJavaCompiler.class, compiler.getClass() );   
    	
    	EclipseJavaCompiler eclipseCompiler = ( EclipseJavaCompiler ) compiler;
    	Field settingsField  = eclipseCompiler.getClass().getDeclaredField( "settings" );
    	settingsField.setAccessible( true );
    	EclipseJavaCompilerSettings settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
    	assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
    	assertEquals( "1.4", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );
    	
    	// test eclipse jdt core with property settings and jdk1.5 source level
    	conf = new PackageBuilderConfiguration();    	
    	conf.setCompiler( PackageBuilderConfiguration.ECLIPSE );
    	conf.setJavaLanguageLevel( "1.5" );
    	builder = new PackageBuilder( conf );;    	
    	compiler = ( JavaCompiler ) compilerField.get( builder );
    	assertSame( EclipseJavaCompiler.class, compiler.getClass() );   
    	
    	eclipseCompiler = ( EclipseJavaCompiler ) compiler;
    	settings = ( EclipseJavaCompilerSettings ) settingsField.get( eclipseCompiler );
    	assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.codegen.targetPlatform" ) );
    	assertEquals( "1.5", settings.getMap().get( "org.eclipse.jdt.core.compiler.source" ) );    	
    }
    
    private void createReturnValueRule(final PackageDescr packageDescr,
                                       final String expression) {
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
                                                    "stilton" );
        lhs.addDescr( column );

        FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                     "x" );
        column.addDescr( fieldBindingDescr );
        fieldBindingDescr = new FieldBindingDescr( "price",
                                                   "y" );
        column.addDescr( fieldBindingDescr );

        packageDescr.addGlobal( "map",
                                "java.util.Map" );

        final ReturnValueDescr returnValue = new ReturnValueDescr( "price",
                                                                   "==",
                                                                   expression );
        column.addDescr( returnValue );

        ruleDescr.setConsequence( "modify(stilton);" );
    }

    private void createPredicateRule(final PackageDescr packageDescr,
                                     final String expression) {
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        final ColumnDescr column = new ColumnDescr( Cheese.class.getName(),
                                                    "stilton" );
        lhs.addDescr( column );

        final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                           "x" );
        column.addDescr( fieldBindingDescr );

        packageDescr.addGlobal( "map",
                                "java.util.Map" );

        final PredicateDescr predicate = new PredicateDescr( "price",
                                                             "y",
                                                             expression );
        column.addDescr( predicate );

        ruleDescr.setConsequence( "modify(stilton);" );
    }

    private void createEvalRule(final PackageDescr packageDescr,
                                final String expression) {
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        packageDescr.addGlobal( "map",
                                "java.util.Map" );

        final EvalDescr evalDescr = new EvalDescr( expression );
        lhs.addDescr( evalDescr );

        ruleDescr.setConsequence( "" );
    }

    private void createLiteralRule(final LiteralDescr literalDescr) {
        final PackageBuilder builder = new PackageBuilder();

        final PackageDescr packageDescr = new PackageDescr( "p1" );
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        final ColumnDescr column = new ColumnDescr( Primitives.class.getName() );
        lhs.addDescr( column );

        column.addDescr( literalDescr );

        ruleDescr.setConsequence( "" );

        builder.addPackage( packageDescr );

        assertLength( 0,
                      builder.getErrors() );
    }

    private Rule createRule(final ConditionalElementDescr ceDescr,
                            final PackageBuilder builder,
                            final String consequence) throws Exception {
        final PackageDescr packageDescr = new PackageDescr( "p1" );
        final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
        packageDescr.addRule( ruleDescr );

        final AndDescr lhs = new AndDescr();
        ruleDescr.setLhs( lhs );

        lhs.addDescr( (PatternDescr) ceDescr );

        final ColumnDescr columnDescr = new ColumnDescr( Cheese.class.getName(),
                                                         "stilton" );

        final LiteralDescr literalDescr = new LiteralDescr( "type",
                                                            "==",
                                                            "stilton" );
        columnDescr.addDescr( literalDescr );

        ceDescr.addDescr( columnDescr );

        ruleDescr.setConsequence( consequence );

        builder.addPackage( packageDescr );

        final Package pkg = (Package) builder.getPackage();
        final Rule rule = pkg.getRule( "rule-1" );

        assertEquals( "rule-1",
                      rule.getName() );

        return rule;
    }

    class MockActivation
        implements
        Activation {
        private Rule  rule;
        private Tuple tuple;

        public MockActivation(final Rule rule,
                              final Tuple tuple) {
            this.rule = rule;
            this.tuple = tuple;
        }

        public Rule getRule() {
            return this.rule;
        }

        public Tuple getTuple() {
            return this.tuple;
        }

        public PropagationContext getPropagationContext() {
            return null;
        }

        public long getActivationNumber() {
            return 0;
        }

        public void remove() {
        }

        public void addLogicalDependency(final LogicalDependency node) {
        }

        public LinkedList getLogicalDependencies() {
            return null;
        }

        public boolean isActivated() {
            return false;
        }

        public void setActivated(final boolean activated) {
        }

        public ActivationGroupNode getActivationGroupNode() {
            // TODO Auto-generated method stub
            return null;
        }

        public void setActivationGroupNode(final ActivationGroupNode activationGroupNode) {
            // TODO Auto-generated method stub

        }
    }

    class MockTuple
        implements
        Tuple {
        private Map declarations;

        public MockTuple(final Map declarations) {
            this.declarations = declarations;
        }

        public InternalFactHandle get(final int column) {
            return null;
        }

        public InternalFactHandle get(final Declaration declaration) {
            return (InternalFactHandle) this.declarations.get( declaration );
        }

        public InternalFactHandle[] getFactHandles() {
            return (InternalFactHandle[]) this.declarations.values().toArray( new FactHandle[0] );
        }

        public boolean dependsOn(final FactHandle handle) {
            return false;
        }

        public void setActivation(final Activation activation) {
        }

        public long getRecency() {
            // TODO Auto-generated method stub
            return 0;
        }

    }
}

⌨️ 快捷键说明

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