summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js')
-rw-r--r--comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js b/comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js
new file mode 100644
index 0000000000..49189c9254
--- /dev/null
+++ b/comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js
@@ -0,0 +1,142 @@
+/* -*- Mode: JavaScript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
+
+/*
+ * Tests for custom folder tree modes. The test mode is provided by the test
+ * extension in the test-extension subdirectory.
+ */
+
+"use strict";
+
+var {
+ assert_folder_mode,
+ assert_folder_visible,
+ FAKE_SERVER_HOSTNAME,
+ get_special_folder,
+ mc,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { close_window, plan_for_new_window, wait_for_new_window } =
+ ChromeUtils.import("resource://testing-common/mozmill/WindowHelpers.jsm");
+
+var { ExtensionSupport } = ChromeUtils.import(
+ "resource:///modules/ExtensionSupport.jsm"
+);
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+var { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
+
+var gInbox;
+
+add_setup(async function () {
+ let server = MailServices.accounts.findServer(
+ "tinderbox",
+ FAKE_SERVER_HOSTNAME,
+ "pop3"
+ );
+ gInbox = await get_special_folder(Ci.nsMsgFolderFlags.Inbox, false, server);
+
+ ExtensionSupport.registerWindowListener("mochitest", {
+ chromeURLs: ["chrome://messenger/content/messenger.xhtml"],
+ onLoadWindow(aWindow) {
+ let testFolderTreeMode = {
+ __proto__: aWindow.IFolderTreeMode,
+ generateMap(aFTV) {
+ var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+ );
+ // Pick the tinderbox@foo.invalid inbox and use it as the only folder
+ let server = MailServices.accounts.findServer(
+ "tinderbox",
+ "tinderbox123",
+ "pop3"
+ );
+ let item = [];
+ let inbox = new aWindow.FtvItem(
+ server.rootFolder.getChildNamed("Inbox")
+ );
+ inbox.__defineGetter__("children", () => []);
+ item.push(inbox);
+
+ if (aWindow.gFolderTreeView.activeModes.length > 1) {
+ item.unshift(new aWindow.FtvItemHeader("Test%20Mode", "testmode"));
+ }
+
+ return item;
+ },
+ };
+
+ aWindow.gFolderTreeView.registerFolderTreeMode(
+ "testmode",
+ testFolderTreeMode,
+ "Test Mode"
+ );
+ },
+ });
+});
+
+// Provided by the extension in test-extension.
+var kTestModeID = "testmode";
+
+/**
+ * Switch to the mode and verify that it displays correctly.
+ */
+add_task(function test_switch_to_test_mode() {
+ mc.folderTreeView.activeModes = kTestModeID;
+ // Hide the all folder view mode.
+ mc.folderTreeView.activeModes = "all";
+
+ assert_folder_mode(kTestModeID);
+ assert_folder_visible(gInbox);
+});
+
+/**
+ * Open a new 3-pane window while the custom mode is selected, and make sure
+ * that the mode displayed in the new window is the custom mode.
+ */
+add_task(async function test_open_new_window_with_custom_mode() {
+ // Our selection may get lost while changing modes, and be_in_folder is
+ // not sufficient to ensure actual selection.
+ mc.folderTreeView.selectFolder(gInbox);
+
+ plan_for_new_window("mail:3pane");
+ mc.window.MsgOpenNewWindowForFolder(null, -1);
+ let mc2 = wait_for_new_window("mail:3pane");
+
+ await TestUtils.waitForCondition(() => mc2.folderTreeView.isInited);
+ assert_folder_mode(kTestModeID, mc2);
+ assert_folder_visible(gInbox, mc2);
+
+ close_window(mc2);
+});
+
+/**
+ * Switch back to all folders.
+ */
+add_task(function test_switch_to_all_folders() {
+ // Hide the test mode view enabled in the previous test. The activeModes
+ // setter should take care of restoring the "all" view and prevent and empty
+ // Folder pane.
+ mc.folderTreeView.activeModes = kTestModeID;
+ assert_folder_mode("all");
+});
+
+registerCleanupFunction(() => {
+ mc.window.gFolderTreeView.unregisterFolderTreeMode(kTestModeID);
+ ExtensionSupport.unregisterWindowListener("mochitest");
+ Assert.report(
+ false,
+ undefined,
+ undefined,
+ "Test ran to completion successfully"
+ );
+
+ // Some tests that open new windows don't return focus to the main window
+ // in a way that satisfies mochitest, and the test times out.
+ Services.focus.focusedWindow = window;
+ window.gFolderDisplay.tree.focus();
+});