summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js225
1 files changed, 225 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js b/devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js
new file mode 100644
index 000000000..121bc5e99
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_cmd-break.js
@@ -0,0 +1,225 @@
+/* -*- 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/ */
+
+/**
+ * Tests that the break commands works as they should.
+ */
+
+const TAB_URL = EXAMPLE_URL + "doc_cmd-break.html";
+var TAB_URL_ACTOR;
+
+function test() {
+ let gPanel, gDebugger, gThreadClient, gSources;
+ let gLineNumber;
+
+ let expectedActorObj = {
+ value: null,
+ message: ""
+ };
+
+ helpers.addTabWithToolbar(TAB_URL, aOptions => {
+ return Task.spawn(function* () {
+ yield helpers.audit(aOptions, [{
+ setup: "break",
+ check: {
+ input: "break",
+ hints: " add line",
+ markup: "IIIII",
+ status: "ERROR",
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break add",
+ check: {
+ input: "break add",
+ hints: " line",
+ markup: "IIIIIVIII",
+ status: "ERROR"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break add line",
+ check: {
+ input: "break add line",
+ hints: " <file> <line>",
+ markup: "VVVVVVVVVVVVVV",
+ status: "ERROR"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ name: "open toolbox",
+ setup: Task.async(function* () {
+ let [aTab, aDebuggee, aPanel] = yield initDebugger(gBrowser.selectedTab);
+
+ // Spin the event loop before causing the debuggee to pause, to allow this
+ // function to return first.
+ executeSoon(() => aDebuggee.firstCall());
+
+ yield waitForSourceAndCaretAndScopes(aPanel, ".html", 1);
+
+ gPanel = aPanel;
+ gDebugger = gPanel.panelWin;
+ gThreadClient = gPanel.panelWin.gThreadClient;
+ gLineNumber = yield ContentTask.spawn(aOptions.browser, {}, function* () {
+ return "" + content.wrappedJSObject.gLineNumber;
+ });
+ gSources = gDebugger.DebuggerView.Sources;
+
+ expectedActorObj.value = getSourceActor(gSources, TAB_URL);
+ }),
+ post: function () {
+ ok(gThreadClient, "Debugger client exists.");
+ is(gLineNumber, 14, "gLineNumber is correct.");
+ },
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ name: "break add line .../doc_cmd-break.html 14",
+ setup: function () {
+ // We have to setup in a function to allow gLineNumber to be initialized.
+ let line = "break add line " + TAB_URL + " " + gLineNumber;
+ return helpers.setInput(aOptions, line);
+ },
+ check: {
+ hints: "",
+ status: "VALID",
+ message: "",
+ args: {
+ file: expectedActorObj,
+ line: { value: 14 }
+ }
+ },
+ exec: {
+ output: "Added breakpoint"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break add line " + TAB_URL + " 17",
+ check: {
+ hints: "",
+ status: "VALID",
+ message: "",
+ args: {
+ file: expectedActorObj,
+ line: { value: 17 }
+ }
+ },
+ exec: {
+ output: "Added breakpoint"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break list",
+ check: {
+ input: "break list",
+ hints: "",
+ markup: "VVVVVVVVVV",
+ status: "VALID"
+ },
+ exec: {
+ output: [
+ /Source/, /Remove/,
+ /doc_cmd-break\.html:14/,
+ /doc_cmd-break\.html:17/
+ ]
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ name: "cleanup",
+ setup: function () {
+ let deferred = promise.defer();
+ gThreadClient.resume(deferred.resolve);
+ return deferred.promise;
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break del 14",
+ check: {
+ input: "break del 14",
+ hints: " -> doc_cmd-break.html:14",
+ markup: "VVVVVVVVVVII",
+ status: "ERROR",
+ args: {
+ breakpoint: {
+ status: "INCOMPLETE",
+ message: "Value required for \u2018breakpoint\u2019."
+ }
+ }
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break del doc_cmd-break.html:14",
+ check: {
+ input: "break del doc_cmd-break.html:14",
+ hints: "",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID",
+ args: {
+ breakpoint: { arg: " doc_cmd-break.html:14" },
+ }
+ },
+ exec: {
+ output: "Breakpoint removed"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break list",
+ check: {
+ input: "break list",
+ hints: "",
+ markup: "VVVVVVVVVV",
+ status: "VALID"
+ },
+ exec: {
+ output: [
+ /Source/, /Remove/,
+ /doc_cmd-break\.html:17/
+ ]
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break del doc_cmd-break.html:17",
+ check: {
+ input: "break del doc_cmd-break.html:17",
+ hints: "",
+ markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+ status: "VALID",
+ args: {
+ breakpoint: { arg: " doc_cmd-break.html:17" },
+ }
+ },
+ exec: {
+ output: "Breakpoint removed"
+ }
+ }]);
+
+ yield helpers.audit(aOptions, [{
+ setup: "break list",
+ check: {
+ input: "break list",
+ hints: "",
+ markup: "VVVVVVVVVV",
+ status: "VALID"
+ },
+ exec: {
+ output: "No breakpoints set"
+ },
+ post: function () {
+ return teardown(gPanel, { noTabRemoval: true });
+ }
+ }]);
+ });
+ }).then(finish);
+}