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 }