123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
- /* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
- /**
- * Bug 740825: Test the debugger conditional breakpoints.
- */
- const TAB_URL = EXAMPLE_URL + "doc_conditional-breakpoints.html";
- function test() {
- let options = {
- source: TAB_URL,
- line: 1
- };
- initDebugger(TAB_URL, options).then(([aTab,, aPanel]) => {
- const gTab = aTab;
- const gPanel = aPanel;
- const gDebugger = gPanel.panelWin;
- const gEditor = gDebugger.DebuggerView.editor;
- const gSources = gDebugger.DebuggerView.Sources;
- const queries = gDebugger.require("./content/queries");
- const constants = gDebugger.require("./content/constants");
- const actions = bindActionCreators(gPanel);
- const getState = gDebugger.DebuggerController.getState;
- const CONDITIONAL_POPUP_SHOWN = gDebugger.EVENTS.CONDITIONAL_BREAKPOINT_POPUP_SHOWN;
- // This test forces conditional breakpoints to be evaluated on the
- // client-side
- var client = gPanel.target.client;
- client.mainRoot.traits.conditionalBreakpoints = false;
- function addBreakpoint1() {
- return actions.addBreakpoint({ actor: gSources.selectedValue, line: 18 });
- }
- function addBreakpoint2() {
- let finished = waitForDispatch(gPanel, constants.ADD_BREAKPOINT);
- setCaretPosition(19);
- gSources._onCmdAddBreakpoint();
- return finished;
- }
- function modBreakpoint2() {
- setCaretPosition(19);
- let popupShown = waitForDebuggerEvents(gPanel, CONDITIONAL_POPUP_SHOWN);
- gSources._onCmdAddConditionalBreakpoint();
- return popupShown;
- }
- function* addBreakpoint3() {
- let finished = waitForDispatch(gPanel, constants.ADD_BREAKPOINT);
- let popupShown = waitForDebuggerEvents(gPanel, CONDITIONAL_POPUP_SHOWN);
- setCaretPosition(20);
- gSources._onCmdAddConditionalBreakpoint();
- yield finished;
- yield popupShown;
- }
- function* modBreakpoint3() {
- setCaretPosition(20);
- let popupShown = waitForDebuggerEvents(gPanel, CONDITIONAL_POPUP_SHOWN);
- gSources._onCmdAddConditionalBreakpoint();
- yield popupShown;
- typeText(gSources._cbTextbox, "bamboocha");
- let finished = waitForDispatch(gPanel, constants.SET_BREAKPOINT_CONDITION);
- EventUtils.sendKey("RETURN", gDebugger);
- yield finished;
- }
- function addBreakpoint4() {
- let finished = waitForDispatch(gPanel, constants.ADD_BREAKPOINT);
- setCaretPosition(21);
- gSources._onCmdAddBreakpoint();
- return finished;
- }
- function delBreakpoint4() {
- let finished = waitForDispatch(gPanel, constants.REMOVE_BREAKPOINT);
- setCaretPosition(21);
- gSources._onCmdAddBreakpoint();
- return finished;
- }
- function testBreakpoint(aLine, aPopupVisible, aConditionalExpression) {
- const source = queries.getSelectedSource(getState());
- ok(source,
- "There should be a selected item in the sources pane.");
- const bp = queries.getBreakpoint(getState(), {
- actor: source.actor,
- line: aLine
- });
- const bpItem = gSources._getBreakpoint(bp);
- ok(bp, "There should be a breakpoint.");
- ok(bpItem, "There should be a breakpoint in the sources pane.");
- is(bp.location.actor, source.actor,
- "The breakpoint on line " + aLine + " wasn't added on the correct source.");
- is(bp.location.line, aLine,
- "The breakpoint on line " + aLine + " wasn't found.");
- is(!!bp.disabled, false,
- "The breakpoint on line " + aLine + " should be enabled.");
- is(gSources._conditionalPopupVisible, aPopupVisible,
- "The breakpoint on line " + aLine + " should have a correct popup state (2).");
- is(bp.condition, aConditionalExpression,
- "The breakpoint on line " + aLine + " should have a correct conditional expression.");
- }
- function testNoBreakpoint(aLine) {
- let selectedActor = gSources.selectedValue;
- let selectedBreakpoint = gSources._selectedBreakpoint;
- ok(selectedActor,
- "There should be a selected item in the sources pane for line " + aLine + ".");
- ok(!selectedBreakpoint,
- "There should be no selected brekapoint in the sources pane for line " + aLine + ".");
- ok(isCaretPos(gPanel, aLine),
- "The editor caret position is not properly set.");
- }
- function setCaretPosition(aLine) {
- gEditor.setCursor({ line: aLine - 1, ch: 0 });
- }
- function clickOnBreakpoint(aIndex) {
- EventUtils.sendMouseEvent({ type: "click" },
- gDebugger.document.querySelectorAll(".dbg-breakpoint")[aIndex],
- gDebugger);
- }
- function waitForConditionUpdate() {
- // This will close the popup and send another request to update
- // the condition
- gSources._hideConditionalPopup();
- return waitForDispatch(gPanel, constants.SET_BREAKPOINT_CONDITION);
- }
- Task.spawn(function* () {
- let onCaretUpdated = waitForCaretAndScopes(gPanel, 17);
- callInTab(gTab, "ermahgerd");
- yield onCaretUpdated;
- is(gDebugger.gThreadClient.state, "paused",
- "Should only be getting stack frames while paused.");
- is(queries.getSourceCount(getState()), 1,
- "Found the expected number of sources.");
- is(gEditor.getText().indexOf("ermahgerd"), 253,
- "The correct source was loaded initially.");
- is(gSources.selectedValue, gSources.values[0],
- "The correct source is selected.");
- is(queries.getBreakpoints(getState()).length, 0,
- "No breakpoints currently added.");
- yield addBreakpoint1();
- testBreakpoint(18, false, undefined);
- yield addBreakpoint2();
- testBreakpoint(19, false, undefined);
- yield modBreakpoint2();
- testBreakpoint(19, true, undefined);
- yield waitForConditionUpdate();
- yield addBreakpoint3();
- testBreakpoint(20, true, "");
- yield waitForConditionUpdate();
- yield modBreakpoint3();
- testBreakpoint(20, false, "bamboocha");
- yield addBreakpoint4();
- testBreakpoint(21, false, undefined);
- yield delBreakpoint4();
- setCaretPosition(18);
- is(gSources._selectedBreakpoint.location.line, 18,
- "The selected breakpoint is line 18");
- yield testBreakpoint(18, false, undefined);
- setCaretPosition(19);
- is(gSources._selectedBreakpoint.location.line, 19,
- "The selected breakpoint is line 19");
- yield testBreakpoint(19, false, "");
- setCaretPosition(20);
- is(gSources._selectedBreakpoint.location.line, 20,
- "The selected breakpoint is line 20");
- yield testBreakpoint(20, false, "bamboocha");
- setCaretPosition(17);
- yield testNoBreakpoint(17);
- setCaretPosition(21);
- yield testNoBreakpoint(21);
- clickOnBreakpoint(0);
- is(gSources._selectedBreakpoint.location.line, 18,
- "The selected breakpoint is line 18");
- yield testBreakpoint(18, false, undefined);
- clickOnBreakpoint(1);
- is(gSources._selectedBreakpoint.location.line, 19,
- "The selected breakpoint is line 19");
- yield testBreakpoint(19, false, "");
- clickOnBreakpoint(2);
- is(gSources._selectedBreakpoint.location.line, 20,
- "The selected breakpoint is line 20");
- testBreakpoint(20, true, "bamboocha");
- // Reset traits back to default value
- client.mainRoot.traits.conditionalBreakpoints = true;
- resumeDebuggerThenCloseAndFinish(gPanel);
- });
- });
- }
|