diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js')
-rw-r--r-- | js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js b/js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js new file mode 100644 index 0000000000..f51b3406f1 --- /dev/null +++ b/js/src/tests/test262/built-ins/Promise/allSettled/resolve-from-same-thenable.js @@ -0,0 +1,91 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performpromiseallsettled +description: > + Cannot tamper remainingElementsCount when Promise.allSettled resolve element function is called multiple times. +info: | + Runtime Semantics: PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability ) + + 4. Let remainingElementsCount be a new Record { [[Value]]: 1 }. + ... + 6.d ... + ii. Set remainingElementsCount.[[value]] to remainingElementsCount.[[value]] − 1. + iii. If remainingElementsCount.[[value]] is 0, then + 1. Let valuesArray be CreateArrayFromList(values). + 2. Perform ? Call(resultCapability.[[Resolve]], undefined, « valuesArray »). + ... + + Promise.allSettled Resolve Element Functions + + 2. Let alreadyCalled be F.[[AlreadyCalled]]. + 3. If alreadyCalled.[[Value]] is true, return undefined. + 4. Set alreadyCalled.[[Value]] to true. + ... +includes: [promiseHelper.js] +features: [Promise.allSettled] +---*/ + +var callCount = 0; + +function Constructor(executor) { + function resolve(values) { + callCount += 1; + checkSettledPromises(values, [ + { + status: 'fulfilled', + value: 'p1-fulfill' + }, + { + status: 'fulfilled', + value: 'p2-fulfill' + }, + { + status: 'fulfilled', + value: 'p3-fulfill' + } + ], 'values'); + } + executor(resolve, Test262Error.thrower); +} +Constructor.resolve = function(v) { + return v; +}; + +var p1OnFulfilled, p2OnFulfilled, p3OnFulfilled; + +var p1 = { + then(onFulfilled, onRejected) { + p1OnFulfilled = onFulfilled; + } +}; +var p2 = { + then(onFulfilled, onRejected) { + p2OnFulfilled = onFulfilled; + } +}; +var p3 = { + then(onFulfilled, onRejected) { + p3OnFulfilled = onFulfilled; + } +}; + +assert.sameValue(callCount, 0, 'callCount before call to allSettled()'); + +Promise.allSettled.call(Constructor, [p1, p2, p3]); + +assert.sameValue(callCount, 0, 'callCount after call to allSettled()'); + +p1OnFulfilled('p1-fulfill'); +p1OnFulfilled('p1-fulfill-unexpected-1'); +p1OnFulfilled('p1-fulfill-unexpected-2'); + +assert.sameValue(callCount, 0, 'callCount after resolving p1'); + +p2OnFulfilled('p2-fulfill'); +p3OnFulfilled('p3-fulfill'); + +assert.sameValue(callCount, 1, 'callCount after resolving all elements'); + +reportCompare(0, 0); |