2 * @fileoverview Tests for consistent-return rule.
3 * @author Raphael Pigulla
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
11 const rule
= require("../../../lib/rules/consistent-return"),
12 { RuleTester
} = require("../../../lib/rule-tester");
14 //------------------------------------------------------------------------------
16 //------------------------------------------------------------------------------
18 const ruleTester
= new RuleTester();
20 ruleTester
.run("consistent-return", rule
, {
23 "function foo() { return; }",
24 "function foo() { if (true) return; }",
25 "function foo() { if (true) return; else return; }",
26 "function foo() { if (true) return true; else return false; }",
27 "f(function() { return; })",
28 "f(function() { if (true) return; })",
29 "f(function() { if (true) return; else return; })",
30 "f(function() { if (true) return true; else return false; })",
31 "function foo() { function bar() { return true; } return; }",
32 "function foo() { function bar() { return; } return false; }",
33 "function Foo() { if (!(this instanceof Foo)) return new Foo(); }",
34 { code
: "function foo() { if (true) return; else return undefined; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
35 { code
: "function foo() { if (true) return; else return void 0; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
36 { code
: "function foo() { if (true) return undefined; else return; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
37 { code
: "function foo() { if (true) return undefined; else return void 0; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
38 { code
: "function foo() { if (true) return void 0; else return; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
39 { code
: "function foo() { if (true) return void 0; else return undefined; }", options
: [{ treatUndefinedAsUnspecified
: true }] },
40 { code
: "var x = () => { return {}; };", parserOptions
: { ecmaVersion
: 6 } },
41 { code
: "if (true) { return 1; } return 0;", parserOptions
: { ecmaVersion
: 6, ecmaFeatures
: { globalReturn
: true } } },
43 // https://github.com/eslint/eslint/issues/7790
44 { code
: "class Foo { constructor() { if (true) return foo; } }", parserOptions
: { ecmaVersion
: 6 } },
45 { code
: "var Foo = class { constructor() { if (true) return foo; } }", parserOptions
: { ecmaVersion
: 6 } }
50 code
: "function foo() { if (true) return true; else return; }",
53 messageId
: "missingReturnValue",
54 data
: { name
: "Function 'foo'" },
55 type
: "ReturnStatement"
60 code
: "var foo = () => { if (true) return true; else return; }",
61 parserOptions
: { ecmaVersion
: 6 },
64 messageId
: "missingReturnValue",
65 data
: { name
: "Arrow function" },
66 type
: "ReturnStatement"
71 code
: "function foo() { if (true) return; else return false; }",
74 messageId
: "unexpectedReturnValue",
75 data
: { name
: "Function 'foo'" },
76 type
: "ReturnStatement"
81 code
: "f(function() { if (true) return true; else return; })",
84 messageId
: "missingReturnValue",
85 data
: { name
: "Function" },
86 type
: "ReturnStatement"
91 code
: "f(function() { if (true) return; else return false; })",
94 messageId
: "unexpectedReturnValue",
95 data
: { name
: "Function" },
96 type
: "ReturnStatement"
101 code
: "f(a => { if (true) return; else return false; })",
102 parserOptions
: { ecmaVersion
: 6 },
105 messageId
: "unexpectedReturnValue",
106 data
: { name
: "Arrow function" },
107 type
: "ReturnStatement"
112 code
: "function foo() { if (true) return true; return undefined; }",
113 options
: [{ treatUndefinedAsUnspecified
: true }],
116 messageId
: "missingReturnValue",
117 data
: { name
: "Function 'foo'" },
118 type
: "ReturnStatement",
124 code
: "function foo() { if (true) return true; return void 0; }",
125 options
: [{ treatUndefinedAsUnspecified
: true }],
128 messageId
: "missingReturnValue",
129 data
: { name
: "Function 'foo'" },
130 type
: "ReturnStatement",
136 code
: "function foo() { if (true) return undefined; return true; }",
137 options
: [{ treatUndefinedAsUnspecified
: true }],
140 messageId
: "unexpectedReturnValue",
141 data
: { name
: "Function 'foo'" },
142 type
: "ReturnStatement",
148 code
: "function foo() { if (true) return void 0; return true; }",
149 options
: [{ treatUndefinedAsUnspecified
: true }],
152 messageId
: "unexpectedReturnValue",
153 data
: { name
: "Function 'foo'" },
154 type
: "ReturnStatement",
160 code
: "if (true) { return 1; } return;",
161 parserOptions
: { ecmaFeatures
: { globalReturn
: true } },
164 messageId
: "missingReturnValue",
165 data
: { name
: "Program" },
166 type
: "ReturnStatement"
171 code
: "function foo() { if (a) return true; }",
174 messageId
: "missingReturn",
175 data
: { name
: "function 'foo'" },
176 type
: "FunctionDeclaration",
182 code
: "function _foo() { if (a) return true; }",
185 messageId
: "missingReturn",
186 data
: { name
: "function '_foo'" },
187 type
: "FunctionDeclaration",
193 code
: "f(function foo() { if (a) return true; });",
196 messageId
: "missingReturn",
197 data
: { name
: "function 'foo'" },
198 type
: "FunctionExpression",
204 code
: "f(function() { if (a) return true; });",
207 messageId
: "missingReturn",
208 data
: { name
: "function" },
209 type
: "FunctionExpression",
215 code
: "f(() => { if (a) return true; });",
216 parserOptions
: { ecmaVersion
: 6 },
219 messageId
: "missingReturn",
220 data
: { name
: "arrow function" },
221 type
: "ArrowFunctionExpression",
227 code
: "var obj = {foo() { if (a) return true; }};",
228 parserOptions
: { ecmaVersion
: 6 },
231 messageId
: "missingReturn",
232 data
: { name
: "method 'foo'" },
233 type
: "FunctionExpression",
239 code
: "class A {foo() { if (a) return true; }};",
240 parserOptions
: { ecmaVersion
: 6 },
243 messageId
: "missingReturn",
244 data
: { name
: "method 'foo'" },
245 type
: "FunctionExpression",
251 code
: "if (a) return true;",
252 parserOptions
: { ecmaFeatures
: { globalReturn
: true } },
255 messageId
: "missingReturn",
256 data
: { name
: "program" },
263 code
: "class A { CapitalizedFunction() { if (a) return true; } }",
264 parserOptions
: { ecmaVersion
: 6 },
267 messageId
: "missingReturn",
268 data
: { name
: "method 'CapitalizedFunction'" },
269 type
: "FunctionExpression",
275 code
: "({ constructor() { if (a) return true; } });",
276 parserOptions
: { ecmaVersion
: 6 },
279 messageId
: "missingReturn",
280 data
: { name
: "method 'constructor'" },
281 type
: "FunctionExpression",