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 }