1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package test.net.sourceforge.pmd.testframework;
5
6 import junit.framework.TestCase;
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.Report;
9 import net.sourceforge.pmd.Rule;
10 import net.sourceforge.pmd.RuleContext;
11 import net.sourceforge.pmd.RuleSet;
12 import net.sourceforge.pmd.RuleSetFactory;
13 import net.sourceforge.pmd.RuleSetNotFoundException;
14 import net.sourceforge.pmd.RuleSets;
15 import net.sourceforge.pmd.SimpleRuleSetNameMapper;
16 import net.sourceforge.pmd.SourceType;
17 import net.sourceforge.pmd.SourceTypeToRuleLanguageMapper;
18 import net.sourceforge.pmd.TargetJDKVersion;
19
20 import java.io.StringReader;
21
22 public class RuleTst extends TestCase {
23 public static final SourceType DEFAULT_SOURCE_TYPE = SourceType.JAVA_14;
24
25 public void runTestFromString(String code, int expectedResults, Rule rule) throws Throwable {
26 runTestFromString(code, expectedResults, rule, DEFAULT_SOURCE_TYPE);
27 }
28
29 public Rule findRule(String rs, String r) {
30 try {
31 Rule rule = new RuleSetFactory().createRuleSets(new SimpleRuleSetNameMapper(rs).getRuleSets()).getRuleByName(r);
32 if (rule == null) {
33 fail("Rule " + r + " not found in ruleset " + rs);
34 }
35 return rule;
36 } catch (RuleSetNotFoundException e) {
37 e.printStackTrace();
38 fail("Couldn't find ruleset " + rs);
39 return null;
40 }
41 }
42
43
44 /***
45 * Run the rule on the given code, and check the expected number of violations.
46 *
47 * @param code
48 * @param expectedResults
49 * @param rule
50 * @throws Throwable
51 */
52 public void runTestFromString(String code, int expectedResults, Rule rule,
53 SourceType sourceType) throws Throwable {
54 int res = processUsingStringReader(code, rule, sourceType).size();
55 assertEquals("Expected " + expectedResults + " failures, got " + res + ".",
56 expectedResults, res);
57 }
58
59 private Report processUsingStringReader(String code, Rule rule,
60 SourceType sourceType) throws Throwable {
61 Report report = new Report();
62 runTestFromString(code, rule, report, sourceType);
63 return report;
64 }
65
66 /***
67 * Run the rule on the given code, and put the violations in the given report.
68 *
69 * @param code
70 * @param expectedResults
71 * @param rule
72 * @throws Throwable
73 */
74 public void runTestFromString(String code, Rule rule, Report report,
75 SourceType sourceType) throws Throwable {
76 PMD p = new PMD();
77 RuleContext ctx = new RuleContext();
78 ctx.setReport(report);
79 ctx.setSourceCodeFilename("n/a");
80 RuleSet rules = new RuleSet();
81 rules.addRule(rule);
82 rules.setLanguage(SourceTypeToRuleLanguageMapper.getMappedLanguage(sourceType));
83 p.processFile(new StringReader(code), new RuleSets(rules), ctx, sourceType);
84 }
85
86
87 public void runTestFromString(String code, Rule rule, Report report) throws Throwable {
88 runTestFromString(code, rule, report, DEFAULT_SOURCE_TYPE);
89 }
90
91 public void runTestFromString15(String code, Rule rule, Report report) throws Throwable {
92 runTestFromString(code, rule, report, SourceType.JAVA_15);
93 }
94
95 public void runTestFromString13(String code, Rule rule, Report report) throws Throwable {
96 runTestFromString(code, rule, report, SourceType.JAVA_13);
97 }
98
99 public void runTestFromString(String code, Rule rule, Report report, TargetJDKVersion jdk)
100 throws Throwable {
101 PMD p = new PMD(jdk);
102 RuleContext ctx = new RuleContext();
103 ctx.setReport(report);
104 ctx.setSourceCodeFilename("n/a");
105 RuleSet rules = new RuleSet();
106 rules.addRule(rule);
107 p.processFile(new StringReader(code), rules, ctx);
108 }
109 }