michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /** michael@0: * Check that we can set breakpoints in columns, not just lines. michael@0: */ michael@0: michael@0: var gDebuggee; michael@0: var gClient; michael@0: var gThreadClient; michael@0: michael@0: function run_test() michael@0: { michael@0: initTestDebuggerServer(); michael@0: gDebuggee = addTestGlobal("test-breakpoints"); michael@0: gClient = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient.connect(function () { michael@0: attachTestTabAndResume(gClient, michael@0: "test-breakpoints", michael@0: function (aResponse, aTabClient, aThreadClient) { michael@0: gThreadClient = aThreadClient; michael@0: test_column_breakpoint(); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function test_column_breakpoint() michael@0: { michael@0: const location = { michael@0: url: "https://example.com/foo.js", michael@0: line: 1, michael@0: column: 55 michael@0: }; michael@0: michael@0: // Debugger statement michael@0: gClient.addOneTimeListener("paused", function (aEvent, aPacket) { michael@0: let timesBreakpointHit = 0; michael@0: michael@0: gThreadClient.setBreakpoint(location, function (aResponse, bpClient) { michael@0: gThreadClient.addListener("paused", function _onPaused(aEvent, aPacket) { michael@0: do_check_eq(aPacket.type, "paused"); michael@0: do_check_eq(aPacket.why.type, "breakpoint"); michael@0: do_check_eq(aPacket.why.actors[0], bpClient.actor); michael@0: do_check_eq(aPacket.frame.where.url, location.url); michael@0: do_check_eq(aPacket.frame.where.line, location.line); michael@0: do_check_eq(aPacket.frame.where.column, location.column); michael@0: michael@0: do_check_eq(gDebuggee.acc, timesBreakpointHit); michael@0: do_check_eq(aPacket.frame.environment.bindings.variables.i.value, michael@0: timesBreakpointHit); michael@0: michael@0: if (++timesBreakpointHit === 3) { michael@0: gThreadClient.removeListener("paused", _onPaused); michael@0: bpClient.remove(function (aResponse) { michael@0: gThreadClient.resume(() => finishClient(gClient)); michael@0: }); michael@0: } else { michael@0: gThreadClient.resume(); michael@0: } michael@0: }); michael@0: michael@0: // Continue until the breakpoint is hit. michael@0: gThreadClient.resume(); michael@0: }); michael@0: michael@0: }); michael@0: michael@0: let code = michael@0: "(function () { debugger; this.acc = 0; for (let i = 0; i < 3; i++) this.acc++; }());"; michael@0: michael@0: Components.utils.evalInSandbox(code, gDebuggee, "1.8", michael@0: location.url, 1); michael@0: }