1 package test.net.sourceforge.pmd;
2
3 import junit.framework.TestCase;
4 import net.sourceforge.pmd.Rule;
5 import net.sourceforge.pmd.RuleSet;
6 import net.sourceforge.pmd.RuleSetFactory;
7 import net.sourceforge.pmd.RuleSetNotFoundException;
8
9 import java.io.ByteArrayInputStream;
10 import java.util.HashSet;
11 import java.util.Iterator;
12 import java.util.Set;
13
14 public class RuleSetFactoryTest extends TestCase {
15
16 private static final String EOL = System.getProperty("line.separator", "\n");
17
18 private static final String EMPTY_RULE_SET =
19 "<?xml version=\"1.0\"?>" + EOL +
20 "<ruleset name=\"test\">" + EOL +
21 "<description>testdesc</description>" + EOL +
22 "</ruleset>";
23
24 private static final String SINGLE_RULE_SET =
25 "<?xml version=\"1.0\"?>" + EOL +
26 "<ruleset name=\"test\">" + EOL +
27 "<description>" + EOL +
28 "testdesc" + EOL +
29 "</description>" + EOL +
30 "<rule " + EOL +
31 "name=\"MockRuleName\" " + EOL +
32 "message=\"avoid the mock rule\" " + EOL +
33 "class=\"test.net.sourceforge.pmd.MockRule\">" +
34 "</rule></ruleset>";
35
36 private static final String MULTIPLE_RULE_SET =
37 "<?xml version=\"1.0\"?>" + EOL +
38 "<ruleset name=\"test\">" + EOL +
39 "<description>" + EOL +
40 "testdesc" + EOL + "</description>" + EOL +
41 "<rule name=\"MockRuleName1\" " + EOL +
42 "message=\"avoid the mock rule\" " + EOL +
43 "class=\"test.net.sourceforge.pmd.MockRule\">" + EOL +
44 "</rule>" + EOL +
45 "<rule name=\"MockRuleName2\" " + EOL +
46 "message=\"avoid the mock rule\" " + EOL +
47 "class=\"test.net.sourceforge.pmd.MockRule\">" + EOL +
48 "</rule></ruleset>";
49
50 private static final String RULE_WITH_PROPERTIES =
51 "<?xml version=\"1.0\"?>" + EOL +
52 "<ruleset name=\"test\">" + EOL +
53 "<description>" + EOL +
54 "testdesc" + EOL +
55 "</description>" + EOL +
56 "<rule name=\"MockRuleName\" " + EOL +
57 "message=\"avoid the mock rule\" " + EOL +
58 "class=\"test.net.sourceforge.pmd.MockRule\">" + EOL +
59 "<description>" + EOL + "testdesc2" + EOL +
60 "</description>" + EOL +
61 "<properties>" + EOL +
62 "<property name=\"fooBoolean\" value=\"true\"/>" + EOL +
63 "<property name=\"fooDouble\" value=\"1.0\" />" + EOL +
64 "<property name=\"foo\" value=\"bar\"/>" + EOL +
65 "<property name=\"fooint\" value=\"2\"/>" + EOL +
66 "</properties>" + EOL +
67 "</rule></ruleset>";
68
69 private static final String RULE_WITH_XPATH =
70 "<?xml version=\"1.0\"?>" + EOL +
71 "<ruleset name=\"test\">" + EOL +
72 "<description>" + EOL +
73 "testdesc" + EOL +
74 "</description>" + EOL +
75 "<priority>3</priority>" + EOL +
76 "<rule name=\"MockRuleName\" " + EOL +
77 "message=\"avoid the mock rule\" " + EOL +
78 "class=\"test.net.sourceforge.pmd.MockRule\">" + EOL +
79 "<description>" + EOL +
80 "testdesc2" + EOL +
81 "</description>" + EOL +
82 "<properties>" + EOL +
83 "<property name=\"xpath\">" + EOL +
84 "<value>" + EOL +
85 "<![CDATA[ //Block ]]>" + EOL +
86 "</value>" + EOL +
87 "</property>" + EOL +
88 "</properties>" + EOL +
89 "</rule></ruleset>";
90
91
92 private static final String SINGLE_RULE_SET_WITH_PRIORITY =
93 "<?xml version=\"1.0\"?>" + EOL +
94 "<ruleset name=\"test\">" + EOL +
95 "<description>" + EOL +
96 "testdesc" + EOL +
97 "</description>" + EOL +
98 "<rule " + EOL +
99 "name=\"MockRuleName\" " + EOL +
100 "message=\"avoid the mock rule\" " + EOL +
101 "class=\"test.net.sourceforge.pmd.MockRule\">" +
102 "<priority>3</priority>" + EOL +
103 "</rule></ruleset>";
104
105 public void testSingleRuleWithPriority() {
106 RuleSetFactory rsf = new RuleSetFactory();
107 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(SINGLE_RULE_SET_WITH_PRIORITY.getBytes()));
108 Rule r = (Rule)rs.getRules().iterator().next();
109 assertEquals(3, r.getPriority());
110 }
111
112 public void testRuleSetNotFound() {
113 RuleSetFactory rsf = new RuleSetFactory();
114 try {
115 rsf.createRuleSet("fooooo");
116 throw new RuntimeException("Should have thrown a RuleSetNotFoundException");
117 } catch (RuleSetNotFoundException rsnfe) {
118 // cool
119 }
120 }
121
122 public void testCreateEmptyRuleSet() {
123 RuleSetFactory rsf = new RuleSetFactory();
124 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(EMPTY_RULE_SET.getBytes()));
125 assertEquals("test", rs.getName());
126 assertEquals(0, rs.size());
127 }
128
129 public void testSingleRule() {
130 RuleSetFactory rsf = new RuleSetFactory();
131 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(SINGLE_RULE_SET.getBytes()));
132 assertEquals(1, rs.size());
133 Rule r = (Rule)rs.getRules().iterator().next();
134 assertEquals("MockRuleName", r.getName());
135 assertEquals("avoid the mock rule", r.getMessage());
136 }
137
138 public void testMultipleRules() {
139 RuleSetFactory rsf = new RuleSetFactory();
140 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(MULTIPLE_RULE_SET.getBytes()));
141 assertEquals(2, rs.size());
142 Set expected = new HashSet();
143 expected.add("MockRuleName1");
144 expected.add("MockRuleName2");
145 for (Iterator i = rs.getRules().iterator(); i.hasNext();) {
146 assertTrue(expected.contains(((Rule) i.next()).getName()));
147 }
148 }
149
150 public void testProps() {
151 RuleSetFactory rsf = new RuleSetFactory();
152 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(RULE_WITH_PROPERTIES.getBytes()));
153 Rule r = (Rule) rs.getRules().iterator().next();
154 assertTrue(r.hasProperty("foo"));
155 assertEquals("bar", r.getStringProperty("foo"));
156 assertEquals(2, r.getIntProperty("fooint"));
157 assertTrue(r.hasProperty("fooBoolean"));
158 assertTrue(r.getBooleanProperty("fooBoolean"));
159 assertTrue(r.hasProperty("fooDouble"));
160 assertEquals(1.0, r.getDoubleProperty("fooDouble"), 0.05);
161 assertTrue(!r.hasProperty("BuggleFish"));
162 assertTrue(r.getDescription().indexOf("testdesc2") != -1);
163 }
164
165 public void testXPath() {
166 RuleSetFactory rsf = new RuleSetFactory();
167 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(RULE_WITH_XPATH.getBytes()));
168 Rule r = (Rule) rs.getRules().iterator().next();
169 assertTrue(r.hasProperty("xpath"));
170 assertEquals(" //Block ", r.getStringProperty("xpath"));
171 }
172
173 /*
174 public void testExternalReferences() {
175 RuleSetFactory rsf = new RuleSetFactory();
176 RuleSet rs = rsf.createRuleSet(new ByteArrayInputStream(EXTERNAL_REFERENCE_RULE_SET.getBytes()));
177 assertEquals(1, rs.size());
178 }
179 private static final String EXTERNAL_REFERENCE_RULE_SET = "<?xml version=\"1.0\"?>" +
180 "<ruleset name=\"test\">\r\n<description>testdesc</description><rule ref=\"rulesets/basic.xml/EmptyCatchBlock\"/></ruleset>";
181 private static final String SINGLE_RULE_NO_PROPS = "<?xml version=\"1.0\"?>" +
182 "<ruleset name=\"test\">\r\n<description>testdesc</description>" +
183 "<rule name=\"MockRuleName\" message=\"avoid the mock rule\" class=\"test.net.sourceforge.pmd.MockRule\">" +
184 "<properties></properties>" +
185 "</rule></ruleset>";
186 */
187 }
This page was automatically generated by Maven