1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package test.net.sourceforge.pmd.rules;
5
6 import net.sourceforge.pmd.PMD;
7 import net.sourceforge.pmd.Report;
8 import net.sourceforge.pmd.Rule;
9 import net.sourceforge.pmd.RuleSetNotFoundException;
10 import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
11 import test.net.sourceforge.pmd.testframework.TestDescriptor;
12
13 public class DoubleCheckedLockingTest extends SimpleAggregatorTst {
14
15 private Rule rule;
16
17 public void setUp() throws RuleSetNotFoundException {
18 rule = findRule("basic", "DoubleCheckedLocking");
19 }
20
21 public void testAll() {
22 runTests(new TestDescriptor[]{
23 new TestDescriptor(TEST1, "simple ok", 0, rule),
24 new TestDescriptor(TEST2, "simple failure", 1, rule),
25 new TestDescriptor(TEST3, "skip interfaces", 0, rule),
26 });
27 }
28
29 public void testGenerics() throws Throwable {
30 Report rpt = new Report();
31 runTestFromString15(TEST4, rule, rpt);
32 assertEquals(0, rpt.size());
33 }
34
35 private static final String TEST1 =
36 "public class Foo {" + PMD.EOL +
37 " public void foo() {}" + PMD.EOL +
38 "}";
39
40 private static final String TEST2 =
41 "public class Foo {" + PMD.EOL +
42 " Object baz;" + PMD.EOL +
43 " Object bar() {" + PMD.EOL +
44 " if(baz == null) { //baz may be non-null yet not fully created" + PMD.EOL +
45 " synchronized(this){" + PMD.EOL +
46 " if(baz == null){" + PMD.EOL +
47 " baz = new Object();" + PMD.EOL +
48 " }" + PMD.EOL +
49 " }" + PMD.EOL +
50 " }" + PMD.EOL +
51 " return baz;" + PMD.EOL +
52 " }" + PMD.EOL +
53 "}";
54
55 private static final String TEST3 =
56 "public interface Foo {" + PMD.EOL +
57 " void foo();" + PMD.EOL +
58 "}";
59
60 private static final String TEST4 =
61 "public class Foo {" + PMD.EOL +
62 " public <T> Bar<T> foo() { /* blah */}" + PMD.EOL +
63 "}";
64 }