View Javadoc

    1
    2    package net.sourceforge.pmd;
    3
    4   import static org.junit.Assert.assertEquals;
    5   import junit.framework.JUnit4TestAdapter;
    6   import net.sourceforge.pmd.PMD;
    7   import net.sourceforge.pmd.Report;
    8   import net.sourceforge.pmd.lang.LanguageVersion;
    9   import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
    10  import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
    11  import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId;
    12  import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
    13  import net.sourceforge.pmd.testframework.RuleTst;
    14
    15  import org.junit.Test;
    16
    17
    18   public class SuppressWarningsTest extends RuleTst {
    19
    20       private static class FooRule extends AbstractJavaRule {
    21          @Override
    22          public Object visit(ASTClassOrInterfaceDeclaration c, Object ctx) {
    23              if (c.getImage().equalsIgnoreCase("Foo")) {
    24                  addViolation(ctx, c);
    25              }
    26              return super.visit(c, ctx);
    27          }
    28
    29          @Override
    30          public Object visit(ASTVariableDeclaratorId c, Object ctx) {
    31              if (c.getImage().equalsIgnoreCase("Foo")) {
    32                  addViolation(ctx, c);
    33              }
    34              return super.visit(c, ctx);
    35          }
    36
    37          @Override
    38          public String getName() {
    39              return "NoFoo";
    40          }
    41       }
    42
    43       private static class BarRule extends AbstractJavaRule {
    44          @Override
    45          public Object visit(ASTCompilationUnit cu, Object ctx) {
    46              // Convoluted rule to make sure the violation is reported for the ASTCompilationUnit node
    47              for (ASTClassOrInterfaceDeclaration c : cu.findDescendantsOfType(ASTClassOrInterfaceDeclaration.class)) {
    48                  if (c.getImage().equalsIgnoreCase("bar")) {
    49                      addViolation(ctx, cu);
    50                  }
    51              }
    52              return super.visit(cu, ctx);
    53          }
    54
    55          @Override
    56          public String getName() {
    57              return "NoBar";
    58          }
    59       }
    60
    61       @Test
    62       public void testClassLevelSuppression() throws Throwable {
    63           Report rpt = new Report();
    64           runTestFromString(TEST1, new FooRule(), rpt, LanguageVersion.JAVA_15);
    65           assertEquals(0, rpt.size());
    66           runTestFromString(TEST2, new FooRule(), rpt, LanguageVersion.JAVA_15);
    67           assertEquals(0, rpt.size());
    68       }
    69
    70       @Test
    71       public void testInheritedSuppression() throws Throwable {
    72           Report rpt = new Report();
    73           runTestFromString(TEST3, new FooRule(), rpt, LanguageVersion.JAVA_15);
    74           assertEquals(0, rpt.size());
    75       }
    76
    77       @Test
    78       public void testMethodLevelSuppression() throws Throwable {
    79           Report rpt = new Report();
    80           runTestFromString(TEST4, new FooRule(), rpt, LanguageVersion.JAVA_15);
    81           assertEquals(1, rpt.size());
    82       }
    83
    84       @Test
    85       public void testConstructorLevelSuppression() throws Throwable {
    86           Report rpt = new Report();
    87           runTestFromString(TEST5, new FooRule(), rpt, LanguageVersion.JAVA_15);
    88           assertEquals(0, rpt.size());
    89       }
    90
    91       @Test
    92       public void testFieldLevelSuppression() throws Throwable {
    93           Report rpt = new Report();
    94           runTestFromString(TEST6, new FooRule(), rpt, LanguageVersion.JAVA_15);
    95           assertEquals(1, rpt.size());
    96       }
    97
    98       @Test
    99       public void testParameterLevelSuppression() throws Throwable {
    100          Report rpt = new Report();
    101          runTestFromString(TEST7, new FooRule(), rpt, LanguageVersion.JAVA_15);
    102          assertEquals(1, rpt.size());
    103      }
    104
    105      @Test
    106      public void testLocalVariableLevelSuppression() throws Throwable {
    107          Report rpt = new Report();
    108          runTestFromString(TEST8, new FooRule(), rpt, LanguageVersion.JAVA_15);
    109          assertEquals(1, rpt.size());
    110      }
    111
    112      @Test
    113      public void testSpecificSuppression() throws Throwable {
    114          Report rpt = new Report();
    115          runTestFromString(TEST9, new FooRule(), rpt, LanguageVersion.JAVA_15);
    116          assertEquals(1, rpt.size());
    117      }
    118
    119      @Test
    120      public void testSpecificSuppressionValue1() throws Throwable {
    121          Report rpt = new Report();
    122          runTestFromString(TEST9_VALUE1, new FooRule(), rpt, LanguageVersion.JAVA_15);
    123          assertEquals(1, rpt.size());
    124      }
    125
    126      @Test
    127      public void testSpecificSuppressionValue2() throws Throwable {
    128          Report rpt = new Report();
    129          runTestFromString(TEST9_VALUE2, new FooRule(), rpt, LanguageVersion.JAVA_15);
    130          assertEquals(1, rpt.size());
    131      }
    132
    133      @Test
    134      public void testSpecificSuppressionValue3() throws Throwable {
    135          Report rpt = new Report();
    136          runTestFromString(TEST9_VALUE3, new FooRule(), rpt, LanguageVersion.JAVA_15);
    137          assertEquals(1, rpt.size());
    138      }
    139
    140      @Test
    141      public void testSpecificSuppressionMulitpleValues1() throws Throwable {
    142 	 Report rpt = new Report();
    143 	 runTestFromString(TEST9_MULTIPLE_VALUES_1, new FooRule(), rpt, LanguageVersion.JAVA_15);
    144 	 assertEquals(0, rpt.size());
    145      }
    146
    147      @Test
    148      public void testSpecificSuppressionMulitpleValues2() throws Throwable {
    149          Report rpt = new Report();
    150          runTestFromString(TEST9_MULTIPLE_VALUES_2, new FooRule(), rpt, LanguageVersion.JAVA_15);
    151          assertEquals(0, rpt.size());
    152      }
    153
    154      @Test
    155      public void testNoSuppressionBlank() throws Throwable {
    156          Report rpt = new Report();
    157          runTestFromString(TEST10, new FooRule(), rpt, LanguageVersion.JAVA_15);
    158          assertEquals(2, rpt.size());
    159      }
    160
    161      @Test
    162      public void testNoSuppressionSomethingElseS() throws Throwable {
    163          Report rpt = new Report();
    164          runTestFromString(TEST11, new FooRule(), rpt, LanguageVersion.JAVA_15);
    165          assertEquals(2, rpt.size());
    166      }
    167
    168      @Test
    169      public void testSuppressAll() throws Throwable {
    170          Report rpt = new Report();
    171          runTestFromString(TEST12, new FooRule(), rpt, LanguageVersion.JAVA_15);
    172          assertEquals(0, rpt.size());
    173      }
    174
    175      @Test
    176      public void testSpecificSuppressionAtTopLevel() throws Throwable {
    177          Report rpt = new Report();
    178          runTestFromString(TEST13, new BarRule(), rpt, LanguageVersion.JAVA_15);
    179          assertEquals(0, rpt.size());
    180      }
    181
    182      private static final String TEST1 =
    183              "@SuppressWarnings(\"PMD\")" + PMD.EOL +
    184              "public class Foo {}";
    185
    186      private static final String TEST2 =
    187              "@SuppressWarnings(\"PMD\")" + PMD.EOL +
    188              "public class Foo {" + PMD.EOL +
    189              " void bar() {" + PMD.EOL +
    190              "  int foo;" + PMD.EOL +
    191              " }" + PMD.EOL +
    192              "}";
    193
    194      private static final String TEST3 =
    195              "public class Baz {" + PMD.EOL +
    196              " @SuppressWarnings(\"PMD\")" + PMD.EOL +
    197              " public class Bar {" + PMD.EOL +
    198              "  void bar() {" + PMD.EOL +
    199              "   int foo;" + PMD.EOL +
    200              "  }" + PMD.EOL +
    201              " }" + PMD.EOL +
    202              "}";
    203
    204      private static final String TEST4 =
    205              "public class Foo {" + PMD.EOL +
    206              " @SuppressWarnings(\"PMD\")" + PMD.EOL +
    207              " void bar() {" + PMD.EOL +
    208              "  int foo;" + PMD.EOL +
    209              " }" + PMD.EOL +
    210              "}";
    211
    212      private static final String TEST5 =
    213              "public class Bar {" + PMD.EOL +
    214              " @SuppressWarnings(\"PMD\")" + PMD.EOL +
    215              " public Bar() {" + PMD.EOL +
    216              "  int foo;" + PMD.EOL +
    217              " }" + PMD.EOL +
    218              "}";
    219
    220      private static final String TEST6 =
    221              "public class Bar {" + PMD.EOL +
    222              " @SuppressWarnings(\"PMD\")" + PMD.EOL +
    223              " int foo;" + PMD.EOL +
    224              " void bar() {" + PMD.EOL +
    225              "  int foo;" + PMD.EOL +
    226              " }" + PMD.EOL +
    227              "}";
    228
    229      private static final String TEST7 =
    230              "public class Bar {" + PMD.EOL +
    231              " int foo;" + PMD.EOL +
    232              " void bar(@SuppressWarnings(\"PMD\") int foo) {}" + PMD.EOL +
    233              "}";
    234
    235      private static final String TEST8 =
    236              "public class Bar {" + PMD.EOL +
    237              " int foo;" + PMD.EOL +
    238              " void bar() {" + PMD.EOL +
    239              "  @SuppressWarnings(\"PMD\") int foo;" + PMD.EOL +
    240              " }" + PMD.EOL +
    241              "}";
    242
    243      private static final String TEST9 =
    244              "public class Bar {" + PMD.EOL +
    245              " int foo;" + PMD.EOL +
    246              " void bar() {" + PMD.EOL +
    247              "  @SuppressWarnings(\"PMD.NoFoo\") int foo;" + PMD.EOL +
    248              " }" + PMD.EOL +
    249              "}";
    250
    251      private static final String TEST9_VALUE1 =
    252              "public class Bar {" + PMD.EOL +
    253              " int foo;" + PMD.EOL +
    254              " void bar() {" + PMD.EOL +
    255              "  @SuppressWarnings(value = \"PMD.NoFoo\") int foo;" + PMD.EOL +
    256              " }" + PMD.EOL +
    257              "}";
    258
    259      private static final String TEST9_VALUE2 =
    260              "public class Bar {" + PMD.EOL +
    261              " int foo;" + PMD.EOL +
    262              " void bar() {" + PMD.EOL +
    263              "  @SuppressWarnings({\"PMD.NoFoo\"}) int foo;" + PMD.EOL +
    264              " }" + PMD.EOL +
    265              "}";
    266
    267      private static final String TEST9_VALUE3 =
    268              "public class Bar {" + PMD.EOL +
    269              " int foo;" + PMD.EOL +
    270              " void bar() {" + PMD.EOL +
    271              "  @SuppressWarnings(value = {\"PMD.NoFoo\"}) int foo;" + PMD.EOL +
    272              " }" + PMD.EOL +
    273              "}";
    274
    275      private static final String TEST9_MULTIPLE_VALUES_1 =
    276              "@SuppressWarnings({\"PMD.NoFoo\", \"PMD.NoBar\"})" + PMD.EOL +
    277              "public class Bar {" + PMD.EOL +
    278              " int foo;" + PMD.EOL +
    279              " void bar() {" + PMD.EOL +
    280              "  int foo;" + PMD.EOL +
    281              " }" + PMD.EOL +
    282              "}";
    283
    284      private static final String TEST9_MULTIPLE_VALUES_2 =
    285              "@SuppressWarnings(value = {\"PMD.NoFoo\", \"PMD.NoBar\"})" + PMD.EOL +
    286              "public class Bar {" + PMD.EOL +
    287              " int foo;" + PMD.EOL +
    288              " void bar() {" + PMD.EOL +
    289              "  int foo;" + PMD.EOL +
    290              " }" + PMD.EOL +
    291              "}";
    292
    293      private static final String TEST10 =
    294              "public class Bar {" + PMD.EOL +
    295              " int foo;" + PMD.EOL +
    296              " void bar() {" + PMD.EOL +
    297              "  @SuppressWarnings(\"\") int foo;" + PMD.EOL +
    298              " }" + PMD.EOL +
    299              "}";
    300
    301      private static final String TEST11 =
    302              "public class Bar {" + PMD.EOL +
    303              " int foo;" + PMD.EOL +
    304              " void bar() {" + PMD.EOL +
    305              "  @SuppressWarnings(\"SomethingElse\") int foo;" + PMD.EOL +
    306              " }" + PMD.EOL +
    307              "}";
    308
    309      private static final String TEST12 =
    310              "public class Bar {" + PMD.EOL +
    311              " @SuppressWarnings(\"all\") int foo;" + PMD.EOL +
    312              "}";
    313
    314      private static final String TEST13 =
    315              "@SuppressWarnings(\"PMD.NoBar\")" + PMD.EOL +
    316              "public class Bar {" + PMD.EOL +
    317              "}";
    318
    319     public static junit.framework.Test suite() {
    320         return new JUnit4TestAdapter(SuppressWarningsTest.class);
    321     }
    322  }
    323
    324