tor-browser

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

reject-element-function-multiple-calls.js (1463B)


      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-performpromiseallsettled
      6 description: >
      7  Cannot tamper with remainingElementsCount when Promise.allSettled reject element function is called multiple times.
      8 info: |
      9  Runtime Semantics: PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, )
     10 
     11  If alreadyCalled.[[Value]] is true, return undefined.
     12 
     13 features: [Promise.allSettled]
     14 ---*/
     15 
     16 let rejectCallCount = 0;
     17 let returnValue = {};
     18 let error = new Test262Error();
     19 
     20 function Constructor(executor) {
     21  function reject(value) {
     22    assert.sameValue(value, error);
     23    rejectCallCount += 1;
     24    return returnValue;
     25  }
     26  executor(() => {throw error}, reject);
     27 }
     28 Constructor.resolve = function(v) {
     29  return v;
     30 };
     31 Constructor.reject = function(v) {
     32  return v;
     33 };
     34 
     35 let pOnRejected;
     36 
     37 let p = {
     38  then(onResolved, onRejected) {
     39    pOnRejected = onRejected;
     40    onResolved();
     41  }
     42 };
     43 
     44 assert.sameValue(rejectCallCount, 0, 'rejectCallCount before call to allSettled()');
     45 
     46 Promise.allSettled.call(Constructor, [p]);
     47 
     48 assert.sameValue(rejectCallCount, 1, 'rejectCallCount after call to allSettled()');
     49 assert.sameValue(pOnRejected(), undefined);
     50 assert.sameValue(rejectCallCount, 1, 'rejectCallCount after call to pOnRejected()');
     51 pOnRejected();
     52 assert.sameValue(rejectCallCount, 1, 'rejectCallCount after call to pOnRejected()');
     53 
     54 
     55 
     56 reportCompare(0, 0);