summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/folder-display/browser_recentMenu.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/folder-display/browser_recentMenu.js')
-rw-r--r--comm/mail/test/browser/folder-display/browser_recentMenu.js195
1 files changed, 195 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-display/browser_recentMenu.js b/comm/mail/test/browser/folder-display/browser_recentMenu.js
new file mode 100644
index 0000000000..d87b119b0f
--- /dev/null
+++ b/comm/mail/test/browser/folder-display/browser_recentMenu.js
@@ -0,0 +1,195 @@
+/* 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/. */
+
+/**
+ * This tests the move/copy to recent folder menus to make sure
+ * that they get updated when messages are moved to folders, and
+ * don't get updated when we archive.
+ */
+
+"use strict";
+
+var utils = ChromeUtils.import("resource://testing-common/mozmill/utils.jsm");
+var {
+ archive_selected_messages,
+ be_in_folder,
+ create_folder,
+ get_special_folder,
+ make_message_sets_in_folders,
+ mc,
+ press_delete,
+ right_click_on_row,
+ select_click_row,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var {
+ click_menus_in_sequence,
+ close_popup_sequence,
+ click_appmenu_in_sequence,
+} = ChromeUtils.import("resource://testing-common/mozmill/WindowHelpers.jsm");
+var { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var folder1, folder2;
+var gInitRecentMenuCount;
+
+add_setup(async function () {
+ // Ensure that there are no updated folders to ensure the recent folder
+ // is empty.
+ for (let folder of MailServices.accounts.allFolders) {
+ folder.setStringProperty("MRMTime", "0");
+ }
+
+ // Try to make these folders first in alphabetic order
+ folder1 = await create_folder("aaafolder1");
+ folder2 = await create_folder("aaafolder2");
+
+ await make_message_sets_in_folders([folder1], [{ count: 3 }]);
+});
+
+add_task(async function test_move_message() {
+ await be_in_folder(folder1);
+ let msgHdr = select_click_row(0);
+ // This will cause the initial build of the move recent context menu,
+ // which should be empty and disabled.
+ await right_click_on_row(0);
+ let popups = await click_menus_in_sequence(
+ getMailContext(),
+ [{ id: "mailContext-moveMenu" }, { label: "Recent" }],
+ true
+ );
+ let recentMenu = popups[popups.length - 2].querySelector('[label="Recent"]');
+ Assert.equal(recentMenu.getAttribute("disabled"), "true");
+ gInitRecentMenuCount = recentMenu.itemCount;
+ Assert.equal(gInitRecentMenuCount, 0);
+ let hiddenPromise = BrowserTestUtils.waitForEvent(
+ getMailContext(),
+ "popuphidden"
+ );
+ close_popup_sequence(popups);
+ await hiddenPromise;
+ await new Promise(resolve => requestAnimationFrame(resolve));
+ let copyListener = {
+ copyDone: false,
+ OnStartCopy() {},
+ OnProgress(aProgress, aProgressMax) {},
+ SetMessageKey(aKey) {},
+ SetMessageId(aMessageId) {},
+ OnStopCopy(aStatus) {
+ this.copyDone = true;
+ },
+ };
+ MailServices.copy.copyMessages(
+ folder1,
+ [msgHdr],
+ folder2,
+ true,
+ copyListener,
+ mc.window.msgWindow,
+ true
+ );
+ utils.waitFor(
+ () => copyListener.copyDone,
+ "Timeout waiting for copy to complete",
+ 10000,
+ 100
+ );
+ // We've moved a message to aaafolder2 - it should appear in recent list now.
+ // Clicking the menuitem by label is not localizable, but Recent doesn't have an
+ // id we can use.
+ select_click_row(0);
+ await right_click_on_row(0);
+ popups = await click_menus_in_sequence(
+ getMailContext(),
+ [{ id: "mailContext-moveMenu" }, { label: "Recent" }],
+ true
+ );
+ let recentChildren = popups[popups.length - 1].children;
+ Assert.equal(
+ recentChildren.length,
+ gInitRecentMenuCount + 1,
+ "recent menu should have one more child after move"
+ );
+ Assert.equal(
+ recentChildren[0].label,
+ "aaafolder2",
+ "recent menu child should be aaafolder2 after move"
+ );
+ hiddenPromise = BrowserTestUtils.waitForEvent(
+ getMailContext(),
+ "popuphidden"
+ );
+ close_popup_sequence(popups);
+ await hiddenPromise;
+ await new Promise(resolve => requestAnimationFrame(resolve));
+});
+
+add_task(async function test_delete_message() {
+ press_delete(mc);
+ // We've deleted a message - we should still just have folder2 in the menu.
+ select_click_row(0); // TODO shouldn't need to do this
+ await right_click_on_row(0);
+ let popups = await click_menus_in_sequence(
+ getMailContext(),
+ [{ id: "mailContext-moveMenu" }, { label: "Recent" }],
+ true
+ );
+ let recentChildren = popups[popups.length - 1].children;
+ Assert.equal(
+ recentChildren.length,
+ gInitRecentMenuCount + 1,
+ "delete shouldn't add anything to recent menu"
+ );
+ Assert.equal(
+ recentChildren[0].label,
+ "aaafolder2",
+ "recent menu should still be aaafolder2 after delete"
+ );
+ let hiddenPromise = BrowserTestUtils.waitForEvent(
+ getMailContext(),
+ "popuphidden"
+ );
+ close_popup_sequence(popups);
+ await hiddenPromise;
+ await new Promise(resolve => requestAnimationFrame(resolve));
+});
+
+add_task(async function test_archive_message() {
+ archive_selected_messages();
+ // We've archived a message - we should still just have folder2 in the menu.
+ let archive = await get_special_folder(
+ Ci.nsMsgFolderFlags.Archive,
+ false,
+ false
+ );
+ await be_in_folder(archive.descendants[0]);
+ select_click_row(0);
+ await right_click_on_row(0);
+ let popups = await click_menus_in_sequence(
+ getMailContext(),
+ [{ id: "mailContext-moveMenu" }, { label: "Recent" }],
+ true
+ );
+ let recentChildren = popups[popups.length - 1].children;
+ Assert.equal(
+ recentChildren.length,
+ gInitRecentMenuCount + 1,
+ "archive shouldn't add anything to recent menu"
+ );
+ Assert.equal(
+ recentChildren[0].label,
+ "aaafolder2",
+ "recent menu should still be aaafolder2 after archive"
+ );
+ let hiddenPromise = BrowserTestUtils.waitForEvent(
+ getMailContext(),
+ "popuphidden"
+ );
+ close_popup_sequence(popups);
+ await hiddenPromise;
+ await new Promise(resolve => requestAnimationFrame(resolve));
+});