await-using-with-for-of.js (1561B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 { 6 const disposedInForOf = []; 7 async function testDisposalsInForOf() { 8 const disposables = [ 9 { 10 value: "a", 11 [Symbol.asyncDispose]: () => disposedInForOf.push("disposed a") 12 }, 13 { 14 value: "b", 15 [Symbol.asyncDispose]: () => disposedInForOf.push("disposed b") 16 }, 17 { 18 value: "c", 19 [Symbol.asyncDispose]: () => disposedInForOf.push("disposed c") 20 } 21 ]; 22 for (await using disposable of disposables) { 23 disposedInForOf.push(disposable.value); 24 } 25 } 26 testDisposalsInForOf(); 27 drainJobQueue(); 28 assertArrayEq(disposedInForOf, ["a", "disposed a", "b", "disposed b", "c", "disposed c"]); 29 } 30 31 { 32 const disposed = []; 33 async function testDisposalsInForOfWithDisposalsInIt() { 34 const disposables = [ 35 { 36 value: "a", 37 [Symbol.asyncDispose]: () => disposed.push("disposed a") 38 }, 39 { 40 value: "b", 41 [Symbol.asyncDispose]: () => disposed.push("disposed b") 42 }, 43 { 44 value: "c", 45 [Symbol.asyncDispose]: () => disposed.push("disposed c") 46 } 47 ]; 48 for (await using disposable of disposables) { 49 await using d = { 50 [Symbol.asyncDispose]: () => disposed.push(disposable.value) 51 } 52 } 53 } 54 testDisposalsInForOfWithDisposalsInIt(); 55 drainJobQueue(); 56 assertArrayEq(disposed, ["a", "disposed a", "b", "disposed b", "c", "disposed c"]); 57 }