View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
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  }