tor-browser

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

private-field-destructuring.js (800B)


      1 function assertThrows(fun, errorType) {
      2  try {
      3    fun();
      4    throw 'Expected error, but none was thrown';
      5  } catch (e) {
      6    if (!(e instanceof errorType)) {
      7      throw 'Wrong error type thrown';
      8    }
      9  }
     10 }
     11 
     12 class A {
     13  #a;
     14  #b;
     15  #c;
     16  #d;
     17  #e;
     18  static destructure(o, x) {
     19    [o.#a, o.#b, o.#c, o.#d, ...o.#e] = x;
     20  }
     21 
     22  static get(o) {
     23    return {a: o.#a, b: o.#b, c: o.#c, d: o.#d, e: o.#e};
     24  }
     25 };
     26 
     27 for (var i = 0; i < 1000; i++) {
     28  var a = new A();
     29  A.destructure(a, [1, 2, 3, 4, 5]);
     30  var res = A.get(a);
     31  assertEq(res.a, 1);
     32  assertEq(res.b, 2);
     33  assertEq(res.c, 3);
     34  assertEq(res.d, 4);
     35  assertEq(res.e.length, 1);
     36  assertEq(res.e[0], 5);
     37 
     38  var obj = {};
     39  assertThrows(() => A.destructure(obj, [1, 2, 3, 4, 5]), TypeError);
     40  assertThrows(() => A.get(obj), TypeError);
     41 }