summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js219
1 files changed, 219 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js b/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js
new file mode 100644
index 000000000..d3d857753
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-02.js
@@ -0,0 +1,219 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* 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);
+ });
+ });
+}