1 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 ; 22 import java.util.List ; 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 40 public Object visit(ASTCompilationUnit node, Object data) { 41 this.compilationUnit = node; 42 return super.visit(node, data); 43 } 44 45 public Object visit(ASTImportDeclaration node, Object data) { 46 this.importDeclaration = node; 47 return super.visit(node, data); 48 } 49 50 public Object visit(ASTStatement node, Object data) { 51 this.statement = node; 52 return super.visit(node, data); 53 } 54 55 public Object visit(ASTPrimaryPrefix node, Object data) { 56 this.primaryPrefix = node; 57 return super.visit(node, data); 58 } 59 60 public Object visit(ASTPrimaryExpression node, Object data) { 61 this.primaryExpression = node; 62 return super.visit(node, data); 63 } 64 } 65 66 public void setUp() throws Exception { 67 try { 68 rule = new TestRule(); 69 runTestFromString(TEST, rule, new Report()); 70 } catch (Throwable xx) { 71 xx.printStackTrace(); 72 fail(); 73 } 74 } 75 76 public void testChildAxisIterator() { 77 DocumentNavigator nav = new DocumentNavigator(); 78 Iterator 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 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 iter = nav.getParentAxisIterator(rule.compilationUnit); 94 assertFalse(iter.hasNext()); 95 } 96 97 public void testDescendantAxisIterator() throws UnsupportedAxisException { 98 DocumentNavigator nav = new DocumentNavigator(); 99 Iterator 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 Node name = primaryPrefix.jjtGetChild(0); 109 Node arguments = primarySuffix.jjtGetChild(0); 111 } 114 115 public void testDescendantAxisIterator2() throws UnsupportedAxisException { 116 DocumentNavigator nav = new DocumentNavigator(); 117 Iterator 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 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 iter = nav.getFollowingSiblingAxisIterator(rule.primaryExpression.jjtGetChild(1)); 133 assertFalse(iter.hasNext()); 134 } 135 136 public void testPrecedingSiblingAxisIterator() { 137 DocumentNavigator nav = new DocumentNavigator(); 138 Iterator 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 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 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 matches = xPath.selectNodes(rule.importDeclaration); 158 assertEquals(1, matches.size()); 159 } 160 161 162 public static final String 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 |