// Tests
//------------------------------------------------------------------------------
-const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2021 } });
ruleTester.run("no-constant-condition", rule, {
valid: [
"if(a);",
"if(a == 0);",
"if(a = f());",
+ "if(a += 1);",
+ "if(a |= 1);",
+ "if(a |= true);",
+ "if(a |= false);",
+ "if(a &= 1);",
+ "if(a &= true);",
+ "if(a &= false);",
+ "if(a >>= 1);",
+ "if(a >>= true);",
+ "if(a >>= false);",
+ "if(a >>>= 1);",
+ "if(a ??= 1);",
+ "if(a ??= true);",
+ "if(a ??= false);",
+ "if(a ||= b);",
+ "if(a ||= false);",
+ "if(a ||= 0);",
+ "if(a ||= void 0);",
+ "if(+(a ||= 1));",
+ "if(f(a ||= true));",
+ "if((a ||= 1) + 2);",
+ "if(1 + (a ||= true));",
+ "if(a ||= '' || false);",
+ "if(a ||= void 0 || null);",
+ "if((a ||= false) || b);",
+ "if(a || (b ||= false));",
+ "if((a ||= true) && b);",
+ "if(a && (b ||= true));",
+ "if(a &&= b);",
+ "if(a &&= true);",
+ "if(a &&= 1);",
+ "if(a &&= 'foo');",
+ "if((a &&= '') + false);",
+ "if('' + (a &&= null));",
+ "if(a &&= 1 && 2);",
+ "if((a &&= true) && b);",
+ "if(a && (b &&= true));",
+ "if((a &&= false) || b);",
+ "if(a || (b &&= false));",
+ "if(a ||= b ||= false);",
+ "if(a &&= b &&= true);",
+ "if(a ||= b &&= false);",
+ "if(a ||= b &&= true);",
+ "if(a &&= b ||= false);",
+ "if(a &&= b ||= true);",
"if(1, a);",
"if ('every' in []);",
"if (`\\\n${a}`) {}",
"if (`foo${a}` === 'fooa');",
"if (tag`a`);",
"if (tag`${a}`);",
+ "if (+(a || true));",
+ "if (-(a || true));",
+ "if (~(a || 1));",
+ "if (+(a && 0) === +(b && 0));",
"while(~!a);",
"while(a = b);",
"while(`${a}`);",
{ code: "if(`foo${0 || 1}`);", errors: [{ messageId: "unexpected", type: "TemplateLiteral" }] },
{ code: "if(`foo${bar}`);", errors: [{ messageId: "unexpected", type: "TemplateLiteral" }] },
{ code: "if(`${bar}foo`);", errors: [{ messageId: "unexpected", type: "TemplateLiteral" }] },
-
+ { code: "if(!(true || a));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(!(a && void b && c));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(0 || !(a && null));", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if(1 + !(a || true));", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(!(null && a) > 1);", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(+(!(a && 0)));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(!typeof a === 'string');", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(-('foo' || a));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(+(void a && b) === ~(1 || c));", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(a ||= true);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a ||= 5);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a ||= 'foo' || b);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a ||= b || /regex/);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a ||= b ||= true);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a ||= b ||= c || 1);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(!(a ||= true));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(!(a ||= 'foo') === true);", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(!(a ||= 'foo') === false);", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(a || (b ||= true));", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if((a ||= 1) || b);", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if((a ||= true) && true);", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if(true && (a ||= true));", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if(a &&= false);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= null);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= void b);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= 0 && b);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= b && '');", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= b &&= false);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(a &&= b &&= c && false);", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] },
+ { code: "if(!(a &&= false));", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },
+ { code: "if(!(a &&= 0) + 1);", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] },
+ { code: "if(a && (b &&= false));", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if((a &&= null) && b);", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if(false || (a &&= false));", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
+ { code: "if((a &&= false) || false);", errors: [{ messageId: "unexpected", type: "LogicalExpression" }] },
{ code: "while([]);", errors: [{ messageId: "unexpected", type: "ArrayExpression" }] },
{ code: "while(~!0);", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] },