async-disposable-stack-adopt-dispose.js (1995B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 { 6 const values = []; 7 const stack = new AsyncDisposableStack(); 8 assertEq(stack.adopt(1, (v) => values.push(v)), 1); 9 const obj = { value: 2 }; 10 assertEq(stack.adopt(obj, (v) => values.push(v.value)), obj); 11 assertEq(stack.disposed, false); 12 stack.disposeAsync(); 13 drainJobQueue(); 14 assertEq(stack.disposed, true); 15 assertArrayEq(values, [2, 1]); 16 stack.disposeAsync(); 17 drainJobQueue(); 18 assertArrayEq(values, [2, 1]); 19 assertThrowsInstanceOf(() => stack.adopt(3, (v) => values.push(v)), ReferenceError); 20 assertArrayEq(values, [2, 1]); 21 } 22 23 { 24 const values = []; 25 const stack = new AsyncDisposableStack(); 26 assertEq(stack.adopt(1, (v) => values.push(v)), 1); 27 const obj = { value: 2 }; 28 assertEq(stack.adopt(obj, (v) => values.push(v.value)), obj); 29 assertEq(stack.disposed, false); 30 async function testDisposalsWithAwaitUsing() { 31 { 32 await using stk = stack; 33 stk.use({ 34 [Symbol.asyncDispose]() { 35 values.push(3); 36 }, 37 }); 38 stk.adopt(4, (v) => values.push(v)); 39 } 40 } 41 testDisposalsWithAwaitUsing(); 42 drainJobQueue(); 43 assertEq(stack.disposed, true); 44 assertArrayEq(values, [4, 3, 2, 1]); 45 } 46 47 { 48 const disposed = []; 49 const stack = new AsyncDisposableStack(); 50 stack.adopt(null, (v) => disposed.push(v)); 51 stack.adopt(undefined, (v) => disposed.push(v)); 52 stack.adopt(1, (v) => disposed.push(v)); 53 stack.disposeAsync(); 54 drainJobQueue(); 55 assertArrayEq(disposed, [1, undefined, null]); 56 } 57 58 { 59 assertThrowsInstanceOf(() => { 60 const stack = new AsyncDisposableStack(); 61 stack.adopt(1, undefined); 62 }, TypeError); 63 64 assertThrowsInstanceOf(() => { 65 const stack = new AsyncDisposableStack(); 66 stack.adopt(1, null); 67 }, TypeError); 68 69 assertThrowsInstanceOf(() => { 70 const stack = new AsyncDisposableStack(); 71 stack.adopt(1, 1); 72 }, TypeError); 73 }