]> git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/no-multi-assign.js
first commit
[pve-eslint.git] / eslint / tests / lib / rules / no-multi-assign.js
1 /**
2 * @fileoverview Tests for no-multi-assign rule.
3 * @author Stewart Rand
4 */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Requirements
10 //------------------------------------------------------------------------------
11
12 const rule = require("../../../lib/rules/no-multi-assign"),
13 { RuleTester } = require("../../../lib/rule-tester");
14
15 //------------------------------------------------------------------------------
16 // Fixtures
17 //------------------------------------------------------------------------------
18
19 /**
20 * Returns an error object at the specified line and column
21 * @private
22 * @param {int} line line number
23 * @param {int} column column number
24 * @param {string} type Type of node
25 * @returns {Object} Error object
26 */
27 function errorAt(line, column, type) {
28 return {
29 messageId: "unexpectedChain",
30 type,
31 line,
32 column
33 };
34 }
35
36
37 //------------------------------------------------------------------------------
38 // Tests
39 //------------------------------------------------------------------------------
40
41 const ruleTester = new RuleTester();
42
43 ruleTester.run("no-mutli-assign", rule, {
44 valid: [
45 "var a, b, c,\nd = 0;",
46 "var a = 1; var b = 2; var c = 3;\nvar d = 0;",
47 "var a = 1 + (b === 10 ? 5 : 4);",
48 { code: "const a = 1, b = 2, c = 3;", parserOptions: { ecmaVersion: 6 } },
49 { code: "const a = 1;\nconst b = 2;\n const c = 3;", parserOptions: { ecmaVersion: 6 } },
50 "for(var a = 0, b = 0;;){}",
51 { code: "for(let a = 0, b = 0;;){}", parserOptions: { ecmaVersion: 6 } },
52 { code: "for(const a = 0, b = 0;;){}", parserOptions: { ecmaVersion: 6 } },
53 { code: "export let a, b;", parserOptions: { ecmaVersion: 6, sourceType: "module" } },
54 { code: "export let a,\n b = 0;", parserOptions: { ecmaVersion: 6, sourceType: "module" } }
55 ],
56
57 invalid: [
58 {
59 code: "var a = b = c;",
60 errors: [
61 errorAt(1, 9, "AssignmentExpression")
62 ]
63 },
64 {
65 code: "var a = b = c = d;",
66 errors: [
67 errorAt(1, 9, "AssignmentExpression"),
68 errorAt(1, 13, "AssignmentExpression")
69 ]
70 },
71 {
72 code: "let foo = bar = cee = 100;",
73 parserOptions: { ecmaVersion: 6 },
74 errors: [
75 errorAt(1, 11, "AssignmentExpression"),
76 errorAt(1, 17, "AssignmentExpression")
77 ]
78 },
79 {
80 code: "a=b=c=d=e",
81 errors: [
82 errorAt(1, 3, "AssignmentExpression"),
83 errorAt(1, 5, "AssignmentExpression"),
84 errorAt(1, 7, "AssignmentExpression")
85 ]
86 },
87 {
88 code: "a=b=c",
89 errors: [
90 errorAt(1, 3, "AssignmentExpression")
91 ]
92 },
93
94 {
95 code: "a\n=b\n=c",
96 errors: [
97 errorAt(2, 2, "AssignmentExpression")
98 ]
99 },
100
101 {
102 code: "var a = (b) = (((c)))",
103 errors: [
104 errorAt(1, 9, "AssignmentExpression")
105 ]
106 },
107
108 {
109 code: "var a = ((b)) = (c)",
110 errors: [
111 errorAt(1, 9, "AssignmentExpression")
112 ]
113 },
114
115 {
116 code: "var a = b = ( (c * 12) + 2)",
117 errors: [
118 errorAt(1, 9, "AssignmentExpression")
119 ]
120 },
121
122 {
123 code: "var a =\n((b))\n = (c)",
124 errors: [
125 errorAt(2, 1, "AssignmentExpression")
126 ]
127 },
128
129 {
130 code: "a = b = '=' + c + 'foo';",
131 errors: [
132 errorAt(1, 5, "AssignmentExpression")
133 ]
134 },
135 {
136 code: "a = b = 7 * 12 + 5;",
137 errors: [
138 errorAt(1, 5, "AssignmentExpression")
139 ]
140 }
141 ]
142 });