1
2
3
4 package net.sourceforge.pmd;
5
6 import static org.junit.Assert.assertEquals;
7 import static org.junit.Assert.assertTrue;
8 import junit.framework.JUnit4TestAdapter;
9 import net.sourceforge.pmd.lang.ast.DummyNode;
10 import net.sourceforge.pmd.lang.ast.Node;
11 import net.sourceforge.pmd.lang.rule.MockRule;
12 import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
13
14 import org.junit.Ignore;
15 import org.junit.Test;
16
17 public class RuleViolationTest {
18
19 @Test
20 public void testConstructor1() {
21 Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
22 RuleContext ctx = new RuleContext();
23 ctx.setSourceCodeFilename("filename");
24 DummyNode s = new DummyNode(1);
25 s.testingOnly__setBeginLine(2);
26 s.testingOnly__setBeginColumn(1);
27 RuleViolation r = new ParametricRuleViolation<Node>(rule, ctx, s, rule.getMessage());
28 assertEquals("object mismatch", rule, r.getRule());
29 assertEquals("line number is wrong", 2, r.getBeginLine());
30 assertEquals("filename is wrong", "filename", r.getFilename());
31 }
32
33 @Test
34 public void testConstructor2() {
35 Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
36 RuleContext ctx = new RuleContext();
37 ctx.setSourceCodeFilename("filename");
38 DummyNode s = new DummyNode(1);
39 s.testingOnly__setBeginLine(2);
40 s.testingOnly__setBeginColumn(1);
41 RuleViolation r = new ParametricRuleViolation<Node>(rule, ctx, s, "description");
42 assertEquals("object mismatch", rule, r.getRule());
43 assertEquals("line number is wrong", 2, r.getBeginLine());
44 assertEquals("filename is wrong", "filename", r.getFilename());
45 assertEquals("description is wrong", "description", r.getDescription());
46 }
47
48 @Test
49 public void testComparatorWithDifferentFilenames() {
50 Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
51 RuleViolationComparator comp = RuleViolationComparator.INSTANCE;
52 RuleContext ctx = new RuleContext();
53 ctx.setSourceCodeFilename("filename1");
54 DummyNode s = new DummyNode(1);
55 s.testingOnly__setBeginLine(10);
56 s.testingOnly__setBeginColumn(1);
57 RuleViolation r1 = new ParametricRuleViolation<Node>(rule, ctx, s, "description");
58 ctx.setSourceCodeFilename("filename2");
59 DummyNode s1 = new DummyNode(1);
60 s1.testingOnly__setBeginLine(10);
61 s1.testingOnly__setBeginColumn(1);
62 RuleViolation r2 = new ParametricRuleViolation<Node>(rule, ctx, s1, "description");
63 assertEquals(-1, comp.compare(r1, r2));
64 assertEquals(1, comp.compare(r2, r1));
65 }
66
67 @Test
68 public void testComparatorWithSameFileDifferentLines() {
69 Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
70 RuleViolationComparator comp = RuleViolationComparator.INSTANCE;
71 RuleContext ctx = new RuleContext();
72 ctx.setSourceCodeFilename("filename");
73 DummyNode s = new DummyNode(1);
74 s.testingOnly__setBeginLine(10);
75 s.testingOnly__setBeginColumn(1);
76 DummyNode s1 = new DummyNode(1);
77 s1.testingOnly__setBeginLine(20);
78 s1.testingOnly__setBeginColumn(1);
79 RuleViolation r1 = new ParametricRuleViolation<Node>(rule, ctx, s, "description");
80 RuleViolation r2 = new ParametricRuleViolation<Node>(rule, ctx, s1, "description");
81 assertTrue(comp.compare(r1, r2) < 0);
82 assertTrue(comp.compare(r2, r1) > 0);
83 }
84
85 @Ignore
86 @Test
87 public void testComparatorWithSameFileSameLines() {
88 Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
89 RuleViolationComparator comp = RuleViolationComparator.INSTANCE;
90 RuleContext ctx = new RuleContext();
91 ctx.setSourceCodeFilename("filename");
92 DummyNode s = new DummyNode(1);
93 s.testingOnly__setBeginLine(10);
94 s.testingOnly__setBeginColumn(1);
95 DummyNode s1 = new DummyNode(1);
96 s1.testingOnly__setBeginLine(10);
97 s1.testingOnly__setBeginColumn(1);
98 RuleViolation r1 = new ParametricRuleViolation<Node>(rule, ctx, s, "description");
99 RuleViolation r2 = new ParametricRuleViolation<Node>(rule, ctx, s1, "description");
100 assertEquals(1, comp.compare(r1, r2));
101 assertEquals(1, comp.compare(r2, r1));
102 }
103
104 public static junit.framework.Test suite() {
105 return new JUnit4TestAdapter(RuleViolationTest.class);
106 }
107 }