tor-browser

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

Frame-01.js (1719B)


      1 // Test .type fields of topmost stack frame passed to onDebuggerStatement.
      2 
      3 var g = newGlobal({newCompartment: true});
      4 var dbg = Debugger(g);
      5 var expected, hits;
      6 dbg.onDebuggerStatement = function (f) {
      7    assertEq(Object.getPrototypeOf(f), Debugger.Frame.prototype);
      8    assertEq(f.type, expected.type);
      9    assertEq(f.script.isGeneratorFunction, expected.generator);
     10    assertEq(f.constructing, expected.constructing);
     11    hits++;
     12 };
     13 
     14 function test(code, expectobj, expectedHits) {
     15    expected = expectobj;
     16    hits = 0;
     17    g.evaluate(code);
     18    assertEq(hits, arguments.length < 3 ? 1 : expectedHits);
     19 }
     20 
     21 test("debugger;", {type: "global", generator: false, constructing: false});
     22 test("(function () { debugger; })();", {type: "call", generator: false, constructing: false});
     23 test("new function() { debugger; };", {type: "call", generator: false, constructing: true});
     24 test("new function () { (function() { debugger; })(); }", {type: "call", generator: false, constructing: false});
     25 test("eval('debugger;');", {type: "eval", generator: false, constructing: false});
     26 test("this.eval('debugger;');  // indirect eval", {type: "eval", generator: false, constructing: false});
     27 test("(function () { eval('debugger;'); })();", {type: "eval", generator: false, constructing: false});
     28 test("new function () { eval('debugger'); }", {type: "eval", generator: false, constructing: false});
     29 test("function* gen() { debugger; yield 1; debugger; }\n" +
     30     "for (var x of gen()) {}\n",
     31     {type: "call", generator: true, constructing: false}, 2);
     32 test("var iter = (function* stargen() { debugger; yield 1; debugger; })();\n" +
     33     "iter.next(); iter.next();",
     34     {type: "call", generator: true, constructing: false}, 2);