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