tor-browser

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

promise-2.js (1649B)


      1 function testOwnConstructorProp() {
      2  let p = Promise.resolve(0);
      3  let c = 0;
      4  Object.defineProperty(p, "constructor", {get() {
      5    c++;
      6    return Promise;
      7  }});
      8  p.then(() => {});
      9  p.then(() => {});
     10  assertEq(c, 2);
     11 }
     12 testOwnConstructorProp();
     13 
     14 function testOtherProtoConstructorProp() {
     15  let p = Promise.resolve(0);
     16  let proto = Object.create(Promise.prototype);
     17  Object.setPrototypeOf(p, proto);
     18  let c = 0;
     19  Object.defineProperty(proto, "constructor", {get() {
     20    c++;
     21    return Promise;
     22  }});
     23  p.then(() => {});
     24  p.then(() => {});
     25  assertEq(c, 2);
     26 }
     27 testOtherProtoConstructorProp();
     28 
     29 function testOwnThenProp() {
     30  let p = new Promise(function() {});
     31  let c = 0;
     32  Object.defineProperty(p, "then", {get() {
     33    c++;
     34    return Promise.prototype.then;
     35  }});
     36  p.catch();
     37  assertEq(c, 1);
     38 }
     39 testOwnThenProp();
     40 
     41 function testOtherProtoThenProp() {
     42  let p = new Promise(function() {});
     43  let proto = Object.create(Promise.prototype);
     44  Object.setPrototypeOf(p, proto);
     45  let c = 0;
     46  Object.defineProperty(proto, "then", {get() {
     47    c++;
     48    return Promise.prototype.then;
     49  }});
     50  p.catch();
     51  assertEq(c, 1);
     52 }
     53 testOtherProtoThenProp();
     54 
     55 // Fuse should still be intact after all that.
     56 assertEq(getFuseState().OptimizePromiseLookupFuse.intact, true);
     57 
     58 function testClobberResolve() {
     59  newGlobal().evaluate(`
     60    let origResolve = Promise.resolve;
     61    let c = 0;
     62    Promise.resolve = function() {
     63      c++;
     64      return origResolve.apply(this, arguments);
     65    };
     66    let p1 = new Promise(function() {});
     67    let p2 = new Promise(function() {});
     68    Promise.all([p1, p2]);
     69    assertEq(c, 2);
     70  `);
     71 }
     72 testClobberResolve();