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.SimpleRuleSetNameMapper; 15 import net.sourceforge.pmd.TargetJDK1_4; 16 import net.sourceforge.pmd.TargetJDK1_5; 17 import net.sourceforge.pmd.TargetJDKVersion; 18 19 import java.io.StringReader; 20 21 public class RuleTst extends TestCase { 22 23 public void runTestFromString(String code, int expectedResults, Rule rule) throws Throwable { 24 int res = processUsingStringReader(code, rule).size(); 25 assertEquals("Expected " + expectedResults + " failures, got " + res + ".", expectedResults, res); 26 } 27 28 public Rule findRule(String rs, String r) { 29 try { 30 Rule rule = new RuleSetFactory().createRuleSet(new SimpleRuleSetNameMapper(rs).getRuleSets()).getRuleByName(r); 31 if (rule == null){ 32 fail("Rule "+r+" not found in ruleset "+rs); 33 } 34 return rule; 35 } catch (RuleSetNotFoundException e) { 36 e.printStackTrace(); 37 fail("Couldn't find ruleset "+rs); 38 return null; 39 } 40 } 41 42 public void runTestFromString(String code, Rule rule, Report report) throws Throwable { 43 runTestFromString(code, rule, report, new TargetJDK1_4()); 44 } 45 46 public void runTestFromString15(String code, Rule rule, Report report) throws Throwable { 47 runTestFromString(code, rule, report, new TargetJDK1_5()); 48 } 49 50 public void runTestFromString(String code, Rule rule, Report report, TargetJDKVersion jdk) throws Throwable { 51 PMD p = new PMD(jdk); 52 RuleContext ctx = new RuleContext(); 53 ctx.setReport(report); 54 ctx.setSourceCodeFilename("n/a"); 55 RuleSet rules = new RuleSet(); 56 rules.addRule(rule); 57 p.processFile(new StringReader(code), rules, ctx); 58 } 59 60 private Report processUsingStringReader(String code, Rule rule) throws Throwable { 61 Report report = new Report(); 62 runTestFromString(code, rule, report); 63 return report; 64 } 65 }