tor-browser

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

resolve-from-same-thenable.js (1620B)


      1 // Copyright (C) 2020 Rick Waldron. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-performpromiserace
      6 description: >
      7  Promise.race does not prevent resolve from being called multiple times.
      8 info: |
      9  PerformPromiseRace
     10 
     11  Repeat,
     12    Let next be IteratorStep(iteratorRecord).
     13    If next is an abrupt completion, set iteratorRecord.[[Done]] to true.
     14    ReturnIfAbrupt(next).
     15    If next is false, then
     16      Set iteratorRecord.[[Done]] to true.
     17      Return resultCapability.[[Promise]].
     18    Let nextValue be IteratorValue(next).
     19    If nextValue is an abrupt completion, set iteratorRecord.[[Done]] to true.
     20    ReturnIfAbrupt(nextValue).
     21    Let nextPromise be ? Call(promiseResolve, constructor, « nextValue »).
     22    Perform ? Invoke(nextPromise, "then", « resultCapability.[[Resolve]], resultCapability.[[Reject]] »).
     23 
     24 includes: [promiseHelper.js]
     25 ---*/
     26 
     27 let callCount = 0;
     28 let sequence = [];
     29 
     30 function Constructor(executor) {
     31  function resolve(value) {
     32    callCount += 1;
     33    sequence.push(value);
     34  }
     35  executor(resolve, Test262Error.thrower);
     36 }
     37 Constructor.resolve = function(v) {
     38  return v;
     39 };
     40 
     41 let pResolve;
     42 let a = {
     43  then(resolver, rejector) {
     44    pResolve = resolver;
     45  }
     46 };
     47 
     48 assert.sameValue(callCount, 0, 'callCount before call to race()');
     49 
     50 Promise.race.call(Constructor, [a]);
     51 
     52 assert.sameValue(callCount, 0, 'callCount after call to race()');
     53 
     54 pResolve(1);
     55 pResolve(2);
     56 pResolve(3);
     57 
     58 assert.sameValue(callCount, 3, 'callCount after resolving a');
     59 assert.sameValue(sequence.length, 3);
     60 checkSequence(sequence);
     61 
     62 reportCompare(0, 0);