KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > net > sourceforge > pmd > jaxen > DocumentNavigatorTest


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package test.net.sourceforge.pmd.jaxen;
5
6 import net.sourceforge.pmd.AbstractRule;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.Report;
9 import net.sourceforge.pmd.ast.ASTCompilationUnit;
10 import net.sourceforge.pmd.ast.ASTImportDeclaration;
11 import net.sourceforge.pmd.ast.ASTPrimaryExpression;
12 import net.sourceforge.pmd.ast.ASTPrimaryPrefix;
13 import net.sourceforge.pmd.ast.ASTStatement;
14 import net.sourceforge.pmd.ast.Node;
15 import net.sourceforge.pmd.jaxen.DocumentNavigator;
16 import org.jaxen.BaseXPath;
17 import org.jaxen.JaxenException;
18 import org.jaxen.UnsupportedAxisException;
19 import test.net.sourceforge.pmd.testframework.RuleTst;
20
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23
24 public class DocumentNavigatorTest extends RuleTst {
25
26
27     private TestRule rule;
28
29     private class TestRule extends AbstractRule {
30
31         private Node compilationUnit;
32         private Node importDeclaration;
33         private Node statement;
34         private Node primaryPrefix;
35         private Node primaryExpression;
36
37         /**
38          * @see net.sourceforge.pmd.ast.JavaParserVisitor#visit(ASTCompilationUnit, Object)
39          */

40         public Object JavaDoc visit(ASTCompilationUnit node, Object JavaDoc data) {
41             this.compilationUnit = node;
42             return super.visit(node, data);
43         }
44
45         public Object JavaDoc visit(ASTImportDeclaration node, Object JavaDoc data) {
46             this.importDeclaration = node;
47             return super.visit(node, data);
48         }
49
50         public Object JavaDoc visit(ASTStatement node, Object JavaDoc data) {
51             this.statement = node;
52             return super.visit(node, data);
53         }
54
55         public Object JavaDoc visit(ASTPrimaryPrefix node, Object JavaDoc data) {
56             this.primaryPrefix = node;
57             return super.visit(node, data);
58         }
59
60         public Object JavaDoc visit(ASTPrimaryExpression node, Object JavaDoc data) {
61             this.primaryExpression = node;
62             return super.visit(node, data);
63         }
64     }
65
66     public void setUp() throws Exception JavaDoc {
67         try {
68             rule = new TestRule();
69             runTestFromString(TEST, rule, new Report());
70         } catch (Throwable JavaDoc xx) {
71             xx.printStackTrace();
72             fail();
73         }
74     }
75
76     public void testChildAxisIterator() {
77         DocumentNavigator nav = new DocumentNavigator();
78         Iterator JavaDoc iter = nav.getChildAxisIterator(rule.compilationUnit);
79         assertSame(rule.compilationUnit.jjtGetChild(0), iter.next());
80         assertSame(rule.compilationUnit.jjtGetChild(1), iter.next());
81         assertFalse(iter.hasNext());
82     }
83
84     public void testParentAxisIterator() {
85         DocumentNavigator nav = new DocumentNavigator();
86         Iterator JavaDoc iter = nav.getParentAxisIterator(rule.importDeclaration);
87         assertSame(rule.importDeclaration.jjtGetParent(), iter.next());
88         assertFalse(iter.hasNext());
89     }
90
91     public void testParentAxisIterator2() {
92         DocumentNavigator nav = new DocumentNavigator();
93         Iterator JavaDoc iter = nav.getParentAxisIterator(rule.compilationUnit);
94         assertFalse(iter.hasNext());
95     }
96
97     public void testDescendantAxisIterator() throws UnsupportedAxisException {
98         DocumentNavigator nav = new DocumentNavigator();
99         Iterator JavaDoc iter = nav.getDescendantAxisIterator(rule.statement);
100         Node statementExpression = rule.statement.jjtGetChild(0);
101         assertSame(statementExpression, iter.next());
102         Node primaryExpression = statementExpression.jjtGetChild(0);
103         assertSame(primaryExpression, iter.next());
104         Node primaryPrefix = primaryExpression.jjtGetChild(0);
105         assertSame(primaryPrefix, iter.next());
106         Node primarySuffix = primaryExpression.jjtGetChild(1);
107 // assertSame(primarySuffix, iter.next());
108
Node name = primaryPrefix.jjtGetChild(0);
109 // assertSame(name, iter.next());
110
Node arguments = primarySuffix.jjtGetChild(0);
111 // assertSame(arguments, iter.next());
112
// assertFalse(iter.hasNext());
113
}
114
115     public void testDescendantAxisIterator2() throws UnsupportedAxisException {
116         DocumentNavigator nav = new DocumentNavigator();
117         Iterator JavaDoc iter = nav.getDescendantAxisIterator(rule.primaryPrefix);
118         Node name = rule.primaryPrefix.jjtGetChild(0);
119         assertSame(name, iter.next());
120         assertFalse(iter.hasNext());
121     }
122
123     public void testFollowingSiblingAxisIterator() {
124         DocumentNavigator nav = new DocumentNavigator();
125         Iterator JavaDoc iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
126         assertSame(rule.primaryExpression.jjtGetChild(1), iter.next());
127         assertFalse(iter.hasNext());
128     }
129
130     public void testFollowingSiblingAxisIterator2() {
131         DocumentNavigator nav = new DocumentNavigator();
132         Iterator JavaDoc iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
133         assertFalse(iter.hasNext());
134     }
135
136     public void testPrecedingSiblingAxisIterator() {
137         DocumentNavigator nav = new DocumentNavigator();
138         Iterator JavaDoc iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
139         assertSame(rule.primaryExpression.jjtGetChild(0), iter.next());
140         assertFalse(iter.hasNext());
141     }
142
143     public void testPrecedingSiblingAxisIterator2() {
144         DocumentNavigator nav = new DocumentNavigator();
145         Iterator JavaDoc iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
146         assertFalse(iter.hasNext());
147     }
148
149     public void testXPath() throws JaxenException {
150         BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
151         List JavaDoc matches = xPath.selectNodes(rule.statement);
152         assertEquals(6, matches.size());
153     }
154
155     public void testXPath2() throws JaxenException {
156         BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
157         List JavaDoc matches = xPath.selectNodes(rule.importDeclaration);
158         assertEquals(1, matches.size());
159     }
160
161
162     public static final String JavaDoc TEST =
163             "import java.io.*;" + PMD.EOL +
164             "public class Foo {" + PMD.EOL +
165             " public Foo() {" + PMD.EOL +
166             " try {" + PMD.EOL +
167             " FileReader fr = new FileReader(\"/dev/null\");" + PMD.EOL +
168             " } catch (Exception e) {}" + PMD.EOL +
169             " try {" + PMD.EOL +
170             " FileReader fr = new FileReader(\"/dev/null\");" + PMD.EOL +
171             " } catch (Exception e) {" + PMD.EOL +
172             " e.printStackTrace();" + PMD.EOL +
173             " // this shouldn't show up on the report" + PMD.EOL +
174             " }" + PMD.EOL +
175             " }" + PMD.EOL +
176             "}";
177 }
178
Popular Tags