summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/message-window/browser_viewPlaintext.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/message-window/browser_viewPlaintext.js')
-rw-r--r--comm/mail/test/browser/message-window/browser_viewPlaintext.js138
1 files changed, 138 insertions, 0 deletions
diff --git a/comm/mail/test/browser/message-window/browser_viewPlaintext.js b/comm/mail/test/browser/message-window/browser_viewPlaintext.js
new file mode 100644
index 0000000000..a9af4caecd
--- /dev/null
+++ b/comm/mail/test/browser/message-window/browser_viewPlaintext.js
@@ -0,0 +1,138 @@
+/* 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 plain text part of multipart/alternative messages can be correctly viewed.
+ */
+
+"use strict";
+
+var { open_message_from_file } = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { close_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+
+/**
+ * Retrieve the textual content of the message and compare it.
+ *
+ * @param aWindow Message window.
+ * @param aExpected Expected content.
+ * @param aDontWantToSee Content of other MIME parts we don't want to see.
+ */
+function check_content(aWindow, aExpected, aDontWantToSee) {
+ let messageContent = aWindow.content.document.documentElement.textContent;
+
+ if (aExpected != aDontWantToSee) {
+ Assert.ok(
+ messageContent.includes(aExpected),
+ "Didn't find expected content"
+ );
+ Assert.ok(
+ !messageContent.includes(aDontWantToSee),
+ "Found content that shouldn't be there"
+ );
+ } else {
+ let ind = messageContent.indexOf(aExpected);
+ Assert.ok(ind >= 0, "Didn't find expected content");
+ if (ind >= 0) {
+ Assert.ok(
+ !messageContent.substr(ind + aExpected.length).includes(aExpected),
+ "Found content a second time"
+ );
+ }
+ }
+}
+
+/**
+ * Load a message from a file and display it as plain text and HTML. Check that the
+ * correct MIME part is displayed.
+ *
+ * @param aFilePath Path to the file containing the message to load and display.
+ * @param aExpectedPlainText Expected content when viewed as plain text.
+ * @param aExpectedHTML Expected content when viewed as HTML.
+ */
+async function checkSingleMessage(
+ aFilePath,
+ aExpectedPlainText,
+ aExpectedHTML
+) {
+ let file = new FileUtils.File(getTestFilePath(`data/${aFilePath}`));
+
+ // Load and display as plain text.
+ Services.prefs.setBoolPref("mailnews.display.prefer_plaintext", true);
+ Services.prefs.setIntPref("mailnews.display.html_as", 1);
+ let msgc = await open_message_from_file(file);
+ check_content(msgc.window, aExpectedPlainText, aExpectedHTML);
+ close_window(msgc);
+
+ // Load and display as HTML.
+ Services.prefs.setBoolPref("mailnews.display.prefer_plaintext", false);
+ Services.prefs.setIntPref("mailnews.display.html_as", 0);
+ msgc = await open_message_from_file(file);
+ check_content(msgc.window, aExpectedHTML, aExpectedPlainText);
+ close_window(msgc);
+}
+
+/**
+ * Tests that messages with various MIME parts are shown correctly when displayed
+ * as plain text or HTML.
+ */
+add_task(async function test_view() {
+ // First the straight forward tests:
+ // 1) multipart/alternative
+ // 2) multipart/alternative with embedded multipart/related
+ // 3) multipart/alternative with embedded multipart/related embedded in multipart/mixed
+ await checkSingleMessage("./test-alt.eml", "Plain Text", "HTML Body");
+ await checkSingleMessage("./test-alt-rel.eml", "Plain Text", "HTML Body");
+ await checkSingleMessage(
+ "./test-alt-rel-with-attach.eml",
+ "Plain Text",
+ "HTML Body"
+ );
+
+ // 4) HTML part missing
+ // 5) Plain part missing
+ await checkSingleMessage(
+ "./test-alt-HTML-missing.eml",
+ "Plain Text",
+ "Plain Text"
+ );
+ await checkSingleMessage(
+ "./test-alt-plain-missing.eml",
+ "HTML Body",
+ "HTML Body"
+ );
+
+ // 6) plain and HTML parts reversed in order
+ await checkSingleMessage(
+ "./test-alt-plain-HTML-reversed.eml",
+ "Plain Text",
+ "HTML Body"
+ );
+
+ // 7) 3 alt. parts with 2 plain and 1 HTML part
+ await checkSingleMessage("./test-triple-alt.eml", "Plain Text", "HTML Body");
+
+ // 8) 3 alt. parts with 2 plain and 1 multipart/related
+ await checkSingleMessage(
+ "./test-alt-rel-text.eml",
+ "Plain Text",
+ "HTML Body"
+ );
+
+ // Now some cases that don't work yet.
+ // 9) multipart/related with embedded multipart/alternative
+ await checkSingleMessage("./test-rel-alt.eml", "HTML Body", "HTML Body");
+
+ // Bug 1367156: Rogue message which has an image as the last part.
+ await checkSingleMessage("./test-alt-rogue.eml", "Plain Text", "HTML Body");
+ await checkSingleMessage("./test-alt-rogue2.eml", "Plain Text", "HTML Body");
+});
+
+registerCleanupFunction(function () {
+ Services.prefs.clearUserPref("mailnews.display.prefer_plaintext");
+ Services.prefs.clearUserPref("mailnews.display.html_as");
+});