mirror of
https://github.com/tc39/test262.git
synced 2025-06-26 16:54:41 +02:00
Add test when IteratorValue argument to AsyncGeneratorYield in yield* throws
This commit is contained in:
parent
c822f4c929
commit
bb838d8d6b
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright (C) 2019 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-generator-function-definitions-runtime-semantics-evaluation
|
||||||
|
description: >
|
||||||
|
Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is normal.
|
||||||
|
info: |
|
||||||
|
14.4.14 Runtime Semantics: Evaluation
|
||||||
|
YieldExpression : yield* AssignmentExpression
|
||||||
|
|
||||||
|
...
|
||||||
|
7. Repeat,
|
||||||
|
a. If received.[[Type]] is normal, then
|
||||||
|
...
|
||||||
|
vi. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerResult)).
|
||||||
|
...
|
||||||
|
|
||||||
|
flags: [async]
|
||||||
|
features: [async-iteration]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var token = {};
|
||||||
|
|
||||||
|
var asyncIter = {
|
||||||
|
[Symbol.asyncIterator]() {
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
next() {
|
||||||
|
return {
|
||||||
|
done: false,
|
||||||
|
get value() {
|
||||||
|
throw token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async function* f() {
|
||||||
|
var thrown;
|
||||||
|
try {
|
||||||
|
yield* asyncIter;
|
||||||
|
} catch (e) {
|
||||||
|
thrown = e;
|
||||||
|
}
|
||||||
|
return thrown;
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = f();
|
||||||
|
|
||||||
|
iter.next().then(({value}) => {
|
||||||
|
assert.sameValue(value, token);
|
||||||
|
}).then($DONE, $DONE);
|
@ -0,0 +1,63 @@
|
|||||||
|
// Copyright (C) 2019 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-generator-function-definitions-runtime-semantics-evaluation
|
||||||
|
description: >
|
||||||
|
Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is return.
|
||||||
|
info: |
|
||||||
|
14.4.14 Runtime Semantics: Evaluation
|
||||||
|
YieldExpression : yield* AssignmentExpression
|
||||||
|
|
||||||
|
...
|
||||||
|
7. Repeat,
|
||||||
|
...
|
||||||
|
c. Else,
|
||||||
|
i. Assert: received.[[Type]] is return.
|
||||||
|
...
|
||||||
|
ix. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerReturnResult)).
|
||||||
|
...
|
||||||
|
|
||||||
|
flags: [async]
|
||||||
|
features: [async-iteration]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var token = {};
|
||||||
|
|
||||||
|
var asyncIter = {
|
||||||
|
[Symbol.asyncIterator]() {
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
next() {
|
||||||
|
return {
|
||||||
|
done: false,
|
||||||
|
value: undefined,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
return() {
|
||||||
|
return {
|
||||||
|
done: false,
|
||||||
|
get value() {
|
||||||
|
throw token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async function* f() {
|
||||||
|
var thrown;
|
||||||
|
try {
|
||||||
|
yield* asyncIter;
|
||||||
|
} catch (e) {
|
||||||
|
thrown = e;
|
||||||
|
}
|
||||||
|
return thrown;
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = f();
|
||||||
|
|
||||||
|
iter.next().then(() => {
|
||||||
|
iter.return().then(({value}) => {
|
||||||
|
assert.sameValue(value, token);
|
||||||
|
}).then($DONE, $DONE);
|
||||||
|
}).catch($DONE);
|
@ -0,0 +1,64 @@
|
|||||||
|
// Copyright (C) 2019 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-generator-function-definitions-runtime-semantics-evaluation
|
||||||
|
description: >
|
||||||
|
Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is throw.
|
||||||
|
info: |
|
||||||
|
14.4.14 Runtime Semantics: Evaluation
|
||||||
|
YieldExpression : yield* AssignmentExpression
|
||||||
|
|
||||||
|
...
|
||||||
|
7. Repeat,
|
||||||
|
...
|
||||||
|
b. Else if received.[[Type]] is throw, then
|
||||||
|
...
|
||||||
|
ii. If throw is not undefined, then
|
||||||
|
...
|
||||||
|
7. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerResult)).
|
||||||
|
...
|
||||||
|
|
||||||
|
flags: [async]
|
||||||
|
features: [async-iteration]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var token = {};
|
||||||
|
|
||||||
|
var asyncIter = {
|
||||||
|
[Symbol.asyncIterator]() {
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
next() {
|
||||||
|
return {
|
||||||
|
done: false,
|
||||||
|
value: undefined,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
throw() {
|
||||||
|
return {
|
||||||
|
done: false,
|
||||||
|
get value() {
|
||||||
|
throw token;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async function* f() {
|
||||||
|
var thrown;
|
||||||
|
try {
|
||||||
|
yield* asyncIter;
|
||||||
|
} catch (e) {
|
||||||
|
thrown = e;
|
||||||
|
}
|
||||||
|
return thrown;
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = f();
|
||||||
|
|
||||||
|
iter.next().then(() => {
|
||||||
|
iter.throw().then(({value}) => {
|
||||||
|
assert.sameValue(value, token);
|
||||||
|
}).then($DONE, $DONE);
|
||||||
|
}).catch($DONE);
|
Loading…
x
Reference in New Issue
Block a user