tor-browser

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

capability-resolve-throws-reject.js (1447B)


      1 // |reftest| async
      2 // Copyright (C) 2020 Rick Waldron. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 /*---
      5 esid: sec-promise.any
      6 description: >
      7  Iterator is not closed when the "resolve" capability returns an abrupt
      8  completion.
      9 info: |
     10  Let C be the this value.
     11  Let promiseCapability be ? NewPromiseCapability(C).
     12  Let iteratorRecord be GetIterator(iterable).
     13  IfAbruptRejectPromise(iteratorRecord, promiseCapability).
     14  Let result be PerformPromiseAny(iteratorRecord, C, promiseCapability).
     15  If result is an abrupt completion, then
     16    If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result).
     17    IfAbruptRejectPromise(result, promiseCapability).
     18  Return Completion(result).
     19 
     20 features: [Promise.any, Symbol.iterator]
     21 flags: [async]
     22 ---*/
     23 let callCount = 0;
     24 let thrown = new Test262Error();
     25 function P(executor) {
     26  callCount++;
     27  return new Promise((_, reject) => {
     28    callCount++;
     29    executor(() => {
     30      callCount++;
     31      throw thrown;
     32    }, (...args) => {
     33      callCount++;
     34      reject(...args);
     35    });
     36  });
     37 };
     38 P.resolve = Promise.resolve;
     39 
     40 Promise.any.call(P, [1])
     41  .then(() => {
     42    $DONE('Promise incorrectly fulfilled.');
     43  }, (error) => {
     44    // The error was not the result of promise
     45    // resolution, so will not be an AggregateError
     46    assert.sameValue(thrown, error);
     47    assert.sameValue(callCount, 6);
     48  }).then($DONE, $DONE);