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.Rule;
27  import net.sourceforge.pmd.RuleContext;
28  import net.sourceforge.pmd.RuleViolation;
29  import test.net.sourceforge.pmd.testframework.MockRule;
30  
31  public class RuleViolationTest extends TestCase {
32  
33      public void testConstructor1() {
34          Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
35          RuleContext ctx = new RuleContext();
36          ctx.setSourceCodeFilename("filename");
37          RuleViolation r = new RuleViolation(rule, 2, ctx, "package", "class", "method");
38          assertEquals("object mismatch", rule, r.getRule());
39          assertEquals("line number is wrong", 2, r.getLine());
40          assertEquals("filename is wrong", "filename", r.getFilename());
41      }
42  
43      public void testConstructor2() {
44          Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
45          RuleContext ctx = new RuleContext();
46          ctx.setSourceCodeFilename("filename");
47          RuleViolation r = new RuleViolation(rule, 2, "description", ctx);
48          assertEquals("object mismatch", rule, r.getRule());
49          assertEquals("line number is wrong", 2, r.getLine());
50          assertEquals("filename is wrong", "filename", r.getFilename());
51          assertEquals("description is wrong", "description", r.getDescription());
52      }
53  
54      public void testComparatorWithDifferentFilenames() {
55          Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
56          RuleViolation.RuleViolationComparator comp = new RuleViolation.RuleViolationComparator();
57          RuleContext ctx = new RuleContext();
58          ctx.setSourceCodeFilename("filename1");
59          RuleViolation r1 = new RuleViolation(rule, 10, "description", ctx);
60          ctx.setSourceCodeFilename("filename2");
61          RuleViolation r2 = new RuleViolation(rule, 20, "description", ctx);
62          assertEquals(-1, comp.compare(r1, r2));
63          assertEquals(1, comp.compare(r2, r1));
64      }
65  
66      public void testComparatorWithSameFileDifferentLines() {
67          Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
68          RuleViolation.RuleViolationComparator comp = new RuleViolation.RuleViolationComparator();
69          RuleContext ctx = new RuleContext();
70          ctx.setSourceCodeFilename("filename");
71          RuleViolation r1 = new RuleViolation(rule, 10, "description", ctx);
72          RuleViolation r2 = new RuleViolation(rule, 20, "description", ctx);
73          assertTrue(comp.compare(r1, r2) < 0);
74          assertTrue(comp.compare(r2, r1) > 0);
75      }
76  
77      public void testComparatorWithSameFileSameLines() {
78          Rule rule = new MockRule("name", "desc", "msg", "rulesetname");
79          RuleViolation.RuleViolationComparator comp = new RuleViolation.RuleViolationComparator();
80          RuleContext ctx = new RuleContext();
81          ctx.setSourceCodeFilename("filename");
82          RuleViolation r1 = new RuleViolation(rule, 10, "description", ctx);
83          RuleViolation r2 = new RuleViolation(rule, 10, "description", ctx);
84          assertEquals(1, comp.compare(r1, r2));
85          assertEquals(1, comp.compare(r2, r1));
86      }
87  }