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