tor-browser

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

destructuring-order.js (2914B)


      1 /* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 //-----------------------------------------------------------------------------
      7 var summary = "Order of destructuring, destructuring in the presence of " +
      8  "exceptions";
      9 var actual, expect;
     10 
     11 printStatus(summary);
     12 
     13 /**************
     14 * BEGIN TEST *
     15 **************/
     16 
     17 var failed = false;
     18 
     19 
     20 var a = "FAILED", b = "PASSED";
     21 
     22 function exceptObj()
     23 {
     24  return { get b() { throw "PASSED"; }, a: "PASSED" };
     25 }
     26 
     27 function partialEvalObj()
     28 {
     29  try
     30  {
     31    ({a:a, b:b} = exceptObj());
     32    throw "FAILED";
     33  }
     34  catch (ex)
     35  {
     36    if (ex !== "PASSED")
     37      throw "bad exception thrown: " + ex;
     38  }
     39 }
     40 
     41 
     42 var c = "FAILED", d = "FAILED", e = "PASSED", f = "PASSED";
     43 
     44 function exceptArr()
     45 {
     46  return ["PASSED", {e: "PASSED", get f() { throw "PASSED"; }}, "FAILED"];
     47 }
     48 
     49 function partialEvalArr()
     50 {
     51  try
     52  {
     53    [c, {e: d, f: e}, f] = exceptArr();
     54    throw "FAILED";
     55  }
     56  catch (ex)
     57  {
     58    if (ex !== "PASSED")
     59      throw "bad exception thrown: " + ex;
     60  }
     61 }
     62 
     63 
     64 var g = "FAILED", h = "FAILED", i = "FAILED", j = "FAILED", k = "FAILED";
     65 var _g = "PASSED", _h = "FAILED", _i = "FAILED", _j = "FAILED", _k = "FAILED";
     66 var order = [];
     67 
     68 function objWithGetters()
     69 {
     70  return {
     71    get j()
     72    {
     73      var rv = _j;
     74      _g = _h = _i = _j = "FAILED";
     75      _k = "PASSED";
     76      order.push("j");
     77      return rv;
     78    },
     79      get g()
     80      {
     81 var rv = _g;
     82 _g = _i = _j = _k = "FAILED";
     83 _h = "PASSED";
     84 order.push("g");
     85 return rv;
     86      },
     87 get i()
     88 {
     89   var rv = _i;
     90   _g = _h = _i = _k = "FAILED";
     91   _j = "PASSED";
     92   order.push("i");
     93   return rv;
     94 },
     95   get k()
     96   {
     97     var rv = _k;
     98     _g = _h = _i = _j = _k = "FAILED";
     99     order.push("k");
    100     return rv;
    101   },
    102     get h()
    103     {
    104       var rv = _h;
    105       _g = _h = _j = _k = "FAILED";
    106       _i = "PASSED";
    107       order.push("h");
    108       return rv;
    109     }
    110  };
    111 }
    112 
    113 function partialEvalObj2()
    114 {
    115  ({g: g, h: h, i: i, j: j, k: k} = objWithGetters());
    116 }
    117 
    118 try
    119 {
    120  partialEvalObj();
    121  if (a !== "PASSED" || b !== "PASSED")
    122    throw "FAILED: lhs not mutated correctly during destructuring!\n" +
    123      "a == " + a + ", b == " + b;
    124 
    125  partialEvalObj2();
    126  if (g !== "PASSED" ||
    127      h !== "PASSED" ||
    128      i !== "PASSED" ||
    129      j !== "PASSED" ||
    130      k !== "PASSED")
    131    throw "FAILED: order of property accesses wrong!\n" +
    132      "order == " + order;
    133 
    134  partialEvalArr();
    135  if (c !== "PASSED" || d !== "PASSED" || e !== "PASSED")
    136    throw "FAILED: lhs not mutated correctly during destructuring!\n" +
    137      "c == " + c +
    138      ", d == " + d +
    139      ", e == " + e +
    140      ", f == " + f ;
    141 }
    142 catch (ex)
    143 {
    144  failed = ex;
    145 }
    146 
    147 expect = false;
    148 actual = failed;
    149 
    150 reportCompare(expect, actual, summary);