1   package test.net.sourceforge.pmd.rules.finalize;
2   
3   import net.sourceforge.pmd.PMD;
4   import net.sourceforge.pmd.Rule;
5   import net.sourceforge.pmd.RuleSetNotFoundException;
6   import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
7   import test.net.sourceforge.pmd.testframework.TestDescriptor;
8   
9   public class FinalizeDoesNotCallSuperFinalizeRuleTest extends SimpleAggregatorTst {
10  
11      private Rule rule;
12  
13      public void setUp() throws RuleSetNotFoundException {
14          rule = findRule("finalizers", "FinalizeDoesNotCallSuperFinalize");
15      }
16  
17      public void testAll() {
18          runTests(new TestDescriptor[]{
19              new TestDescriptor(TEST1, "bad", 1, rule),
20              new TestDescriptor(TEST2, "ok", 0, rule),
21              new TestDescriptor(TEST3, "ok, super.finalize called in try..finally", 0, rule),
22              new TestDescriptor(TEST4, "ok, super.finalize called in try..catch..finally", 0, rule),
23          });
24      }
25  
26      private static final String TEST1 =
27              "public class Foo {" + PMD.EOL +
28              " public void finalize() {" + PMD.EOL +
29              "  super.finalize();" + PMD.EOL +
30              "  int x = 2;" + PMD.EOL +
31              " }" + PMD.EOL +
32              "}";
33  
34      private static final String TEST2 =
35              "public class Foo {" + PMD.EOL +
36              " public void finalize() {" + PMD.EOL +
37              "  int x = 2;" + PMD.EOL +
38              "  super.finalize();" + PMD.EOL +
39              " }" + PMD.EOL +
40              "}";
41  
42      private static final String TEST3 =
43              "public class Foo {" + PMD.EOL +
44              " public void finalize() {" + PMD.EOL +
45              "  try {} finally {" + PMD.EOL +
46              "   super.finalize();" + PMD.EOL +
47              "  }" + PMD.EOL +
48              " }" + PMD.EOL +
49              "}";
50  
51      private static final String TEST4 =
52              "public class Foo {" + PMD.EOL +
53              " public void finalize() {" + PMD.EOL +
54              "  try {} catch(Exception e) {} finally {" + PMD.EOL +
55              "   super.finalize();" + PMD.EOL +
56              "  }" + PMD.EOL +
57              " }" + PMD.EOL +
58              "}";
59  }