Bug 1478240 - Convert browser_dbg_multiple-windows.js to use async/await instead of callbacks. r=jdescottes draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Wed, 01 Aug 2018 00:56:51 -0700
changeset 825269 ae841230e402d5329187d3879f68cab1e20b15f0
parent 825268 b378695cfa04894bd39c50b0eb6b8763f246363b
child 825270 5304a9b05c4fd374b6990c40ff1c7db770ec0bef
push id118054
push userbmo:poirot.alex@gmail.com
push dateWed, 01 Aug 2018 08:41:11 +0000
reviewersjdescottes
bugs1478240
milestone63.0a1
Bug 1478240 - Convert browser_dbg_multiple-windows.js to use async/await instead of callbacks. r=jdescottes MozReview-Commit-ID: Cfp8ZM59IXi
devtools/client/debugger/test/mochitest/browser_dbg_multiple-windows.js
--- a/devtools/client/debugger/test/mochitest/browser_dbg_multiple-windows.js
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_multiple-windows.js
@@ -6,158 +6,109 @@
 /**
  * Make sure that the debugger attaches to the right tab when multiple windows
  * are open.
  */
 
 const TAB1_URL = EXAMPLE_URL + "doc_script-switching-01.html";
 const TAB2_URL = EXAMPLE_URL + "doc_script-switching-02.html";
 
