tor-browser

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

class-field-is-observable-by-proxy.js (1365B)


      1 // Copyright (C) 2019 Caio Lima. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 description: Public class fields initialization calls [[DefineOwnProperty]]
      6 esid: sec-define-field
      7 info: |
      8  DefineField(receiver, fieldRecord)
      9    ...
     10    8. If fieldName is a Private Name,
     11      a. Perform ? PrivateFieldAdd(fieldName, receiver, initValue).
     12    9. Else,
     13      a. Assert: IsPropertyKey(fieldName) is true.
     14      b. Perform ? CreateDataPropertyOrThrow(receiver, fieldName, initValue).
     15    10. Return.
     16 includes: [compareArray.js]
     17 features: [class, class-fields-public, Proxy]
     18 ---*/
     19 
     20 let arr = [];
     21 let expectedTarget = null;
     22 function ProxyBase() {
     23  expectedTarget = this;
     24  return new Proxy(this, {
     25    defineProperty: function (target, key, descriptor) {
     26      arr.push(key);
     27      arr.push(descriptor.value);
     28      arr.push(target);
     29      assert.sameValue(descriptor.enumerable, true);
     30      assert.sameValue(descriptor.configurable, true);
     31      assert.sameValue(descriptor.writable, true);
     32      return Reflect.defineProperty(target, key, descriptor);
     33    }
     34  });
     35 }
     36 
     37 class Test extends ProxyBase {
     38  f = 3;
     39  g = "Test262";
     40 }
     41 
     42 let t = new Test();
     43 assert.sameValue(t.f, 3);
     44 assert.sameValue(t.g, "Test262");
     45 
     46 assert.compareArray(arr, ["f", 3, expectedTarget, "g", "Test262", expectedTarget]);
     47 
     48 reportCompare(0, 0);