1 package test.net.sourceforge.pmd.jsp.ast; 2 3 import junit.framework.TestCase; 4 import net.sourceforge.pmd.ast.Node; 5 import net.sourceforge.pmd.jsp.ast.JspCharStream; 6 import net.sourceforge.pmd.jsp.ast.JspParser; 7 8 import java.io.StringReader ; 9 import java.util.HashSet ; 10 import java.util.Iterator ; 11 import java.util.Set ; 12 13 public class AbstractJspNodesTst extends TestCase { 14 15 public void assertNumberOfNodes(Class clazz, String source, int number) { 16 Set nodes = getNodes(clazz, source); 17 assertEquals("Exactly " + number + " element(s) expected", number, nodes.size()); 18 } 19 20 27 public Set getNodes(Class clazz, String source) { 28 JspParser parser = new JspParser(new JspCharStream(new StringReader (source))); 29 Node rootNode = parser.CompilationUnit(); 30 Set nodes = new HashSet (); 31 addNodeAndSubnodes(rootNode, nodes, clazz); 32 return nodes; 33 } 34 35 43 public Set getNodesOfType(Class clazz, Set allNodes) { 44 Set result = new HashSet (); 45 for (Iterator i = allNodes.iterator(); i.hasNext();) { 46 Object node = i.next(); 47 if (clazz.equals(node.getClass())) { 48 result.add(node); 49 } 50 } 51 return result; 52 } 53 54 62 private void addNodeAndSubnodes(Node node, Set nodes, Class clazz) { 63 if (null != node) { 64 if ((null == clazz) || (clazz.equals(node.getClass()))) { 65 nodes.add(node); 66 } 67 } 68 for (int i = 0; i < node.jjtGetNumChildren(); i++) { 69 addNodeAndSubnodes(node.jjtGetChild(i), nodes, clazz); 70 } 71 } 72 73 } 74 | Popular Tags |