// Copyright (C) 2015 André Bargull. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 25.4.4.1.1 description: > Each Promise.all element is called with a new Promise.all Resolve Element function. info: | Runtime Semantics: PerformPromiseAll( iteratorRecord, constructor, resultCapability) ... k. Let resolveElement be a new built-in function object as defined in Promise.all Resolve Element Functions. ... r. Let result be Invoke(nextPromise, "then", «resolveElement, resultCapability.[[Reject]]»). ... ---*/ function resolveFunction() { } function Constructor(executor) { executor(resolveFunction, $ERROR); } Constructor.resolve = function(v) { return v; }; var callCount1 = 0, callCount2 = 0; var p1OnFulfilled; var p1 = { then: function(onFulfilled, onRejected) { callCount1 += 1; p1OnFulfilled = onFulfilled; assert.notSameValue(onFulfilled, resolveFunction, "p1.then"); } }; var p2 = { then: function(onFulfilled, onRejected) { callCount2 += 1; assert.notSameValue(onFulfilled, resolveFunction, "p2.then"); assert.notSameValue(onFulfilled, p1OnFulfilled, "p1.onFulfilled != p2.onFulfilled"); } }; Promise.all.call(Constructor, [p1, p2]); assert.sameValue(callCount1, 1, "p1.then call count"); assert.sameValue(callCount2, 1, "p2.then call count");