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