tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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();")