Source code
Revision control
Copy as Markdown
Other Tools
load(libdir + "asserts.js");
{
let disposed = [];
function* gen1() {
for (using _ of [
{
[Symbol.dispose]() {
disposed.push("A");
},
},
{
[Symbol.dispose]() {
disposed.push("B");
},
},
]) {
yield;
}
}
let it1 = gen1();
it1.next();
it1.next();
it1.return();
assertArrayEq(disposed, ["A", "B"]);
}
{
let disposed = [];
function* gen4() {
for (using _ of [
{
[Symbol.dispose]() {
disposed.push("A");
},
},
]) {
yield;
}
}
for (const _ of gen4()) {
break;
}
assertArrayEq(disposed, ["A"]);
}
{
let disposed = false;
async function* gen6() {
for (using _ of [
{
[Symbol.dispose]() {
disposed = true;
},
},
]) {
yield;
}
}
async function disposeWithBreakOfGenerator() {
for await (const _ of gen6()) {
break;
}
}
let thenCalled = false;
disposeWithBreakOfGenerator().then(() => {
assertEq(disposed, true);
thenCalled = true;
});
drainJobQueue();
assertEq(thenCalled, true);
}