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.AbstractRule;
27 import net.sourceforge.pmd.Report;
28 import net.sourceforge.pmd.RuleContext;
29 import net.sourceforge.pmd.RuleViolation;
30 import net.sourceforge.pmd.ast.SimpleJavaNode;
31 import net.sourceforge.pmd.ast.SimpleNode;
32 import net.sourceforge.pmd.symboltable.SourceFileScope;
33
34 import java.util.HashSet;
35 import java.util.Set;
36
37 public class AbstractRuleTest extends TestCase {
38
39 private static class MyRule extends AbstractRule {
40 public MyRule() {
41 setName("MyRule");
42 setMessage("my rule msg");
43 setPriority(3);
44 addProperty("foo", "value");
45 }
46 }
47
48 private static class MyOtherRule extends AbstractRule {
49 public MyOtherRule() {
50 setName("MyOtherRule");
51 setMessage("my other rule");
52 setPriority(3);
53 addProperty("foo", "value");
54 }
55 }
56
57 public AbstractRuleTest(String name) {
58 super(name);
59 }
60
61 public void testCreateRV() {
62 MyRule r = new MyRule();
63 r.setRuleSetName("foo");
64 RuleContext ctx = new RuleContext();
65 ctx.setSourceCodeFilename("filename");
66 SimpleNode s = new SimpleJavaNode(1);
67 s.testingOnly__setBeginColumn(5);
68 s.testingOnly__setBeginLine(5);
69 s.setScope(new SourceFileScope("foo"));
70 RuleViolation rv = new RuleViolation(r, ctx, s);
71 assertEquals("Line number mismatch!", 5, rv.getBeginLine());
72 assertEquals("Filename mismatch!", "filename", rv.getFilename());
73 assertEquals("Rule object mismatch!", r, rv.getRule());
74 assertEquals("Rule msg mismatch!", "my rule msg", rv.getDescription());
75 assertEquals("RuleSet name mismatch!", "foo", rv.getRule().getRuleSetName());
76 }
77
78 public void testCreateRV2() {
79 MyRule r = new MyRule();
80 RuleContext ctx = new RuleContext();
81 ctx.setSourceCodeFilename("filename");
82 SimpleNode s = new SimpleJavaNode(1);
83 s.testingOnly__setBeginColumn(5);
84 s.testingOnly__setBeginLine(5);
85 s.setScope(new SourceFileScope("foo"));
86 RuleViolation rv = new RuleViolation(r, ctx, s, "specificdescription");
87 assertEquals("Line number mismatch!", 5, rv.getBeginLine());
88 assertEquals("Filename mismatch!", "filename", rv.getFilename());
89 assertEquals("Rule object mismatch!", r, rv.getRule());
90 assertEquals("Rule description mismatch!", "specificdescription", rv.getDescription());
91 }
92
93 public void testRuleExclusion() {
94 MyRule r = new MyRule();
95 RuleContext ctx = new RuleContext();
96 Set s = new HashSet();
97 s.add(new Integer(5));
98 ctx.setReport(new Report());
99 ctx.excludeLines(s);
100 ctx.setSourceCodeFilename("filename");
101 SimpleNode n = new SimpleJavaNode(1);
102 n.testingOnly__setBeginColumn(5);
103 n.testingOnly__setBeginLine(5);
104 n.setScope(new SourceFileScope("foo"));
105 RuleViolation rv = new RuleViolation(r, ctx, n, "specificdescription");
106 ctx.getReport().addRuleViolation(rv);
107 assertTrue(ctx.getReport().isEmpty());
108 }
109
110 public void testEquals1() {
111 MyRule r = new MyRule();
112 assertFalse("A rule is never equals to null!", r.equals(null));
113 }
114
115 public void testEquals2() {
116 MyRule r = new MyRule();
117 assertEquals("A rule must be equals to itself", r, r);
118 }
119
120 public void testEquals3() {
121 MyRule r1 = new MyRule();
122 MyRule r2 = new MyRule();
123 assertEquals("2 instances of the same rule are equals", r1, r2);
124 assertEquals("hasCode for 2 instances of the same rule must be equals", r1.hashCode(), r2.hashCode());
125 }
126
127 public void testEquals4() {
128 MyRule myRule = new MyRule();
129 assertFalse("A rule cannot be equals to an object of another class", myRule.equals("MyRule"));
130 }
131
132 public void testEquals5() {
133 MyRule myRule = new MyRule();
134 MyOtherRule myOtherRule = new MyOtherRule();
135 assertFalse("2 rules of different classes cannot be equals", myRule.equals(myOtherRule));
136 assertFalse("Rules that are not equals should not have the same hashcode", myRule.hashCode() == myOtherRule.hashCode());
137 }
138
139 public void testEquals6() {
140 MyRule r1 = new MyRule();
141 MyRule r2 = new MyRule();
142 r2.setName("MyRule2");
143 assertFalse("Rules with different names cannot be equals", r1.equals(r2));
144 assertFalse("Rules that are not equals should not have the same hashcode", r1.hashCode() == r2.hashCode());
145 }
146
147 public void testEquals7() {
148 MyRule r1 = new MyRule();
149 MyRule r2 = new MyRule();
150 r2.setPriority(1);
151 assertFalse("Rules with different priority cannot be equals", r1.equals(r2));
152 assertFalse("Rules that are not equals should not have the same hashcode", r1.hashCode() == r2.hashCode());
153 }
154
155 public void testEquals8() {
156 MyRule r1 = new MyRule();
157 r1.addProperty("xpath", "something");
158 MyRule r2 = new MyRule();
159 r2.addProperty("xpath", "something else");
160 assertFalse("Rules with different properties values cannot be equals", r1.equals(r2));
161 assertFalse("Rules that are not equals should not have the same hashcode", r1.hashCode() == r2.hashCode());
162 }
163
164 public void testEquals9() {
165 MyRule r1 = new MyRule();
166 MyRule r2 = new MyRule();
167 r2.addProperty("xpath", "something else");
168 assertFalse("Rules with different properties cannot be equals", r1.equals(r2));
169 assertFalse("Rules that are not equals should not have the same hashcode", r1.hashCode() == r2.hashCode());
170 }
171
172 public void testEquals10() {
173 MyRule r1 = new MyRule();
174 MyRule r2 = new MyRule();
175 r2.setMessage("another message");
176 assertTrue("Rules with different message are still equals", r1.equals(r2));
177 assertTrue("Rules that are equals must have the same hashcode", r1.hashCode() == r2.hashCode());
178 }
179
180 }