2 * @fileoverview Tests for func-name-matching rule.
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const rule
= require("../../../lib/rules/func-name-matching"),
13 { RuleTester
} = require("../../../lib/rule-tester");
15 //------------------------------------------------------------------------------
17 //------------------------------------------------------------------------------
19 const ruleTester
= new RuleTester();
21 ruleTester
.run("func-name-matching", rule
, {
24 "var foo = function foo() {};",
25 { code
: "var foo = function foo() {};", options
: ["always"] },
26 { code
: "var foo = function bar() {};", options
: ["never"] },
27 "var foo = function() {}",
28 { code
: "var foo = () => {}", parserOptions
: { ecmaVersion
: 6 } },
29 "foo = function foo() {};",
30 { code
: "foo = function foo() {};", options
: ["always"] },
31 { code
: "foo = function bar() {};", options
: ["never"] },
32 "obj.foo = function foo() {};",
33 { code
: "obj.foo = function foo() {};", options
: ["always"] },
34 { code
: "obj.foo = function bar() {};", options
: ["never"] },
35 "obj.foo = function() {};",
36 { code
: "obj.foo = function() {};", options
: ["always"] },
37 { code
: "obj.foo = function() {};", options
: ["never"] },
38 "obj.bar.foo = function foo() {};",
39 { code
: "obj.bar.foo = function foo() {};", options
: ["always"] },
40 { code
: "obj.bar.foo = function baz() {};", options
: ["never"] },
41 "obj['foo'] = function foo() {};",
42 { code
: "obj['foo'] = function foo() {};", options
: ["always"] },
43 { code
: "obj['foo'] = function bar() {};", options
: ["never"] },
44 "obj['foo//bar'] = function foo() {};",
45 { code
: "obj['foo//bar'] = function foo() {};", options
: ["always"] },
46 { code
: "obj['foo//bar'] = function foo() {};", options
: ["never"] },
47 "obj[foo] = function bar() {};",
48 { code
: "obj[foo] = function bar() {};", options
: ["always"] },
49 { code
: "obj[foo] = function bar() {};", options
: ["never"] },
50 "var obj = {foo: function foo() {}};",
51 { code
: "var obj = {foo: function foo() {}};", options
: ["always"] },
52 { code
: "var obj = {foo: function bar() {}};", options
: ["never"] },
53 "var obj = {'foo': function foo() {}};",
54 { code
: "var obj = {'foo': function foo() {}};", options
: ["always"] },
55 { code
: "var obj = {'foo': function bar() {}};", options
: ["never"] },
56 "var obj = {'foo//bar': function foo() {}};",
57 { code
: "var obj = {'foo//bar': function foo() {}};", options
: ["always"] },
58 { code
: "var obj = {'foo//bar': function foo() {}};", options
: ["never"] },
59 "var obj = {foo: function() {}};",
60 { code
: "var obj = {foo: function() {}};", options
: ["always"] },
61 { code
: "var obj = {foo: function() {}};", options
: ["never"] },
62 { code
: "var obj = {[foo]: function bar() {}} ", parserOptions
: { ecmaVersion
: 6 } },
63 { code
: "var obj = {['x' + 2]: function bar(){}};", parserOptions
: { ecmaVersion
: 6 } },
64 "obj['x' + 2] = function bar(){};",
65 { code
: "var [ bar ] = [ function bar(){} ];", parserOptions
: { ecmaVersion
: 6 } },
66 { code
: "function a(foo = function bar() {}) {}", parserOptions
: { ecmaVersion
: 6 } },
67 "module.exports = function foo(name) {};",
68 "module['exports'] = function foo(name) {};",
70 code
: "module.exports = function foo(name) {};",
71 options
: [{ includeCommonJSModuleExports
: false }],
72 parserOptions
: { ecmaVersion
: 6 }
75 code
: "module.exports = function foo(name) {};",
76 options
: ["always", { includeCommonJSModuleExports
: false }],
77 parserOptions
: { ecmaVersion
: 6 }
80 code
: "module.exports = function foo(name) {};",
81 options
: ["never", { includeCommonJSModuleExports
: false }],
82 parserOptions
: { ecmaVersion
: 6 }
85 code
: "module['exports'] = function foo(name) {};",
86 options
: [{ includeCommonJSModuleExports
: false }],
87 parserOptions
: { ecmaVersion
: 6 }
90 code
: "module['exports'] = function foo(name) {};",
91 options
: ["always", { includeCommonJSModuleExports
: false }],
92 parserOptions
: { ecmaVersion
: 6 }
95 code
: "module['exports'] = function foo(name) {};",
96 options
: ["never", { includeCommonJSModuleExports
: false }],
97 parserOptions
: { ecmaVersion
: 6 }
100 code
: "({['foo']: function foo() {}})",
101 parserOptions
: { ecmaVersion
: 6 }
104 code
: "({['foo']: function foo() {}})",
106 parserOptions
: { ecmaVersion
: 6 }
109 code
: "({['foo']: function bar() {}})",
111 parserOptions
: { ecmaVersion
: 6 }
114 code
: "({['❤']: function foo() {}})",
115 parserOptions
: { ecmaVersion
: 6 }
118 code
: "({[foo]: function bar() {}})",
119 parserOptions
: { ecmaVersion
: 6 }
122 code
: "({[null]: function foo() {}})",
123 parserOptions
: { ecmaVersion
: 6 }
126 code
: "({[1]: function foo() {}})",
127 parserOptions
: { ecmaVersion
: 6 }
130 code
: "({[true]: function foo() {}})",
131 parserOptions
: { ecmaVersion
: 6 }
134 code
: "({[`x`]: function foo() {}})",
135 parserOptions
: { ecmaVersion
: 6 }
138 code
: "({[/abc/]: function foo() {}})",
139 parserOptions
: { ecmaVersion
: 6 }
142 code
: "({[[1, 2, 3]]: function foo() {}})",
143 parserOptions
: { ecmaVersion
: 6 }
146 code
: "({[{x: 1}]: function foo() {}})",
147 parserOptions
: { ecmaVersion
: 6 }
150 code
: "[] = function foo() {}",
151 parserOptions
: { ecmaVersion
: 6 }
154 code
: "({} = function foo() {})",
155 parserOptions
: { ecmaVersion
: 6 }
158 code
: "[a] = function foo() {}",
159 parserOptions
: { ecmaVersion
: 6 }
162 code
: "({a} = function foo() {})",
163 parserOptions
: { ecmaVersion
: 6 }
166 code
: "var [] = function foo() {}",
167 parserOptions
: { ecmaVersion
: 6 }
170 code
: "var {} = function foo() {}",
171 parserOptions
: { ecmaVersion
: 6 }
174 code
: "var [a] = function foo() {}",
175 parserOptions
: { ecmaVersion
: 6 }
178 code
: "var {a} = function foo() {}",
179 parserOptions
: { ecmaVersion
: 6 }
182 code
: "({ value: function value() {} })",
183 options
: [{ considerPropertyDescriptor
: true }]
186 code
: "obj.foo = function foo() {};",
187 options
: ["always", { considerPropertyDescriptor
: true }]
190 code
: "obj.bar.foo = function foo() {};",
191 options
: ["always", { considerPropertyDescriptor
: true }]
194 code
: "var obj = {foo: function foo() {}};",
195 options
: ["always", { considerPropertyDescriptor
: true }]
198 code
: "var obj = {foo: function() {}};",
199 options
: ["always", { considerPropertyDescriptor
: true }]
202 code
: "var obj = { value: function value() {} }",
203 options
: ["always", { considerPropertyDescriptor
: true }]
206 code
: "Object.defineProperty(foo, 'bar', { value: function bar() {} })",
207 options
: ["always", { considerPropertyDescriptor
: true }]
210 code
: "Object.defineProperties(foo, { bar: { value: function bar() {} } })",
211 options
: ["always", { considerPropertyDescriptor
: true }]
214 code
: "Object.create(proto, { bar: { value: function bar() {} } })",
215 options
: ["always", { considerPropertyDescriptor
: true }]
218 code
: "Object.defineProperty(foo, 'b' + 'ar', { value: function bar() {} })",
219 options
: ["always", { considerPropertyDescriptor
: true }]
222 code
: "Object.defineProperties(foo, { ['bar']: { value: function bar() {} } })",
223 options
: ["always", { considerPropertyDescriptor
: true }],
224 parserOptions
: { ecmaVersion
: 6 }
227 code
: "Object.create(proto, { ['bar']: { value: function bar() {} } })",
228 options
: ["always", { considerPropertyDescriptor
: true }],
229 parserOptions
: { ecmaVersion
: 6 }
232 code
: "Object.defineProperty(foo, 'bar', { value() {} })",
233 options
: ["never", { considerPropertyDescriptor
: true }],
234 parserOptions
: { ecmaVersion
: 6 }
237 code
: "Object.defineProperties(foo, { bar: { value() {} } })",
238 options
: ["never", { considerPropertyDescriptor
: true }],
239 parserOptions
: { ecmaVersion
: 6 }
242 code
: "Object.create(proto, { bar: { value() {} } })",
243 options
: ["never", { considerPropertyDescriptor
: true }],
244 parserOptions
: { ecmaVersion
: 6 }
247 code
: "Reflect.defineProperty(foo, 'bar', { value: function bar() {} })",
248 options
: ["always", { considerPropertyDescriptor
: true }]
251 code
: "Reflect.defineProperty(foo, 'b' + 'ar', { value: function baz() {} })",
252 options
: ["always", { considerPropertyDescriptor
: true }]
255 code
: "Reflect.defineProperty(foo, 'bar', { value() {} })",
256 options
: ["never", { considerPropertyDescriptor
: true }],
257 parserOptions
: { ecmaVersion
: 6 }
260 code
: "foo({ value: function value() {} })",
261 options
: ["always", { considerPropertyDescriptor
: true }]
266 code
: "let foo = function bar() {};",
268 parserOptions
: { ecmaVersion
: 6 },
270 { messageId
: "matchVariable", data
: { funcName
: "bar", name
: "foo" } }
274 code
: "let foo = function bar() {};",
275 parserOptions
: { ecmaVersion
: 6 },
277 { messageId
: "matchVariable", data
: { funcName
: "bar", name
: "foo" } }
281 code
: "foo = function bar() {};",
282 parserOptions
: { ecmaVersion
: 6 },
284 { messageId
: "matchVariable", data
: { funcName
: "bar", name
: "foo" } }
288 code
: "obj.foo = function bar() {};",
289 parserOptions
: { ecmaVersion
: 6 },
291 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
295 code
: "obj.bar.foo = function bar() {};",
296 parserOptions
: { ecmaVersion
: 6 },
298 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
302 code
: "obj['foo'] = function bar() {};",
303 parserOptions
: { ecmaVersion
: 6 },
305 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
309 code
: "let obj = {foo: function bar() {}};",
310 parserOptions
: { ecmaVersion
: 6 },
312 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
316 code
: "let obj = {'foo': function bar() {}};",
317 parserOptions
: { ecmaVersion
: 6 },
319 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
323 code
: "({['foo']: function bar() {}})",
324 parserOptions
: { ecmaVersion
: 6 },
326 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "foo" } }
330 code
: "module.exports = function foo(name) {};",
331 options
: [{ includeCommonJSModuleExports
: true }],
332 parserOptions
: { ecmaVersion
: 6 },
334 { messageId
: "matchProperty", data
: { funcName
: "foo", name
: "exports" } }
338 code
: "module.exports = function foo(name) {};",
339 options
: ["always", { includeCommonJSModuleExports
: true }],
340 parserOptions
: { ecmaVersion
: 6 },
342 { messageId
: "matchProperty", data
: { funcName
: "foo", name
: "exports" } }
346 code
: "module.exports = function exports(name) {};",
347 options
: ["never", { includeCommonJSModuleExports
: true }],
348 parserOptions
: { ecmaVersion
: 6 },
350 { messageId
: "notMatchProperty", data
: { funcName
: "exports", name
: "exports" } }
354 code
: "module['exports'] = function foo(name) {};",
355 options
: [{ includeCommonJSModuleExports
: true }],
356 parserOptions
: { ecmaVersion
: 6 },
358 { messageId
: "matchProperty", data
: { funcName
: "foo", name
: "exports" } }
362 code
: "module['exports'] = function foo(name) {};",
363 options
: ["always", { includeCommonJSModuleExports
: true }],
364 parserOptions
: { ecmaVersion
: 6 },
366 { messageId
: "matchProperty", data
: { funcName
: "foo", name
: "exports" } }
370 code
: "module['exports'] = function exports(name) {};",
371 options
: ["never", { includeCommonJSModuleExports
: true }],
372 parserOptions
: { ecmaVersion
: 6 },
374 { messageId
: "notMatchProperty", data
: { funcName
: "exports", name
: "exports" } }
378 code
: "var foo = function foo(name) {};",
381 { messageId
: "notMatchVariable", data
: { funcName
: "foo", name
: "foo" } }
385 code
: "obj.foo = function foo(name) {};",
388 { messageId
: "notMatchProperty", data
: { funcName
: "foo", name
: "foo" } }
392 code
: "Object.defineProperty(foo, 'bar', { value: function baz() {} })",
393 options
: ["always", { considerPropertyDescriptor
: true }],
395 { messageId
: "matchProperty", data
: { funcName
: "baz", name
: "bar" } }
399 code
: "Object.defineProperties(foo, { bar: { value: function baz() {} } })",
400 options
: ["always", { considerPropertyDescriptor
: true }],
402 { messageId
: "matchProperty", data
: { funcName
: "baz", name
: "bar" } }
406 code
: "Object.create(proto, { bar: { value: function baz() {} } })",
407 options
: ["always", { considerPropertyDescriptor
: true }],
409 { messageId
: "matchProperty", data
: { funcName
: "baz", name
: "bar" } }
413 code
: "var obj = { value: function foo(name) {} }",
414 options
: ["always", { considerPropertyDescriptor
: true }],
416 { messageId
: "matchProperty", data
: { funcName
: "foo", name
: "value" } }
420 code
: "Object.defineProperty(foo, 'bar', { value: function bar() {} })",
421 options
: ["never", { considerPropertyDescriptor
: true }],
423 { messageId
: "notMatchProperty", data
: { funcName
: "bar", name
: "bar" } }
427 code
: "Object.defineProperties(foo, { bar: { value: function bar() {} } })",
428 options
: ["never", { considerPropertyDescriptor
: true }],
430 { messageId
: "notMatchProperty", data
: { funcName
: "bar", name
: "bar" } }
434 code
: "Object.create(proto, { bar: { value: function bar() {} } })",
435 options
: ["never", { considerPropertyDescriptor
: true }],
437 { messageId
: "notMatchProperty", data
: { funcName
: "bar", name
: "bar" } }
441 code
: "Reflect.defineProperty(foo, 'bar', { value: function baz() {} })",
442 options
: ["always", { considerPropertyDescriptor
: true }],
444 { messageId
: "matchProperty", data
: { funcName
: "baz", name
: "bar" } }
448 code
: "Reflect.defineProperty(foo, 'bar', { value: function bar() {} })",
449 options
: ["never", { considerPropertyDescriptor
: true }],
451 { messageId
: "notMatchProperty", data
: { funcName
: "bar", name
: "bar" } }
455 code
: "foo({ value: function bar() {} })",
456 options
: ["always", { considerPropertyDescriptor
: true }],
458 { messageId
: "matchProperty", data
: { funcName
: "bar", name
: "value" } }