mirror of https://github.com/tc39/test262.git
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…
Reference in New Issue