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 }