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: * Bug 1008372: Setting a breakpoint in a line without code should move michael@0: * the icon to the actual location, and if a breakpoint already exists michael@0: * on the new location don't duplicate michael@0: */ michael@0: michael@0: const TAB_URL = EXAMPLE_URL + "doc_breakpoint-move.html"; michael@0: michael@0: function test() { michael@0: let gTab, gDebuggee, gPanel, gDebugger; michael@0: let gEditor, gSources, gBreakpoints, gBreakpointsAdded, gBreakpointsRemoving; michael@0: michael@0: initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { michael@0: gTab = aTab; michael@0: gDebuggee = aDebuggee; michael@0: gPanel = aPanel; michael@0: gDebugger = gPanel.panelWin; michael@0: gEditor = gDebugger.DebuggerView.editor; michael@0: gSources = gDebugger.DebuggerView.Sources; michael@0: gBreakpoints = gDebugger.DebuggerController.Breakpoints; michael@0: gBreakpointsAdded = gBreakpoints._added; michael@0: gBreakpointsRemoving = gBreakpoints._removing; michael@0: michael@0: waitForSourceAndCaretAndScopes(gPanel, ".html", 1).then(performTest); michael@0: gDebuggee.ermahgerd(); michael@0: }); michael@0: michael@0: function performTest() { michael@0: is(gBreakpointsAdded.size, 0, michael@0: "No breakpoints currently added."); michael@0: is(gBreakpointsRemoving.size, 0, michael@0: "No breakpoints currently being removed."); michael@0: is(gEditor.getBreakpoints().length, 0, michael@0: "No breakpoints currently shown in the editor."); michael@0: michael@0: Task.spawn(function*() { michael@0: let bpClient = yield gPanel.addBreakpoint({ michael@0: url: gSources.selectedValue, michael@0: line: 19 michael@0: }); michael@0: yield gPanel.addBreakpoint({ michael@0: url: gSources.selectedValue, michael@0: line: 20 michael@0: }); michael@0: michael@0: let movedBpClient = yield gPanel.addBreakpoint({ michael@0: url: gSources.selectedValue, michael@0: line: 17 michael@0: }); michael@0: testMovedLocation(movedBpClient); michael@0: michael@0: yield resumeAndTestBreakpoint(19); michael@0: michael@0: yield gPanel.removeBreakpoint({ michael@0: url: gSources.selectedValue, michael@0: line: 19 michael@0: }); michael@0: michael@0: yield resumeAndTestBreakpoint(20); michael@0: yield doResume(gPanel); michael@0: michael@0: executeSoon(() => gDebuggee.ermahgerd()); michael@0: yield waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_SCOPES); michael@0: michael@0: yield resumeAndTestBreakpoint(20); michael@0: resumeDebuggerThenCloseAndFinish(gPanel); michael@0: }); michael@0: } michael@0: michael@0: function resumeAndTestBreakpoint(line) { michael@0: return Task.spawn(function*() { michael@0: let event = waitForDebuggerEvents(gPanel, gDebugger.EVENTS.FETCHED_SCOPES); michael@0: doResume(gPanel); michael@0: yield event; michael@0: testBreakpoint(line); michael@0: }); michael@0: }; michael@0: michael@0: function testBreakpoint(line) { michael@0: let selectedBreakpoint = gSources._selectedBreakpointItem; michael@0: ok(selectedBreakpoint, michael@0: "There should be a selected breakpoint on line " + line); michael@0: is(selectedBreakpoint.attachment.line, line, michael@0: "The breakpoint on line " + line + " was not hit"); michael@0: } michael@0: michael@0: function testMovedLocation(breakpointClient) { michael@0: ok(breakpointClient, michael@0: "Breakpoint added, client received."); michael@0: is(breakpointClient.location.url, gSources.selectedValue, michael@0: "Breakpoint client url is the same."); michael@0: is(breakpointClient.location.line, 19, michael@0: "Breakpoint client line is new."); michael@0: michael@0: is(breakpointClient.requestedLocation.url, gSources.selectedValue, michael@0: "Requested location url is correct"); michael@0: is(breakpointClient.requestedLocation.line, 17, michael@0: "Requested location line is correct"); michael@0: } michael@0: }