View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
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 }