await-using-with-promise-subclass.js (1050B)
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 let promiseCalls = 0; 8 class ExtendedPromise extends Promise { 9 constructor(executor) { 10 super(executor); 11 } 12 13 then(onFulfilled, onRejected) { 14 promiseCalls++; 15 return super.then(onFulfilled, onRejected); 16 } 17 } 18 async function testAwaiUsingWithExtendedPromise() { 19 await using x = { 20 [Symbol.asyncDispose]: () => new ExtendedPromise((resolve) => { 21 disposed.push(1); 22 resolve(); 23 }) 24 } 25 await using y = { 26 [Symbol.asyncDispose]: () => new ExtendedPromise((resolve) => { 27 disposed.push(2); 28 resolve(); 29 }) 30 } 31 await using z = { 32 [Symbol.dispose]: () => new ExtendedPromise((resolve) => { 33 disposed.push(3); 34 resolve(); 35 }) 36 } 37 } 38 testAwaiUsingWithExtendedPromise(); 39 drainJobQueue(); 40 assertEq(promiseCalls, 2); 41 assertArrayEq(disposed, [3, 2, 1]); 42 }