breakpoint-multi-04.js (1312B)
1 // After clearing one breakpoint, another breakpoint from a different Debugger object at the same instruction still works. 2 3 function test(which) { 4 var g = newGlobal({newCompartment: true}); 5 g.eval("var line0 = Error().lineNumber;\n" + 6 "function f() {\n" + // line0 + 1 7 " return " + which + ";\n" + // line0 + 2 8 "}\n"); 9 10 var log; 11 var scripts = []; 12 var handlers = []; 13 function addDebugger(g, i) { 14 var dbg = Debugger(g); 15 dbg.onDebuggerStatement = function (frame) { 16 var s = frame.eval("f").return.script; 17 scripts[i] = s; 18 var offs = s.getLineOffsets(g.line0 + 2); 19 var handler = {hit: function (frame) { log += '' + i; } }; 20 s.setBreakpoint(0, handler); 21 handlers[i] = handler; 22 }; 23 } 24 25 var expected = ''; 26 for (var i = 0; i < 3; i++) { 27 addDebugger(g, i); 28 if (i !== which) 29 expected += '' + i; 30 } 31 g.eval('debugger;'); 32 33 for (var i = 0; i < 3; i++) 34 assertEq(scripts[i].getBreakpoints()[0], handlers[i]); 35 36 log = ''; 37 g.f(); 38 assertEq(log, '012'); 39 40 scripts[which].clearAllBreakpoints(); 41 42 log = ''; 43 g.f(); 44 assertEq(log, expected); 45 } 46 47 for (var j = 0; j < 3; j++) 48 test(j);