Bug 1407426 - add smoke test for debugger in browser content toolbox;r=jlast draft
authorJulian Descottes <jdescottes@mozilla.com>
Tue, 10 Oct 2017 10:43:32 +0200
changeset 680832 41df3e98ee7c153aa69313ad557717a55abbb0b4
parent 680784 50d135beac736720aebce587d69ea59281152db4
child 735988 d52596bc169ba8576db80a0b54cd2b3de9cdddf3
push id84649
push userjdescottes@mozilla.com
push dateMon, 16 Oct 2017 13:27:58 +0000
reviewersjlast
bugs1407426
milestone58.0a1
Bug 1407426 - add smoke test for debugger in browser content toolbox;r=jlast This test is a simpler version of the breakpoints test, but runs from the browser content toolbox. We don't particularly assess that the debugger can see more sources than the web content sources, but at least this ensures that the debugger is correctly initialized. MozReview-Commit-ID: 5rSb7z3HP4F
devtools/client/debugger/new/test/mochitest/browser.ini
devtools/client/debugger/new/test/mochitest/browser_dbg-browser-content-toolbox.js
devtools/client/debugger/new/test/mochitest/head.js
--- a/devtools/client/debugger/new/test/mochitest/browser.ini
+++ b/devtools/client/debugger/new/test/mochitest/browser.ini
@@ -62,16 +62,18 @@ support-files =
 [browser_dbg-async-stepping.js]
 [browser_dbg-breaking.js]
 [browser_dbg-breaking-from-console.js]
 [browser_dbg-breakpoints.js]
 [browser_dbg-breakpoints-toggle.js]
 [browser_dbg-breakpoints-reloading.js]
 skip-if = true # Bug 1383576
 [browser_dbg-breakpoints-cond.js]
+[browser_dbg-browser-content-toolbox.js]
+skip-if = !e10s # This test is only valid in e10s
 [browser_dbg-call-stack.js]
 [browser_dbg-scopes.js]
 [browser_dbg-chrome-create.js]
 [browser_dbg-chrome-debugging.js]
 skip-if = debug # bug 1374187
 [browser_dbg-console.js]
 [browser_dbg-debugger-buttons.js]
 [browser_dbg-editor-gutter.js]
@@ -102,10 +104,10 @@ skip-if = true # Bug 1393121, 1393299
 [browser_dbg-sourcemaps.js]
 [browser_dbg-sourcemaps-reloading.js]
 [browser_dbg-sourcemaps2.js]
 [browser_dbg-sourcemaps-bogus.js]
 [browser_dbg-sources.js]
 [browser_dbg-tabs.js]
 [browser_dbg-toggling-tools.js]
 [browser_dbg-wasm-sourcemaps.js]
-skip-if = true 
+skip-if = true
 [browser_dbg-reload.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/debugger/new/test/mochitest/browser_dbg-browser-content-toolbox.js
@@ -0,0 +1,73 @@
+/* -*- 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/ */
+
+"use strict";
+
+/**
+ * Tests that the debugger is succesfully loaded in the Browser Content Toolbox.
+ */
+
+const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
+
+function toggleBreakpoint(dbg, index) {
+  const bp = findElement(dbg, "breakpointItem", index);
+  const input = bp.querySelector("input");
+  input.click();
+}
+
+async function disableBreakpoint(dbg, index) {
+  const disabled = waitForDispatch(dbg, "DISABLE_BREAKPOINT");
+  toggleBreakpoint(dbg, index);
+  await disabled;
+}
+
+async function enableBreakpoint(dbg, index) {
+  const enabled = waitForDispatch(dbg, "ENABLE_BREAKPOINT");
+  toggleBreakpoint(dbg, index);
+  await enabled;
+}
+
+function findBreakpoint(dbg, url, line) {
+  const { selectors: { getBreakpoint }, getState } = dbg;
+  const source = findSource(dbg, url);
+  return getBreakpoint(getState(), { sourceId: source.id, line });
+}
+
+add_task(async function() {
+  clearDebuggerPreferences();
+
+  info("Open a tab pointing to doc-scripts.html");
+  await addTab(EXAMPLE_URL + "doc-scripts.html");
+
+  info("Open the Browser Content Toolbox");
+  let toolbox = await gDevToolsBrowser.openContentProcessToolbox(gBrowser);
+
+  info("Wait for the debugger to be ready");
+  await toolbox.getPanelWhenReady("jsdebugger");
+
+  let dbg = createDebuggerContext(toolbox);
+  ok(dbg, "Debugger context is available");
+
+  info("Create a breakpoint");
+  await selectSource(dbg, "simple2");
+  await addBreakpoint(dbg, "simple2", 3);
+
+  info("Disable the breakpoint");
+  await disableBreakpoint(dbg, 1);
+  let bp = findBreakpoint(dbg, "simple2", 3);
+  is(bp.disabled, true, "breakpoint is disabled");
+
+  info("Enable the breakpoint");
+  await enableBreakpoint(dbg, 1);
+  bp = findBreakpoint(dbg, "simple2", 3);
+  is(bp.disabled, false, "breakpoint is enabled");
+
+  info("Close the browser toolbox window");
+  let onToolboxDestroyed = toolbox.once("destroyed");
+  toolbox.win.top.close();
+  await onToolboxDestroyed;
+
+  info("Toolbox is destroyed");
+});
--- a/devtools/client/debugger/new/test/mochitest/head.js
+++ b/devtools/client/debugger/new/test/mochitest/head.js
@@ -361,33 +361,40 @@ function createDebuggerContext(toolbox) 
     getState: store.getState,
     store: store,
     client: client,
     toolbox: toolbox,
     win: win
   };
 }
 
+
+/**
+ * Clear all the debugger related preferences.
+ */
+function clearDebuggerPreferences() {
+  Services.prefs.clearUserPref("devtools.debugger.pause-on-exceptions");
+  Services.prefs.clearUserPref("devtools.debugger.ignore-caught-exceptions");
+  Services.prefs.clearUserPref("devtools.debugger.tabs");
+  Services.prefs.clearUserPref("devtools.debugger.pending-selected-location");
+  Services.prefs.clearUserPref("devtools.debugger.pending-breakpoints");
+  Services.prefs.clearUserPref("devtools.debugger.expressions");
+}
+
 /**
  * Intilializes the debugger.
  *
  * @memberof mochitest
  * @param {String} url
- * @param {Array} sources
  * @return {Promise} dbg
  * @static
  */
-function initDebugger(url, ...sources) {
+function initDebugger(url) {
   return Task.spawn(function*() {
-    Services.prefs.clearUserPref("devtools.debugger.pause-on-exceptions");
-    Services.prefs.clearUserPref("devtools.debugger.ignore-caught-exceptions");
-    Services.prefs.clearUserPref("devtools.debugger.tabs");
-    Services.prefs.clearUserPref("devtools.debugger.pending-selected-location");
-    Services.prefs.clearUserPref("devtools.debugger.pending-breakpoints");
-    Services.prefs.clearUserPref("devtools.debugger.expressions");
+    clearDebuggerPreferences();
     const toolbox = yield openNewTabAndToolbox(EXAMPLE_URL + url, "jsdebugger");
     return createDebuggerContext(toolbox);
   });
 }
 
 window.resumeTest = undefined;
 /**
  * Pause the test and let you interact with the debugger.