tor-browser

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

for-in-with-destructuring-assignments.js (3343B)


      1 /*
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/licenses/publicdomain/
      4 */
      5 
      6 var gTestfile = "for-in-with-destructuring-assignments.js";
      7 var BUGNUMBER = 1164741;
      8 var summary = "|for (var <pat> = ... in ...)| is invalid syntax";
      9 
     10 print(BUGNUMBER + ": " + summary);
     11 
     12 /**************
     13 * BEGIN TEST *
     14 **************/
     15 
     16 // This is a total grab-bag of junk originally in tests changed when this
     17 // syntax was removed.  Avert your eyes!
     18 
     19 assertThrowsInstanceOf(() => eval(`
     20   for (var [x] = x>>x in [[]<[]])
     21   {
     22     [];
     23   }`),
     24 SyntaxError);
     25 
     26 /******************************************************************************/
     27 
     28 assertThrowsInstanceOf(function() {
     29  // Abandon all hope, ye who try to read this.
     30  eval(`
     31    (function () {
     32      for
     33      (var [x] = function(){}
     34       in
     35       (function m(a) {
     36         if (a < 1) {
     37           x;
     38           return;
     39         }
     40         return m(a - 1) + m(a - 2);
     41       })(7)(eval(""))
     42      )
     43      {
     44        [];
     45      }
     46    })
     47  `)();
     48 }, SyntaxError);
     49 
     50 /******************************************************************************/
     51 
     52 assertThrowsInstanceOf(() => eval(`
     53  for (var [e] = [] in (eval("for (b = 0; b < 6; ++b) gc()"))) {}
     54 `), SyntaxError);
     55 
     56 /******************************************************************************/
     57 
     58 assertThrowsInstanceOf(() => eval("for (var [ v , c ] = 0 in undefined) { }"),
     59                       SyntaxError);
     60 
     61 /******************************************************************************/
     62 
     63 assertThrowsInstanceOf(() => eval("var b = e; for (var [e] = b in w) c"),
     64                       SyntaxError);
     65 
     66 /******************************************************************************/
     67 
     68 assertThrowsInstanceOf(() => eval("for (var {a: []} = 2 in []) { }"),
     69                       SyntaxError);
     70 
     71 /******************************************************************************/
     72 
     73 assertThrowsInstanceOf(() => eval(`try
     74  {
     75    for (var [,{y}] = 1 in []) {}
     76  }
     77  catch(ex)
     78  {
     79  }`),
     80 SyntaxError);
     81 
     82 /******************************************************************************/
     83 
     84 assertThrowsInstanceOf(() => eval("for (var [x] = [] in null);"),
     85                       SyntaxError);
     86 
     87 /******************************************************************************/
     88 
     89 assertThrowsInstanceOf(() => eval("for (var [x] = x in y) var x;"),
     90                       SyntaxError);
     91 
     92 /******************************************************************************/
     93 
     94 assertThrowsInstanceOf(() => eval(`
     95  for (var [arguments] = ({ get y(){} }) in y ) (x);
     96 `),
     97 SyntaxError);
     98 
     99 /******************************************************************************/
    100 
    101 if (typeof evalcx == 'function') {
    102  var src = 'try {\n' +
    103  '    for (var [e] = /x/ in d) {\n' +
    104  '        (function () {});\n' +
    105  '    }\n' +
    106  '} catch (e) {}\n' +
    107  'try {\n' +
    108  '    let(x = Object.freeze(this, /x/))\n' +
    109  '    e = {}.toString\n' +
    110  '    function y() {}\n' +
    111  '} catch (e) {}';
    112 
    113  try
    114  {
    115    evalcx(src);
    116    throw new Error("didn't throw");
    117  }
    118  catch (e)
    119  {
    120    assertEq(e.name === "SyntaxError", true,
    121             "expected invalid syntax, got " + e);
    122  }
    123 }
    124 
    125 /******************************************************************************/
    126 
    127 if (typeof reportCompare === "function")
    128  reportCompare(true, true);
    129 
    130 print("Tests complete");