]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/no-implicit-coercion.js
2 * @fileoverview Tests for no-implicit-coercion rule.
3 * @author Toru Nagashima
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const rule
= require("../../../lib/rules/no-implicit-coercion");
13 const { RuleTester
} = require("../../../lib/rule-tester");
15 //------------------------------------------------------------------------------
17 //------------------------------------------------------------------------------
19 const ruleTester
= new RuleTester();
21 ruleTester
.run("no-implicit-coercion", rule
, {
24 "foo.indexOf(1) !== -1",
40 "1 * parseFloat(foo)",
43 "parseFloat(foo) * 1",
44 "1 * 1234 * 678 * Number(foo)",
45 "1 * 1234 * 678 * parseInt(foo)",
46 "1234 * 1 * 678 * Number(foo)",
47 "1234 * 1 * Number(foo) * Number(bar)",
48 "1234 * 1 * Number(foo) * parseInt(bar)",
49 "1234 * 1 * Number(foo) * parseFloat(bar)",
50 "1234 * 1 * parseInt(foo) * parseFloat(bar)",
51 "1234 * 1 * parseInt(foo) * Number(bar)",
52 "1234 * 1 * parseFloat(foo) * Number(bar)",
53 "1234 * Number(foo) * 1 * Number(bar)",
54 "1234 * parseInt(foo) * 1 * Number(bar)",
55 "1234 * parseFloat(foo) * 1 * parseInt(bar)",
56 "1234 * parseFloat(foo) * 1 * Number(bar)",
61 "1234*1*foo*Number(bar)",
62 "1234*1*Number(foo)*bar",
63 "1234*1*parseInt(foo)*bar",
67 { code
: "foo + `${bar}`", parserOptions
: { ecmaVersion
: 6 } },
69 { code
: "!!foo", options
: [{ boolean: false }] },
70 { code
: "~foo.indexOf(1)", options
: [{ boolean: false }] },
71 { code
: "+foo", options
: [{ number
: false }] },
72 { code
: "1*foo", options
: [{ number
: false }] },
73 { code
: "\"\"+foo", options
: [{ string
: false }] },
74 { code
: "foo += \"\"", options
: [{ string
: false }] },
75 { code
: "var a = !!foo", options
: [{ boolean: true, allow
: ["!!"] }] },
76 { code
: "var a = ~foo.indexOf(1)", options
: [{ boolean: true, allow
: ["~"] }] },
77 { code
: "var a = ~foo", options
: [{ boolean: true }] },
78 { code
: "var a = 1 * foo", options
: [{ boolean: true, allow
: ["*"] }] },
79 { code
: "var a = +foo", options
: [{ boolean: true, allow
: ["+"] }] },
80 { code
: "var a = \"\" + foo", options
: [{ boolean: true, string
: true, allow
: ["+"] }] },
82 // https://github.com/eslint/eslint/issues/7057
84 { code
: "`` + 'foo'", parserOptions
: { ecmaVersion
: 6 } },
85 { code
: "'' + `${foo}`", parserOptions
: { ecmaVersion
: 6 } },
87 { code
: "'foo' + ``", parserOptions
: { ecmaVersion
: 6 } },
88 { code
: "`${foo}` + ''", parserOptions
: { ecmaVersion
: 6 } },
90 { code
: "foo += `${bar}`", parserOptions
: { ecmaVersion
: 6 } },
96 output
: "Boolean(foo)",
98 messageId
: "useRecommendation",
99 data
: { recommendation
: "Boolean(foo)" },
100 type
: "UnaryExpression"
104 code
: "!!(foo + bar)",
105 output
: "Boolean(foo + bar)",
107 messageId
: "useRecommendation",
108 data
: { recommendation
: "Boolean(foo + bar)" },
109 type
: "UnaryExpression"
113 code
: "~foo.indexOf(1)",
116 messageId
: "useRecommendation",
117 data
: { recommendation
: "foo.indexOf(1) !== -1" },
118 type
: "UnaryExpression"
122 code
: "~foo.bar.indexOf(2)",
125 messageId
: "useRecommendation",
126 data
: { recommendation
: "foo.bar.indexOf(2) !== -1" },
127 type
: "UnaryExpression"
132 output
: "Number(foo)",
134 messageId
: "useRecommendation",
135 data
: { recommendation
: "Number(foo)" },
136 type
: "UnaryExpression"
141 output
: "Number(foo.bar)",
143 messageId
: "useRecommendation",
144 data
: { recommendation
: "Number(foo.bar)" },
145 type
: "UnaryExpression"
150 output
: "Number(foo)",
152 messageId
: "useRecommendation",
153 data
: { recommendation
: "Number(foo)" },
154 type
: "BinaryExpression"
159 output
: "Number(foo)",
161 messageId
: "useRecommendation",
162 data
: { recommendation
: "Number(foo)" },
163 type
: "BinaryExpression"
168 output
: "Number(foo.bar)",
170 messageId
: "useRecommendation",
171 data
: { recommendation
: "Number(foo.bar)" },
172 type
: "BinaryExpression"
177 output
: "String(foo)",
179 messageId
: "useRecommendation",
180 data
: { recommendation
: "String(foo)" },
181 type
: "BinaryExpression"
186 output
: "String(foo)",
187 parserOptions
: { ecmaVersion
: 6 },
189 messageId
: "useRecommendation",
190 data
: { recommendation
: "String(foo)" },
191 type
: "BinaryExpression"
196 output
: "String(foo)",
198 messageId
: "useRecommendation",
199 data
: { recommendation
: "String(foo)" },
200 type
: "BinaryExpression"
205 output
: "String(foo)",
206 parserOptions
: { ecmaVersion
: 6 },
208 messageId
: "useRecommendation",
209 data
: { recommendation
: "String(foo)" },
210 type
: "BinaryExpression"
214 code
: "\"\"+foo.bar",
215 output
: "String(foo.bar)",
217 messageId
: "useRecommendation",
218 data
: { recommendation
: "String(foo.bar)" },
219 type
: "BinaryExpression"
224 output
: "String(foo.bar)",
225 parserOptions
: { ecmaVersion
: 6 },
227 messageId
: "useRecommendation",
228 data
: { recommendation
: "String(foo.bar)" },
229 type
: "BinaryExpression"
233 code
: "foo.bar+\"\"",
234 output
: "String(foo.bar)",
236 messageId
: "useRecommendation",
237 data
: { recommendation
: "String(foo.bar)" },
238 type
: "BinaryExpression"
243 output
: "String(foo.bar)",
244 parserOptions
: { ecmaVersion
: 6 },
246 messageId
: "useRecommendation",
247 data
: { recommendation
: "String(foo.bar)" },
248 type
: "BinaryExpression"
253 output
: "foo = String(foo)",
255 messageId
: "useRecommendation",
256 data
: { recommendation
: "foo = String(foo)" },
257 type
: "AssignmentExpression"
262 output
: "foo = String(foo)",
263 parserOptions
: { ecmaVersion
: 6 },
265 messageId
: "useRecommendation",
266 data
: { recommendation
: "foo = String(foo)" },
267 type
: "AssignmentExpression"
271 code
: "var a = !!foo",
272 output
: "var a = Boolean(foo)",
273 options
: [{ boolean: true, allow
: ["~"] }],
275 messageId
: "useRecommendation",
276 data
: { recommendation
: "Boolean(foo)" },
277 type
: "UnaryExpression"
281 code
: "var a = ~foo.indexOf(1)",
283 options
: [{ boolean: true, allow
: ["!!"] }],
285 messageId
: "useRecommendation",
286 data
: { recommendation
: "foo.indexOf(1) !== -1" },
287 type
: "UnaryExpression"
291 code
: "var a = 1 * foo",
292 output
: "var a = Number(foo)",
293 options
: [{ boolean: true, allow
: ["+"] }],
295 messageId
: "useRecommendation",
296 data
: { recommendation
: "Number(foo)" },
297 type
: "BinaryExpression"
301 code
: "var a = +foo",
302 output
: "var a = Number(foo)",
303 options
: [{ boolean: true, allow
: ["*"] }],
305 messageId
: "useRecommendation",
306 data
: { recommendation
: "Number(foo)" },
307 type
: "UnaryExpression"
311 code
: "var a = \"\" + foo",
312 output
: "var a = String(foo)",
313 options
: [{ boolean: true, allow
: ["*"] }],
315 messageId
: "useRecommendation",
316 data
: { recommendation
: "String(foo)" },
317 type
: "BinaryExpression"
321 code
: "var a = `` + foo",
322 output
: "var a = String(foo)",
323 options
: [{ boolean: true, allow
: ["*"] }],
324 parserOptions
: { ecmaVersion
: 6 },
326 messageId
: "useRecommendation",
327 data
: { recommendation
: "String(foo)" },
328 type
: "BinaryExpression"
333 output
: "typeof Number(foo)",
335 messageId
: "useRecommendation",
336 data
: { recommendation
: "Number(foo)" },
337 type
: "UnaryExpression"
342 output
: "typeof Number(foo)",
344 messageId
: "useRecommendation",
345 data
: { recommendation
: "Number(foo)" },
346 type
: "UnaryExpression"
350 code
: "let x ='' + 1n;",
351 output
: "let x =String(1n);",
352 parserOptions
: { ecmaVersion
: 2020 },
354 messageId
: "useRecommendation",
355 data
: { recommendation
: "String(1n)" },
356 type
: "BinaryExpression"
362 code
: "~foo?.indexOf(1)",
364 parserOptions
: { ecmaVersion
: 2020 },
366 messageId
: "useRecommendation",
367 data
: { recommendation
: "foo?.indexOf(1) >= 0" },
368 type
: "UnaryExpression"
372 code
: "~(foo?.indexOf)(1)",
374 parserOptions
: { ecmaVersion
: 2020 },
376 messageId
: "useRecommendation",
377 data
: { recommendation
: "(foo?.indexOf)(1) !== -1" },
378 type
: "UnaryExpression"