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

📄 ruleparsertest.java

📁 jboss规则引擎
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        assertTrue( parser.hasErrors() );

        final List messages = parser.getErrorMessages();
        assertEquals( messages.size(),
                      parser.getErrors().size() );

        assertEquals( 4,
                      parser.getErrors().size() );
        assertEquals( ExpanderException.class,
                      parser.getErrors().get( 0 ).getClass() );
        assertEquals( 8,
                      ((RecognitionException) parser.getErrors().get( 0 )).line );
        assertEquals( 10,
                      ((RecognitionException) parser.getErrors().get( 1 )).line );
        assertEquals( 12,
                      ((RecognitionException) parser.getErrors().get( 2 )).line );
        assertEquals( 13,
                      ((RecognitionException) parser.getErrors().get( 3 )).line );

        final PackageDescr pack = parser.getPackageDescr();
        assertNotNull( pack );

        final ExpanderException ex = (ExpanderException) parser.getErrors().get( 0 );
        assertTrue( ex.getMessage().indexOf( "whoops" ) > -1 );

    }

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

        final PackageDescr pkg = parser.getPackageDescr();
        final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );

        final AndDescr lhs = ruleDescr.getLhs();
        assertEquals( 1,
                      lhs.getDescrs().size() );
        final ColumnDescr cheese = (ColumnDescr) lhs.getDescrs().get( 0 );
        assertEquals( 1,
                      cheese.getDescrs().size() );
        assertEquals( "Cheese",
                      cheese.getObjectType() );
        assertEquals( 1,
                      lhs.getDescrs().size() );
        final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
        assertEquals( "type",
                      fieldBinding.getFieldName() );

        assertFalse( parser.hasErrors() );
    }

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

        final PackageDescr pkg = parser.getPackageDescr();
        final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );

        final AndDescr lhs = ruleDescr.getLhs();
        assertEquals( 2,
                      lhs.getDescrs().size() );
        final ColumnDescr cheese = (ColumnDescr) lhs.getDescrs().get( 0 );
        assertEquals( "Cheese",
                      cheese.getObjectType() );
        assertEquals( 2,
                      lhs.getDescrs().size() );
        FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
        assertEquals( "type",
                      fieldBinding.getFieldName() );
        LiteralDescr literalDescr = (LiteralDescr) cheese.getDescrs().get( 1 );
        assertEquals( "type",
                      literalDescr.getFieldName() );
        assertEquals( "==",
                      literalDescr.getEvaluator() );
        assertEquals( "stilton",
                      literalDescr.getText() );

        final ColumnDescr person = (ColumnDescr) lhs.getDescrs().get( 1 );
        fieldBinding = (FieldBindingDescr) person.getDescrs().get( 0 );
        assertEquals( "name",
                      fieldBinding.getFieldName() );
        literalDescr = (LiteralDescr) person.getDescrs().get( 1 );
        assertEquals( "name",
                      literalDescr.getFieldName() );
        assertEquals( "==",
                      literalDescr.getEvaluator() );
        assertEquals( "bob",
                      literalDescr.getText() );

        final BoundVariableDescr variableDescr = (BoundVariableDescr) person.getDescrs().get( 2 );
        assertEquals( "likes",
                      variableDescr.getFieldName() );
        assertEquals( "==",
                      variableDescr.getEvaluator() );
        assertEquals( "$type",
                      variableDescr.getIdentifier() );

        assertFalse( parser.hasErrors() );
    }
    
    public void testOrNesting() throws Exception {
        final RuleParser parser = parseResource( "or_nesting.drl" );
        parser.compilation_unit();

        final PackageDescr pack = parser.getPackageDescr();
        assertNotNull( pack );
        assertEquals( 1,
                      pack.getRules().size() );
        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
        assertEquals( "simple_rule",
                      rule.getName() );

        assertEquals(1, rule.getLhs().getDescrs().size());
        
        OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
        assertEquals(2, or.getDescrs().size());
        
        ColumnDescr first = (ColumnDescr) or.getDescrs().get( 0 );
        assertEquals("Person", first.getObjectType());
        
        AndDescr and = (AndDescr) or.getDescrs().get( 1 );
        assertEquals(2, and.getDescrs().size());
        
        ColumnDescr left = (ColumnDescr) and.getDescrs().get( 0 );
        assertEquals("Person", left.getObjectType());
        
        ColumnDescr right = (ColumnDescr) and.getDescrs().get( 1 );
        assertEquals("Cheese", right.getObjectType());
    }

    /** Test that explicit "&&", "||" works as expected */
    public void testAndOrRules() throws Exception {
        final RuleParser parser = parseResource( "and_or_rule.drl" );
        parser.compilation_unit();

        final PackageDescr pack = parser.getPackageDescr();
        assertNotNull( pack );
        assertEquals( 1,
                      pack.getRules().size() );
        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
        assertEquals( "simple_rule",
                      rule.getName() );

        //we will have 2 children under the main And node
        final AndDescr and = rule.getLhs();
        assertEquals( 2,
                      and.getDescrs().size() );

        //check the "&&" part
        final AndDescr join = (AndDescr) and.getDescrs().get( 0 );
        assertEquals( 2,
                      join.getDescrs().size() );

        ColumnDescr left = (ColumnDescr) join.getDescrs().get( 0 );
        ColumnDescr right = (ColumnDescr) join.getDescrs().get( 1 );
        assertEquals( "Person",
                      left.getObjectType() );
        assertEquals( "Cheese",
                      right.getObjectType() );

        assertEquals( 1,
                      left.getDescrs().size() );
        LiteralDescr literal = (LiteralDescr) left.getDescrs().get( 0 );
        assertEquals( "==",
                      literal.getEvaluator() );
        assertEquals( "name",
                      literal.getFieldName() );
        assertEquals( "mark",
                      literal.getText() );

        assertEquals( 1,
                      right.getDescrs().size() );
        literal = (LiteralDescr) right.getDescrs().get( 0 );
        assertEquals( "==",
                      literal.getEvaluator() );
        assertEquals( "type",
                      literal.getFieldName() );
        assertEquals( "stilton",
                      literal.getText() );

        //now the "||" part
        final OrDescr or = (OrDescr) and.getDescrs().get( 1 );
        assertEquals( 2,
                      or.getDescrs().size() );
        left = (ColumnDescr) or.getDescrs().get( 0 );
        right = (ColumnDescr) or.getDescrs().get( 1 );
        assertEquals( "Person",
                      left.getObjectType() );
        assertEquals( "Cheese",
                      right.getObjectType() );
        assertEquals( 1,
                      left.getDescrs().size() );
        literal = (LiteralDescr) left.getDescrs().get( 0 );
        assertEquals( "==",
                      literal.getEvaluator() );
        assertEquals( "name",
                      literal.getFieldName() );
        assertEquals( "mark",
                      literal.getText() );

        assertEquals( 1,
                      right.getDescrs().size() );
        literal = (LiteralDescr) right.getDescrs().get( 0 );
        assertEquals( "==",
                      literal.getEvaluator() );
        assertEquals( "type",
                      literal.getFieldName() );
        assertEquals( "stilton",
                      literal.getText() );

        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" );",
                                      rule.getConsequence() );

        assertFalse( parser.hasErrors() );
    }

    /** test basic foo : Fact() || Fact() stuff */
    public void testOrWithBinding() throws Exception {
        final RuleParser parser = parseResource( "or_binding.drl" );
        parser.compilation_unit();

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

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

        final ColumnDescr leftCol = (ColumnDescr) or.getDescrs().get( 0 );
        assertEquals( "Person",
                      leftCol.getObjectType() );
        assertEquals( "foo",
                      leftCol.getIdentifier() );
        
        final ColumnDescr rightCol = (ColumnDescr) or.getDescrs().get( 1 );
        assertEquals( "Person",
                      rightCol.getObjectType() );
        assertEquals( "foo",
                      rightCol.getIdentifier() );
        
        final ColumnDescr cheeseDescr = (ColumnDescr) rule.getLhs().getDescrs().get( 1 );
        assertEquals("Cheese", cheeseDescr.getObjectType());
        assertEquals(null, cheeseDescr.getIdentifier());


        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
                                      rule.getConsequence() );

        assertFalse( parser.hasErrors() );
    }

    /** test basic foo : Fact() || Fact() stuff binding to an "or"*/
    public void testOrBindingComplex() throws Exception {
        final RuleParser parser = parseResource( "or_binding_complex.drl" );
        parser.compilation_unit();

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

        assertEquals( 1,
                      rule.getLhs().getDescrs().size() );

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

        //first fact
        final ColumnDescr firstFact = (ColumnDescr) or.getDescrs().get( 0 );
        assertEquals( "Person",
                      firstFact.getObjectType() );
        assertEquals( "foo",
                      firstFact.getIdentifier() );

        //second "option"
        final ColumnDescr secondFact = (ColumnDescr) or.getDescrs().get( 1 );
        assertEquals( "Person",
                      secondFact.getObjectType() );
        assertEquals(1, secondFact.getDescrs().size());
        assertEquals("foo", secondFact.getIdentifier());
        
        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
                                      rule.getConsequence() );

        assertFalse( parser.hasErrors() );
    }

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

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

        assertEquals( 1,
                      rule.getLhs().getDescrs().size() );

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

        //first fact
        final ColumnDescr firstFact = (ColumnDescr) or.getDescrs().get( 0 );
        assertEquals( "Person",
                      firstFact.getObjectType() );
        assertEquals( "foo",
                      firstFact.getIdentifier() );

        //second "option"
        final ColumnDescr secondFact = (ColumnDescr) or.getDescrs().get( 0 );
        assertEquals( "Person",
                      secondFact.getObjectType() );
        assertEquals( "foo",
                      secondFact.getIdentifier() );

        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
                                      rule.getConsequence() );

        assertFalse( parser.hasErrors() );
    }

    /** */
    public void testBracketsPrecedence() throws Exception {
        final RuleParser parser = parseResource( "brackets_precedence.drl" );
        parser.compilation_unit();

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

        assertEquals( 1,
                      rule.getLhs().getDescrs().size() );

        final AndDescr rootAnd = (AndDescr) rule.getLhs().getDescrs().get( 0 );

⌨️ 快捷键说明

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