1 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 ; 15 import org.xml.sax.InputSource ; 16 import org.xml.sax.SAXException ; 17 import test.net.sourceforge.pmd.testframework.RuleTst; 18 19 import javax.xml.parsers.DocumentBuilderFactory ; 20 import javax.xml.parsers.ParserConfigurationException ; 21 import java.io.IOException ; 22 import java.io.StringReader ; 23 24 public class XMLRendererTest extends RuleTst { 25 26 private static class FooRule extends AbstractRule { 27 public Object visit(ASTClassOrInterfaceDeclaration c, Object ctx) { 28 if (c.getImage().equals("Foo")) addViolation(ctx, c); 29 return ctx; 30 } 31 32 public String getMessage() { 33 return "blah"; 34 } 35 36 public String getName() { 37 return "Foo"; 38 } 39 40 public String getRuleSetName() { 41 return "RuleSet"; 42 } 43 44 public String getDescription() { 45 return "desc"; 46 } 47 } 48 49 public void testEmptyReport() throws Throwable { 50 Element root = parseRootElement(new Report()); 51 assertEquals("pmd", root.getNodeName()); 52 assertNull(root.getFirstChild().getNextSibling()); } 54 55 public void testErrorReport() throws Throwable { 56 Report report = new Report(); 57 report.addError(new Report.ProcessingError("test_msg", "test_filename")); 58 Element root = parseRootElement(report); 59 assertEquals("test_msg", root.getFirstChild().getNextSibling().getAttributes().getNamedItem("msg").getNodeValue()); 60 } 61 62 public void testSingleReport() throws Throwable { 63 Report report = new Report(); 64 runTestFromString(TEST1, new FooRule(), report); 65 Element 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 TEST1 = 73 "public class Foo {}" + PMD.EOL; 74 75 private static final String TEST2 = 76 "public class Foo {" + PMD.EOL + 77 " public class Foo {}" + PMD.EOL + 78 "}" + PMD.EOL; 79 80 81 public void testDoubleReport() throws Throwable { 82 Report report = new Report(); 83 runTestFromString(TEST2, new FooRule(), report); 84 runTestFromString(TEST2, new FooRule(), report); 85 Element 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 { 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 (TEST2), rules, ctx); 102 Element 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 parseRootElement(Report rpt) throws SAXException , IOException , ParserConfigurationException { 108 return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource (new StringReader (new XMLRenderer().render(rpt)))).getDocumentElement(); 109 } 110 111 } 112 | Popular Tags |