tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

for-in-with-assignment-syntax.js (2390B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const validSyntax = [
      6    "var x",
      7 ];
      8 
      9 const destructuring = [
     10    "[]",
     11    "[,]",
     12    "[a]",
     13    "[a = 0]",
     14    "[...a]",
     15    "[...[]]",
     16    "[...[a]]",
     17    "{}",
     18    "{p: x}",
     19    "{p: x = 0}",
     20    "{x}",
     21    "{x = 0}",
     22 ];
     23 
     24 const invalidSyntax = [
     25    ...destructuring.map(binding => `var ${binding}`),
     26    "let x",
     27    ...destructuring.map(binding => `let ${binding}`),
     28    "const x",
     29    ...destructuring.map(binding => `const ${binding}`),
     30    "x",
     31    ...destructuring.map(binding => `${binding}`),
     32    "o.p",
     33    "o[0]",
     34    "f()",
     35 ];
     36 
     37 for (let valid of validSyntax) {
     38    Function(`for (${valid} = 0 in {});`);
     39    assertThrowsInstanceOf(() => Function(`"use strict"; for (${valid} = 0 in {});`),
     40                           SyntaxError);
     41 }
     42 
     43 for (let invalid of invalidSyntax) {
     44    assertThrowsInstanceOf(() => Function(`for (${invalid} = 0 in {});`), SyntaxError);
     45 }
     46 
     47 // Invalid syntax, needs method context to parse.
     48 assertThrowsInstanceOf(() => Function(`({ m() { for (super.p = 0 in {}); } })`), SyntaxError);
     49 assertThrowsInstanceOf(() => Function(`({ m() { for (super[0] = 0 in {}); } })`), SyntaxError);
     50 
     51 assertThrowsInstanceOf(() => Function(`for (0 = 0 in {});`), SyntaxError);
     52 assertThrowsInstanceOf(() => Function(`for (i++ = 0 in {});`), SyntaxError);
     53 assertThrowsInstanceOf(() => Function(`for (new F() = 0 in {});`), SyntaxError);
     54 assertThrowsInstanceOf(() => Function(`function f() { for (new.target = 0 in {}); }`), SyntaxError);
     55 assertThrowsInstanceOf(() => Function(`class C extends D { constructor() { for (super() = 0 in {}); } }`), SyntaxError);
     56 
     57 // Same as above, only this time don't make it look like we actually parse a for-in statement.
     58 assertThrowsInstanceOf(() => Function(`for (0 = 0 #####`), SyntaxError);
     59 assertThrowsInstanceOf(() => Function(`for (i++ = 0 #####`), SyntaxError);
     60 assertThrowsInstanceOf(() => Function(`for (new F() = 0 #####`), SyntaxError);
     61 assertThrowsInstanceOf(() => Function(`function f() { for (new.target = 0 #####`), SyntaxError);
     62 assertThrowsInstanceOf(() => Function(`class C extends D { constructor() { for (super() = 0 #####`), SyntaxError);
     63 
     64 
     65 if (typeof reportCompare === "function")
     66    reportCompare(true, true);