]> git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/no-loop-func.js
first commit
[pve-eslint.git] / eslint / tests / lib / rules / no-loop-func.js
1 /**
2 * @fileoverview Tests for no-loop-func rule.
3 * @author Ilya Volodin
4 */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Requirements
10 //------------------------------------------------------------------------------
11
12 const rule = require("../../../lib/rules/no-loop-func"),
13 { RuleTester } = require("../../../lib/rule-tester");
14
15 //------------------------------------------------------------------------------
16 // Tests
17 //------------------------------------------------------------------------------
18
19 const ruleTester = new RuleTester();
20
21 ruleTester.run("no-loop-func", rule, {
22 valid: [
23 "string = 'function a() {}';",
24 "for (var i=0; i<l; i++) { } var a = function() { i; };",
25 "for (var i=0, a=function() { i; }; i<l; i++) { }",
26 "for (var x in xs.filter(function(x) { return x != upper; })) { }",
27 {
28 code: "for (var x of xs.filter(function(x) { return x != upper; })) { }",
29 parserOptions: { ecmaVersion: 6 }
30 },
31
32 // no refers to variables that declared on upper scope.
33 "for (var i=0; i<l; i++) { (function() {}) }",
34 "for (var i in {}) { (function() {}) }",
35 {
36 code: "for (var i of {}) { (function() {}) }",
37 parserOptions: { ecmaVersion: 6 }
38 },
39
40 // functions which are using unmodified variables are OK.
41 {
42 code: "for (let i=0; i<l; i++) { (function() { i; }) }",
43 parserOptions: { ecmaVersion: 6 }
44 },
45 {
46 code: "for (let i in {}) { i = 7; (function() { i; }) }",
47 parserOptions: { ecmaVersion: 6 }
48 },
49 {
50 code: "for (const i of {}) { (function() { i; }) }",
51 parserOptions: { ecmaVersion: 6 }
52 },
53 {
54 code: "for (let i = 0; i < 10; ++i) { for (let x in xs.filter(x => x != i)) { } }",
55 parserOptions: { ecmaVersion: 6 }
56 },
57 {
58 code: "let a = 0; for (let i=0; i<l; i++) { (function() { a; }); }",
59 parserOptions: { ecmaVersion: 6 }
60 },
61 {
62 code: "let a = 0; for (let i in {}) { (function() { a; }); }",
63 parserOptions: { ecmaVersion: 6 }
64 },
65 {
66 code: "let a = 0; for (let i of {}) { (function() { a; }); }",
67 parserOptions: { ecmaVersion: 6 }
68 },
69 {
70 code: "let a = 0; for (let i=0; i<l; i++) { (function() { (function() { a; }); }); }",
71 parserOptions: { ecmaVersion: 6 }
72 },
73 {
74 code: "let a = 0; for (let i in {}) { function foo() { (function() { a; }); } }",
75 parserOptions: { ecmaVersion: 6 }
76 },
77 {
78 code: "let a = 0; for (let i of {}) { (() => { (function() { a; }); }); }",
79 parserOptions: { ecmaVersion: 6 }
80 },
81 {
82 code: "var a = 0; for (let i=0; i<l; i++) { (function() { a; }); }",
83 parserOptions: { ecmaVersion: 6 }
84 },
85 {
86 code: "var a = 0; for (let i in {}) { (function() { a; }); }",
87 parserOptions: { ecmaVersion: 6 }
88 },
89 {
90 code: "var a = 0; for (let i of {}) { (function() { a; }); }",
91 parserOptions: { ecmaVersion: 6 }
92 },
93 {
94 code: [
95 "let result = {};",
96 "for (const score in scores) {",
97 " const letters = scores[score];",
98 " letters.split('').forEach(letter => {",
99 " result[letter] = score;",
100 " });",
101 "}",
102 "result.__default = 6;"
103 ].join("\n"),
104 parserOptions: { ecmaVersion: 6 }
105 },
106 {
107 code: [
108 "while (true) {",
109 " (function() { a; });",
110 "}",
111 "let a;"
112 ].join("\n"),
113 parserOptions: { ecmaVersion: 6 }
114 }
115 ],
116 invalid: [
117 {
118 code: "for (var i=0; i<l; i++) { (function() { i; }) }",
119 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
120 },
121 {
122 code: "for (var i=0; i<l; i++) { for (var j=0; j<m; j++) { (function() { i+j; }) } }",
123 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i', 'j'" }, type: "FunctionExpression" }]
124 },
125 {
126 code: "for (var i in {}) { (function() { i; }) }",
127 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
128 },
129 {
130 code: "for (var i of {}) { (function() { i; }) }",
131 parserOptions: { ecmaVersion: 6 },
132 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
133 },
134 {
135 code: "for (var i=0; i < l; i++) { (() => { i; }) }",
136 parserOptions: { ecmaVersion: 6 },
137 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "ArrowFunctionExpression" }]
138 },
139 {
140 code: "for (var i=0; i < l; i++) { var a = function() { i; } }",
141 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
142 },
143 {
144 code: "for (var i=0; i < l; i++) { function a() { i; }; a(); }",
145 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionDeclaration" }]
146 },
147 {
148 code: "for (var i=0; (function() { i; })(), i<l; i++) { }",
149 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
150 },
151 {
152 code: "for (var i=0; i<l; (function() { i; })(), i++) { }",
153 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
154 },
155 {
156 code: "while(i) { (function() { i; }) }",
157 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
158 },
159 {
160 code: "do { (function() { i; }) } while (i)",
161 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "FunctionExpression" }]
162 },
163
164 // Warns functions which are using modified variables.
165 {
166 code: "let a; for (let i=0; i<l; i++) { a = 1; (function() { a; });}",
167 parserOptions: { ecmaVersion: 6 },
168 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
169 },
170 {
171 code: "let a; for (let i in {}) { (function() { a; }); a = 1; }",
172 parserOptions: { ecmaVersion: 6 },
173 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
174 },
175 {
176 code: "let a; for (let i of {}) { (function() { a; }); } a = 1; ",
177 parserOptions: { ecmaVersion: 6 },
178 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
179 },
180 {
181 code: "let a; for (let i=0; i<l; i++) { (function() { (function() { a; }); }); a = 1; }",
182 parserOptions: { ecmaVersion: 6 },
183 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
184 },
185 {
186 code: "let a; for (let i in {}) { a = 1; function foo() { (function() { a; }); } }",
187 parserOptions: { ecmaVersion: 6 },
188 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionDeclaration" }]
189 },
190 {
191 code: "let a; for (let i of {}) { (() => { (function() { a; }); }); } a = 1;",
192 parserOptions: { ecmaVersion: 6 },
193 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "ArrowFunctionExpression" }]
194 },
195 {
196 code: "for (var i = 0; i < 10; ++i) { for (let x in xs.filter(x => x != i)) { } }",
197 parserOptions: { ecmaVersion: 6 },
198 errors: [{ messageId: "unsafeRefs", data: { varNames: "'i'" }, type: "ArrowFunctionExpression" }]
199 },
200 {
201 code: "for (let x of xs) { let a; for (let y of ys) { a = 1; (function() { a; }); } }",
202 parserOptions: { ecmaVersion: 6 },
203 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
204 },
205 {
206 code: "for (var x of xs) { for (let y of ys) { (function() { x; }); } }",
207 parserOptions: { ecmaVersion: 6 },
208 errors: [{ messageId: "unsafeRefs", data: { varNames: "'x'" }, type: "FunctionExpression" }]
209 },
210 {
211 code: "for (var x of xs) { (function() { x; }); }",
212 parserOptions: { ecmaVersion: 6 },
213 errors: [{ messageId: "unsafeRefs", data: { varNames: "'x'" }, type: "FunctionExpression" }]
214 },
215 {
216 code: "var a; for (let x of xs) { a = 1; (function() { a; }); }",
217 parserOptions: { ecmaVersion: 6 },
218 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
219 },
220 {
221 code: "var a; for (let x of xs) { (function() { a; }); a = 1; }",
222 parserOptions: { ecmaVersion: 6 },
223 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
224 },
225 {
226 code: "let a; function foo() { a = 10; } for (let x of xs) { (function() { a; }); } foo();",
227 parserOptions: { ecmaVersion: 6 },
228 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
229 },
230 {
231 code: "let a; function foo() { a = 10; for (let x of xs) { (function() { a; }); } } foo();",
232 parserOptions: { ecmaVersion: 6 },
233 errors: [{ messageId: "unsafeRefs", data: { varNames: "'a'" }, type: "FunctionExpression" }]
234 }
235 ]
236 });