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 --- .../composition/browser_signatureUpdating.js | 276 +++++++++++++++++++++ 1 file changed, 276 insertions(+) create mode 100644 comm/mail/test/browser/composition/browser_signatureUpdating.js (limited to 'comm/mail/test/browser/composition/browser_signatureUpdating.js') diff --git a/comm/mail/test/browser/composition/browser_signatureUpdating.js b/comm/mail/test/browser/composition/browser_signatureUpdating.js new file mode 100644 index 0000000000..1555703e27 --- /dev/null +++ b/comm/mail/test/browser/composition/browser_signatureUpdating.js @@ -0,0 +1,276 @@ +/* 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 that the signature updates properly when switching identities. + */ + +// mail.identity.id1.htmlSigFormat = false +// mail.identity.id1.htmlSigText = "Tinderbox is soo 90ies" + +// mail.identity.id2.htmlSigFormat = true +// mail.identity.id2.htmlSigText = "Tinderboxpushlog is the new hotness!" + +"use strict"; + +var { close_compose_window, open_compose_new_mail, setup_msg_contents } = + ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm"); +var { be_in_folder, FAKE_SERVER_HOSTNAME, get_special_folder } = + ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" + ); + +var { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); + +var cwc = null; // compose window controller + +add_setup(async function () { + requestLongerTimeout(2); + + // These prefs can't be set in the manifest as they contain white-space. + Services.prefs.setStringPref( + "mail.identity.id1.htmlSigText", + "Tinderbox is soo 90ies" + ); + Services.prefs.setStringPref( + "mail.identity.id2.htmlSigText", + "Tinderboxpushlog is the new hotness!" + ); + + // Ensure we're in the tinderbox account as that has the right identities set + // up for this test. + let server = MailServices.accounts.findServer( + "tinderbox", + FAKE_SERVER_HOSTNAME, + "pop3" + ); + let inbox = await get_special_folder( + Ci.nsMsgFolderFlags.Inbox, + false, + server + ); + await be_in_folder(inbox); +}); + +registerCleanupFunction(function () { + Services.prefs.clearUserPref("mail.compose.default_to_paragraph"); + Services.prefs.clearUserPref("mail.identity.id1.compose_html"); + Services.prefs.clearUserPref("mail.identity.id1.htmlSigText"); + Services.prefs.clearUserPref("mail.identity.id2.htmlSigText"); + Services.prefs.clearUserPref( + "mail.identity.id1.suppress_signature_separator" + ); + Services.prefs.clearUserPref( + "mail.identity.id2.suppress_signature_separator" + ); +}); + +/** + * Test that the plaintext compose window has a signature initially, + * and has the correct signature after switching to another identity. + */ +async function plaintextComposeWindowSwitchSignatures(suppressSigSep) { + Services.prefs.setBoolPref("mail.identity.id1.compose_html", false); + Services.prefs.setBoolPref( + "mail.identity.id1.suppress_signature_separator", + suppressSigSep + ); + Services.prefs.setBoolPref( + "mail.identity.id2.suppress_signature_separator", + suppressSigSep + ); + cwc = open_compose_new_mail(); + + let contentFrame = cwc.window.document.getElementById("messageEditor"); + let mailBody = contentFrame.contentDocument.body; + + // The first node in the body should be a BR node, which allows the user + // to insert text before / outside of the signature. + Assert.equal(mailBody.firstChild.localName, "br"); + + setup_msg_contents(cwc, "", "Plaintext compose window", "Body, first line."); + + let node = mailBody.lastChild; + + // The last node is a BR - this allows users to put text after the + // signature without it being styled like the signature. + Assert.equal(node.localName, "br"); + node = node.previousSibling; + + // Now we should have the DIV node that contains the signature, with + // the class moz-signature. + Assert.equal(node.localName, "div"); + + const kSeparator = "-- "; + const kSigClass = "moz-signature"; + Assert.equal(node.className, kSigClass); + + let sigNode = node.firstChild; + + if (!suppressSigSep) { + Assert.equal(sigNode.textContent, kSeparator); + let brNode = sigNode.nextSibling; + Assert.equal(brNode.localName, "br"); + sigNode = brNode.nextSibling; + } + + let expectedText = "Tinderbox is soo 90ies"; + Assert.equal(sigNode.textContent, expectedText); + + // Now switch identities! + await chooseIdentity(cwc.window, "id2"); + + node = contentFrame.contentDocument.body.lastChild; + + // The last node is a BR - this allows users to put text after the + // signature without it being styled like the signature. + Assert.equal(node.localName, "br"); + node = node.previousSibling; + + Assert.equal(node.localName, "div"); + Assert.equal(node.className, kSigClass); + + sigNode = node.firstChild; + + if (!suppressSigSep) { + expectedText = "-- "; + Assert.equal(sigNode.textContent, kSeparator); + let brNode = sigNode.nextSibling; + Assert.equal(brNode.localName, "br"); + sigNode = brNode.nextSibling; + } + + expectedText = "Tinderboxpushlog is the new *hotness!*"; + Assert.equal(sigNode.textContent, expectedText); + + // Now check that the original signature has been removed by ensuring + // that there's only one node with class moz-signature. + let sigs = contentFrame.contentDocument.querySelectorAll("." + kSigClass); + Assert.equal(sigs.length, 1); + + // And ensure that the text we wrote wasn't altered + let bodyFirstChild = contentFrame.contentDocument.body.firstChild; + + while (node != bodyFirstChild) { + node = node.previousSibling; + } + + Assert.equal(node.nodeValue, "Body, first line."); + + close_compose_window(cwc); +} + +add_task(async function testPlaintextComposeWindowSwitchSignatures() { + await plaintextComposeWindowSwitchSignatures(false); +}); + +add_task( + async function testPlaintextComposeWindowSwitchSignaturesWithSuppressedSeparator() { + await plaintextComposeWindowSwitchSignatures(true); + } +); + +/** + * Same test, but with an HTML compose window + */ +async function HTMLComposeWindowSwitchSignatures( + suppressSigSep, + paragraphFormat +) { + Services.prefs.setBoolPref( + "mail.compose.default_to_paragraph", + paragraphFormat + ); + + Services.prefs.setBoolPref("mail.identity.id1.compose_html", true); + Services.prefs.setBoolPref( + "mail.identity.id1.suppress_signature_separator", + suppressSigSep + ); + Services.prefs.setBoolPref( + "mail.identity.id2.suppress_signature_separator", + suppressSigSep + ); + cwc = open_compose_new_mail(); + + setup_msg_contents(cwc, "", "HTML compose window", "Body, first line."); + + let contentFrame = cwc.window.document.getElementById("messageEditor"); + let node = contentFrame.contentDocument.body.lastChild; + + // In html compose, the signature is inside the last node, which has a + // class="moz-signature". + Assert.equal(node.className, "moz-signature"); + node = node.firstChild; // text node containing the signature divider + if (suppressSigSep) { + Assert.equal(node.nodeValue, "Tinderbox is soo 90ies"); + } else { + Assert.equal(node.nodeValue, "-- \nTinderbox is soo 90ies"); + } + + // Now switch identities! + await chooseIdentity(cwc.window, "id2"); + + node = contentFrame.contentDocument.body.lastChild; + + // In html compose, the signature is inside the last node + // with class="moz-signature". + Assert.equal(node.className, "moz-signature"); + node = node.firstChild; // text node containing the signature divider + if (!suppressSigSep) { + Assert.equal(node.nodeValue, "-- "); + node = node.nextSibling; + Assert.equal(node.localName, "br"); + node = node.nextSibling; + } + Assert.equal(node.nodeValue, "Tinderboxpushlog is the new "); + node = node.nextSibling; + Assert.equal(node.localName, "b"); + node = node.firstChild; + Assert.equal(node.nodeValue, "hotness!"); + + // Now check that the original signature has been removed, + // and no blank lines got added! + node = contentFrame.contentDocument.body.firstChild; + let textNode; + if (paragraphFormat) { + textNode = node.firstChild; + } else { + textNode = node; + } + Assert.equal(textNode.nodeValue, "Body, first line."); + if (!paragraphFormat) { + node = node.nextSibling; + Assert.equal(node.localName, "br"); + } + node = node.nextSibling; + // check that the signature is immediately after the message text. + Assert.equal(node.className, "moz-signature"); + // check that that the signature is the last node. + Assert.equal(node, contentFrame.contentDocument.body.lastChild); + + close_compose_window(cwc); +} + +add_task(async function testHTMLComposeWindowSwitchSignatures() { + await HTMLComposeWindowSwitchSignatures(false, false); +}); + +add_task( + async function testHTMLComposeWindowSwitchSignaturesWithSuppressedSeparator() { + await HTMLComposeWindowSwitchSignatures(true, false); + } +); + +add_task(async function testHTMLComposeWindowSwitchSignaturesParagraphFormat() { + await HTMLComposeWindowSwitchSignatures(false, true); +}); + +add_task( + async function testHTMLComposeWindowSwitchSignaturesWithSuppressedSeparatorParagraphFormat() { + await HTMLComposeWindowSwitchSignatures(true, true); + } +); -- cgit v1.2.3