summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js')
-rw-r--r--comm/mail/test/browser/folder-display/browser_openingMessagesWithoutABackingView.js248
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"
+ );
+});