summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js b/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js
new file mode 100644
index 000000000..f143ef535
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_conditional-breakpoints-05.js
@@ -0,0 +1,141 @@
+/* -*- 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/ */
+
+/**
+ * Make sure that conditional breakpoints with an exception-throwing expression
+ * could pause on hit
+ */
+
+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;
+
+ // This test forces conditional breakpoints to be evaluated on the
+ // client-side
+ var client = gPanel.target.client;
+ client.mainRoot.traits.conditionalBreakpoints = false;
+
+ function resumeAndTestBreakpoint(line) {
+ let finished = waitForCaretUpdated(gPanel, line).then(() => testBreakpoint(line));
+ EventUtils.sendMouseEvent({ type: "mousedown" },
+ gDebugger.document.getElementById("resume"),
+ gDebugger);
+
+ return finished;
+ }
+
+ function resumeAndTestNoBreakpoint() {
+ let finished = waitForDebuggerEvents(gPanel, gDebugger.EVENTS.AFTER_FRAMES_CLEARED).then(() => {
+ is(gSources.itemCount, 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.");
+
+ ok(gSources.selectedItem,
+ "There should be a selected source in the sources pane.");
+ ok(!gSources._selectedBreakpoint,
+ "There should be no selected breakpoint in the sources pane.");
+ is(gSources._conditionalPopupVisible, false,
+ "The breakpoint conditional expression popup should not be shown.");
+
+ is(gDebugger.document.querySelectorAll(".dbg-stackframe").length, 0,
+ "There should be no visible stackframes.");
+ is(gDebugger.document.querySelectorAll(".dbg-breakpoint").length, 6,
+ "There should be thirteen visible breakpoints.");
+ });
+
+ gDebugger.gThreadClient.resume();
+
+ return finished;
+ }
+
+ function testBreakpoint(line, highlightBreakpoint) {
+ // Highlight the breakpoint only if required.
+ if (highlightBreakpoint) {
+ let finished = waitForCaretUpdated(gPanel, line).then(() => testBreakpoint(line));
+ gSources.highlightBreakpoint({ actor: gSources.selectedValue, line: line });
+ return finished;
+ }
+
+ let selectedActor = gSources.selectedValue;
+ let selectedBreakpoint = gSources._selectedBreakpoint;
+ let selectedBreakpointItem = gSources._getBreakpoint(selectedBreakpoint);
+ let source = queries.getSource(getState(), selectedActor);
+
+ ok(selectedActor,
+ "There should be a selected item in the sources pane.");
+ ok(selectedBreakpoint,
+ "There should be a selected breakpoint.");
+ ok(selectedBreakpointItem,
+ "There should be a selected breakpoint item in the sources pane.");
+
+ is(selectedBreakpoint.location.actor, source.actor,
+ "The breakpoint on line " + line + " wasn't added on the correct source.");
+ is(selectedBreakpoint.location.line, line,
+ "The breakpoint on line " + line + " wasn't found.");
+ is(!!selectedBreakpoint.location.disabled, false,
+ "The breakpoint on line " + line + " should be enabled.");
+ is(gSources._conditionalPopupVisible, false,
+ "The breakpoint conditional expression popup should not have been shown.");
+
+ isnot(selectedBreakpoint.condition, undefined,
+ "The breakpoint on line " + line + " should have a conditional expression.");
+
+ ok(isCaretPos(gPanel, line),
+ "The editor caret position is not properly set.");
+ }
+
+ Task.spawn(function* () {
+ let onCaretUpdated = waitForCaretAndScopes(gPanel, 17);
+ callInTab(gTab, "ermahgerd");
+ yield onCaretUpdated;
+
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 18 }, " 1a"
+ );
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 19 }, "new Error()"
+ );
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 20 }, "true"
+ );
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 21 }, "false"
+ );
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 22 }, "0"
+ );
+ yield actions.addBreakpoint(
+ { actor: gSources.selectedValue, line: 23 }, "randomVar"
+ );
+
+ yield resumeAndTestBreakpoint(18);
+ yield resumeAndTestBreakpoint(19);
+ yield resumeAndTestBreakpoint(20);
+ yield resumeAndTestBreakpoint(23);
+ yield resumeAndTestNoBreakpoint();
+
+ // Reset traits back to default value
+ client.mainRoot.traits.conditionalBreakpoints = true;
+ closeDebuggerAndFinish(gPanel);
+ });
+ });
+}