test262/test/built-ins/Promise/race/resolved-sequence.js
Mike Pennisi c44cee291a Assert array equivalency
The `compareArray` utility function returns a boolean value describing
whether or not the input arrays are equivalent--it does not throw an
exception when invoked with non-equivalent arrays. Prior to this commit,
however, two tests invoked `compareArray` without inspecting its return
value, so it had no impact on the result of the test.

Update the tests to fail when the "expected" and "actual" arrays are not
equivalent.
2021-10-04 15:38:08 -04:00

52 lines
1.7 KiB
JavaScript

// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-promise.race
description: Resolution ticks are set in a predictable sequence
info: |
PerformPromiseRace
Repeat,
Let next be IteratorStep(iteratorRecord).
If next is an abrupt completion, set iteratorRecord.[[Done]] to true.
ReturnIfAbrupt(next).
If next is false, then
Set iteratorRecord.[[Done]] to true.
Return resultCapability.[[Promise]].
Let nextValue be IteratorValue(next).
If nextValue is an abrupt completion, set iteratorRecord.[[Done]] to true.
ReturnIfAbrupt(nextValue).
Let nextPromise be ? Call(promiseResolve, constructor, « nextValue »).
Perform ? Invoke(nextPromise, "then", « resultCapability.[[Resolve]], resultCapability.[[Reject]] »).
flags: [async]
includes: [compareArray.js,promiseHelper.js]
---*/
let a = new Promise(resolve => resolve('a'));
let b = new Promise(resolve => resolve('b'));
let sequence = [1];
Promise.all([
a.then(() => {
sequence.push(3);
assert.sameValue(sequence.length, 3);
return checkSequence(sequence, 'Expected to be called first.');
}),
Promise.race([a, b]).then(() => {
sequence.push(5);
assert.sameValue(sequence.length, 5);
return checkSequence(sequence, 'Expected to be called third.');
}),
b.then(() => {
sequence.push(4);
assert.sameValue(sequence.length, 4);
return checkSequence(sequence, 'Expected to be called second.');
})
]).then(result => {
assert.compareArray(result, [true, true, true]);
assert.sameValue(sequence.length, 5);
checkSequence(sequence)
}).then($DONE, $DONE);
sequence.push(2);