KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > net > sourceforge > pmd > renderers > XMLRendererTest


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package test.net.sourceforge.pmd.renderers;
5
6 import net.sourceforge.pmd.AbstractRule;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.Report;
9 import net.sourceforge.pmd.RuleContext;
10 import net.sourceforge.pmd.RuleSet;
11 import net.sourceforge.pmd.SourceType;
12 import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
13 import net.sourceforge.pmd.renderers.XMLRenderer;
14 import org.w3c.dom.Element JavaDoc;
15 import org.xml.sax.InputSource JavaDoc;
16 import org.xml.sax.SAXException JavaDoc;
17 import test.net.sourceforge.pmd.testframework.RuleTst;
18
19 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
20 import javax.xml.parsers.ParserConfigurationException JavaDoc;
21 import java.io.IOException JavaDoc;
22 import java.io.StringReader JavaDoc;
23
24 public class XMLRendererTest extends RuleTst {
25
26     private static class FooRule extends AbstractRule {
27         public Object JavaDoc visit(ASTClassOrInterfaceDeclaration c, Object JavaDoc ctx) {
28             if (c.getImage().equals("Foo")) addViolation(ctx, c);
29             return ctx;
30         }
31
32         public String JavaDoc getMessage() {
33             return "blah";
34         }
35
36         public String JavaDoc getName() {
37             return "Foo";
38         }
39
40         public String JavaDoc getRuleSetName() {
41             return "RuleSet";
42         }
43
44         public String JavaDoc getDescription() {
45             return "desc";
46         }
47     }
48
49     public void testEmptyReport() throws Throwable JavaDoc {
50         Element JavaDoc root = parseRootElement(new Report());
51         assertEquals("pmd", root.getNodeName());
52         assertNull(root.getFirstChild().getNextSibling()); // only one child, it's whitespace
53
}
54
55     public void testErrorReport() throws Throwable JavaDoc {
56         Report report = new Report();
57         report.addError(new Report.ProcessingError("test_msg", "test_filename"));
58         Element JavaDoc root = parseRootElement(report);
59         assertEquals("test_msg", root.getFirstChild().getNextSibling().getAttributes().getNamedItem("msg").getNodeValue());
60     }
61
62     public void testSingleReport() throws Throwable JavaDoc {
63         Report report = new Report();
64         runTestFromString(TEST1, new FooRule(), report);
65         Element JavaDoc root = parseRootElement(report);
66         assertEquals("n/a", root.getFirstChild().getNextSibling().getAttributes().getNamedItem("name").getNodeValue());
67         assertEquals("Foo", root.getFirstChild().getNextSibling().getFirstChild().getNextSibling().getAttributes().getNamedItem("rule").getNodeValue());
68         assertEquals("RuleSet", root.getFirstChild().getNextSibling().getFirstChild().getNextSibling().getAttributes().getNamedItem("ruleset").getNodeValue());
69         assertEquals("1", root.getFirstChild().getNextSibling().getFirstChild().getNextSibling().getAttributes().getNamedItem("line").getNodeValue());
70     }
71
72     private static final String JavaDoc TEST1 =
73             "public class Foo {}" + PMD.EOL;
74
75     private static final String JavaDoc TEST2 =
76             "public class Foo {" + PMD.EOL +
77             " public class Foo {}" + PMD.EOL +
78             "}" + PMD.EOL;
79
80
81     public void testDoubleReport() throws Throwable JavaDoc {
82         Report report = new Report();
83         runTestFromString(TEST2, new FooRule(), report);
84         runTestFromString(TEST2, new FooRule(), report);
85         Element JavaDoc root = parseRootElement(report);
86         assertEquals("Foo", root.getFirstChild().getNextSibling().getFirstChild().getNextSibling().getAttributes().getNamedItem("rule").getNodeValue());
87         assertEquals("Foo", root.getFirstChild().getNextSibling().getFirstChild().getNextSibling().getNextSibling().getNextSibling().getAttributes().getNamedItem("rule").getNodeValue());
88     }
89
90     public void testTwoFiles() throws Throwable JavaDoc {
91         Report report = new Report();
92         FooRule rule = new FooRule();
93         runTestFromString(TEST2, rule, report);
94         PMD p = new PMD();
95         p.setJavaVersion(SourceType.JAVA_14);
96         RuleContext ctx = new RuleContext();
97         ctx.setReport(report);
98         ctx.setSourceCodeFilename("bar");
99         RuleSet rules = new RuleSet();
100         rules.addRule(rule);
101         p.processFile(new StringReader JavaDoc(TEST2), rules, ctx);
102         Element JavaDoc root = parseRootElement(report);
103         assertEquals("bar", root.getFirstChild().getNextSibling().getAttributes().getNamedItem("name").getNodeValue());
104         assertEquals("n/a", root.getFirstChild().getNextSibling().getNextSibling().getNextSibling().getAttributes().getNamedItem("name").getNodeValue());
105     }
106
107     private Element JavaDoc parseRootElement(Report rpt) throws SAXException JavaDoc, IOException JavaDoc, ParserConfigurationException JavaDoc {
108         return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource JavaDoc(new StringReader JavaDoc(new XMLRenderer().render(rpt)))).getDocumentElement();
109     }
110
111 }
112
Popular Tags