From e3d48f244af7045671f0144ea076c8d7cc741bb3 Mon Sep 17 00:00:00 2001 From: chicoxyzzy Date: Wed, 27 Nov 2019 23:58:14 +0300 Subject: [PATCH] add Invocation of the instance's `then` method test --- test/built-ins/Promise/any/invoke-then.js | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/built-ins/Promise/any/invoke-then.js diff --git a/test/built-ins/Promise/any/invoke-then.js b/test/built-ins/Promise/any/invoke-then.js new file mode 100644 index 0000000000..57329e5691 --- /dev/null +++ b/test/built-ins/Promise/any/invoke-then.js @@ -0,0 +1,53 @@ +// Copyright (C) 2019 Sergey Rubanov. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Invocation of the instance's `then` method +esid: sec-promise.any +info: | + 5. Let result be PerformPromiseAny(iteratorRecord, C, promiseCapability). + 6. If result is an abrupt completion, then + a. If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result). + b. IfAbruptRejectPromise(result, promiseCapability). + + Runtime Semantics: PerformPromiseAny + + r. Perform ? Invoke(nextPromise, "then", « resultCapability.[[Resolve]], rejectElement »). +features: [Promise.any] +---*/ + +var p1 = new Promise(function() {}); +var p2 = new Promise(function() {}); +var p3 = new Promise(function() {}); +var callCount = 0; +var currentThis = p1; +var nextThis = p2; +var afterNextThis = p3; + +p1.then = p2.then = p3.then = function(a, b) { + assert.sameValue(typeof a, 'function', 'type of first argument'); + assert.sameValue( + a.length, + 1, + 'The length property of a promise resolve function is 1.' + ); + assert.sameValue(typeof b, 'function', 'type of second argument'); + assert.sameValue( + b.length, + 1, + 'The length property of a promise reject function is 1.' + ); + assert.sameValue(arguments.length, 2, '`then` invoked with two arguments'); + assert.sameValue(this, currentThis, '`this` value'); + + currentThis = nextThis; + nextThis = afterNextThis; + afterNextThis = null; + + callCount += 1; +}; + +Promise.any([p1, p2, p3]); + +assert.sameValue(callCount, 3, '`then` invoked once for every iterated value');