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 disposed = [];
let thenCalled = false;
async function testReturnValueIsPreserved() {
await using a = {
[Symbol.asyncDispose]: () => disposed.push("a")
};
await using b = {
[Symbol.asyncDispose]: () => disposed.push("b")
};
return 200;
}
testReturnValueIsPreserved().then((val) => {
thenCalled = true;
assertEq(val, 200);
});
drainJobQueue();
assertEq(thenCalled, true);
assertArrayEq(disposed, ["b", "a"]);
}
{
const disposed = [];
let thenCalled = false;
async function testReturnValuePreservedWhenWithFinally() {
try {
await using a = {
[Symbol.asyncDispose]: () => disposed.push("a")
}
return 1;
} finally {
await using b = {
[Symbol.asyncDispose]: () => disposed.push("b")
}
return 2;
}
}
testReturnValuePreservedWhenWithFinally().then((val) => {
thenCalled = true;
assertEq(val, 2);
});
drainJobQueue();
assertEq(thenCalled, true);
assertArrayEq(disposed, ["a", "b"]);
}