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

📄 ruleparsertest.java

📁 jboss规则引擎
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        assertEquals( "simple_query",
                      query.getName() );

        final AndDescr lhs = query.getLhs();

        assertNotNull( lhs );

        assertEquals( 3,
                      lhs.getDescrs().size() );

        // Check first column
        final ColumnDescr first = (ColumnDescr) lhs.getDescrs().get( 0 );
        assertEquals( "foo3",
                      first.getIdentifier() );
        assertEquals( "Bar",
                      first.getObjectType() );

        assertEquals( 1,
                      first.getDescrs().size() );

        LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );

        assertNotNull( constraint );

        assertEquals( "a",
                      constraint.getFieldName() );
        assertEquals( "==",
                      constraint.getEvaluator() );
        assertEquals( "3",
                      constraint.getText() );

        // Check second column
        final ColumnDescr second = (ColumnDescr) lhs.getDescrs().get( 1 );
        assertEquals( "foo4",
                      second.getIdentifier() );
        assertEquals( "Bar",
                      second.getObjectType() );

        assertEquals( 2,
                      second.getDescrs().size() );
        //check it has field bindings.
        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) second.getDescrs().get( 0 );
        assertEquals( "a",
                      fieldBindingDescr.getFieldName() );
        assertEquals( "a4",
                      fieldBindingDescr.getIdentifier() );

        constraint = (LiteralDescr) second.getDescrs().get( 1 );

        assertNotNull( constraint );

        assertEquals( "a",
                      constraint.getFieldName() );
        assertEquals( "==",
                      constraint.getEvaluator() );
        assertEquals( "4",
                      constraint.getText() );

        assertFalse( this.parser.hasErrors() );
    }

    public void testQueryRuleMixed() throws Exception {
        final RuleParser parser = parseResource( "query_and_rule.drl" );
        parser.compilation_unit();

        final PackageDescr pack = parser.getPackageDescr();
        assertEquals( 4,
                      pack.getRules().size() ); //as queries are rules
        RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
        assertEquals( "bar",
                      rule.getName() );

        QueryDescr query = (QueryDescr) pack.getRules().get( 1 );
        assertEquals( "simple_query",
                      query.getName() );

        rule = (RuleDescr) pack.getRules().get( 2 );
        assertEquals( "bar2",
                      rule.getName() );

        query = (QueryDescr) pack.getRules().get( 3 );
        assertEquals( "simple_query2",
                      query.getName() );

        assertFalse( parser.hasErrors() );
    }

    public void testMultipleRules() throws Exception {
        final RuleParser parser = parseResource( "multiple_rules.drl" );
        parser.compilation_unit();

        final PackageDescr pkg = parser.getPackageDescr();
        final List rules = pkg.getRules();

        assertEquals( 2,
                      rules.size() );

        final RuleDescr rule0 = (RuleDescr) rules.get( 0 );
        assertEquals( "Like Stilton",
                      rule0.getName() );

        final RuleDescr rule1 = (RuleDescr) rules.get( 1 );
        assertEquals( "Like Cheddar",
                      rule1.getName() );

        //checkout the first rule
        AndDescr lhs = rule1.getLhs();
        assertNotNull( lhs );
        assertEquals( 1,
                      lhs.getDescrs().size() );
        assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
                                      rule0.getConsequence() );

        // Check first column
        ColumnDescr first = (ColumnDescr) lhs.getDescrs().get( 0 );
        assertEquals( "Cheese",
                      first.getObjectType() );

        //checkout the second rule
        lhs = rule1.getLhs();
        assertNotNull( lhs );
        assertEquals( 1,
                      lhs.getDescrs().size() );
        assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
                                      rule1.getConsequence() );

        // Check first column
        first = (ColumnDescr) lhs.getDescrs().get( 0 );
        assertEquals( "Cheese",
                      first.getObjectType() );

        assertFalse( parser.hasErrors() );
    }

    public void testSimpleExpander() throws Exception {
        final RuleParser parser = parseResource( "simple_expander.drl" );
        final MockExpanderResolver mockExpanderResolver = new MockExpanderResolver();
        parser.setExpanderResolver( mockExpanderResolver );
        parser.compilation_unit();
        final PackageDescr pack = parser.getPackageDescr();
        assertNotNull( pack );
        assertEquals( 1,
                      pack.getRules().size() );

        assertTrue( mockExpanderResolver.checkCalled( "foo.dsl" ) );
        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
        assertEquals( "simple_rule",
                      rule.getName() );

        //now check out the LHS
        assertEquals( 4,
                      rule.getLhs().getDescrs().size() );

        //The rain in spain ... ----> foo : Bar(a==3) (via MockExpander)
        ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get( 0 );
        assertEquals( "Bar",
                      col.getObjectType() );
        assertEquals( "foo1",
                      col.getIdentifier() );
        assertEquals( 1,
                      col.getDescrs().size() );
        assertEquals( 6,
                      col.getLine() );

        LiteralDescr lit = (LiteralDescr) col.getDescrs().get( 0 );
        assertEquals( "==",
                      lit.getEvaluator() );
        assertEquals( "a",
                      lit.getFieldName() );
        assertEquals( "1",
                      lit.getText() );

        //>Baz() --> not expanded, as it has the magical escape character '>' !!
        col = (ColumnDescr) rule.getLhs().getDescrs().get( 1 );
        assertEquals( "Baz",
                      col.getObjectType() );
        assertEquals( 7,
                      col.getLine() );

        //The rain in spain ... ----> foo : Bar(a==3) (via MockExpander), again...
        col = (ColumnDescr) rule.getLhs().getDescrs().get( 2 );
        assertEquals( "Bar",
                      col.getObjectType() );
        assertEquals( "foo2",
                      col.getIdentifier() );
        assertEquals( 1,
                      col.getDescrs().size() );
        assertEquals( 8,
                      col.getLine() );
        lit = (LiteralDescr) col.getDescrs().get( 0 );
        assertEquals( "==",
                      lit.getEvaluator() );
        assertEquals( "a",
                      lit.getFieldName() );
        assertEquals( "2",
                      lit.getText() );

        //>Bar() --> not expanded, as it has the magical escape character '>' !!
        col = (ColumnDescr) rule.getLhs().getDescrs().get( 3 );
        assertEquals( "Bar",
                      col.getObjectType() );
        assertEquals( 9,
                      col.getLine() );

        assertEqualsIgnoreWhitespace( "bar foo3 : Bar(a==3) baz foo4 : Bar(a==4)",
                                      rule.getConsequence() );
        assertTrue( mockExpanderResolver.checkExpanded( "when,The rain in spain falls mainly" ) );
        assertTrue( mockExpanderResolver.checkExpanded( "then,Something else" ) );
        assertTrue( mockExpanderResolver.checkExpanded( "then,Hey dude" ) );

        assertFalse( parser.hasErrors() );
    }

    public void testExpanderErrorsAfterExpansion() throws Exception {

        final ExpanderResolver res = new ExpanderResolver() {
            public Expander get(String name,
                                String config) {
                return new Expander() {
                    public String expand(String scope,
                                         String pattern) {
                        return pattern;
                    }
                };
            }
        };

        final RuleParser parser = parseResource( "expander_post_errors.drl" );
        parser.setExpanderResolver( res );
        parser.compilation_unit();
        assertTrue( parser.hasErrors() );
        final RecognitionException err = (RecognitionException) parser.getErrors().get( 0 );
        assertEquals( 5,
                      err.line );

    }

    public void testExpanderLineSpread() throws Exception {

        final RuleParser parser = parseResource( "expander_spread_lines.drl" );
        final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader( this.getClass().getResourceAsStream( "complex.dsl" ) ) );
        parser.setExpanderResolver( res );
        parser.setExpanderDebug( true );
        parser.compilation_unit();
        //        List errorMessages = parser.getErrorMessages();
        //        for ( Iterator iter = errorMessages.iterator(); iter.hasNext(); ) {
        //            String element = (String) iter.next();
        //            System.out.println(element);
        //            
        //        }        

        assertFalse( parser.hasErrors() );

        final PackageDescr pkg = parser.getPackageDescr();
        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
        assertEquals( 1,
                      rule.getLhs().getDescrs().size() );

        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
        assertEquals( 2,
                      or.getDescrs().size() );
        assertNotNull( rule.getConsequence() );

    }

    public void testExpanderMultipleConstraints() throws Exception {

        final RuleParser parser = parseResource( "expander_multiple_constraints.drl" );
        final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader( 
                this.getClass().getResourceAsStream( "multiple_constraints.dsl" ) ) );
        parser.setExpanderResolver( res );
        parser.setExpanderDebug( true );
        parser.compilation_unit();
      

        assertFalse( parser.hasErrors() );
        
        final PackageDescr pkg = parser.getPackageDescr();
        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
        assertEquals(2, rule.getLhs().getDescrs().size());

        ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get(0);
        assertEquals("Person", col.getObjectType());
        
        
        assertEquals(2, col.getDescrs().size());
        assertEquals("age", ((LiteralDescr) col.getDescrs().get(0)).getFieldName());                
        assertEquals("location", ((BoundVariableDescr) col.getDescrs().get(1)).getFieldName());
        
        col = (ColumnDescr) rule.getLhs().getDescrs().get(1);
        assertEquals("Bar", col.getObjectType());
        
        assertNotNull( rule.getConsequence() );

    }    
    
    public void testExpanderMultipleConstraintsFlush() throws Exception {
        //this is similar to the other test, but it requires a flush to add the constraints
        final RuleParser parser = parseResource( "expander_multiple_constraints_flush.drl" );
        final DefaultExpanderResolver res = new DefaultExpanderResolver( new InputStreamReader( 
                this.getClass().getResourceAsStream( "multiple_constraints.dsl" ) ) );
        parser.setExpanderResolver( res );
        parser.setExpanderDebug( true );
        parser.compilation_unit();
      

        assertFalse( parser.hasErrors() );
        
        final PackageDescr pkg = parser.getPackageDescr();
        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
        assertEquals(1, rule.getLhs().getDescrs().size());

        ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get(0);
        assertEquals("Person", col.getObjectType());        
        
        assertEquals(2, col.getDescrs().size());
        assertEquals("age", ((LiteralDescr) col.getDescrs().get(0)).getFieldName());                
        assertEquals("location", ((BoundVariableDescr) col.getDescrs().get(1)).getFieldName());
        
        assertNotNull( rule.getConsequence() );

    }      
    
    
    public void testExpanderUnExpandableErrorLines() throws Exception {

        //stubb expander
        final ExpanderResolver res = new ExpanderResolver() {
            public Expander get(String name,
                                String config) {
                return new Expander() {
                    public String expand(String scope,
                                         String pattern) {
                        if ( pattern.startsWith( "Good" ) ) {
                            return pattern;
                        } else {
                            throw new IllegalArgumentException( "whoops" );
                        }

                    }
                };
            }
        };

        final RuleParser parser = parseResource( "expander_line_errors.drl" );
        parser.setExpanderResolver( res );
        parser.compilation_unit();

⌨️ 快捷键说明

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