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