1 /*
2 * Created on 15/03/2003
3 *
4 * To change this generated comment go to
5 * Window>Preferences>Java>Code Generation>Code Template
6 */
7 package test.net.sourceforge.pmd.jaxen;
8
9 import net.sourceforge.pmd.AbstractRule;
10 import net.sourceforge.pmd.Report;
11 import net.sourceforge.pmd.ast.ASTCompilationUnit;
12 import net.sourceforge.pmd.ast.ASTImportDeclaration;
13 import net.sourceforge.pmd.ast.ASTMethodDeclaration;
14 import net.sourceforge.pmd.ast.ASTPrimaryExpression;
15 import net.sourceforge.pmd.ast.ASTPrimaryPrefix;
16 import net.sourceforge.pmd.ast.ASTStatement;
17 import net.sourceforge.pmd.ast.ASTTypeDeclaration;
18 import net.sourceforge.pmd.ast.Node;
19 import net.sourceforge.pmd.jaxen.DocumentNavigator;
20 import org.jaxen.BaseXPath;
21 import org.jaxen.JaxenException;
22 import org.jaxen.UnsupportedAxisException;
23 import test.net.sourceforge.pmd.rules.EmptyCatchBlockRuleTest;
24 import test.net.sourceforge.pmd.rules.RuleTst;
25
26 import java.util.Iterator;
27 import java.util.List;
28
29 /***
30 * @author daniels
31 *
32 * To change this generated comment go to
33 * Window>Preferences>Java>Code Generation>Code Template
34 */
35 public class DocumentNavigatorTest extends RuleTst {
36
37
38 private TestRule rule;
39
40 private class TestRule extends AbstractRule {
41
42 private Node compilationUnit;
43 private Node importDeclaration;
44 private Node typeDeclaration;
45 private Node statement;
46 private Node primaryPrefix;
47 private Node primaryExpression;
48 private Node methodDeclaration;
49 /***
50 * @see net.sourceforge.pmd.ast.JavaParserVisitor#visit(ASTCompilationUnit, Object)
51 */
52 public Object visit(ASTCompilationUnit node, Object data) {
53 this.compilationUnit = node;
54 return super.visit(node, data);
55 }
56 public Object visit(ASTImportDeclaration node, Object data) {
57 this.importDeclaration = node;
58 return super.visit(node, data);
59 }
60 public Object visit(ASTTypeDeclaration node, Object data) {
61 this.typeDeclaration = node;
62 return super.visit(node, data);
63 }
64 public Object visit(ASTStatement node, Object data) {
65 this.statement = node;
66 return super.visit(node, data);
67 }
68 public Object visit(ASTPrimaryPrefix node, Object data) {
69 this.primaryPrefix = node;
70 return super.visit(node, data);
71 }
72 public Object visit(ASTMethodDeclaration node, Object data) {
73 this.methodDeclaration = node;
74 return super.visit(node, data);
75 }
76 public Object visit(ASTPrimaryExpression node, Object data) {
77 this.primaryExpression = node;
78 return super.visit(node, data);
79 }
80 }
81
82 public void setUp() throws Exception {
83 try{
84 rule = new TestRule();
85 runTestFromString(EmptyCatchBlockRuleTest.TEST1, rule, new Report());
86 } catch (Throwable xx) {
87 fail();
88 }
89 }
90
91 public void testChildAxisIterator() {
92 DocumentNavigator nav = new DocumentNavigator();
93 Iterator iter =nav.getChildAxisIterator(rule.compilationUnit);
94 assertSame(rule.compilationUnit.jjtGetChild(0), iter.next());
95 assertSame(rule.compilationUnit.jjtGetChild(1), iter.next());
96 assertFalse(iter.hasNext());
97 }
98
99 public void testParentAxisIterator() {
100 DocumentNavigator nav = new DocumentNavigator();
101 Iterator iter =nav.getParentAxisIterator(rule.importDeclaration);
102 assertSame(rule.importDeclaration.jjtGetParent(), iter.next());
103 assertFalse(iter.hasNext());
104 }
105
106 public void testParentAxisIterator2() {
107 DocumentNavigator nav = new DocumentNavigator();
108 Iterator iter =nav.getParentAxisIterator(rule.compilationUnit);
109 assertFalse(iter.hasNext());
110 }
111
112 public void testDescendantAxisIterator() throws UnsupportedAxisException {
113 DocumentNavigator nav = new DocumentNavigator();
114 Iterator iter = nav.getDescendantAxisIterator(rule.statement);
115 Node statementExpression = rule.statement.jjtGetChild(0);
116 assertSame(statementExpression, iter.next());
117 Node primaryExpression = statementExpression.jjtGetChild(0);
118 assertSame(primaryExpression, iter.next());
119 Node primaryPrefix = primaryExpression.jjtGetChild(0);
120 assertSame(primaryPrefix, iter.next());
121 Node primarySuffix = primaryExpression.jjtGetChild(1);
122 assertSame(primarySuffix, iter.next());
123 Node name = primaryPrefix.jjtGetChild(0);
124 assertSame(name, iter.next());
125 Node arguments = primarySuffix.jjtGetChild(0);
126 assertSame(arguments, iter.next());
127 assertFalse(iter.hasNext());
128 }
129
130 public void testDescendantAxisIterator2() throws UnsupportedAxisException {
131 DocumentNavigator nav = new DocumentNavigator();
132 Iterator iter = nav.getDescendantAxisIterator(rule.primaryPrefix);
133 Node name = rule.primaryPrefix.jjtGetChild(0);
134 assertSame(name, iter.next());
135 assertFalse(iter.hasNext());
136 }
137
138 public void testFollowingSiblingAxisIterator() {
139 DocumentNavigator nav = new DocumentNavigator();
140 Iterator iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
141 assertSame(rule.primaryExpression.jjtGetChild(1), iter.next());
142 assertFalse(iter.hasNext());
143 }
144
145 public void testFollowingSiblingAxisIterator2() {
146 DocumentNavigator nav = new DocumentNavigator();
147 Iterator iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
148 assertFalse(iter.hasNext());
149 }
150
151 public void testPrecedingSiblingAxisIterator() {
152 DocumentNavigator nav = new DocumentNavigator();
153 Iterator iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1));
154 assertSame(rule.primaryExpression.jjtGetChild(0), iter.next());
155 assertFalse(iter.hasNext());
156 }
157
158 public void testPrecedingSiblingAxisIterator2() {
159 DocumentNavigator nav = new DocumentNavigator();
160 Iterator iter = nav.getPrecedingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(0));
161 assertFalse(iter.hasNext());
162 }
163
164 /*
165 public void testAttributeAxisIterator() {
166 //TODO: This is fragile - attribute order is not guaranteed
167 DocumentNavigator nav = new DocumentNavigator();
168 Attribute attr;
169 Iterator iter = nav.getAttributeAxisIterator(rule.primaryPrefix);
170 attr = (Attribute) iter.next();
171 assertEquals("BeginLine", attr.getName());
172 assertEquals("12", attr.getValue());
173 attr = (Attribute) iter.next();
174 assertEquals("BeginColumn", attr.getName());
175 assertEquals("17", attr.getValue());
176 attr = (Attribute) iter.next();
177 assertEquals("EndLine", attr.getName());
178 assertEquals("12", attr.getValue());
179 attr = (Attribute) iter.next();
180 assertEquals("EndColumn", attr.getName());
181 assertEquals("33", attr.getValue());
182 attr = (Attribute) iter.next();
183 assertEquals("ThisModifier", attr.getName());
184 assertEquals("false", attr.getValue());
185 attr = (Attribute) iter.next();
186 assertEquals("SuperModifier", attr.getName());
187 assertEquals("false", attr.getValue());
188 assertFalse(iter.hasNext());
189 }
190 */
191
192 /*
193 public void testTest() throws Throwable {
194 runTestFromFile("UnusedModifier1.java", rule);
195 DocumentNavigator nav = new DocumentNavigator();
196 XPath xpath1 = new BaseXPath(".[@Public = 'true']", nav);
197 assertTrue(xpath1.booleanValueOf(rule.methodDeclaration));
198 assertSame(rule.methodDeclaration, xpath1.selectSingleNode(rule.methodDeclaration));
199 XPath xpath2 = new BaseXPath("//ASTMethodDeclaration[@Public='true']", nav);
200 System.out.println(xpath2);
201 assertTrue(xpath2.booleanValueOf(rule.compilationUnit));
202 assertSame(rule.methodDeclaration, xpath2.selectSingleNode(rule.compilationUnit));
203 }
204 */
205
206 /*
207 public void testAttributeAxisIterator2() throws Throwable {
208 //TODO: This is fragile - attribute order is not guaranteed
209 runTestFromFile("UnusedModifier1.java", rule);
210 DocumentNavigator nav = new DocumentNavigator();
211 Attribute attr;
212 assertNotNull(rule.methodDeclaration);
213 Iterator iter = nav.getAttributeAxisIterator(rule.methodDeclaration);
214 attr = (Attribute) iter.next();
215 assertEquals("BeginLine", attr.getName());
216 assertEquals("2", attr.getValue());
217 attr = (Attribute) iter.next();
218 assertEquals("BeginColumn", attr.getName());
219 assertEquals("2", attr.getValue());
220 attr = (Attribute) iter.next();
221 assertEquals("EndLine", attr.getName());
222 assertEquals("2", attr.getValue());
223 attr = (Attribute) iter.next();
224 assertEquals("EndColumn", attr.getName());
225 assertEquals("19", attr.getValue());
226 attr = (Attribute) iter.next();
227 assertEquals("Interface", attr.getName());
228 assertEquals("false", attr.getValue());
229 attr = (Attribute) iter.next();
230 assertEquals("Private", attr.getName());
231 assertEquals("false", attr.getValue());
232 attr = (Attribute) iter.next();
233 assertEquals("Transient", attr.getName());
234 assertEquals("false", attr.getValue());
235 attr = (Attribute) iter.next();
236 assertEquals("Static", attr.getName());
237 assertEquals("false", attr.getValue());
238 attr = (Attribute) iter.next();
239 assertEquals("Public", attr.getName());
240 assertEquals("true", attr.getValue());
241 attr = (Attribute) iter.next();
242 assertEquals("Protected", attr.getName());
243 assertEquals("false", attr.getValue());
244 attr = (Attribute) iter.next();
245 assertEquals("Final", attr.getName());
246 assertEquals("false", attr.getValue());
247 attr = (Attribute) iter.next();
248 assertEquals("Synchronized", attr.getName());
249 assertEquals("false", attr.getValue());
250 attr = (Attribute) iter.next();
251 assertEquals("Volatile", attr.getName());
252 assertEquals("false", attr.getValue());
253 attr = (Attribute) iter.next();
254 assertEquals("Native", attr.getName());
255 assertEquals("false", attr.getValue());
256 attr = (Attribute) iter.next();
257 assertEquals("Abstract", attr.getName());
258 assertEquals("false", attr.getValue());
259 attr = (Attribute) iter.next();
260 assertEquals("Strict", attr.getName());
261 assertEquals("false", attr.getValue());
262 attr = (Attribute) iter.next();
263 assertEquals("Super", attr.getName());
264 assertEquals("false", attr.getValue());
265 assertFalse(iter.hasNext());
266 }
267 */
268
269 public void testXPath() throws JaxenException {
270 BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
271 List matches = xPath.selectNodes(rule.statement);
272 assertEquals(6, matches.size());
273 }
274
275 public void testXPath2() throws JaxenException {
276 BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
277 List matches = xPath.selectNodes(rule.importDeclaration);
278 assertEquals(1, matches.size());
279 }
280
281 public void testXPath3() throws JaxenException {
282 BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
283 List matches = xPath.selectNodes(rule.typeDeclaration);
284 assertEquals(76, matches.size());
285 }
286
287 public void testXPath4() throws JaxenException {
288 BaseXPath xPath = new BaseXPath(".//*", new DocumentNavigator());
289 List matches = xPath.selectNodes(rule.compilationUnit);
290 assertEquals(79, matches.size());
291 }
292 }
This page was automatically generated by Maven