1 package test.net.sourceforge.pmd.rules; 2 3 import net.sourceforge.pmd.PMD; 4 import net.sourceforge.pmd.Report; 5 import net.sourceforge.pmd.Rule; 6 import net.sourceforge.pmd.RuleContext; 7 import net.sourceforge.pmd.RuleSet; 8 import net.sourceforge.pmd.RuleViolation; 9 import net.sourceforge.pmd.rules.XPathRule; 10 import test.net.sourceforge.pmd.testframework.RuleTst; 11 12 import java.io.StringReader; 13 14 /*** 15 * @author daniels 16 */ 17 public class XPathRuleTest extends RuleTst { 18 19 XPathRule rule; 20 21 public void setUp() { 22 rule = new XPathRule(); 23 rule.setMessage("XPath Rule Failed"); 24 } 25 26 public void testPluginname() throws Throwable { 27 Rule rule = new XPathRule(); 28 rule.addProperty("xpath", "//VariableDeclaratorId[string-length(@Image) < 3]"); 29 rule.setMessage("{0}"); 30 rule.addProperty("pluginname", "true"); 31 PMD p = new PMD(); 32 RuleContext ctx = new RuleContext(); 33 Report report = new Report(); 34 ctx.setReport(report); 35 ctx.setSourceCodeFilename("n/a"); 36 RuleSet rules = new RuleSet(); 37 rules.addRule(rule); 38 p.processFile(new StringReader(TEST1), rules, ctx); 39 RuleViolation rv = (RuleViolation) report.iterator().next(); 40 assertEquals("a", rv.getDescription()); 41 } 42 43 public void testVariables() throws Throwable { 44 Rule rule = new XPathRule(); 45 rule.addProperty("xpath", "//VariableDeclaratorId[@Image=$var]"); 46 rule.setMessage("Avoid vars"); 47 rule.addProperty("var", "fiddle"); 48 PMD p = new PMD(); 49 RuleContext ctx = new RuleContext(); 50 Report report = new Report(); 51 ctx.setReport(report); 52 ctx.setSourceCodeFilename("n/a"); 53 RuleSet rules = new RuleSet(); 54 rules.addRule(rule); 55 p.processFile(new StringReader(TEST2), rules, ctx); 56 RuleViolation rv = (RuleViolation) report.iterator().next(); 57 assertEquals(3, rv.getBeginLine()); 58 } 59 60 private static final String TEST1 = 61 "public class Foo {" + PMD.EOL + 62 " int a;" + PMD.EOL + 63 "}"; 64 65 private static final String TEST2 = 66 "public class Foo {" + PMD.EOL + 67 " int faddle;" + PMD.EOL + 68 " int fiddle;" + PMD.EOL + 69 "}"; 70 }