]> git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/vars-on-top.js
92e1a0d1cc038bfd33aa7acf3bd4900f46f6bd49
[pve-eslint.git] / eslint / tests / lib / rules / vars-on-top.js
1 /**
2 * @fileoverview Tests for vars-on-top rule.
3 * @author Danny Fritz
4 * @author Gyandeep Singh
5 */
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Requirements
10 //------------------------------------------------------------------------------
11
12 const rule = require("../../../lib/rules/vars-on-top"),
13 { RuleTester } = require("../../../lib/rule-tester");
14
15 //------------------------------------------------------------------------------
16 // Tests
17 //------------------------------------------------------------------------------
18
19 const ruleTester = new RuleTester();
20 const error = { messageId: "top", type: "VariableDeclaration" };
21
22 ruleTester.run("vars-on-top", rule, {
23
24 valid: [
25 [
26 "var first = 0;",
27 "function foo() {",
28 " first = 2;",
29 "}"
30 ].join("\n"),
31 [
32 "function foo() {",
33 "}"
34 ].join("\n"),
35 [
36 "function foo() {",
37 " var first;",
38 " if (true) {",
39 " first = true;",
40 " } else {",
41 " first = 1;",
42 " }",
43 "}"
44 ].join("\n"),
45 [
46 "function foo() {",
47 " var first;",
48 " var second = 1;",
49 " var third;",
50 " var fourth = 1, fifth, sixth = third;",
51 " var seventh;",
52 " if (true) {",
53 " third = true;",
54 " }",
55 " first = second;",
56 "}"
57 ].join("\n"),
58 [
59 "function foo() {",
60 " var i;",
61 " for (i = 0; i < 10; i++) {",
62 " alert(i);",
63 " }",
64 "}"
65 ].join("\n"),
66 [
67 "function foo() {",
68 " var outer;",
69 " function inner() {",
70 " var inner = 1;",
71 " var outer = inner;",
72 " }",
73 " outer = 1;",
74 "}"
75 ].join("\n"),
76 [
77 "function foo() {",
78 " var first;",
79 " //Hello",
80 " var second = 1;",
81 " first = second;",
82 "}"
83 ].join("\n"),
84 [
85 "function foo() {",
86 " var first;",
87 " /*",
88 " Hello Clarice",
89 " */",
90 " var second = 1;",
91 " first = second;",
92 "}"
93 ].join("\n"),
94 [
95 "function foo() {",
96 " var first;",
97 " var second = 1;",
98 " function bar(){",
99 " var first;",
100 " first = 5;",
101 " }",
102 " first = second;",
103 "}"
104 ].join("\n"),
105 [
106 "function foo() {",
107 " var first;",
108 " var second = 1;",
109 " function bar(){",
110 " var third;",
111 " third = 5;",
112 " }",
113 " first = second;",
114 "}"
115 ].join("\n"),
116 [
117 "function foo() {",
118 " var first;",
119 " var bar = function(){",
120 " var third;",
121 " third = 5;",
122 " }",
123 " first = 5;",
124 "}"
125 ].join("\n"),
126 [
127 "function foo() {",
128 " var first;",
129 " first.onclick(function(){",
130 " var third;",
131 " third = 5;",
132 " });",
133 " first = 5;",
134 "}"
135 ].join("\n"),
136 {
137 code: [
138 "function foo() {",
139 " var i = 0;",
140 " for (let j = 0; j < 10; j++) {",
141 " alert(j);",
142 " }",
143 " i = i + 1;",
144 "}"
145 ].join("\n"),
146 parserOptions: {
147 ecmaVersion: 6
148 }
149 },
150 "'use strict'; var x; f();",
151 "'use strict'; 'directive'; var x; var y; f();",
152 "function f() { 'use strict'; var x; f(); }",
153 "function f() { 'use strict'; 'directive'; var x; var y; f(); }",
154 { code: "import React from 'react'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
155 { code: "'use strict'; import React from 'react'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
156 { code: "import React from 'react'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
157 { code: "import * as foo from 'mod.js'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
158 { code: "import { square, diag } from 'lib'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
159 { code: "import { default as foo } from 'lib'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
160 { code: "import 'src/mylib'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
161 { code: "import theDefault, { named1, named2 } from 'src/mylib'; 'use strict'; var y; function f() { 'use strict'; var x; var y; f(); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
162 {
163 code: [
164 "export var x;",
165 "var y;",
166 "var z;"
167 ].join("\n"),
168 parserOptions: {
169 ecmaVersion: 6,
170 sourceType: "module"
171 }
172 },
173 {
174 code: [
175 "var x;",
176 "export var y;",
177 "var z;"
178 ].join("\n"),
179 parserOptions: {
180 ecmaVersion: 6,
181 sourceType: "module"
182 }
183 },
184 {
185 code: [
186 "var x;",
187 "var y;",
188 "export var z;"
189 ].join("\n"),
190 parserOptions: {
191 ecmaVersion: 6,
192 sourceType: "module"
193 }
194 }
195 ],
196
197 invalid: [
198 {
199 code: [
200 "var first = 0;",
201 "function foo() {",
202 " first = 2;",
203 " second = 2;",
204 "}",
205 "var second = 0;"
206 ].join("\n"),
207 errors: [error]
208 },
209 {
210 code: [
211 "function foo() {",
212 " var first;",
213 " first = 1;",
214 " first = 2;",
215 " first = 3;",
216 " first = 4;",
217 " var second = 1;",
218 " second = 2;",
219 " first = second;",
220 "}"
221 ].join("\n"),
222 errors: [error]
223 },
224 {
225 code: [
226 "function foo() {",
227 " var first;",
228 " if (true) {",
229 " var second = true;",
230 " }",
231 " first = second;",
232 "}"
233 ].join("\n"),
234 errors: [error]
235 },
236 {
237 code: [
238 "function foo() {",
239 " for (var i = 0; i < 10; i++) {",
240 " alert(i);",
241 " }",
242 "}"
243 ].join("\n"),
244 errors: [error]
245 },
246 {
247 code: [
248 "function foo() {",
249 " var first = 10;",
250 " var i;",
251 " for (i = 0; i < first; i ++) {",
252 " var second = i;",
253 " }",
254 "}"
255 ].join("\n"),
256 errors: [error]
257 },
258 {
259 code: [
260 "function foo() {",
261 " var first = 10;",
262 " var i;",
263 " switch (first) {",
264 " case 10:",
265 " var hello = 1;",
266 " break;",
267 " }",
268 "}"
269 ].join("\n"),
270 errors: [error]
271 },
272 {
273 code: [
274 "function foo() {",
275 " var first = 10;",
276 " var i;",
277 " try {",
278 " var hello = 1;",
279 " } catch (e) {",
280 " alert('error');",
281 " }",
282 "}"
283 ].join("\n"),
284 errors: [error]
285 },
286 {
287 code: [
288 "function foo() {",
289 " var first = 10;",
290 " var i;",
291 " try {",
292 " asdf;",
293 " } catch (e) {",
294 " var hello = 1;",
295 " }",
296 "}"
297 ].join("\n"),
298 errors: [error]
299 },
300 {
301 code: [
302 "function foo() {",
303 " var first = 10;",
304 " while (first) {",
305 " var hello = 1;",
306 " }",
307 "}"
308 ].join("\n"),
309 errors: [error]
310 },
311 {
312 code: [
313 "function foo() {",
314 " var first = 10;",
315 " do {",
316 " var hello = 1;",
317 " } while (first == 10);",
318 "}"
319 ].join("\n"),
320 errors: [error]
321 },
322 {
323 code: [
324 "function foo() {",
325 " var first = [1,2,3];",
326 " for (var item in first) {",
327 " item++;",
328 " }",
329 "}"
330 ].join("\n"),
331 errors: [error]
332 },
333 {
334 code: [
335 "function foo() {",
336 " var first = [1,2,3];",
337 " var item;",
338 " for (item in first) {",
339 " var hello = item;",
340 " }",
341 "}"
342 ].join("\n"),
343 errors: [error]
344 },
345 {
346 code: [
347 "var foo = () => {",
348 " var first = [1,2,3];",
349 " var item;",
350 " for (item in first) {",
351 " var hello = item;",
352 " }",
353 "}"
354 ].join("\n"),
355 parserOptions: { ecmaVersion: 6 },
356 errors: [error]
357 },
358 {
359 code: "'use strict'; 0; var x; f();",
360 errors: [error]
361 },
362 {
363 code: "'use strict'; var x; 'directive'; var y; f();",
364 errors: [error]
365 },
366 {
367 code: "function f() { 'use strict'; 0; var x; f(); }",
368 errors: [error]
369 },
370 {
371 code: "function f() { 'use strict'; var x; 'directive'; var y; f(); }",
372 errors: [error]
373 },
374 {
375 code: [
376 "export function f() {}",
377 "var x;"
378 ].join("\n"),
379 parserOptions: {
380 ecmaVersion: 6,
381 sourceType: "module"
382 },
383 errors: [error]
384 },
385 {
386 code: [
387 "var x;",
388 "export function f() {}",
389 "var y;"
390 ].join("\n"),
391 parserOptions: {
392 ecmaVersion: 6,
393 sourceType: "module"
394 },
395 errors: [error]
396 },
397 {
398 code: [
399 "import {foo} from 'foo';",
400 "export {foo};",
401 "var test = 1;"
402 ].join("\n"),
403 parserOptions: {
404 ecmaVersion: 6,
405 sourceType: "module"
406 },
407 errors: [error]
408 },
409 {
410 code: [
411 "export {foo} from 'foo';",
412 "var test = 1;"
413 ].join("\n"),
414 parserOptions: {
415 ecmaVersion: 6,
416 sourceType: "module"
417 },
418 errors: [error]
419 },
420 {
421 code: [
422 "export * from 'foo';",
423 "var test = 1;"
424 ].join("\n"),
425 parserOptions: {
426 ecmaVersion: 6,
427 sourceType: "module"
428 },
429 errors: [error]
430 }
431 ]
432 });