summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js')
-rw-r--r--js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js b/js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js
new file mode 100644
index 0000000000..cc3df69a44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Promise/any/capability-executor-not-callable.js
@@ -0,0 +1,109 @@
+// Copyright (C) 2019 Sergey Rubanov. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-promise.any
+description: >
+ Throws a TypeError if either resolve or reject capability is not callable.
+info: |
+ Promise.any ( iterable )
+
+ ...
+ 2. Let promiseCapability be ? NewPromiseCapability(C).
+ ...
+
+ NewPromiseCapability ( C )
+
+ ...
+ 5. Let executor be ! CreateBuiltinFunction(steps, « [[Capability]] »).
+ 6. Set executor.[[Capability]] to promiseCapability.
+ 7. Let promise be ? Construct(C, « executor »).
+ 8. If IsCallable(promiseCapability.[[Resolve]]) is false, throw a TypeError exception.
+ 9. If IsCallable(promiseCapability.[[Reject]]) is false, throw a TypeError exception.
+ ...
+features: [Promise.any]
+---*/
+
+var checkPoint = '';
+function fn1(executor) {
+ checkPoint += 'a';
+}
+Object.defineProperty(fn1, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn1, []);
+}, 'executor not called at all');
+assert.sameValue(checkPoint, 'a', 'executor not called at all');
+
+checkPoint = '';
+function fn2(executor) {
+ checkPoint += 'a';
+ executor();
+ checkPoint += 'b';
+}
+Object.defineProperty(fn2, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn2, []);
+}, 'executor called with no arguments');
+assert.sameValue(checkPoint, 'ab', 'executor called with no arguments');
+
+checkPoint = '';
+function fn3(executor) {
+ checkPoint += 'a';
+ executor(undefined, undefined);
+ checkPoint += 'b';
+}
+Object.defineProperty(fn3, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn3, []);
+}, 'executor called with (undefined, undefined)');
+assert.sameValue(checkPoint, 'ab', 'executor called with (undefined, undefined)');
+
+checkPoint = '';
+function fn4(executor) {
+ checkPoint += 'a';
+ executor(undefined, function() {});
+ checkPoint += 'b';
+}
+Object.defineProperty(fn4, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn4, []);
+}, 'executor called with (undefined, function)');
+assert.sameValue(checkPoint, 'ab', 'executor called with (undefined, function)');
+
+checkPoint = '';
+function fn5(executor) {
+ checkPoint += 'a';
+ executor(function() {}, undefined);
+ checkPoint += 'b';
+}
+Object.defineProperty(fn5, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn5, []);
+}, 'executor called with (function, undefined)');
+assert.sameValue(checkPoint, 'ab', 'executor called with (function, undefined)');
+
+checkPoint = '';
+function fn6(executor) {
+ checkPoint += 'a';
+ executor(123, 'invalid value');
+ checkPoint += 'b';
+}
+Object.defineProperty(fn6, 'resolve', {
+ get() { throw new Test262Error(); }
+});
+assert.throws(TypeError, function() {
+ Promise.any.call(fn6, []);
+}, 'executor called with (Number, String)');
+assert.sameValue(checkPoint, 'ab', 'executor called with (Number, String)');
+
+reportCompare(0, 0);