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 }