1 /**
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package test.net.sourceforge.pmd.rules;
5
6 import net.sourceforge.pmd.Rule;
7 import net.sourceforge.pmd.RuleSet;
8 import net.sourceforge.pmd.RuleSetFactory;
9 import net.sourceforge.pmd.RuleSetNotFoundException;
10 import net.sourceforge.pmd.RuleSets;
11 import net.sourceforge.pmd.util.ResourceLoader;
12
13 import org.junit.Ignore;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.junit.runners.Parameterized;
17 import org.junit.runners.Parameterized.Parameters;
18
19 import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
20 import test.net.sourceforge.pmd.testframework.TestDescriptor;
21
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Properties;
28 import java.util.StringTokenizer;
29
30 @RunWith(Parameterized.class)
31 public class DynamicRuleTest extends SimpleAggregatorTst {
32
33 private Rule rule;
34
35 private String strRuleset;
36
37 public DynamicRuleTest(String strRuleset, Rule rule) {
38 this.rule = rule;
39 this.strRuleset = strRuleset;
40 }
41
42 @Parameters
43 public static Collection data() throws IOException, RuleSetNotFoundException {
44 List<Object[]> allRules = new ArrayList<Object[]>();
45 RuleSetFactory rsf = new RuleSetFactory();
46 String rulesetFilenames = null;
47 Properties props = new Properties();
48 props.load(ResourceLoader.loadResourceAsStream("rulesets/rulesets.properties"));
49 rulesetFilenames = props.getProperty("rulesets.testnames");
50 StringTokenizer st = new StringTokenizer(rulesetFilenames, ",");
51 while (st.hasMoreTokens()) {
52 String strRule = st.nextToken();
53 String strCleanRule = cleanRulesetName(strRule);
54 RuleSets ruleSets = rsf.createRuleSets(strRule);
55 for (Iterator<RuleSet> iter = ruleSets.getRuleSetsIterator(); iter.hasNext();) {
56 RuleSet ruleSet = iter.next();
57 for (Rule rule : ruleSet.getRules()) {
58 allRules.add(new Object[] { strCleanRule, rule });
59 }
60 }
61 }
62
63 return allRules;
64 }
65
66 private static String cleanRulesetName(String strRule) {
67 return strRule.substring(strRule.indexOf('/') + 1, strRule.indexOf('.')).replaceAll("-", "") + "/xml/";
68 }
69
70 @Ignore
71 @Test
72 public void testAll() {
73 TestDescriptor[] td = extractTestsFromXml(rule, getCleanRuleName(rule), strRuleset);
74 runTests(td);
75 }
76
77 public static junit.framework.Test suite() {
78 return new junit.framework.JUnit4TestAdapter(DynamicRuleTest.class);
79 }
80 }