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