diff --git a/test/built-ins/Promise/reject/capability-invocation-error.js b/test/built-ins/Promise/reject/capability-invocation-error.js new file mode 100644 index 0000000000..0d861f69da --- /dev/null +++ b/test/built-ins/Promise/reject/capability-invocation-error.js @@ -0,0 +1,32 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: Abrupt completion returned by "reject" capability +esid: sec-promise.reject +es6id: 25.4.4.4 +info: | + 1. Let C be the this value. + [...] + 3. Let promiseCapability be ? NewPromiseCapability(C). + 4. Perform ? Call(promiseCapability.[[Reject]], undefined, « r »). + + 25.4.1.5 NewPromiseCapability + [...] + 6. Let promise be Construct(C, «executor»). + 7. ReturnIfAbrupt(promise). +---*/ + +var P = function(executor) { + return new Promise(function() { + executor( + function() {}, + function() { + throw new Test262Error(); + } + ); + }); +}; + +assert.throws(Test262Error, function() { + Promise.reject.call(P); +}); diff --git a/test/built-ins/Promise/reject/capability-invocation.js b/test/built-ins/Promise/reject/capability-invocation.js new file mode 100644 index 0000000000..3a9c6891ab --- /dev/null +++ b/test/built-ins/Promise/reject/capability-invocation.js @@ -0,0 +1,44 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: Invocation of "reject" capability +esid: sec-promise.reject +es6id: 25.4.4.4 +info: | + 1. Let C be the this value. + [...] + 3. Let promiseCapability be ? NewPromiseCapability(C). + 4. Perform ? Call(promiseCapability.[[Reject]], undefined, « r »). + [...] + + 25.4.1.5 NewPromiseCapability + [...] + 6. Let promise be Construct(C, «executor»). + 7. ReturnIfAbrupt(promise). +---*/ + +var expectedThis = (function() { return this; })(); +var resolveCount = 0; +var thisValue, args; +var P = function(executor) { + return new Promise(function() { + executor( + function() { + resolveCount += 1; + }, + function() { + thisValue = this; + args = arguments; + } + ); + }); +}; + +Promise.reject.call(P, 24601); + +assert.sameValue(resolveCount, 0); + +assert.sameValue(thisValue, expectedThis); +assert.sameValue(typeof args, 'object'); +assert.sameValue(args.length, 1); +assert.sameValue(args[0], 24601); diff --git a/test/built-ins/Promise/resolve/capability-invocation-error.js b/test/built-ins/Promise/resolve/capability-invocation-error.js new file mode 100644 index 0000000000..f28dad1bef --- /dev/null +++ b/test/built-ins/Promise/resolve/capability-invocation-error.js @@ -0,0 +1,32 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +description: Abrupt completion returned by "resolve" capability +esid: sec-promise.resolve +es6id: 25.4.4.5 +info: | + 1. Let C be the this value. + [...] + 4. Let promiseCapability be ? NewPromiseCapability(C). + 5. Perform ? Call(promiseCapability.[[Resolve]], undefined, « x »). + + 25.4.1.5 NewPromiseCapability + [...] + 6. Let promise be Construct(C, «executor»). + 7. ReturnIfAbrupt(promise). +---*/ + +var P = function(executor) { + return new Promise(function() { + executor( + function() { + throw new Test262Error(); + }, + function() {} + ); + }); +}; + +assert.throws(Test262Error, function() { + Promise.resolve.call(P); +}); diff --git a/test/built-ins/Promise/resolve/resolve-from-promise-capability.js b/test/built-ins/Promise/resolve/resolve-from-promise-capability.js index 1a8ddd487a..6eff5fb3a4 100755 --- a/test/built-ins/Promise/resolve/resolve-from-promise-capability.js +++ b/test/built-ins/Promise/resolve/resolve-from-promise-capability.js @@ -16,16 +16,23 @@ info: > ... ---*/ +var expectedThisValue = (function() { return this; }()); var callCount = 0; var object = {}; +var thisValue, args; Promise.resolve.call(function(executor) { function resolve(v) { callCount += 1; - assert.sameValue(v, object); + 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);