KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > net > sourceforge > pmd > RuleSetTest


1 /**
2  * <copyright>
3  * Copyright 1997-2002 InfoEther, LLC
4  * under sponsorship of the Defense Advanced Research Projects Agency
5  (DARPA).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the Cougaar Open Source License as published
9  by
10  * DARPA on the Cougaar Open Source Website (www.cougaar.org).
11  *
12  * THE COUGAAR SOFTWARE AND ANY DERIVATIVE SUPPLIED BY LICENSOR IS
13  * PROVIDED 'AS IS' WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS OR
14  * IMPLIED, INCLUDING (BUT NOT LIMITED TO) ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND WITHOUT
16  * ANY WARRANTIES AS TO NON-INFRINGEMENT. IN NO EVENT SHALL COPYRIGHT
17  * HOLDER BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL
18  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE OF DATA OR PROFITS,
19  * TORTIOUS CONDUCT, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20  * PERFORMANCE OF THE COUGAAR SOFTWARE.
21  * </copyright>
22  */

23 package test.net.sourceforge.pmd;
24
25 import junit.framework.TestCase;
26 import net.sourceforge.pmd.Report;
27 import net.sourceforge.pmd.RuleContext;
28 import net.sourceforge.pmd.RuleSet;
29 import net.sourceforge.pmd.RuleViolation;
30 import net.sourceforge.pmd.TargetJDK1_4;
31 import net.sourceforge.pmd.ast.JavaParser;
32 import test.net.sourceforge.pmd.testframework.MockRule;
33
34 import java.io.StringReader JavaDoc;
35 import java.util.ArrayList JavaDoc;
36 import java.util.Collection JavaDoc;
37 import java.util.HashSet JavaDoc;
38 import java.util.Iterator JavaDoc;
39 import java.util.List JavaDoc;
40 import java.util.Set JavaDoc;
41
42 public class RuleSetTest extends TestCase {
43
44     private String JavaDoc javaCode = "public class Test { }";
45
46     public void testNoDFA() {
47         RuleSet rs = new RuleSet();
48         MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
49         rs.addRule(mock);
50         assertFalse(rs.usesDFA());
51     }
52
53     public void testIncludesRuleWithDFA() {
54         RuleSet rs = new RuleSet();
55         MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
56         mock.setUsesDFA();
57         rs.addRule(mock);
58         assertTrue(rs.usesDFA());
59     }
60
61     public void testAccessors() {
62         RuleSet rs = new RuleSet();
63         rs.setName("foo");
64         assertEquals("name mismatch", "foo", rs.getName());
65         rs.setDescription("bar");
66         assertEquals("description mismatch", "bar", rs.getDescription());
67     }
68
69     public void testGetRuleByName() {
70         RuleSet rs = new RuleSet();
71         MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
72         rs.addRule(mock);
73         assertEquals("unable to fetch rule by name", mock, rs.getRuleByName("name"));
74     }
75
76     public void testGetRuleByName2() {
77         RuleSet rs = new RuleSet();
78         MockRule mock = new MockRule("name", "desc", "msg", "rulesetname");
79         rs.addRule(mock);
80         assertNull("the rule FooRule must not be found!", rs.getRuleByName("FooRule"));
81     }
82
83     public void testRuleList() {
84         RuleSet IUT = new RuleSet();
85
86         assertEquals("Size of RuleSet isn't zero.", 0, IUT.size());
87
88         MockRule rule = new MockRule("name", "desc", "msg", "rulesetname");
89         IUT.addRule(rule);
90
91         assertEquals("Size of RuleSet isn't one.", 1, IUT.size());
92
93         Collection JavaDoc rules = IUT.getRules();
94
95         Iterator JavaDoc i = rules.iterator();
96         assertTrue("Empty Set", i.hasNext());
97         assertEquals("Returned set of wrong size.", 1, rules.size());
98         assertEquals("Rule isn't in ruleset.", rule, i.next());
99     }
100
101     public void testAddRuleSet() {
102         RuleSet set1 = new RuleSet();
103         set1.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
104         RuleSet set2 = new RuleSet();
105         set2.addRule(new MockRule("name2", "desc", "msg", "rulesetname"));
106         set1.addRuleSet(set2);
107         assertEquals("ruleset size wrong", 2, set1.size());
108     }
109
110     public void testApply0Rules() throws Throwable JavaDoc {
111         RuleSet IUT = new RuleSet();
112         verifyRuleSet(IUT, 0, new HashSet JavaDoc());
113     }
114
115     public void testEquals1() {
116         RuleSet s = new RuleSet();
117         assertFalse("A ruleset cannot be equals to null", s.equals(null));
118     }
119
120     public void testEquals2() {
121         RuleSet s = new RuleSet();
122         assertTrue("A rulset must be equals to itself", s.equals(s));
123     }
124
125     public void testEquals3() {
126         RuleSet s = new RuleSet();
127         s.setName("basic rules");
128         assertFalse("A ruleset cannot be equals to another kind of object", s.equals("basic rules"));
129     }
130
131     public void testEquals4() {
132         RuleSet s1 = new RuleSet();
133         s1.setName("my ruleset");
134         s1.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
135
136         RuleSet s2 = new RuleSet();
137         s2.setName("my ruleset");
138         s2.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
139
140         assertEquals("2 rulesets with same name and rules must be equals", s1, s2);
141         assertEquals("Equals rulesets must have the same hashcode", s1.hashCode(), s2.hashCode());
142     }
143
144     public void testEquals5() {
145         RuleSet s1 = new RuleSet();
146         s1.setName("my ruleset");
147         s1.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
148
149         RuleSet s2 = new RuleSet();
150         s2.setName("my other ruleset");
151         s2.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
152
153         assertFalse("2 rulesets with different name but same rules must not be equals", s1.equals(s2));
154         assertFalse("Rulesets that are not equals should not have the same hashcode", s1.hashCode() == s2.hashCode());
155     }
156
157     public void testEquals6() {
158         RuleSet s1 = new RuleSet();
159         s1.setName("my ruleset");
160         s1.addRule(new MockRule("name", "desc", "msg", "rulesetname"));
161
162         RuleSet s2 = new RuleSet();
163         s2.setName("my ruleset");
164         s2.addRule(new MockRule("other rule", "desc", "msg", "rulesetname"));
165
166         assertFalse("2 rulesets with same name but different rules must not be equals", s1.equals(s2));
167         assertFalse("Rulesets that are not equals should not have the same hashcode", s1.hashCode() == s2.hashCode());
168     }
169
170     protected void verifyRuleSet(RuleSet IUT, int size, Set values) throws Throwable JavaDoc {
171
172         RuleContext context = new RuleContext();
173         Set reportedValues = new HashSet JavaDoc();
174         context.setReport(new Report());
175         IUT.apply(makeCompilationUnits(), context);
176
177         assertEquals("Invalid number of Violations Reported", size, context.getReport().size());
178
179         Iterator JavaDoc violations = context.getReport().iterator();
180         while (violations.hasNext()) {
181             RuleViolation violation = (RuleViolation) violations.next();
182
183             reportedValues.add(violation);
184             assertTrue("Unexpected Violation Returned: " + violation, values.contains(violation));
185         }
186
187         Iterator JavaDoc expected = values.iterator();
188         while (expected.hasNext()) {
189             RuleViolation violation = (RuleViolation) expected.next();
190             assertTrue("Expected Violation not Returned: " + violation, reportedValues.contains(violation));
191         }
192     }
193
194
195     protected List JavaDoc makeCompilationUnits() throws Throwable JavaDoc {
196         List JavaDoc RC = new ArrayList JavaDoc();
197         JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader JavaDoc(javaCode));
198         RC.add(parser.CompilationUnit());
199         return RC;
200     }
201 }
202
Popular Tags