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 disposedInFor = [];
function testDisposalsInForWithBreak() {
const disposables = [
{
value: "a",
[Symbol.dispose]: () => disposedInFor.push("disposed a")
},
{
value: "b",
[Symbol.dispose]: () => disposedInFor.push("disposed b")
},
{
value: "c",
[Symbol.dispose]: () => disposedInFor.push("disposed c")
}
];
for (let i = 0; i < disposables.length; i++) {
using disposable = disposables[i];
if (disposable.value === "c") {
break;
}
disposedInFor.push(disposable.value);
}
}
testDisposalsInForWithBreak();
assertArrayEq(disposedInFor, ["a", "disposed a", "b", "disposed b", "disposed c"]);
const disposedInWhile = [];
function testDisposalsInWhileWithBreak() {
const disposables = [
{
value: "a",
[Symbol.dispose]: () => disposedInWhile.push("disposed a")
},
{
value: "b",
[Symbol.dispose]: () => disposedInWhile.push("disposed b")
},
{
value: "c",
[Symbol.dispose]: () => disposedInWhile.push("disposed c")
}
];
let i = 0;
while (i < disposables.length) {
using disposable = disposables[i];
if (disposable.value === "c") {
break;
}
disposedInWhile.push(disposable.value);
i++;
}
}
testDisposalsInWhileWithBreak();
assertArrayEq(disposedInWhile, ["a", "disposed a", "b", "disposed b", "disposed c"]);
const disposedInForOf = [];
function testDisposalsInForOfWithBreak() {
const disposables = [
{
value: "a",
[Symbol.dispose]: () => disposedInForOf.push("disposed a")
},
{
value: "b",
[Symbol.dispose]: () => disposedInForOf.push("disposed b")
},
{
value: "c",
[Symbol.dispose]: () => disposedInForOf.push("disposed c")
}
];
for (using disposable of disposables) {
if (disposable.value === "c") {
break;
}
disposedInForOf.push(disposable.value);
}
}
testDisposalsInForOfWithBreak();
assertArrayEq(disposedInForOf, ["a", "disposed a", "b", "disposed b", "disposed c"]);