1 package net.sourceforge.pmd.lang.xml.rule; 2 3 import static org.junit.Assert.assertEquals; 4 5 import java.io.StringReader; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import net.sourceforge.pmd.RuleContext; 10 import net.sourceforge.pmd.lang.Language; 11 import net.sourceforge.pmd.lang.Parser; 12 import net.sourceforge.pmd.lang.ast.Node; 13 import net.sourceforge.pmd.lang.xml.XmlParserOptions; 14 import net.sourceforge.pmd.lang.xml.ast.XmlNode; 15 import net.sourceforge.pmd.lang.xml.rule.AbstractXmlRule; 16 17 import org.junit.Test; 18 19 public class AbstractXmlRuleTest { 20 21 @Test 22 public void testVisit() throws Exception { 23 String source = "<?xml version=\"1.0\"?><foo abc=\"abc\"><bar/></foo>"; 24 XmlParserOptions parserOptions = new XmlParserOptions(); 25 Parser parser = Language.XML.getDefaultVersion().getLanguageVersionHandler().getParser(parserOptions); 26 XmlNode xmlNode = (XmlNode) parser.parse(null, new StringReader(source)); 27 List<XmlNode> nodes = new ArrayList<XmlNode>(); 28 nodes.add(xmlNode); 29 30 MyRule rule = new MyRule(); 31 rule.apply(nodes, null); 32 33 assertEquals(3, rule.visitedNodes.size()); 34 assertEquals("document", rule.visitedNodes.get(0).toString()); 35 assertEquals("foo", rule.visitedNodes.get(1).toString()); 36 assertEquals("bar", rule.visitedNodes.get(2).toString()); 37 } 38 39 private static class MyRule extends AbstractXmlRule { 40 final List<XmlNode> visitedNodes = new ArrayList<XmlNode>(); 41 42 public MyRule() { 43 } 44 45 @Override 46 public void apply(List<? extends Node> nodes, RuleContext ctx) { 47 visitedNodes.clear(); 48 super.apply(nodes, ctx); 49 } 50 51 @Override 52 protected void visit(XmlNode node, RuleContext ctx) { 53 visitedNodes.add(node); 54 super.visit(node, ctx); 55 } 56 } 57 58 public static junit.framework.Test suite() { 59 return new junit.framework.JUnit4TestAdapter(AbstractXmlRuleTest.class); 60 } 61 }