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/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.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/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js')
-rw-r--r-- | comm/mail/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/comm/mail/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js b/comm/mail/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js new file mode 100644 index 0000000000..6a763d5c43 --- /dev/null +++ b/comm/mail/components/extensions/test/browser/browser_ext_compose_begin_bug1691254.js @@ -0,0 +1,141 @@ +/* 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/. */ + +requestLongerTimeout(2); + +var { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); + +let account = createAccount("pop3"); +createAccount("local"); +MailServices.accounts.defaultAccount = account; + +let defaultIdentity = addIdentity(account); +defaultIdentity.composeHtml = true; +let nonDefaultIdentity = addIdentity(account); +nonDefaultIdentity.composeHtml = false; + +let rootFolder = account.incomingServer.rootFolder; +rootFolder.createSubfolder("test", null); +let folder = rootFolder.getChildNamed("test"); +createMessages(folder, 4); + +/* Test if line breaks in HTML are ignored (see bug 1691254). */ +add_task(async function testBR() { + let files = { + "background.js": async () => { + let accounts = await browser.accounts.list(); + browser.test.assertEq(2, accounts.length, "number of accounts"); + let popAccount = accounts.find(a => a.type == "pop3"); + let folder = popAccount.folders.find(f => f.name == "test"); + let { messages } = await browser.messages.list(folder); + browser.test.assertEq(4, messages.length, "number of messages"); + + let body = `<html><head>\r\n\r\n \r\n<meta http-equiv="content-type" content="text/html; charset=UTF-8">\r\n\r\n </head><body>\r\n \r\n<p><font face="monospace">This is some <br> HTML text</font><br>\r\n </p>\r\n\r\n \r\n\r\n\r\n</body></html>\r\n\r\n\r\n`; + let tests = [ + { + description: "Begin new.", + funcName: "beginNew", + arguments: [{ body }], + }, + { + description: "Edit as new.", + funcName: "beginNew", + arguments: [messages[0].id, { body }], + }, + { + description: "Reply default.", + funcName: "beginReply", + arguments: [messages[0].id, { body }], + }, + { + description: "Reply as replyToSender.", + funcName: "beginReply", + arguments: [messages[0].id, "replyToSender", { body }], + }, + { + description: "Reply as replyToList.", + funcName: "beginReply", + arguments: [messages[0].id, "replyToList", { body }], + }, + { + description: "Reply as replyToAll.", + funcName: "beginReply", + arguments: [messages[0].id, "replyToAll", { body }], + }, + { + description: "Forward default.", + funcName: "beginForward", + arguments: [messages[0].id, { body }], + }, + { + description: "Forward inline.", + funcName: "beginForward", + arguments: [messages[0].id, "forwardInline", { body }], + }, + { + description: "Forward as attachment.", + funcName: "beginForward", + arguments: [messages[0].id, "forwardAsAttachment", { body }], + }, + ]; + + for (let test of tests) { + browser.test.log(JSON.stringify(test)); + let createdWindowPromise = window.waitForEvent("windows.onCreated"); + await browser.compose[test.funcName](...test.arguments); + + let [createdWindow] = await createdWindowPromise; + browser.test.assertEq("messageCompose", createdWindow.type); + browser.test.sendMessage("checkBody", test); + await window.waitForMessage(); + let removedWindowPromise = window.waitForEvent("windows.onRemoved"); + browser.windows.remove(createdWindow.id); + await removedWindowPromise; + } + + browser.test.notifyPass("finished"); + }, + "utils.js": await getUtilsJS(), + }; + let extension = ExtensionTestUtils.loadExtension({ + files, + manifest: { + background: { scripts: ["utils.js", "background.js"] }, + permissions: ["accountsRead", "messagesRead"], + }, + }); + extension.onMessage("checkBody", async test => { + let composeWindows = [...Services.wm.getEnumerator("msgcompose")]; + is(composeWindows.length, 1); + await new Promise(resolve => composeWindows[0].setTimeout(resolve)); + + is(composeWindows[0].IsHTMLEditor(), true, "composition mode"); + + let editor = composeWindows[0].GetCurrentEditor(); + let actualHTML = editor.outputToString( + "text/html", + Ci.nsIDocumentEncoder.OutputRaw + ); + let brCounts = (actualHTML.match(/<br>/g) || []).length; + is( + brCounts, + 2, + `[${test.description}] Number of br tags in html is correct (${actualHTML}).` + ); + + let eqivCounts = (actualHTML.match(/http-equiv/g) || []).length; + is( + eqivCounts, + 1, + `[${test.description}] Number of http-equiv meta tags in html is correct (${actualHTML}).` + ); + extension.sendMessage(); + }); + + await extension.startup(); + await extension.awaitFinish("finished"); + await extension.unload(); +}); |