disposal-with-ccws.js (1200B)
1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management 2 3 load(libdir + "asserts.js"); 4 5 { 6 const g1 = newGlobal({ newCompartment: true }); 7 const d = g1.eval(` 8 globalThis.disposed = []; 9 const d = { [Symbol.dispose]: () => globalThis.disposed.push(1) }; 10 d; 11 `); 12 const g2 = newGlobal({ newCompartment: true }); 13 const d2 = g2.eval(` 14 globalThis.disposed = []; 15 const d2 = { [Symbol.dispose]: () => globalThis.disposed.push(2) }; 16 d2; 17 `); 18 { 19 using disp = d; 20 using disp2 = d2; 21 } 22 assertArrayEq(g1.eval("globalThis.disposed"), [1]); 23 assertArrayEq(g2.eval("globalThis.disposed"), [2]); 24 } 25 26 { 27 const g1 = newGlobal({ newCompartment: true }); 28 const d = g1.eval(` 29 globalThis.disposed = []; 30 const d = { [Symbol.dispose]: () => globalThis.disposed.push(1) }; 31 d; 32 `); 33 const g2 = newGlobal({ newCompartment: true }); 34 const d2 = g2.eval(` 35 globalThis.disposed = []; 36 const d2 = { [Symbol.dispose]: () => globalThis.disposed.push(2) }; 37 d2; 38 `); 39 assertThrowsInstanceOf(() => { 40 { 41 using disp = d; 42 using disp2 = d2; 43 nukeAllCCWs(); 44 } 45 }, SuppressedError); 46 }