await-using-fallbacks.js (1122B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 { 6 let called = false; 7 let calledSync = false; 8 async function testCallsAsyncDispose() { 9 await using x = { 10 [Symbol.asyncDispose]() { 11 called = true; 12 }, 13 [Symbol.dispose]() { 14 calledSync = true; 15 } 16 } 17 } 18 testCallsAsyncDispose(); 19 drainJobQueue(); 20 assertEq(called, true); 21 assertEq(calledSync, false); 22 } 23 24 { 25 const disposed = []; 26 async function testCallsSyncDispose() { 27 await using x = { 28 [Symbol.dispose]() { 29 disposed.push(1); 30 } 31 } 32 33 await using y = { 34 [Symbol.asyncDispose]: undefined, 35 [Symbol.dispose]() { 36 disposed.push(2); 37 } 38 } 39 40 await using z = { 41 [Symbol.asyncDispose]: null, 42 [Symbol.dispose]() { 43 disposed.push(3); 44 } 45 } 46 } 47 testCallsSyncDispose(); 48 drainJobQueue(); 49 assertArrayEq(disposed, [3, 2, 1]); 50 } 51 52 { 53 assertThrowsInstanceOf(() => { 54 using x = { 55 [Symbol.asyncDispose]() { 56 } 57 } 58 }, TypeError); 59 }