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",
64 code
: "var foo = () => { if (true) return true; else return; }",
65 parserOptions
: { ecmaVersion
: 6 },
68 messageId
: "missingReturnValue",
69 data
: { name
: "Arrow function" },
70 type
: "ReturnStatement",
79 code
: "function foo() { if (true) return; else return false; }",
82 messageId
: "unexpectedReturnValue",
83 data
: { name
: "Function 'foo'" },
84 type
: "ReturnStatement",
93 code
: "f(function() { if (true) return true; else return; })",
96 messageId
: "missingReturnValue",
97 data
: { name
: "Function" },
98 type
: "ReturnStatement",
107 code
: "f(function() { if (true) return; else return false; })",
110 messageId
: "unexpectedReturnValue",
111 data
: { name
: "Function" },
112 type
: "ReturnStatement",
121 code
: "f(a => { if (true) return; else return false; })",
122 parserOptions
: { ecmaVersion
: 6 },
125 messageId
: "unexpectedReturnValue",
126 data
: { name
: "Arrow function" },
127 type
: "ReturnStatement",
136 code
: "function foo() { if (true) return true; return undefined; }",
137 options
: [{ treatUndefinedAsUnspecified
: true }],
140 messageId
: "missingReturnValue",
141 data
: { name
: "Function 'foo'" },
142 type
: "ReturnStatement",
151 code
: "function foo() { if (true) return true; return void 0; }",
152 options
: [{ treatUndefinedAsUnspecified
: true }],
155 messageId
: "missingReturnValue",
156 data
: { name
: "Function 'foo'" },
157 type
: "ReturnStatement",
166 code
: "function foo() { if (true) return undefined; return true; }",
167 options
: [{ treatUndefinedAsUnspecified
: true }],
170 messageId
: "unexpectedReturnValue",
171 data
: { name
: "Function 'foo'" },
172 type
: "ReturnStatement",
181 code
: "function foo() { if (true) return void 0; return true; }",
182 options
: [{ treatUndefinedAsUnspecified
: true }],
185 messageId
: "unexpectedReturnValue",
186 data
: { name
: "Function 'foo'" },
187 type
: "ReturnStatement",
196 code
: "if (true) { return 1; } return;",
197 parserOptions
: { ecmaFeatures
: { globalReturn
: true } },
200 messageId
: "missingReturnValue",
201 data
: { name
: "Program" },
202 type
: "ReturnStatement",
211 code
: "function foo() { if (a) return true; }",
214 messageId
: "missingReturn",
215 data
: { name
: "function 'foo'" },
216 type
: "FunctionDeclaration",
225 code
: "function _foo() { if (a) return true; }",
228 messageId
: "missingReturn",
229 data
: { name
: "function '_foo'" },
230 type
: "FunctionDeclaration",
239 code
: "f(function foo() { if (a) return true; });",
242 messageId
: "missingReturn",
243 data
: { name
: "function 'foo'" },
244 type
: "FunctionExpression",
253 code
: "f(function() { if (a) return true; });",
256 messageId
: "missingReturn",
257 data
: { name
: "function" },
258 type
: "FunctionExpression",
267 code
: "f(() => { if (a) return true; });",
268 parserOptions
: { ecmaVersion
: 6 },
271 messageId
: "missingReturn",
272 data
: { name
: "arrow function" },
273 type
: "ArrowFunctionExpression",
282 code
: "var obj = {foo() { if (a) return true; }};",
283 parserOptions
: { ecmaVersion
: 6 },
286 messageId
: "missingReturn",
287 data
: { name
: "method 'foo'" },
288 type
: "FunctionExpression",
297 code
: "class A {foo() { if (a) return true; }};",
298 parserOptions
: { ecmaVersion
: 6 },
301 messageId
: "missingReturn",
302 data
: { name
: "method 'foo'" },
303 type
: "FunctionExpression",
312 code
: "if (a) return true;",
313 parserOptions
: { ecmaFeatures
: { globalReturn
: true } },
316 messageId
: "missingReturn",
317 data
: { name
: "program" },
327 code
: "class A { CapitalizedFunction() { if (a) return true; } }",
328 parserOptions
: { ecmaVersion
: 6 },
331 messageId
: "missingReturn",
332 data
: { name
: "method 'CapitalizedFunction'" },
333 type
: "FunctionExpression",
342 code
: "({ constructor() { if (a) return true; } });",
343 parserOptions
: { ecmaVersion
: 6 },
346 messageId
: "missingReturn",
347 data
: { name
: "method 'constructor'" },
348 type
: "FunctionExpression",