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 --- comm/mail/base/test/browser/browser_messageMenu.js | 355 +++++++++++++++++++++ 1 file changed, 355 insertions(+) create mode 100644 comm/mail/base/test/browser/browser_messageMenu.js (limited to 'comm/mail/base/test/browser/browser_messageMenu.js') diff --git a/comm/mail/base/test/browser/browser_messageMenu.js b/comm/mail/base/test/browser/browser_messageMenu.js new file mode 100644 index 0000000000..7b397f922e --- /dev/null +++ b/comm/mail/base/test/browser/browser_messageMenu.js @@ -0,0 +1,355 @@ +/* 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/. */ + +const { GlodaIndexer } = ChromeUtils.import( + "resource:///modules/gloda/GlodaIndexer.jsm" +); +const { MessageGenerator } = ChromeUtils.import( + "resource://testing-common/mailnews/MessageGenerator.jsm" +); + +const nothingSelected = ["rootFolder", "noSelection", "contentTab"]; +const nothingOrMultiSelected = [...nothingSelected, "multiSelection"]; + +/** @type MenuData */ +const messageMenuData = { + newMsgCmd: {}, + replyMainMenu: { disabled: nothingSelected }, + replyNewsgroupMainMenu: { hidden: true }, + replySenderMainMenu: { hidden: true }, + menu_replyToAll: { disabled: nothingSelected }, + menu_replyToList: { disabled: true }, + menu_forwardMsg: { disabled: nothingSelected }, + forwardAsMenu: { disabled: nothingSelected }, + menu_forwardAsInline: { disabled: nothingSelected }, + menu_forwardAsAttachment: { disabled: nothingSelected }, + menu_redirectMsg: { disabled: nothingSelected }, + menu_editMsgAsNew: { disabled: nothingSelected }, + menu_editDraftMsg: { hidden: true }, + menu_newMsgFromTemplate: { hidden: true }, + menu_editTemplate: { hidden: true }, + openMessageWindowMenuitem: { + disabled: [...nothingSelected, "message", "externalMessage"], + }, + openConversationMenuitem: { + disabled: [...nothingOrMultiSelected, "externalMessage"], + }, + openFeedMessage: { hidden: true }, + menu_openFeedWebPage: { disabled: nothingSelected }, + menu_openFeedSummary: { disabled: nothingSelected }, + menu_openFeedWebPageInMessagePane: { + disabled: nothingSelected, + }, + msgAttachmentMenu: { disabled: true }, + tagMenu: { disabled: [...nothingSelected, "externalMessage"] }, + "tagMenu-addNewTag": { disabled: nothingSelected }, + "tagMenu-manageTags": { disabled: nothingSelected }, + "tagMenu-tagRemoveAll": { disabled: nothingSelected }, + markMenu: { disabled: ["rootFolder", "externalMessage", "contentTab"] }, + markReadMenuItem: { disabled: nothingSelected }, + markUnreadMenuItem: { disabled: true }, + menu_markThreadAsRead: { disabled: nothingSelected }, + menu_markReadByDate: { disabled: nothingSelected }, + menu_markAllRead: { disabled: ["rootFolder"] }, + markFlaggedMenuItem: { disabled: nothingSelected }, + menu_markAsJunk: { disabled: nothingSelected }, + menu_markAsNotJunk: { disabled: nothingSelected }, + menu_recalculateJunkScore: { + disabled: [...nothingSelected, "message"], + }, + archiveMainMenu: { disabled: [...nothingSelected, "externalMessage"] }, + menu_cancel: { hidden: true }, + moveMenu: { disabled: [...nothingSelected, "externalMessage"] }, + copyMenu: { disabled: nothingSelected }, + moveToFolderAgain: { disabled: true }, + createFilter: { disabled: [...nothingOrMultiSelected, "externalMessage"] }, + killThread: { disabled: [...nothingSelected, "message", "externalMessage"] }, + killSubthread: { + disabled: [...nothingSelected, "message", "externalMessage"], + }, + watchThread: { disabled: [...nothingSelected, "externalMessage"] }, +}; +let helper = new MenuTestHelper("messageMenu", messageMenuData); + +let tabmail = document.getElementById("tabmail"); +let rootFolder, testFolder, testMessages; +let draftsFolder, draftsMessages, templatesFolder, templatesMessages; + +add_setup(async function () { + Services.prefs.setBoolPref("mailnews.mark_message_read.auto", false); + document.getElementById("toolbar-menubar").removeAttribute("autohide"); + + let generator = new MessageGenerator(); + + MailServices.accounts.createLocalMailAccount(); + let account = MailServices.accounts.accounts[0]; + account.addIdentity(MailServices.accounts.createIdentity()); + rootFolder = account.incomingServer.rootFolder; + + rootFolder.createSubfolder("messageMenu", null); + testFolder = rootFolder + .getChildNamed("messageMenu") + .QueryInterface(Ci.nsIMsgLocalMailFolder); + const messages = [ + ...generator.makeMessages({ count: 5 }), + ...generator.makeMessages({ count: 5, msgsPerThread: 5 }), + ]; + testFolder.addMessageBatch(messages.map(message => message.toMboxString())); + testFolder.addMessage( + generator + .makeMessage({ + attachments: [ + { + body: "an attachment", + contentType: "text/plain", + filename: "attachment.txt", + }, + ], + }) + .toMboxString() + ); + testFolder.addMessage( + "From - Mon Jan 01 00:00:00 2001\n" + + "To: Mailing List \n" + + "Date: Mon, 01 Jan 2001 00:00:00 +0100\n" + + "List-Help: \n" + + "List-Post: \n" + + "List-Software: Mailing List Software\n" + + "List-Subscribe: \n" + + "Precedence: list\n" + + "Subject: Mailing List Test Mail\n" + + `Message-ID: <${Date.now()}@example.com>\n` + + "From: Mailing List \n" + + "List-Unsubscribe: ,\n" + + " \n" + + "MIME-Version: 1.0\n" + + "Content-Type: text/plain; charset=UTF-8\n" + + "Content-Transfer-Encoding: quoted-printable\n" + + "\n" + + "Mailing List Message Body\n" + ); + testMessages = [...testFolder.messages]; + + rootFolder.createSubfolder("messageMenuDrafts", null); + draftsFolder = rootFolder + .getChildNamed("messageMenuDrafts") + .QueryInterface(Ci.nsIMsgLocalMailFolder); + draftsFolder.setFlag(Ci.nsMsgFolderFlags.Drafts); + draftsFolder.addMessageBatch( + generator.makeMessages({ count: 5 }).map(message => message.toMboxString()) + ); + draftsMessages = [...draftsFolder.messages]; + rootFolder.createSubfolder("messageMenuTemplates", null); + templatesFolder = rootFolder + .getChildNamed("messageMenuTemplates") + .QueryInterface(Ci.nsIMsgLocalMailFolder); + templatesFolder.setFlag(Ci.nsMsgFolderFlags.Templates); + templatesFolder.addMessageBatch( + generator.makeMessages({ count: 5 }).map(message => message.toMboxString()) + ); + templatesMessages = [...templatesFolder.messages]; + + window.OpenMessageInNewTab(testMessages[0], { background: true }); + await BrowserTestUtils.waitForEvent( + tabmail.tabInfo[1].chromeBrowser, + "MsgLoaded" + ); + + let messageFile = new FileUtils.File( + getTestFilePath("files/sampleContent.eml") + ); + let messageURI = + Services.io.newFileURI(messageFile).spec + + "?type=application/x-message-display"; + tabmail.openTab("mailMessageTab", { background: true, messageURI }); + + window.openTab("contentTab", { + url: "https://example.com/", + background: true, + }); + + await TestUtils.waitForCondition( + () => !GlodaIndexer.indexing, + "waiting for Gloda to finish indexing", + 500 + ); + + registerCleanupFunction(() => { + tabmail.closeOtherTabs(0); + MailServices.accounts.removeAccount(account, false); + Services.prefs.clearUserPref("mailnews.mark_message_read.auto"); + }); +}); + +add_task(async function testRootFolder() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: rootFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + await helper.testAllItems("rootFolder"); +}); + +add_task(async function testNoSelection() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: testFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + await helper.testAllItems("noSelection"); +}); + +add_task(async function testSingleSelection() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: testFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + + // This message is not marked as read. + tabmail.currentAbout3Pane.threadTree.selectedIndex = 1; + await helper.testAllItems("singleSelection"); + + // Mark it as read. + testMessages[1].markRead(true); + await helper.testItems({ + markMenu: {}, + markReadMenuItem: { disabled: true }, + markUnreadMenuItem: {}, + menu_markThreadAsRead: { disabled: true }, + }); + + // Mark it as starred. + testMessages[1].markFlagged(true); + await helper.testItems({ + markMenu: {}, + markFlaggedMenuItem: { checked: true }, + }); + + testFolder.addKeywordsToMessages([testMessages[1]], "$label1"); + await helper.testItems({ + tagMenu: {}, + "tagMenu-tagRemoveAll": {}, + }); + + // This message has an attachment. + tabmail.currentAbout3Pane.threadTree.selectedIndex = 6; + await BrowserTestUtils.browserLoaded( + tabmail.currentAboutMessage.getMessagePaneBrowser() + ); + + await helper.testItems({ + msgAttachmentMenu: {}, + "menu-openAllAttachments": {}, + "menu-saveAllAttachments": {}, + "menu-detachAllAttachments": {}, + "menu-deleteAllAttachments": {}, + }); + + // This message is from a mailing list. + tabmail.currentAbout3Pane.threadTree.selectedIndex = 7; + await BrowserTestUtils.browserLoaded( + tabmail.currentAboutMessage.getMessagePaneBrowser() + ); + await helper.testItems({ + menu_replyToList: { disabled: false }, + }); + + // FIXME: Select another message and wait for it load in order to properly + // clear about:message. + tabmail.currentAbout3Pane.threadTree.selectedIndex = 1; + await BrowserTestUtils.browserLoaded( + tabmail.currentAboutMessage.getMessagePaneBrowser() + ); +}); + +add_task(async function testMultiSelection() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: testFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + + // These messages aren't marked as read or flagged, or have a tag. + tabmail.currentAbout3Pane.threadTree.selectedIndices = [2, 4]; + await helper.testAllItems("multiSelection"); + + // ONE of these messages IS marked as read and flagged, and it has a tag. + tabmail.currentAbout3Pane.threadTree.selectedIndices = [1, 2, 4]; + await helper.testItems({ + markMenu: {}, + markReadMenuItem: {}, + markUnreadMenuItem: {}, + menu_markThreadAsRead: { disabled: false }, + markFlaggedMenuItem: { checked: true }, + tagMenu: {}, + "tagMenu-tagRemoveAll": {}, + }); + + // Messages in a collapsed thread. + tabmail.currentAbout3Pane.threadTree.selectedIndex = 5; + await helper.testItems({ + replyMainMenu: { disabled: true }, + menu_replyToAll: { disabled: true }, + menu_redirectMsg: { disabled: true }, + menu_editMsgAsNew: { disabled: true }, + }); +}); + +add_task(async function testDraftsFolder() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: draftsFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + + tabmail.currentAbout3Pane.threadTree.selectedIndices = [1, 2, 4]; + await helper.testItems({ + menu_editDraftMsg: { hidden: false }, + }); + tabmail.currentAbout3Pane.threadTree.selectedIndices = [3]; + await helper.testItems({ + menu_editDraftMsg: { hidden: false }, + }); +}); + +add_task(async function testTemplatesFolder() { + tabmail.currentAbout3Pane.restoreState({ + folderPaneVisible: true, + messagePaneVisible: true, + folderURI: templatesFolder, + }); + await new Promise(resolve => setTimeout(resolve)); + + tabmail.currentAbout3Pane.threadTree.selectedIndices = [1, 2, 4]; + await helper.testItems({ + menu_newMsgFromTemplate: { hidden: false }, + menu_editTemplate: { hidden: false }, + }); + tabmail.currentAbout3Pane.threadTree.selectedIndices = [3]; + await helper.testItems({ + menu_newMsgFromTemplate: { hidden: false }, + menu_editTemplate: { hidden: false }, + }); +}); + +add_task(async function testMessageTab() { + tabmail.switchToTab(1); + await helper.testAllItems("message"); +}); + +add_task(async function testExternalMessageTab() { + tabmail.switchToTab(2); + await helper.testAllItems("externalMessage"); +}); + +add_task(async function testContentTab() { + tabmail.switchToTab(3); + await helper.testAllItems("contentTab"); +}); -- cgit v1.2.3