1   package test.net.sourceforge.pmd;
2   
3   import net.sourceforge.pmd.AbstractRule;
4   import net.sourceforge.pmd.PMD;
5   import net.sourceforge.pmd.Report;
6   import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
7   import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
8   import test.net.sourceforge.pmd.testframework.RuleTst;
9   
10  public class SuppressWarningsTest extends RuleTst {
11  
12      private static class FooRule extends AbstractRule {
13          public Object visit(ASTClassOrInterfaceDeclaration c, Object ctx) {
14              if (c.getImage().equalsIgnoreCase("Foo")) addViolation(ctx, c);
15              return super.visit(c, ctx);
16          }
17  
18          public Object visit(ASTVariableDeclaratorId c, Object ctx) {
19              if (c.getImage().equalsIgnoreCase("Foo")) addViolation(ctx, c);
20              return super.visit(c, ctx);
21          }
22      }
23  
24      public void testClassLevelSuppression() throws Throwable {
25          Report rpt = new Report();
26          runTestFromString15(TEST1, new FooRule(), rpt);
27          assertEquals(0, rpt.size());
28          runTestFromString15(TEST2, new FooRule(), rpt);
29          assertEquals(0, rpt.size());
30      }
31  
32      public void testInheritedSuppression() throws Throwable {
33          Report rpt = new Report();
34          runTestFromString15(TEST3, new FooRule(), rpt);
35          assertEquals(0, rpt.size());
36      }
37  
38      public void testMethodLevelSuppression() throws Throwable {
39          Report rpt = new Report();
40          runTestFromString15(TEST4, new FooRule(), rpt);
41          assertEquals(1, rpt.size());
42      }
43  
44      public void testConstructorLevelSuppression() throws Throwable {
45          Report rpt = new Report();
46          runTestFromString15(TEST5, new FooRule(), rpt);
47          assertEquals(0, rpt.size());
48      }
49  
50      public void testFieldLevelSuppression() throws Throwable {
51          Report rpt = new Report();
52          runTestFromString15(TEST6, new FooRule(), rpt);
53          assertEquals(1, rpt.size());
54      }
55  
56      public void testParameterLevelSuppression() throws Throwable {
57          Report rpt = new Report();
58          runTestFromString15(TEST7, new FooRule(), rpt);
59          assertEquals(1, rpt.size());
60      }
61  
62      public void testLocalVariableLevelSuppression() throws Throwable {
63          Report rpt = new Report();
64          runTestFromString15(TEST8, new FooRule(), rpt);
65          assertEquals(1, rpt.size());
66      }
67  
68      private static final String TEST1 =
69              "@SuppressWarnings(\"\")" + PMD.EOL +
70              "public class Foo {}";
71  
72      private static final String TEST2 =
73              "@SuppressWarnings(\"\")" + PMD.EOL +
74              "public class Foo {" + PMD.EOL +
75              " void bar() {" + PMD.EOL +
76              "  int foo;" + PMD.EOL +
77              " }" + PMD.EOL +
78              "}";
79  
80      private static final String TEST3 =
81              "public class Baz {" + PMD.EOL +
82              " @SuppressWarnings(\"\")" + PMD.EOL +
83              " public class Bar {" + PMD.EOL +
84              "  void bar() {" + PMD.EOL +
85              "   int foo;" + PMD.EOL +
86              "  }" + PMD.EOL +
87              " }" + PMD.EOL +
88              "}";
89  
90      private static final String TEST4 =
91              "public class Foo {" + PMD.EOL +
92              " @SuppressWarnings(\"\")" + PMD.EOL +
93              " void bar() {" + PMD.EOL +
94              "  int foo;" + PMD.EOL +
95              " }" + PMD.EOL +
96              "}";
97  
98      private static final String TEST5 =
99              "public class Bar {" + PMD.EOL +
100             " @SuppressWarnings(\"\")" + PMD.EOL +
101             " public Bar() {" + PMD.EOL +
102             "  int foo;" + PMD.EOL +
103             " }" + PMD.EOL +
104             "}";
105 
106     private static final String TEST6 =
107             "public class Bar {" + PMD.EOL +
108             " @SuppressWarnings(\"\")" + PMD.EOL +
109             " int foo;" + PMD.EOL +
110             " void bar() {" + PMD.EOL +
111             "  int foo;" + PMD.EOL +
112             " }" + PMD.EOL +
113             "}";
114 
115     private static final String TEST7 =
116             "public class Bar {" + PMD.EOL +
117             " int foo;" + PMD.EOL +
118             " void bar(@SuppressWarnings(\"\") int foo) {}" + PMD.EOL +
119             "}";
120 
121     private static final String TEST8 =
122             "public class Bar {" + PMD.EOL +
123             " int foo;" + PMD.EOL +
124             " void bar() {" + PMD.EOL +
125             "  @SuppressWarnings(\"\") int foo;" + PMD.EOL +
126             " }" + PMD.EOL +
127             "}";
128 
129 }