diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js')
-rw-r--r-- | comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js b/comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js new file mode 100644 index 0000000000..d5459b8692 --- /dev/null +++ b/comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js @@ -0,0 +1,248 @@ +/* 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/. */ + +/* + * Test that messages without a backing view are opened correctly. Examples of + * messages without a backing view are those opened from the command line or + * desktop search integration results. + */ + +"use strict"; + +var { + add_to_toolbar, + assert_message_pane_focused, + assert_messages_not_in_view, + assert_number_of_tabs_open, + assert_selected_and_displayed, + assert_tab_mode_name, + assert_tab_titled_from, + be_in_folder, + close_message_window, + close_tab, + create_folder, + get_about_3pane, + make_message_sets_in_folders, + mc, + plan_for_message_display, + remove_from_toolbar, + reset_open_message_behavior, + set_mail_view, + set_open_message_behavior, + switch_tab, + wait_for_message_display_completion, +} = ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" +); +var { async_plan_for_new_window, wait_for_new_window } = ChromeUtils.import( + "resource://testing-common/mozmill/WindowHelpers.jsm" +); + +var { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm"); +var { MailViewConstants } = ChromeUtils.import( + "resource:///modules/MailViewManager.jsm" +); + +// One folder's enough +var folder = null; + +// A list of the message headers in this folder +var msgHdrsInFolder = null; + +// Number of messages to open for multi-message tests +var NUM_MESSAGES_TO_OPEN = 5; + +add_setup(async function () { + folder = await create_folder("OpeningMessagesNoBackingViewA"); + await make_message_sets_in_folders([folder], [{ count: 10 }]); +}); + +/** + * Test opening a single message without a backing view in a new tab. + */ +async function test_open_single_message_without_backing_view_in_tab() { + set_open_message_behavior("NEW_TAB"); + let folderTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let preCount = + mc.window.document.getElementById("tabmail").tabContainer.allTabs.length; + await be_in_folder(folder); + + let win = get_about_3pane(); + + if (!msgHdrsInFolder) { + msgHdrsInFolder = []; + // Make a list of all the message headers in this folder + for (let i = 0; i < 10; i++) { + msgHdrsInFolder.push(win.gDBView.getMsgHdrAt(i)); + } + } + // Get a reference to a header + let msgHdr = msgHdrsInFolder[4]; + // Open it + MailUtils.displayMessage(msgHdr); + // This is going to trigger a message display in the main 3pane window. Since + // the message will open in a new tab, we shouldn't + // plan_for_message_display(). + wait_for_message_display_completion(mc, true); + // Check that the tab count has increased by 1 + assert_number_of_tabs_open(preCount + 1); + // Check that the currently displayed tab is a message tab (i.e. our newly + // opened tab is in the foreground) + assert_tab_mode_name(null, "mailMessageTab"); + // Check that the message header displayed is the right one + assert_selected_and_displayed(msgHdr); + // Check that the message pane is focused + assert_message_pane_focused(); + // Clean up, close the tab + close_tab(mc.window.document.getElementById("tabmail").currentTabInfo); + await switch_tab(folderTab); + reset_open_message_behavior(); +} +add_task(test_open_single_message_without_backing_view_in_tab); + +/** + * Test opening multiple messages without backing views in new tabs. + */ +async function test_open_multiple_messages_without_backing_views_in_tabs() { + set_open_message_behavior("NEW_TAB"); + let folderTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let preCount = + mc.window.document.getElementById("tabmail").tabContainer.allTabs.length; + await be_in_folder(folder); + + // Get a reference to a bunch of headers + let msgHdrs = msgHdrsInFolder.slice(0, NUM_MESSAGES_TO_OPEN); + + // Open them + MailUtils.displayMessages(msgHdrs); + // This is going to trigger a message display in the main 3pane window. Since + // the message will open in a new tab, we shouldn't + // plan_for_message_display(). + wait_for_message_display_completion(mc, true); + // Check that the tab count has increased by the correct number + assert_number_of_tabs_open(preCount + NUM_MESSAGES_TO_OPEN); + // Check that the currently displayed tab is a message tab (i.e. one of our + // newly opened tabs is in the foreground) + assert_tab_mode_name(null, "mailMessageTab"); + + // Now check whether each of the NUM_MESSAGES_TO_OPEN tabs has the correct + // title + for (let i = 0; i < NUM_MESSAGES_TO_OPEN; i++) { + assert_tab_titled_from( + mc.window.document.getElementById("tabmail").tabInfo[preCount + i], + msgHdrs[i] + ); + } + + // Check whether each tab has the correct message and whether the message pane + // is focused in each case, then close it to load the previous tab. + for (let i = 0; i < NUM_MESSAGES_TO_OPEN; i++) { + assert_selected_and_displayed(msgHdrs.pop()); + assert_message_pane_focused(); + close_tab(mc.window.document.getElementById("tabmail").currentTabInfo); + } + await switch_tab(folderTab); + reset_open_message_behavior(); +} +add_task(test_open_multiple_messages_without_backing_views_in_tabs); + +/** + * Test opening a message without a backing view in a new window. + */ +async function test_open_message_without_backing_view_in_new_window() { + set_open_message_behavior("NEW_WINDOW"); + await be_in_folder(folder); + + // Select a message + let msgHdr = msgHdrsInFolder[6]; + + let newWindowPromise = async_plan_for_new_window("mail:messageWindow"); + // Open it + MailUtils.displayMessage(msgHdr); + let msgc = await newWindowPromise; + wait_for_message_display_completion(msgc, true); + + assert_selected_and_displayed(msgc, msgHdr); + // Clean up, close the window + close_message_window(msgc); + reset_open_message_behavior(); +} +add_task(test_open_message_without_backing_view_in_new_window).skip(); // TODO + +/** + * Test reusing an existing window to open a new message. + */ +async function test_open_message_without_backing_view_in_existing_window() { + set_open_message_behavior("EXISTING_WINDOW"); + await be_in_folder(folder); + + // Open up a window + let firstMsgHdr = msgHdrsInFolder[3]; + let newWindowPromise = async_plan_for_new_window("mail:messageWindow"); + MailUtils.displayMessage(firstMsgHdr); + let msgc = await newWindowPromise; + wait_for_message_display_completion(msgc, true); + + // Open another message + let msgHdr = msgHdrsInFolder[7]; + plan_for_message_display(msgc); + MailUtils.displayMessage(msgHdr); + wait_for_message_display_completion(msgc, true); + + // Check if our old window displays the message + assert_selected_and_displayed(msgc, msgHdr); + // Clean up, close the window + close_message_window(msgc); + reset_open_message_behavior(); +} +add_task(test_open_message_without_backing_view_in_existing_window).skip(); // TODO + +/** + * Time to throw a spanner in the works. Set a mail view for the folder that + * excludes every message. + */ +add_task(function test_filter_out_all_messages() { + set_mail_view(MailViewConstants.kViewItemTags, "$label1"); + // Make sure all the messages have actually disappeared + assert_messages_not_in_view(msgHdrsInFolder); +}); + +/** + * Re-run all the tests. + */ +add_task( + async function test_open_single_message_without_backing_view_in_tab_filtered() { + await test_open_single_message_without_backing_view_in_tab(); + } +); + +add_task( + async function test_open_multiple_messages_without_backing_views_in_tabs_filtered() { + await test_open_multiple_messages_without_backing_views_in_tabs(); + } +); + +add_task( + async function test_open_message_without_backing_view_in_new_window_filtered() { + await test_open_message_without_backing_view_in_new_window(); + } +).skip(); // TODO + +add_task( + async function test_open_message_without_backing_view_in_existing_window_filtered() { + await test_open_message_without_backing_view_in_existing_window(); + } +).skip(); // TODO + +/** + * Good hygiene: remove the view picker from the toolbar. + */ +add_task(function test_cleanup() { + Assert.report( + false, + undefined, + undefined, + "Test ran to completion successfully" + ); +}); |