tor-browser

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

invoke-then.js (1646B)


      1 // Copyright (C) 2019 Leo Balter. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 description: >
      6  Invocation of the instance's `then` method
      7 esid: sec-promise.allsettled
      8 info: |
      9  6. Let result be PerformPromiseAllSettled(iteratorRecord, C, promiseCapability).
     10  7. If result is an abrupt completion, then
     11    a. If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result).
     12    b. IfAbruptRejectPromise(result, promiseCapability).
     13 
     14  Runtime Semantics: PerformPromiseAllSettled
     15 
     16  z. Perform ? Invoke(nextPromise, "then", « resolveElement, rejectElement »).
     17 features: [Promise.allSettled]
     18 ---*/
     19 
     20 var p1 = new Promise(function() {});
     21 var p2 = new Promise(function() {});
     22 var p3 = new Promise(function() {});
     23 var callCount = 0;
     24 var currentThis = p1;
     25 var nextThis = p2;
     26 var afterNextThis = p3;
     27 
     28 p1.then = p2.then = p3.then = function(a, b) {
     29  assert.sameValue(typeof a, 'function', 'type of first argument');
     30  assert.sameValue(
     31    a.length,
     32    1,
     33    'The length property of a promise resolve function is 1.'
     34  );
     35  assert.sameValue(typeof b, 'function', 'type of second argument');
     36  assert.sameValue(
     37    b.length,
     38    1,
     39    'The length property of a promise reject function is 1.'
     40  );
     41  assert.sameValue(arguments.length, 2, '`then` invoked with two arguments');
     42  assert.sameValue(this, currentThis, '`this` value');
     43 
     44  currentThis = nextThis;
     45  nextThis = afterNextThis;
     46  afterNextThis = null;
     47 
     48  callCount += 1;
     49 };
     50 
     51 Promise.allSettled([p1, p2, p3]);
     52 
     53 assert.sameValue(callCount, 3, '`then` invoked once for every iterated value');
     54 
     55 reportCompare(0, 0);