promise-then.js (663B)
1 load(libdir + "asserts.js"); 2 3 ignoreUnhandledRejections(); 4 5 const g = newGlobal({sameCompartmentAs: this}); 6 7 let resolve, reject; 8 let promise = new Promise((resolveFn, rejectFn) => { 9 resolve = resolveFn; 10 reject = rejectFn; 11 }); 12 13 // Set to a built-in Promise.prototype.then function, but from a different realm. 14 promise.then = g.Promise.prototype.then; 15 16 // Make SpeciesConstructor throw a TypeError exception. 17 promise.constructor = { 18 [Symbol.species]: "not a constructor" 19 }; 20 21 async function f(p) { 22 await p; 23 } 24 25 let error; 26 f(promise).catch(e => { error = e; }); 27 28 resolve(promise); 29 30 drainJobQueue(); 31 32 assertEq(error.constructor === g.TypeError, true);