Bug 1261842 - Update browser_privatebrowsing_downloadLastDir_toggle.js to use add_task and BrowserTestUtils. r?jdm draft
authorMike Conley <mconley@mozilla.com>
Tue, 24 May 2016 18:38:41 -0400
changeset 392008 cb6234559ae0a1ea2e32bd901235ad4aa5373f6c
parent 392007 086fe0d339c1f1aaec828f95a7d242010c067375
child 392009 977c7609fadf1eb43fcbe4dbf6a217e196253866
push id23919
push usermconley@mozilla.com
push dateFri, 22 Jul 2016 20:54:03 +0000
reviewersjdm
bugs1261842
milestone50.0a1
Bug 1261842 - Update browser_privatebrowsing_downloadLastDir_toggle.js to use add_task and BrowserTestUtils. r?jdm MozReview-Commit-ID: 6S64VvZpwDf
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_toggle.js
@@ -1,97 +1,105 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+Cu.import("resource://gre/modules/FileUtils.jsm");
+Cu.import("resource://gre/modules/DownloadLastDir.jsm");
 
-function test() {
-  waitForExplicitFinish();
-
-  let FileUtils =
-    Cu.import("resource://gre/modules/FileUtils.jsm", {}).FileUtils;
-  let DownloadLastDir =
-    Cu.import("resource://gre/modules/DownloadLastDir.jsm", {}).DownloadLastDir;
-
+/**
+ * Tests how the browser remembers the last download folder
+ * from download to download, with a particular emphasis
+ * on how it behaves when private browsing windows open.
+ */
+add_task(function* test_downloads_last_dir_toggle() {
   let tmpDir = FileUtils.getDir("TmpD", [], true);
   let dir1 = newDirectory();
 
   registerCleanupFunction(function () {
     Services.prefs.clearUserPref("browser.download.lastDir");
     dir1.remove(true);
   });
 
-  function testOnWindow(aPrivate, aCallback) {
-    whenNewWindowLoaded({private: aPrivate}, function(win) {
-      let gDownloadLastDir = new DownloadLastDir(win);
-      aCallback(win, gDownloadLastDir);
-      gDownloadLastDir.cleanupPrivateFile();
-      win.close();
-    });
-  }
+  let win = yield BrowserTestUtils.openNewBrowserWindow();
+  let gDownloadLastDir = new DownloadLastDir(win);
+  is(typeof gDownloadLastDir, "object",
+     "gDownloadLastDir should be a valid object");
+  is(gDownloadLastDir.file, null,
+     "gDownloadLastDir.file should be null to start with");
 
-  function checkDownloadLastDirInit(aWin, gDownloadLastDir, aCallback) {
-    is(typeof gDownloadLastDir, "object",
-       "gDownloadLastDir should be a valid object");
-    is(gDownloadLastDir.file, null,
-       "gDownloadLastDir.file should be null to start with");
+  gDownloadLastDir.file = tmpDir;
+  is(gDownloadLastDir.file.path, tmpDir.path,
+     "LastDir should point to the temporary directory");
+  isnot(gDownloadLastDir.file, tmpDir,
+        "gDownloadLastDir.file should not be pointing to the tmpDir");
+
+  gDownloadLastDir.file = 1; // not an nsIFile
+  is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
 
-    gDownloadLastDir.file = tmpDir;
-    is(gDownloadLastDir.file.path, tmpDir.path,
-       "LastDir should point to the temporary directory");
-    isnot(gDownloadLastDir.file, tmpDir,
-          "gDownloadLastDir.file should not be pointing to the tmpDir");
+  gDownloadLastDir.file = tmpDir;
+  clearHistory();
+  is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
+
+  gDownloadLastDir.file = tmpDir;
+  yield BrowserTestUtils.closeWindow(win);
 
-    gDownloadLastDir.file = 1; // not an nsIFile
-    is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
-
-    gDownloadLastDir.file = tmpDir;
-    clearHistory();
-    is(gDownloadLastDir.file, null, "gDownloadLastDir.file should be null");
-
-    gDownloadLastDir.file = tmpDir;
-    aCallback();
-  }
+  info("Opening the first private window");
+  yield testHelper({ private: true, expectedDir: tmpDir });
+  info("Opening a non-private window");
+  yield testHelper({ private: false, expectedDir: tmpDir });
+  info("Opening a private window and setting download directory");
+  yield testHelper({ private: true, setDir: dir1, expectedDir: dir1 });
+  info("Opening a non-private window and checking download directory");
+  yield testHelper({ private: false, expectedDir: tmpDir });
+  info("Opening private window and clearing history");
+  yield testHelper({ private: true, clearHistory: true, expectedDir: null });
+  info("Opening a non-private window and checking download directory");
+  yield testHelper({ private: true, expectedDir: null });
+});
 
-  function checkDownloadLastDir(aWin, gDownloadLastDir, aLastDir, aUpdate, aCallback) {
-    if (aUpdate)
-      gDownloadLastDir.file = aLastDir;
-    is(gDownloadLastDir.file.path, aLastDir.path,
-       "gDownloadLastDir should point to the expected last directory");
-    isnot(gDownloadLastDir.file, aLastDir,
-          "gDownloadLastDir.file should not be pointing to the last directory");
-    aCallback();
-  }
-
-  function checkDownloadLastDirNull(aWin, gDownloadLastDir, aCallback) {
-    is(gDownloadLastDir.file, null, "gDownloadLastDir should be null");
-    aCallback();
-  }
+/**
+ * Opens a new window and performs some test actions on it based
+ * on the options object that have been passed in.
+ *
+ * @param options (Object)
+ *        An object with the following properties:
+ *
+ *        clearHistory (bool, optional):
+ *          Whether or not to simulate clearing session history.
+ *          Defaults to false.
+ *
+ *        setDir (nsIFile, optional):
+ *          An nsIFile for setting the last download directory.
+ *          If not set, the load download directory is not changed.
+ *
+ *        expectedDir (nsIFile, expectedDir):
+ *          An nsIFile for what we expect the last download directory
+ *          should be. The nsIFile is not compared directly - only
+ *          paths are compared. If expectedDir is not set, then the
+ *          last download directory is expected to be null.
+ *
+ * @returns Promise
+ */
+function testHelper(options) {
+  return new Task.spawn(function() {
+    let win = yield BrowserTestUtils.openNewBrowserWindow(options);
+    let gDownloadLastDir = new DownloadLastDir(win);
 
-  testOnWindow(false, function(win, downloadDir) {
-    checkDownloadLastDirInit(win, downloadDir, function() {
-      testOnWindow(true, function(win, downloadDir) {
-        checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
-          testOnWindow(false, function(win, downloadDir) {
-            checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
-              testOnWindow(true, function(win, downloadDir) {
-                checkDownloadLastDir(win, downloadDir, dir1, true, function() {
-                  testOnWindow(false, function(win, downloadDir) {
-                    checkDownloadLastDir(win, downloadDir, tmpDir, false, function() {
-                      testOnWindow(true, function(win, downloadDir) {
-                        clearHistory();
-                        checkDownloadLastDirNull(win, downloadDir, function() {
-                          testOnWindow(false, function(win, downloadDir) {
-                            checkDownloadLastDirNull(win, downloadDir, finish);
-                          });
-                        });
-                      });
-                    });
-                  });
-                });
-              });
-            });
-          });
-        });
-      });
-    });
+    if (options.clearHistory) {
+      clearHistory();
+    }
+
+    if (options.setDir) {
+      gDownloadLastDir.file = options.setDir;
+    }
+
+    let expectedDir = options.expectedDir;
+
+    if (expectedDir) {
+      is(gDownloadLastDir.file.path, expectedDir.path,
+         "gDownloadLastDir should point to the expected last directory");
+      isnot(gDownloadLastDir.file, expectedDir,
+            "gDownloadLastDir.file should not be pointing to the last directory");
+    } else {
+      is(gDownloadLastDir.file, null, "gDownloadLastDir should be null");
+    }
+
+    gDownloadLastDir.cleanupPrivateFile();
+    yield BrowserTestUtils.closeWindow(win);
   });
 }