// Copyright (C) 2015 André Bargull. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-promise.all description: > Throws a TypeError if capabilities executor already called with non-undefined values. info: | Promise.all ( iterable ) ... 6. Let promiseCapability be NewPromiseCapability(C). 7. ReturnIfAbrupt(promiseCapability). ... GetCapabilitiesExecutor Functions ... 3. If promiseCapability.[[Resolve]] is not undefined, throw a TypeError exception. 4. If promiseCapability.[[Reject]] is not undefined, throw a TypeError exception. 5. Set promiseCapability.[[Resolve]] to resolve. 6. Set promiseCapability.[[Reject]] to reject. ... PerformPromiseAll ( iteratorRecord, constructor, resultCapability ) ... 1. Let promiseResolve be ? Get(constructor, `"resolve"`). 1. If IsCallable(promiseResolve) is *false*, throw a *TypeError* exception. ... ---*/ var checkPoint = ""; function fn1(executor) { checkPoint += "a"; executor(); checkPoint += "b"; executor(function() {}, function() {}); checkPoint += "c"; } fn1.resolve = function() {}; Promise.all.call(fn1, []); assert.sameValue(checkPoint, "abc", "executor initially called with no arguments"); checkPoint = ""; function fn2(executor) { checkPoint += "a"; executor(undefined, undefined); checkPoint += "b"; executor(function() {}, function() {}); checkPoint += "c"; } fn2.resolve = function() {}; Promise.all.call(fn2, []); assert.sameValue(checkPoint, "abc", "executor initially called with (undefined, undefined)"); checkPoint = ""; function fn3(executor) { checkPoint += "a"; executor(undefined, function() {}); checkPoint += "b"; executor(function() {}, function() {}); checkPoint += "c"; } Object.defineProperty(fn3, 'resolve', { get() { throw new Test262Error; } }); assert.throws(TypeError, function() { Promise.all.call(fn3, []); }, "executor initially called with (undefined, function)"); assert.sameValue(checkPoint, "ab", "executor initially called with (undefined, function)"); checkPoint = ""; function fn4(executor) { checkPoint += "a"; executor(function() {}, undefined); checkPoint += "b"; executor(function() {}, function() {}); checkPoint += "c"; } Object.defineProperty(fn4, 'resolve', { get() { throw new Test262Error; } }); assert.throws(TypeError, function() { Promise.all.call(fn4, []); }, "executor initially called with (function, undefined)"); assert.sameValue(checkPoint, "ab", "executor initially called with (function, undefined)"); checkPoint = ""; function fn5(executor) { checkPoint += "a"; executor("invalid value", 123); checkPoint += "b"; executor(function() {}, function() {}); checkPoint += "c"; } Object.defineProperty(fn5, 'resolve', { get() { throw new Test262Error; } }); assert.throws(TypeError, function() { Promise.all.call(fn5, []); }, "executor initially called with (String, Number)"); assert.sameValue(checkPoint, "ab", "executor initially called with (String, Number)"); reportCompare(0, 0);