// 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.5
description: >
  Resolve function is called after Promise constructor returns.
info: |
  Promise.resolve ( x )

  ...
  4. Let promiseCapability be NewPromiseCapability(C).
  5. ReturnIfAbrupt(promiseCapability).
  6. Let resolveResult be Call(promiseCapability.[[Resolve]], undefined, «x»).
  7. ReturnIfAbrupt(resolveResult).
  ...
---*/

var expectedThisValue = (function() {
  return this;
}());
var callCount = 0;
var object = {};
var thisValue, args;

Promise.resolve.call(function(executor) {
  function resolve(v) {
    callCount += 1;
    thisValue = this;
    args = arguments;
  }
  executor(resolve, $ERROR);
  assert.sameValue(callCount, 0, "callCount before returning from constructor");
}, object);

assert.sameValue(callCount, 1, "callCount after call to resolve()");
assert.sameValue(typeof args, "object");
assert.sameValue(args.length, 1);
assert.sameValue(args[0], object);
assert.sameValue(thisValue, expectedThisValue);
