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 }