1 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 ; 35 import java.util.ArrayList ; 36 import java.util.Collection ; 37 import java.util.HashSet ; 38 import java.util.Iterator ; 39 import java.util.List ; 40 import java.util.Set ; 41 42 public class RuleSetTest extends TestCase { 43 44 private String 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 rules = IUT.getRules(); 94 95 Iterator 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 { 111 RuleSet IUT = new RuleSet(); 112 verifyRuleSet(IUT, 0, new HashSet ()); 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 { 171 172 RuleContext context = new RuleContext(); 173 Set reportedValues = new HashSet (); 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 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 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 makeCompilationUnits() throws Throwable { 196 List RC = new ArrayList (); 197 JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader (javaCode)); 198 RC.add(parser.CompilationUnit()); 199 return RC; 200 } 201 } 202 | Popular Tags |