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 testAwaitUsingInForOfLoopHeadAwaitsPromise() {
const obj = {
[Symbol.asyncDispose]() {
values.push(1);
return new Promise(() => {});
}
};
// The dispose operation here should wait forever.
for (await using u of [obj]) {}
values.push(2);
}
testAwaitUsingInForOfLoopHeadAwaitsPromise();
drainJobQueue();
assertArrayEq(values, [1]);
}
{
const disposed = [];
let caught;
async function testAwaitUsingInForOfLoopHeadAwaitsPromiseRejection() {
const obj = {
[Symbol.asyncDispose]() {
disposed.push(1);
return new Promise((res, rej) => {
rej('err');
});
}
};
try {
for (await using u of [obj]) {}
} catch (e) {
caught = e;
}
}
testAwaitUsingInForOfLoopHeadAwaitsPromiseRejection();
drainJobQueue();
assertArrayEq(disposed, [1]);
assertEq(caught, 'err');
}