Add test when IteratorValue argument to AsyncGeneratorYield in yield* throws

This commit is contained in:
André Bargull 2019-03-11 10:34:38 -07:00
parent c822f4c929
commit bb838d8d6b
3 changed files with 180 additions and 0 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);