js/src/jit-test/tests/debug/breakpoint-multi-04.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:f8d865a6aaef
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);

mercurial