Source code
Revision control
Copy as Markdown
Other Tools
// |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management
load(libdir + "asserts.js");
const values = [];
async function* gen() {
using d = {
value: "d",
[Symbol.dispose]() {
values.push(this.value);
}
}
yield await Promise.resolve("a");
yield await Promise.resolve("b");
using c = {
value: "c",
[Symbol.dispose]() {
values.push(this.value);
}
}
throw new Error("err");
}
async function testThrowInAsyncGenerator() {
let x = gen();
values.push((await x.next()).value);
values.push((await x.next()).value);
await x.next().catch(() => {});
}
testThrowInAsyncGenerator();
drainJobQueue();
assertArrayEq(values, ["a", "b", "c", "d"]);
const values2 = [];
async function* gen2() {
using c = {
value: "c",
[Symbol.dispose]() {
values2.push(this.value);
}
}
yield await Promise.resolve("a");
yield await Promise.resolve("b");
return;
}
async function testForcedThrowInAsyncGenerator() {
let x = gen2();
values2.push((await x.next()).value);
await x.throw(new Error("err")).catch(() => {});
}
testForcedThrowInAsyncGenerator();
drainJobQueue();
assertArrayEq(values2, ["a", "c"]);