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