Bug 1408945 - enable browser_webconsole_optimized_out_vars.js;r=nchevobbe draft
authorJulian Descottes <jdescottes@mozilla.com>
Thu, 23 Nov 2017 17:37:41 +0100
changeset 704114 0f93b6022896cc9469e2f1e23a4abab273b54af9
parent 704113 80e84dd954362fd80280b2b76b6aa7ed6671a0a3
child 704115 6b330a24197ea058a91271ea1d36baa2436b1937
push id91082
push userjdescottes@mozilla.com
push dateTue, 28 Nov 2017 09:33:43 +0000
reviewersnchevobbe
bugs1408945
milestone59.0a1
Bug 1408945 - enable browser_webconsole_optimized_out_vars.js;r=nchevobbe MozReview-Commit-ID: CNPdSwF6kbc
devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_optimized_out_vars.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
@@ -363,17 +363,16 @@ skip-if = true # Bug 1408943
 [browser_webconsole_nodes_highlight.js]
 [browser_webconsole_nodes_select.js]
 [browser_webconsole_notifications.js]
 skip-if = true #	Bug 1405637
 [browser_webconsole_object_inspector.js]
 [browser_webconsole_object_inspector_entries.js]
 [browser_webconsole_observer_notifications.js]
 [browser_webconsole_optimized_out_vars.js]
-skip-if = true # Bug 1408945
 [browser_webconsole_output_copy.js]
 subsuite = clipboard
 skip-if = true #	Bug 1404364
 # old console skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 debug devtools for timeouts
 [browser_webconsole_output_copy_newlines.js]
 subsuite = clipboard
 skip-if = true #	Bug 1405641
 # old console skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 debug devtools for timeouts
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_optimized_out_vars.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_optimized_out_vars.js
@@ -3,89 +3,56 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Check that inspecting an optimized out variable works when execution is
 // paused.
 
 "use strict";
 
-// Force the old debugger UI since it's directly used (see Bug 1301705)
-Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
-registerCleanupFunction(function* () {
-  Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
+const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
+                 "new-console-output/test/mochitest/test-closure-optimized-out.html";
+
+add_task(async function () {
+  // Force the old debugger UI since it's directly used (see Bug 1301705)
+  await pushPref("devtools.debugger.new-debugger-frontend", false);
+
+  let hud = await openNewTabAndConsole(TEST_URI);
+  let { toolbox, panel: debuggerPanel } = await openDebugger();
+
+  let sources = debuggerPanel.panelWin.DebuggerView.Sources;
+  await debuggerPanel.addBreakpoint({ actor: sources.values[0], line: 18 });
+  await ensureThreadClientState(debuggerPanel, "resumed");
+
+  let { FETCHED_SCOPES } = debuggerPanel.panelWin.EVENTS;
+  let fetchedScopes = debuggerPanel.panelWin.once(FETCHED_SCOPES);
+
+  // Cause the debuggee to pause
+  ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
+    let button = content.document.querySelector("button");
+    button.click();
+  });
+
+  await fetchedScopes;
+  ok(true, "Scopes were fetched");
+
+  await toolbox.selectTool("webconsole");
+
+  // This is the meat of the test: evaluate the optimized out variable.
+  let onMessage = waitForMessage(hud, "optimized out");
+  hud.jsterm.execute("upvar");
+
+  info("Waiting for optimized out message");
+  await onMessage;
+
+  ok(true, "Optimized out message logged");
 });
 
-function test() {
-  Task.spawn(function* () {
-    const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
-                     "test/test-closure-optimized-out.html";
-    let {tab} = yield loadTab(TEST_URI);
-    let hud = yield openConsole(tab);
-    let { toolbox, panel, panelWin } = yield openDebugger();
-
-    let sources = panelWin.DebuggerView.Sources;
-    yield panel.addBreakpoint({ actor: sources.values[0], line: 18 });
-    yield ensureThreadClientState(panel, "resumed");
-
-    let fetchedScopes = panelWin.once(panelWin.EVENTS.FETCHED_SCOPES);
-
-    // Cause the debuggee to pause
-    ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
-      let button = content.document.querySelector("button");
-      button.click();
-    });
-
-    yield fetchedScopes;
-    ok(true, "Scopes were fetched");
-
-    yield toolbox.selectTool("webconsole");
-
-    // This is the meat of the test: evaluate the optimized out variable.
-    hud.jsterm.execute("upvar");
-    yield waitForMessages({
-      webconsole: hud,
-      messages: [{
-        text: "optimized out",
-        category: CATEGORY_OUTPUT,
-      }]
-    });
+// Debugger helper functions adapted from devtools/client/debugger/test/head.js.
 
-    finishTest();
-  }).catch(aError => {
-    ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
-  });
-}
-
-// Debugger helper functions stolen from devtools/client/debugger/test/head.js.
-
-function ensureThreadClientState(aPanel, aState) {
-  let thread = aPanel.panelWin.gThreadClient;
-  let state = thread.state;
-
-  info("Thread is: '" + state + "'.");
-
-  if (state == aState) {
-    return promise.resolve(null);
+async function ensureThreadClientState(debuggerPanel, state) {
+  let thread = debuggerPanel.panelWin.gThreadClient;
+  info(`Thread is: '${thread.state}'.`);
+  if (thread.state != state) {
+    info("Waiting for thread event: '${state}'.");
+    await thread.addOneTimeListener(state);
   }
-  return waitForThreadEvents(aPanel, aState);
 }
-
-function waitForThreadEvents(aPanel, aEventName, aEventRepeat = 1) {
-  info("Waiting for thread event: '" + aEventName + "' to fire: " +
-       aEventRepeat + " time(s).");
-
-  let deferred = defer();
-  let thread = aPanel.panelWin.gThreadClient;
-  let count = 0;
-
-  thread.addListener(aEventName, function onEvent(eventName, ...args) {
-    info("Thread event '" + eventName + "' fired: " + (++count) + " time(s).");
-
-    if (count == aEventRepeat) {
-      ok(true, "Enough '" + eventName + "' thread events have been fired.");
-      thread.removeListener(eventName, onEvent);
-      deferred.resolve.apply(deferred, args);
-    }
-  });
-
-  return deferred.promise;
-}