tor-browser

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

capability-executor-called-twice.js (2909B)


      1 // Copyright (C) 2019 Sergey Rubanov. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-promise.any
      6 description: >
      7  Throws a TypeError if capabilities executor already called with non-undefined values.
      8 info: |
      9  Promise.any ( iterable )
     10 
     11  ...
     12  2. Let promiseCapability be ? NewPromiseCapability(C).
     13  ...
     14 
     15  GetCapabilitiesExecutor Functions
     16 
     17  ...
     18  4. If promiseCapability.[[Resolve]] is not undefined, throw a TypeError exception.
     19  5. If promiseCapability.[[Reject]] is not undefined, throw a TypeError exception.
     20  6. Set promiseCapability.[[Resolve]] to resolve.
     21  7. Set promiseCapability.[[Reject]] to reject.
     22  ...
     23 features: [Promise.any]
     24 ---*/
     25 
     26 var checkPoint = '';
     27 function fn1(executor) {
     28  checkPoint += 'a';
     29  executor();
     30  checkPoint += 'b';
     31  executor(function() {}, function() {});
     32  checkPoint += 'c';
     33 }
     34 fn1.resolve = function() {
     35  throw new Test262Error();
     36 };
     37 Promise.any.call(fn1, []);
     38 assert.sameValue(checkPoint, 'abc', 'executor initially called with no arguments');
     39 
     40 checkPoint = '';
     41 function fn2(executor) {
     42  checkPoint += 'a';
     43  executor(undefined, undefined);
     44  checkPoint += 'b';
     45  executor(function() {}, function() {});
     46  checkPoint += 'c';
     47 }
     48 fn2.resolve = function() {
     49  throw new Test262Error();
     50 };
     51 Promise.any.call(fn2, []);
     52 assert.sameValue(checkPoint, 'abc', 'executor initially called with (undefined, undefined)');
     53 
     54 checkPoint = '';
     55 function fn3(executor) {
     56  checkPoint += 'a';
     57  executor(undefined, function() {});
     58  checkPoint += 'b';
     59  executor(function() {}, function() {});
     60  checkPoint += 'c';
     61 }
     62 Object.defineProperty(fn3, 'resolve', {
     63  get() {
     64    throw new Test262Error();
     65  }
     66 });
     67 assert.throws(TypeError, function() {
     68  Promise.any.call(fn3, []);
     69 }, 'executor initially called with (undefined, function)');
     70 assert.sameValue(checkPoint, 'ab', 'executor initially called with (undefined, function)');
     71 
     72 checkPoint = '';
     73 function fn4(executor) {
     74  checkPoint += 'a';
     75  executor(function() {}, undefined);
     76  checkPoint += 'b';
     77  executor(function() {}, function() {});
     78  checkPoint += 'c';
     79 }
     80 Object.defineProperty(fn4, 'resolve', {
     81  get() {
     82    throw new Test262Error();
     83  }
     84 });
     85 assert.throws(TypeError, function() {
     86  Promise.any.call(fn4, []);
     87 }, 'executor initially called with (function, undefined)');
     88 assert.sameValue(checkPoint, 'ab', 'executor initially called with (function, undefined)');
     89 
     90 checkPoint = '';
     91 function fn5(executor) {
     92  checkPoint += 'a';
     93  executor('invalid value', 123);
     94  checkPoint += 'b';
     95  executor(function() {}, function() {});
     96  checkPoint += 'c';
     97 }
     98 Object.defineProperty(fn5, 'resolve', {
     99  get() {
    100    throw new Test262Error();
    101  }
    102 });
    103 assert.throws(TypeError, function() {
    104  Promise.any.call(fn5, []);
    105 }, 'executor initially called with (String, Number)');
    106 assert.sameValue(checkPoint, 'ab', 'executor initially called with (String, Number)');
    107 
    108 reportCompare(0, 0);