Object-getPromiseReactions-03.js (1387B)
1 // Debugger.Object.prototype.getPromiseReactions reports reaction records 2 // created with `then` and `catch`. 3 4 load(libdir + 'match.js'); 5 load(libdir + 'match-debugger.js'); 6 7 const { Pattern } = Match; 8 const { OBJECT_WITH_EXACTLY: EXACT } = Pattern; 9 function EQ(v) { 10 return new DebuggerIdentical(v); 11 } 12 13 var g = newGlobal({ newCompartment: true }); 14 var dbg = new Debugger; 15 var DOg = dbg.addDebuggee(g); 16 17 g.eval(` 18 function identity(v) { return v; } 19 function thrower(e) { throw e; } 20 function fib(n) { if (n <= 1) return 1; else return fib(n-1) + fib(n-2); } 21 function triangle(n) { return (n+1) * n / 2; } 22 23 var pResolve, pReject; 24 var p = new Promise((resolve, reject) => { pResolve = resolve; pReject = reject }); 25 var p2 = p.then(identity, thrower); 26 var p3 = p.then(fib); 27 var p4 = p.catch(triangle); 28 `); 29 30 var [DOidentity, DOthrower, DOfib, DOtriangle, DOp, DOp2, DOp3, DOp4] = 31 [g.identity, g.thrower, g.fib, g.triangle, g.p, g.p2, g.p3, g.p4].map(p => DOg.makeDebuggeeValue(p)); 32 33 Match.Pattern([ 34 EXACT({ resolve: EQ(DOidentity), reject: EQ(DOthrower), result: EQ(DOp2) }), 35 EXACT({ resolve: EQ(DOfib), result: EQ(DOp3) }), 36 EXACT({ reject: EQ(DOtriangle), result: EQ(DOp4) }) 37 ]).assert(DOp.getPromiseReactions(), 38 "promiseReactions doesn't return expected reaction list"); 39 40 g.pResolve(3); 41 assertEq(DOp.getPromiseReactions().length, 0);