    1   /***
    2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
    3    */
    4   package test.net.sourceforge.pmd.rules.design;
    5
    6   import net.sourceforge.pmd.PMD;
    7   import net.sourceforge.pmd.Rule;
    8   import net.sourceforge.pmd.RuleSetNotFoundException;
    9
    10  import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
    11  import test.net.sourceforge.pmd.testframework.TestDescriptor;
    12
    13  public class PreserveStackTraceTest extends SimpleAggregatorTst {
    14
    15      private Rule rule;
    16
    17      public void setUp() throws RuleSetNotFoundException {
    18          rule = findRule("design", "PreserveStackTrace");
    19      }
    20
    21      public void test() throws Throwable {
    22          rule.setMessage("{0}");
    23          runTests(new TestDescriptor[]{
    24                  new TestDescriptor(TEST1_FAIL, "1, Exception thrown without preserving stack", 1, rule),
    25                  new TestDescriptor(TEST2_OK, "2, Exception thrown, stack preserved", 0, rule),
    26                  new TestDescriptor(TEST3_OK, "3, Exception thrown, stack preserved", 0, rule),
    27                  new TestDescriptor(TEST4_OK, "4, No exception thrown, OK", 0, rule),
    28                  new TestDescriptor(TEST5_OK, "5, No exception thrown, OK", 0, rule),
    29                  new TestDescriptor(TEST6_OK, "6, No exception thrown, OK", 0, rule),
    30                  new TestDescriptor(TEST7_OK, "7, No exception thrown, OK", 0, rule),
    31                  new TestDescriptor(TEST8_OK, "8, No exception thrown, OK", 0, rule),
    32                  new TestDescriptor(TEST9_OK, "9, Excetion is cast, OK", 0, rule),
    33              });
    34      }
    35
    36      private static final String TEST1_FAIL =
    37          "public class Foo {" + PMD.EOL +
    38          "    public void foo(String a) {" + PMD.EOL +
    39          "        try {" + PMD.EOL +
    40          "            int i = Integer.parseInt(a);" + PMD.EOL +
    41          "        } catch(Exception e){" + PMD.EOL +
    42          "            throw new Exception(e.getMessage());" + PMD.EOL +
    43          "        }" + PMD.EOL +
    44          "    }" + PMD.EOL +
    45          "}";
    46
    47      private static final String TEST2_OK =
    48          "public class Foo {" + PMD.EOL +
    49          "    public void foo(String a) {" + PMD.EOL +
    50          "        try {" + PMD.EOL +
    51          "            int i = Integer.parseInt(a);" + PMD.EOL +
    52          "        } catch(Exception e){" + PMD.EOL +
    53          "            throw new Exception(e);" + PMD.EOL +
    54          "        }" + PMD.EOL +
    55          "    }" + PMD.EOL +
    56          "}";
    57
    58      private static final String TEST3_OK =
    59          "public class Foo {" + PMD.EOL +
    60          "    public void foo(String a) {" + PMD.EOL +
    61          "        try {" + PMD.EOL +
    62          "            int i = Integer.parseInt(a);" + PMD.EOL +
    63          "        } catch(Exception e){" + PMD.EOL +
    64          "            throw new Exception(e, e.getMessage());" + PMD.EOL +
    65          "        }" + PMD.EOL +
    66          "    }" + PMD.EOL +
    67          "}";
    68
    69      private static final String TEST4_OK =
    70          "public class Foo {" + PMD.EOL +
    71          "    public void foo(String a) {" + PMD.EOL +
    72          "        try {" + PMD.EOL +
    73          "            int i = Integer.parseInt(a);" + PMD.EOL +
    74          "        } catch(Exception e){" + PMD.EOL +
    75          "            throw e.fillInStackTrace();" + PMD.EOL +
    76          "        }" + PMD.EOL +
    77          "    }" + PMD.EOL +
    78          "}";
    79
    80      private static final String TEST5_OK =
    81          "public class Foo {" + PMD.EOL +
    82          "    public void foo(String a) {" + PMD.EOL +
    83          "        try {" + PMD.EOL +
    84          "            int i = Integer.parseInt(a);" + PMD.EOL +
    85          "        } catch(Exception e){" + PMD.EOL +
    86          "        }" + PMD.EOL +
    87          "    }" + PMD.EOL +
    88          "}";
    89
    90      private static final String TEST6_OK =
    91          "public class Foo {" + PMD.EOL +
    92          "    public void foo(String a) {" + PMD.EOL +
    93          "        try {" + PMD.EOL +
    94          "            int i = Integer.parseInt(a);" + PMD.EOL +
    95          "        } catch(Exception e){" + PMD.EOL +
    96          "            e.printStackTrace();" + PMD.EOL +
    97          "        }" + PMD.EOL +
    98          "    }" + PMD.EOL +
    99          "}";
    100
    101     private static final String TEST7_OK =
    102         "public class Foo {" + PMD.EOL +
    103         "    public void foo(String a) {" + PMD.EOL +
    104         "        try {" + PMD.EOL +
    105         "            int i = Integer.parseInt(a);" + PMD.EOL +
    106         "        } catch(Exception e){" + PMD.EOL +
    107         "            throw new Exception(Bar.foo(e),e);" + PMD.EOL +
    108         "        }" + PMD.EOL +
    109         "    }" + PMD.EOL +
    110         "}";
    111
    112     private static final String TEST8_FAIL =
    113         "public class Foo {" + PMD.EOL +
    114         "    public void foo(String a) {" + PMD.EOL +
    115         "        try {" + PMD.EOL +
    116         "            int i = Integer.parseInt(a);" + PMD.EOL +
    117         "        } catch(Exception e){" + PMD.EOL +
    118         "            throw new Exception(Bar.foo(e));" + PMD.EOL +
    119         "        }" + PMD.EOL +
    120         "    }" + PMD.EOL +
    121         "}";
    122
    123     private static final String TEST8_OK =
    124         "public class Foo {" + PMD.EOL +
    125         "    public void foo(String a) {" + PMD.EOL +
    126         "        try {" + PMD.EOL +
    127         "            int i = Integer.parseInt(a);" + PMD.EOL +
    128         "        } catch(Exception e){" + PMD.EOL +
    129         "            throw (Error)e;" + PMD.EOL +
    130         "        }" + PMD.EOL +
    131         "    }" + PMD.EOL +
    132         "}";
    133
    134     private static final String TEST9_OK =
    135         "public class Foo {" + PMD.EOL +
    136         "    public void foo(String a) {" + PMD.EOL +
    137         "        try {" + PMD.EOL +
    138         "            int i = Integer.parseInt(a);" + PMD.EOL +
    139         "        } catch(Exception e){" + PMD.EOL +
    140         "            throw (Error)e.fillInStackTrace();" + PMD.EOL +
    141         "        }" + PMD.EOL +
    142         "    }" + PMD.EOL +
    143         "}";
    144 }