// 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)");
