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 disposedInLoop = [];
async function testDisposalsInForLoop() {
await using a = {
[Symbol.asyncDispose]: () => disposedInLoop.push("a")
};
for (let i = 0; i < 3; i++) {
await using b = {
[Symbol.asyncDispose]: () => disposedInLoop.push(i)
};
}
await using c = {
[Symbol.asyncDispose]: () => disposedInLoop.push("c")
};
}
testDisposalsInForLoop();
drainJobQueue();
assertArrayEq(disposedInLoop, [0, 1, 2, "c", "a"]);
const disposedInForOfLoop = [];
async function testDisposalsInForOfLoop() {
await using a = {
[Symbol.asyncDispose]: () => disposedInForOfLoop.push("a")
};
for (let i of [0, 1]) {
await using x = {
[Symbol.asyncDispose]: () => {
disposedInForOfLoop.push(i);
}
};
}
}
testDisposalsInForOfLoop();
drainJobQueue();
assertArrayEq(disposedInForOfLoop, [0, 1, "a"]);
const disposedInForInLoop = [];
async function testDisposalsInForInLoop() {
await using a = {
[Symbol.asyncDispose]: () => disposedInForInLoop.push("a")
};
for (let i in { 0: 0, 1: 1}) {
await using x = {
[Symbol.asyncDispose]: () => {
disposedInForInLoop.push(i);
}
};
}
}
testDisposalsInForInLoop();
drainJobQueue();
assertArrayEq(disposedInForInLoop, ["0", "1", "a"]);