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 only break on offsets that are entry points for the line we are michael@0: * breaking on. Bug 907278. 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: gDebuggee.console = { log: x => void x }; 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: setUpCode(); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: const URL = "test.js"; michael@0: michael@0: function setUpCode() { michael@0: gClient.addOneTimeListener("newSource", setBreakpoint); michael@0: Cu.evalInSandbox( michael@0: "" + function test() { michael@0: console.log("foo bar"); michael@0: debugger; michael@0: }, michael@0: gDebuggee, michael@0: "1.8", michael@0: URL michael@0: ); michael@0: } michael@0: michael@0: function setBreakpoint() { michael@0: gClient.addOneTimeListener("resumed", runCode); michael@0: gThreadClient.setBreakpoint({ michael@0: url: URL, michael@0: line: 1 michael@0: }, ({ error }) => { michael@0: do_check_true(!error); michael@0: }); michael@0: } michael@0: michael@0: function runCode() { michael@0: gClient.addOneTimeListener("paused", testBPHit); michael@0: gDebuggee.test(); michael@0: } michael@0: michael@0: function testBPHit(event, { why }) { michael@0: do_check_eq(why.type, "breakpoint"); michael@0: gClient.addOneTimeListener("paused", testDbgStatement); michael@0: gThreadClient.resume(); michael@0: } michael@0: michael@0: function testDbgStatement(event, { why }) { michael@0: // Should continue to the debugger statement. michael@0: do_check_eq(why.type, "debuggerStatement"); michael@0: // Not break on another offset from the same line (that isn't an entry point michael@0: // to the line) michael@0: do_check_neq(why.type, "breakpoint"); michael@0: finishClient(gClient); michael@0: }