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.rules.design.OnlyOneReturnRule;
8   import test.net.sourceforge.pmd.testframework.RuleTst;
9   
10  public class OnlyOneReturnRuleTest extends RuleTst {
11  
12      private static final String TEST1 =
13      "public class OnlyOneReturn1 {" + PMD.EOL +
14      " public String foo(int x) {    " + PMD.EOL +
15      "  if (x > 0) {" + PMD.EOL +
16      "   return \"hey\";" + PMD.EOL +
17      "  }" + PMD.EOL +
18      "  return \"hi\";" + PMD.EOL +
19      " }" + PMD.EOL +
20      "}";
21  
22  
23      private static final String TEST2 =
24      "public class OnlyOneReturn2 {" + PMD.EOL +
25      " public String foo(int x) {    " + PMD.EOL +
26      "  return \"hi\";" + PMD.EOL +
27      " }" + PMD.EOL +
28      "}";
29  
30      private static final String TEST3 =
31      "public class OnlyOneReturn3 {" + PMD.EOL +
32      " public void foo(int x) {      " + PMD.EOL +
33      "  int y =2;" + PMD.EOL +
34      " }" + PMD.EOL +
35      "}";
36  
37      private static final String TEST4 =
38      "public class OnlyOneReturn4 {" + PMD.EOL +
39      " public void foo(int x) {      " + PMD.EOL +
40      "  if (x>2) {" + PMD.EOL +
41      "    return;" + PMD.EOL +
42      "  }" + PMD.EOL +
43      "  int y =2;" + PMD.EOL +
44      " }" + PMD.EOL +
45      "}";
46  
47      private static final String TEST5 =
48      "public class OnlyOneReturn5 {" + PMD.EOL +
49      " public int foo(int x) {" + PMD.EOL +
50      "  try {" + PMD.EOL +
51      "   x += 2;" + PMD.EOL +
52      "   return x;" + PMD.EOL +
53      "  } finally {" + PMD.EOL +
54      "   System.err.println(\"WunderBuggy!\");" + PMD.EOL +
55      "  }" + PMD.EOL +
56      " }" + PMD.EOL +
57      "}";
58  
59      private static final String TEST6 =
60      "public class OnlyOneReturn6 {" + PMD.EOL +
61      " public int foo() {" + PMD.EOL +
62      "  FileFilter f = new FileFilter() {" + PMD.EOL +
63      "   public boolean accept(File file) {" + PMD.EOL +
64      "    return false;" + PMD.EOL +
65      "   }" + PMD.EOL +
66      "  };" + PMD.EOL +
67      "  return 2;" + PMD.EOL +
68      " }" + PMD.EOL +
69      "}";
70  
71  
72  
73      public void testTwoReturns() throws Throwable {
74          runTestFromString(TEST1, 1, new OnlyOneReturnRule());
75      }
76      public void testOneReturn() throws Throwable {
77          runTestFromString(TEST2, 0, new OnlyOneReturnRule());
78      }
79      public void testNoReturns() throws Throwable {
80          runTestFromString(TEST3, 0, new OnlyOneReturnRule());
81      }
82      public void testVoidRtn() throws Throwable {
83          runTestFromString(TEST4, 0, new OnlyOneReturnRule());
84      }
85      public void testFinally() throws Throwable {
86          runTestFromString(TEST5, 0, new OnlyOneReturnRule());
87      }
88      public void testReturnInsideAnonymousInnerClass() throws Throwable {
89          runTestFromString(TEST6, 0, new OnlyOneReturnRule());
90      }
91  }