From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser_customFolderTreeMode.js | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js (limited to 'comm/mail/test/browser/folder-tree-modes/browser_customFolderTreeMode.js') 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(); +}); -- cgit v1.2.3