mirror of https://github.com/tc39/test262.git
Add Promise/*/resolve-not-callable-close.js
This commit is contained in:
parent
6a18c27ca1
commit
58dba42939
|
@ -0,0 +1,47 @@
|
|||
// Copyright (C) 2020 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Explicit iterator closing if Promise.resolve is not callable
|
||||
esid: sec-promise.all
|
||||
info: |
|
||||
5. Let result be PerformPromiseAll(iteratorRecord, C, promiseCapability).
|
||||
6. If result is an abrupt completion,
|
||||
a. If iteratorRecord.[[Done]] is false, let result be
|
||||
IteratorClose(iterator, result).
|
||||
b. IfAbruptRejectPromise(result, promiseCapability).
|
||||
|
||||
[...]
|
||||
|
||||
Runtime Semantics: PerformPromiseAll
|
||||
|
||||
[...]
|
||||
5. Let promiseResolve be ? Get(constructor, "resolve").
|
||||
6. If ! IsCallable(promiseResolve) is false, throw a TypeError exception.
|
||||
[...]
|
||||
|
||||
flags: [async]
|
||||
features: [Symbol.iterator, computed-property-names]
|
||||
---*/
|
||||
|
||||
let returnCount = 0;
|
||||
const iter = {
|
||||
[Symbol.iterator]: function() {
|
||||
return {
|
||||
return: function() {
|
||||
returnCount += 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Promise.resolve = "certainly not callable";
|
||||
|
||||
Promise.all(iter).then(() => {
|
||||
$DONE('The promise should be rejected, but was resolved');
|
||||
}, (reason) => {
|
||||
assert(reason instanceof TypeError);
|
||||
}).then($DONE, $DONE);
|
||||
|
||||
assert.sameValue(returnCount, 1);
|
|
@ -0,0 +1,44 @@
|
|||
// Copyright (C) 2020 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Explicit iterator closing if Promise.resolve is not callable
|
||||
esid: sec-promise.allsettled
|
||||
info: |
|
||||
5. Let result be PerformPromiseAllSettled(iteratorRecord, C, promiseCapability).
|
||||
6. If result is an abrupt completion, then
|
||||
a. If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result).
|
||||
b. IfAbruptRejectPromise(result, promiseCapability).
|
||||
|
||||
Runtime Semantics: PerformPromiseAllSettled
|
||||
|
||||
[...]
|
||||
5. Let promiseResolve be ? Get(constructor, "resolve").
|
||||
6. If IsCallable(promiseResolve) is false, throw a TypeError exception.
|
||||
[...]
|
||||
|
||||
flags: [async]
|
||||
features: [Promise.allSettled, Symbol.iterator, computed-property-names]
|
||||
---*/
|
||||
|
||||
let returnCount = 0;
|
||||
const iter = {
|
||||
[Symbol.iterator]: function() {
|
||||
return {
|
||||
return: function() {
|
||||
returnCount += 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Promise.resolve = "certainly not callable";
|
||||
|
||||
Promise.allSettled(iter).then(() => {
|
||||
$DONE('The promise should be rejected, but was resolved');
|
||||
}, (reason) => {
|
||||
assert(reason instanceof TypeError);
|
||||
}).then($DONE, $DONE);
|
||||
|
||||
assert.sameValue(returnCount, 1);
|
|
@ -0,0 +1,44 @@
|
|||
// Copyright (C) 2019 Leo Balter, 2020 Rick Waldron. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Explicit iterator closing if Promise.resolve is not callable
|
||||
esid: sec-promise.any
|
||||
info: |
|
||||
5. Let result be PerformPromiseAny(iteratorRecord, C, promiseCapability).
|
||||
6. If result is an abrupt completion, then
|
||||
a. If iteratorRecord.[[Done]] is false, set result to IteratorClose(iteratorRecord, result).
|
||||
b. IfAbruptRejectPromise(result, promiseCapability).
|
||||
|
||||
Runtime Semantics: PerformPromiseAny
|
||||
|
||||
[...]
|
||||
5. Let promiseResolve be ? Get(constructor, "resolve").
|
||||
6. If ! IsCallable(promiseResolve) is false, throw a TypeError exception.
|
||||
[...]
|
||||
|
||||
flags: [async]
|
||||
features: [Promise.any, Symbol.iterator, computed-property-names]
|
||||
---*/
|
||||
|
||||
let returnCount = 0;
|
||||
const iter = {
|
||||
[Symbol.iterator]: function() {
|
||||
return {
|
||||
return: function() {
|
||||
returnCount += 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Promise.resolve = "certainly not callable";
|
||||
|
||||
Promise.any(iter).then(() => {
|
||||
$DONE('The promise should be rejected, but was resolved');
|
||||
}, (reason) => {
|
||||
assert(reason instanceof TypeError);
|
||||
}).then($DONE, $DONE);
|
||||
|
||||
assert.sameValue(returnCount, 1);
|
|
@ -0,0 +1,47 @@
|
|||
// Copyright (C) 2020 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: >
|
||||
Explicit iterator closing if Promise.resolve is not callable
|
||||
esid: sec-promise.race
|
||||
info: |
|
||||
[...]
|
||||
5. Let result be PerformPromiseRace(iteratorRecord, promiseCapability, C).
|
||||
6. If result is an abrupt completion, then
|
||||
a. If iteratorRecord.[[Done]] is false, let result be
|
||||
IteratorClose(iterator,result).
|
||||
b. IfAbruptRejectPromise(result, promiseCapability).
|
||||
|
||||
|
||||
Runtime Semantics: PerformPromiseRace
|
||||
|
||||
[...]
|
||||
3. Let promiseResolve be ? Get(constructor, "resolve").
|
||||
4. If ! IsCallable(promiseResolve) is false, throw a TypeError exception.
|
||||
[...]
|
||||
|
||||
flags: [async]
|
||||
features: [Symbol.iterator, computed-property-names]
|
||||
---*/
|
||||
|
||||
let returnCount = 0;
|
||||
const iter = {
|
||||
[Symbol.iterator]: function() {
|
||||
return {
|
||||
return: function() {
|
||||
returnCount += 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Promise.resolve = "certainly not callable";
|
||||
|
||||
Promise.race(iter).then(() => {
|
||||
$DONE('The promise should be rejected, but was resolved');
|
||||
}, (reason) => {
|
||||
assert(reason instanceof TypeError);
|
||||
}).then($DONE, $DONE);
|
||||
|
||||
assert.sameValue(returnCount, 1);
|
Loading…
Reference in New Issue