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

📄 documentnavigatortest.java

📁 检查Java程序漏洞
💻 JAVA
字号:
/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package test.net.sourceforge.pmd.jaxen;

import net.sourceforge.pmd.AbstractRule;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.ast.ASTCompilationUnit;
import net.sourceforge.pmd.ast.ASTImportDeclaration;
import net.sourceforge.pmd.ast.ASTMethodDeclaration;
import net.sourceforge.pmd.ast.ASTPrimaryExpression;
import net.sourceforge.pmd.ast.ASTPrimaryPrefix;
import net.sourceforge.pmd.ast.ASTStatement;
import net.sourceforge.pmd.ast.ASTTypeDeclaration;
import net.sourceforge.pmd.ast.Node;
import net.sourceforge.pmd.jaxen.DocumentNavigator;
import org.jaxen.BaseXPath;
import org.jaxen.JaxenException;
import org.jaxen.UnsupportedAxisException;
import test.net.sourceforge.pmd.rules.EmptyCatchBlockRuleTest;
import test.net.sourceforge.pmd.testframework.RuleTst;

import java.util.Iterator;
import java.util.List;

public class DocumentNavigatorTest extends RuleTst {

   
    private TestRule rule;

    private class TestRule extends AbstractRule {
		
        private Node compilationUnit;
        private Node importDeclaration;
        private Node typeDeclaration;
        private Node statement;
        private Node primaryPrefix;
        private Node primaryExpression;
        private Node methodDeclaration;
        /**
         * @see net.sourceforge.pmd.ast.JavaParserVisitor#visit(ASTCompilationUnit, Object)
         */
        public Object visit(ASTCompilationUnit node, Object data) {
            this.compilationUnit = node;
            return super.visit(node, data);
        }
        public Object visit(ASTImportDeclaration node, Object data) {
            this.importDeclaration = node;
            return super.visit(node, data);
        }
        public Object visit(ASTTypeDeclaration node, Object data) {
            this.typeDeclaration = node;
            return super.visit(node, data);
        }
        public Object visit(ASTStatement node, Object data) {
            this.statement = node;
            return super.visit(node, data);
        }
        public Object visit(ASTPrimaryPrefix node, Object data) {
            this.primaryPrefix = node;
            return super.visit(node, data);
        }
        public Object visit(ASTMethodDeclaration node, Object data) {
            this.methodDeclaration = node;
            return super.visit(node, data);
        }
        public Object visit(ASTPrimaryExpression node, Object data) {
            this.primaryExpression = node;
            return super.visit(node, data);
        }
    }

    public void setUp() throws Exception {
        try{
            rule = new TestRule();
            runTestFromString(EmptyCatchBlockRuleTest.TEST1, rule, new Report());
        } catch (Throwable xx) {
            fail();
        }
    }
    
    public void testChildAxisIterator() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter =nav.getChildAxisIterator(rule.compilationUnit);
        assertSame(rule.compilationUnit.jjtGetChild(0), iter.next());
        assertSame(rule.compilationUnit.jjtGetChild(1), iter.next());
        assertFalse(iter.hasNext());
    }

    public void testParentAxisIterator() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter =nav.getParentAxisIterator(rule.importDeclaration);
        assertSame(rule.importDeclaration.jjtGetParent(), iter.next());
        assertFalse(iter.hasNext());
    }
    
    public void testParentAxisIterator2() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter =nav.getParentAxisIterator(rule.compilationUnit);
        assertFalse(iter.hasNext());
    }

    public void testDescendantAxisIterator() throws UnsupportedAxisException {
        DocumentNavigator nav = new DocumentNavigator();
		Iterator iter = nav.getDescendantAxisIterator(rule.statement);
		Node statementExpression = rule.statement.jjtGetChild(0);
		assertSame(statementExpression, iter.next());
		Node primaryExpression = statementExpression.jjtGetChild(0);
        assertSame(primaryExpression, iter.next());
        Node primaryPrefix = primaryExpression.jjtGetChild(0);
        assertSame(primaryPrefix, iter.next());
        Node primarySuffix = primaryExpression.jjtGetChild(1);
        assertSame(primarySuffix, iter.next());
        Node name = primaryPrefix.jjtGetChild(0);
        assertSame(name, iter.next());
        Node arguments = primarySuffix.jjtGetChild(0);
        assertSame(arguments, iter.next());
        assertFalse(iter.hasNext());
    }
    
    public void testDescendantAxisIterator2() throws UnsupportedAxisException {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter = nav.getDescendantAxisIterator(rule.primaryPrefix);
        Node name = rule.primaryPrefix.jjtGetChild(0);
        assertSame(name, iter.next());
        assertFalse(iter.hasNext());
    }
    
    public void testFollowingSiblingAxisIterator() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
        assertSame(rule.primaryExpression.jjtGetChild(1), iter.next());
        assertFalse(iter.hasNext());
    }

    public void testFollowingSiblingAxisIterator2() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
        assertFalse(iter.hasNext());
    }

    public void testPrecedingSiblingAxisIterator() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
        assertSame(rule.primaryExpression.jjtGetChild(0), iter.next());
        assertFalse(iter.hasNext());
    }

    public void testPrecedingSiblingAxisIterator2() {
        DocumentNavigator nav = new DocumentNavigator();
        Iterator iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
        assertFalse(iter.hasNext());
    }

    public void testXPath() throws JaxenException {
		BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
		List matches = xPath.selectNodes(rule.statement);
		assertEquals(6, matches.size());
    }

    public void testXPath2() throws JaxenException {
        BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
        List matches = xPath.selectNodes(rule.importDeclaration);
        assertEquals(1, matches.size());        
    }

    public void testXPath3() throws JaxenException {
        BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
        List matches = xPath.selectNodes(rule.typeDeclaration);
        assertEquals(80, matches.size());
    }
    
    public void testXPath4() throws JaxenException {
        BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
        List matches = xPath.selectNodes(rule.compilationUnit);
        assertEquals(83, matches.size());
    }    
}

⌨️ 快捷键说明

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