-var gNewTab, gNewWindow;
-var gClient;
-
-function test() {
+add_task(async function() {
   DebuggerServer.init();
   DebuggerServer.registerAllActors();
 
-  let transport = DebuggerServer.connectPipe();
-  gClient = new DebuggerClient(transport);
-  gClient.connect().then(([aType, aTraits]) => {
-    is(aType, "browser",
-      "Root actor should identify itself as a browser.");
+  const transport = DebuggerServer.connectPipe();
+  const client = new DebuggerClient(transport);
+  const [type] = await client.connect();
+  is(type, "browser", "Root actor should identify itself as a browser.");
 
-    promise.resolve(null)
-      .then(() => addTab(TAB1_URL))
-      .then(testFirstTab)
-      .then(() => addWindow(TAB2_URL))
-      .then(testNewWindow)
-      .then(testFocusFirst)
-      .then(testRemoveTab)
-      .then(() => gClient.close())
-      .then(finish)
-      .catch(aError => {
-        ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
-      });
-  });
+  const tab = await addTab(TAB1_URL);
+  await testFirstTab(client, tab);
+  const win = await addWindow(TAB2_URL);
+  await testNewWindow(client, win);
+  testFocusFirst(client);
+  await testRemoveTab(client, win, tab);
+  await client.close();
+});
+
+async function testFirstTab(client, tab) {
+  ok(!!tab, "Second tab created.");
+
+  const response = await client.listTabs();
+  const targetActor = response.tabs.filter(grip => grip.url == TAB1_URL).pop();
+  ok(targetActor, "Should find a target actor for the first tab.");
+
+  is(response.selected, 1, "The first tab is selected.");
 }
 
-function testFirstTab(aTab) {
-  let deferred = promise.defer();
-
-  gNewTab = aTab;
-  ok(!!gNewTab, "Second tab created.");
-
-  gClient.listTabs().then(aResponse => {
-    let targetActor = aResponse.tabs.filter(aGrip => aGrip.url == TAB1_URL).pop();
-    ok(targetActor,
-      "Should find a target actor for the first tab.");
+async function testNewWindow(client, win) {
+  ok(!!win, "Second window created.");
 
-    is(aResponse.selected, 1,
-      "The first tab is selected.");
-
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
-function testNewWindow(aWindow) {
-  let deferred = promise.defer();
+  win.focus();
 
-  gNewWindow = aWindow;
-  ok(!!gNewWindow, "Second window created.");
-
-  gNewWindow.focus();
-
-  let topWindow = Services.wm.getMostRecentWindow("navigator:browser");
-  is(topWindow, gNewWindow,
-    "The second window is on top.");
-
-  let isActive = promise.defer();
-  let isLoaded = promise.defer();
+  const topWindow = Services.wm.getMostRecentWindow("navigator:browser");
+  is(topWindow, win, "The second window is on top.");
 
-  promise.all([isActive.promise, isLoaded.promise]).then(() => {
-    gClient.listTabs().then(aResponse => {
-      is(aResponse.selected, 2,
-        "The second tab is selected.");
+  const isActive = promise.defer();
+  const isLoaded = promise.defer();
 
-      deferred.resolve();
-    });
-  });
-
-  if (Services.focus.activeWindow != gNewWindow) {
-    gNewWindow.addEventListener("activate", function onActivate(aEvent) {
-      if (aEvent.target != gNewWindow) {
+  if (Services.focus.activeWindow != win) {
+    win.addEventListener("activate", function onActivate(event) {
+      if (event.target != win) {
         return;
       }
-      gNewWindow.removeEventListener("activate", onActivate, true);
+      win.removeEventListener("activate", onActivate, true);
       isActive.resolve();
     }, true);
   } else {
     isActive.resolve();
   }
 
-  let contentLocation = gNewWindow.content.location.href;
+  const contentLocation = win.content.location.href;
   if (contentLocation != TAB2_URL) {
-    gNewWindow.document.addEventListener("load", function onLoad(aEvent) {
-      if (aEvent.target.documentURI != TAB2_URL) {
+    win.document.addEventListener("load", function onLoad(event) {
+      if (event.target.documentURI != TAB2_URL) {
         return;
       }
-      gNewWindow.document.removeEventListener("load", onLoad, true);
+      win.document.removeEventListener("load", onLoad, true);
       isLoaded.resolve();
     }, true);
   } else {
     isLoaded.resolve();
   }
 
-  return deferred.promise;
+  await isActive.promise;
+  await isLoaded.promise;
+  const response = await client.listTabs();
+  is(response.selected, 2, "The second tab is selected.");
 }
 
-function testFocusFirst() {
-  let deferred = promise.defer();
-
-  once(window.content, "focus").then(() => {
-    gClient.listTabs().then(aResponse => {
-      is(aResponse.selected, 1,
-        "The first tab is selected after focusing on it.");
-
-      deferred.resolve();
-    });
-  });
+async function testFocusFirst(client) {
+  const onFocus = once(window.content, "focus");
 
   window.content.focus();
+  await onFocus;
 
-  return deferred.promise;
+  const response = await client.listTabs();
+  is(response.selected, 1, "The first tab is selected after focusing on it.");
 }
 
-function testRemoveTab() {
-  let deferred = promise.defer();
-
-  gNewWindow.close();
+async function testRemoveTab(client, win, tab) {
+  win.close();
 
   // give it time to close
-  executeSoon(function () { continue_remove_tab(deferred); });
-  return deferred.promise;
+  await new Promise(resolve => executeSoon(resolve));
+  await continue_remove_tab(client, tab);
 }
 
-function continue_remove_tab(deferred)
+async function continue_remove_tab(client, tab)
 {
-  removeTab(gNewTab);
-
-  gClient.listTabs().then(aResponse => {
-    // Verify that tabs are no longer included in listTabs.
-    let foundTab1 = aResponse.tabs.some(aGrip => aGrip.url == TAB1_URL);
-    let foundTab2 = aResponse.tabs.some(aGrip => aGrip.url == TAB2_URL);
-    ok(!foundTab1, "Tab1 should be gone.");
-    ok(!foundTab2, "Tab2 should be gone.");
+  removeTab(tab);
 
-    is(aResponse.selected, 0,
-      "The original tab is selected.");
+  const response = await client.listTabs();
+  // Verify that tabs are no longer included in listTabs.
+  let foundTab1 = response.tabs.some(grip => grip.url == TAB1_URL);
+  let foundTab2 = response.tabs.some(grip => grip.url == TAB2_URL);
+  ok(!foundTab1, "Tab1 should be gone.");
+  ok(!foundTab2, "Tab2 should be gone.");
 
-    deferred.resolve();
-  });
+  is(response.selected, 0, "The original tab is selected.");
 }
-
-registerCleanupFunction(function () {
-  gNewTab = null;
-  gNewWindow = null;
-  gClient = null;
-});