Frame-older-generators-01.js (1279B)
1 // Generator/async frames can be created by following .older. 2 // 3 // The goal here is to get some test coverage creating generator Frame objects 4 // at some time other than when firing onEnterFrame. Here they're created after 5 // the initial yield. 6 7 let g = newGlobal({newCompartment: true}); 8 g.eval(` 9 function f() { 10 debugger; 11 } 12 function* gen() { 13 f(); 14 yield 1; 15 f(); 16 } 17 function* genDefaults(x=f()) { 18 f(); 19 } 20 async function af() { 21 f(); 22 await 1; 23 f(); 24 } 25 async function afDefaults(x=f()) { 26 await 1; 27 f(); 28 } 29 `); 30 31 function test(expected, code) { 32 let dbg = Debugger(g); 33 let hits = 0; 34 let genFrame = null; 35 dbg.onDebuggerStatement = frame => { 36 hits++; 37 assertEq(frame.callee.name, "f"); 38 if (genFrame === null) { 39 genFrame = frame.older; 40 } else { 41 assertEq(frame.older, genFrame); 42 } 43 assertEq(genFrame.callee.name, expected); 44 }; 45 g.eval(code); 46 assertEq(hits, 2); 47 dbg.removeDebuggee(g); 48 } 49 50 test("gen", "for (var x of gen()) {}"); 51 test("genDefaults", "for (var x of genDefaults()) {}"); 52 test("af", "af(); drainJobQueue();"); 53 test("afDefaults", "afDefaults(); drainJobQueue();")