1   package test.net.sourceforge.pmd;
2   
3   import net.sourceforge.pmd.ExcludeLines;
4   import net.sourceforge.pmd.PMD;
5   import net.sourceforge.pmd.Rule;
6   import test.net.sourceforge.pmd.testframework.RuleTst;
7   
8   import java.io.BufferedReader;
9   import java.io.StringReader;
10  
11  public class ExcludeLinesTest extends RuleTst {
12  
13      public void testExcludeOne() throws Throwable {
14          ExcludeLines e = new ExcludeLines(new StringReader(TEST1));
15          assertFalse(e.getLinesToExclude().isEmpty());
16          Integer i = (Integer) e.getLinesToExclude().iterator().next();
17          assertEquals(3, i.intValue());
18      }
19  
20      public void testExcludeMultiple() throws Throwable {
21          ExcludeLines e = new ExcludeLines(new StringReader(TEST2));
22          assertEquals(3, e.getLinesToExclude().size());
23          assertTrue(e.getLinesToExclude().contains(new Integer(3)));
24          assertTrue(e.getLinesToExclude().contains(new Integer(4)));
25          assertTrue(e.getLinesToExclude().contains(new Integer(5)));
26      }
27  
28      public void testCopyMatches() throws Throwable {
29          ExcludeLines e = new ExcludeLines(new StringReader(TEST1));
30          BufferedReader br = new BufferedReader(e.getCopyReader());
31          StringBuffer copyBuffer = new StringBuffer();
32          String tmp;
33          while ((tmp = br.readLine()) != null) {
34              copyBuffer.append(tmp + PMD.EOL);
35          }
36          copyBuffer.deleteCharAt(copyBuffer.length() - 1);
37          if (PMD.EOL.length() == 2) {
38              copyBuffer.deleteCharAt(copyBuffer.length() - 1);
39          }
40          assertEquals(TEST1, copyBuffer.toString());
41      }
42  
43      public void testAlternateMarker() throws Throwable {
44          ExcludeLines e = new ExcludeLines(new StringReader(TEST4), "FOOBAR");
45          assertFalse(e.getLinesToExclude().isEmpty());
46      }
47  
48      public void testAcceptance() throws Throwable {
49          try {
50              Rule rule = findRule("rulesets/unusedcode.xml", "UnusedLocalVariable");
51              runTestFromString(TEST1, 0, rule);
52              runTestFromString(TEST3, 1, rule);
53          } catch (Exception e) {
54              fail("Acceptance tests failed");
55          }
56      }
57  
58  
59      private static final String TEST1 =
60              "public class Foo {" + PMD.EOL +
61              " void foo() {" + PMD.EOL +
62              "  int x; //NOPMD " + PMD.EOL +
63              " } " + PMD.EOL +
64              "}";
65  
66      private static final String TEST2 =
67              "public class Foo {" + PMD.EOL +
68              " void foo() {" + PMD.EOL +
69              "  int x; //NOPMD " + PMD.EOL +
70              "  int y; //NOPMD " + PMD.EOL +
71              "  int z; //NOPMD " + PMD.EOL +
72              " } " + PMD.EOL +
73              "}";
74  
75      private static final String TEST3 =
76              "public class Foo {" + PMD.EOL +
77              " void foo() {" + PMD.EOL +
78              "  int x;" + PMD.EOL +
79              " } " + PMD.EOL +
80              "}";
81  
82      private static final String TEST4 =
83              "public class Foo {" + PMD.EOL +
84              " void foo() {" + PMD.EOL +
85              "  int x; // FOOBAR" + PMD.EOL +
86              " } " + PMD.EOL +
87              "}";
88  
89  }