]> git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/no-unused-expressions.js
first commit
[pve-eslint.git] / eslint / tests / lib / rules / no-unused-expressions.js
1 /**
2 * @fileoverview Tests for no-unused-expressions rule.
3 * @author Michael Ficarra
4 */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Requirements
10 //------------------------------------------------------------------------------
11
12 const rule = require("../../../lib/rules/no-unused-expressions"),
13 { RuleTester } = require("../../../lib/rule-tester");
14
15 //------------------------------------------------------------------------------
16 // Tests
17 //------------------------------------------------------------------------------
18
19 const ruleTester = new RuleTester();
20
21 ruleTester.run("no-unused-expressions", rule, {
22 valid: [
23 "function f(){}",
24 "a = b",
25 "new a",
26 "{}",
27 "f(); g()",
28 "i++",
29 "a()",
30 { code: "a && a()", options: [{ allowShortCircuit: true }] },
31 { code: "a() || (b = c)", options: [{ allowShortCircuit: true }] },
32 { code: "a ? b() : c()", options: [{ allowTernary: true }] },
33 { code: "a ? b() || (c = d) : e()", options: [{ allowShortCircuit: true, allowTernary: true }] },
34 "delete foo.bar",
35 "void new C",
36 "\"use strict\";",
37 "\"directive one\"; \"directive two\"; f();",
38 "function foo() {\"use strict\"; return true; }",
39 { code: "var foo = () => {\"use strict\"; return true; }", parserOptions: { ecmaVersion: 6 } },
40 "function foo() {\"directive one\"; \"directive two\"; f(); }",
41 "function foo() { var foo = \"use strict\"; return true; }",
42 {
43 code: "function* foo(){ yield 0; }",
44 parserOptions: { ecmaVersion: 6 }
45 },
46 {
47 code: "async function foo() { await 5; }",
48 parserOptions: { ecmaVersion: 8 }
49 },
50 {
51 code: "async function foo() { await foo.bar; }",
52 parserOptions: { ecmaVersion: 8 }
53 },
54 {
55 code: "async function foo() { bar && await baz; }",
56 options: [{ allowShortCircuit: true }],
57 parserOptions: { ecmaVersion: 8 }
58 },
59 {
60 code: "async function foo() { foo ? await bar : await baz; }",
61 options: [{ allowTernary: true }],
62 parserOptions: { ecmaVersion: 8 }
63 },
64 {
65 code: "tag`tagged template literal`",
66 options: [{ allowTaggedTemplates: true }],
67 parserOptions: { ecmaVersion: 6 }
68 },
69 {
70 code: "shouldNotBeAffectedByAllowTemplateTagsOption()",
71 options: [{ allowTaggedTemplates: true }],
72 parserOptions: { ecmaVersion: 6 }
73 }
74 ],
75 invalid: [
76 { code: "0", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
77 { code: "a", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
78 { code: "f(), 0", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
79 { code: "{0}", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
80 { code: "[]", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
81 { code: "a && b();", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
82 { code: "a() || false", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
83 { code: "a || (b = c)", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
84 { code: "a ? b() || (c = d) : e", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
85 {
86 code: "`untagged template literal`",
87 parserOptions: { ecmaVersion: 6 },
88 errors: [{ messageId: "unusedExpression" }]
89 },
90 {
91 code: "tag`tagged template literal`",
92 parserOptions: { ecmaVersion: 6 },
93 errors: [{ messageId: "unusedExpression" }]
94 },
95 { code: "a && b()", options: [{ allowTernary: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
96 { code: "a ? b() : c()", options: [{ allowShortCircuit: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
97 { code: "a || b", options: [{ allowShortCircuit: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
98 { code: "a() && b", options: [{ allowShortCircuit: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
99 { code: "a ? b : 0", options: [{ allowTernary: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
100 { code: "a ? b : c()", options: [{ allowTernary: true }], errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
101 { code: "foo.bar;", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
102 { code: "!a", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
103 { code: "+a", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
104 { code: "\"directive one\"; f(); \"directive two\";", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
105 { code: "function foo() {\"directive one\"; f(); \"directive two\"; }", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
106 { code: "if (0) { \"not a directive\"; f(); }", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
107 { code: "function foo() { var foo = true; \"use strict\"; }", errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
108 { code: "var foo = () => { var foo = true; \"use strict\"; }", parserOptions: { ecmaVersion: 6 }, errors: [{ messageId: "unusedExpression", type: "ExpressionStatement" }] },
109 {
110 code: "`untagged template literal`",
111 options: [{ allowTaggedTemplates: true }],
112 parserOptions: { ecmaVersion: 6 },
113 errors: [{ messageId: "unusedExpression" }]
114 },
115 {
116 code: "`untagged template literal`",
117 options: [{ allowTaggedTemplates: false }],
118 parserOptions: { ecmaVersion: 6 },
119 errors: [{ messageId: "unusedExpression" }]
120 },
121 {
122 code: "tag`tagged template literal`",
123 options: [{ allowTaggedTemplates: false }],
124 parserOptions: { ecmaVersion: 6 },
125 errors: [{ messageId: "unusedExpression" }]
126 }
127 ]
128 });