summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/compose/test/unit/test_messageBody.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/compose/test/unit/test_messageBody.js')
-rw-r--r--comm/mailnews/compose/test/unit/test_messageBody.js206
1 files changed, 206 insertions, 0 deletions
diff --git a/comm/mailnews/compose/test/unit/test_messageBody.js b/comm/mailnews/compose/test/unit/test_messageBody.js
new file mode 100644
index 0000000000..14c44b59f8
--- /dev/null
+++ b/comm/mailnews/compose/test/unit/test_messageBody.js
@@ -0,0 +1,206 @@
+/* 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/. */
+
+/**
+ * Test suite for message body.
+ */
+
+localAccountUtils.loadLocalMailAccount();
+
+/**
+ * Test trailing whitespace is QP encoded.
+ */
+add_task(async function testQP() {
+ // Together with fields.forceMsgEncoding, force quote-printable encoding.
+ Services.prefs.setBoolPref("mail.strictly_mime", true);
+
+ let identity = getSmtpIdentity(
+ "from@tinderbox.invalid",
+ getBasicSmtpServer()
+ );
+ let CompFields = CC(
+ "@mozilla.org/messengercompose/composefields;1",
+ Ci.nsIMsgCompFields
+ );
+
+ // Test QP works for ascii text.
+
+ let fields = new CompFields();
+ fields.forceMsgEncoding = true;
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Test QP encoding for trailing whitespace";
+ fields.body = "A line with trailing whitespace\t ";
+ await richCreateMessage(fields, [], identity);
+
+ let msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.ok(
+ msgData.includes("A line with trailing whitespace\t=20"),
+ "QP for ascii should work"
+ );
+
+ // Test QP works for non-ascii text.
+
+ fields = new CompFields();
+ fields.forceMsgEncoding = true;
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Test QP encoding for non-ascii and trailing tab";
+ fields.body = "記: base64 is used if unprintable > 10% \t";
+ await richCreateMessage(fields, [], identity);
+
+ msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.ok(
+ msgData.includes("=E8=A8=98: base64 is used if unprintable > 10% =09"),
+ "QP for non-ascii should work"
+ );
+
+ // Test leading space is preserved.
+
+ fields = new CompFields();
+ fields.forceMsgEncoding = true;
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Leading space is valid in a quoted printable message";
+ fields.body = "123456789" + " 123456789".repeat(6) + "1234 56789";
+ await richCreateMessage(fields, [], identity);
+
+ msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ let endOfHeaders = msgData.indexOf("\r\n\r\n");
+ let body = msgData.slice(endOfHeaders + 4);
+
+ Assert.equal(
+ body.trimRight("\r\n"),
+ "123456789 123456789 123456789 123456789 123456789 123456789 1234567891234=\r\n 56789"
+ );
+
+ Services.prefs.clearUserPref("mail.strictly_mime");
+});
+
+/**
+ * Test QP is not used together with format=flowed.
+ */
+add_task(async function testNoQPWithFormatFlowed() {
+ // Together with fields.forceMsgEncoding, force quote-printable encoding.
+ Services.prefs.setBoolPref("mail.strictly_mime", true);
+
+ let identity = getSmtpIdentity(
+ "from@tinderbox.invalid",
+ getBasicSmtpServer()
+ );
+ let fields = Cc[
+ "@mozilla.org/messengercompose/composefields;1"
+ ].createInstance(Ci.nsIMsgCompFields);
+ fields.forceMsgEncoding = true;
+ fields.forcePlainText = true;
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Test QP encoding for trailing whitespace";
+ fields.body = "A line with trailing whitespace\t ";
+ await richCreateMessage(fields, [], identity);
+
+ let msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.ok(
+ msgData.includes(
+ "Content-Type: text/plain; charset=UTF-8; format=flowed\r\nContent-Transfer-Encoding: base64"
+ ),
+ "format=flowed should be used"
+ );
+ Assert.ok(
+ !msgData.includes("quoted-printable"),
+ "quoted-printable should not be used"
+ );
+
+ Services.prefs.clearUserPref("mail.strictly_mime");
+});
+
+/**
+ * Test plain text body is wrapped correctly with different mailnews.wraplength
+ * pref value.
+ */
+add_task(async function testWrapLength() {
+ let identity = getSmtpIdentity(
+ "from@tinderbox.invalid",
+ getBasicSmtpServer()
+ );
+ let CompFields = CC(
+ "@mozilla.org/messengercompose/composefields;1",
+ Ci.nsIMsgCompFields
+ );
+
+ let word = "abcd ";
+ let body = word.repeat(20);
+
+ let fields = new CompFields();
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Test text wrapping";
+ fields.body = `<html><body>${body}</body></html>`;
+ fields.forcePlainText = true;
+ await richCreateMessage(fields, [], identity);
+
+ let msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.equal(
+ getMessageBody(msgData),
+ // Default wrap length is 72.
+ word.repeat(14) + "\r\n" + word.repeat(6).trim(),
+ "Text wraps at 72 by default"
+ );
+
+ // 0 means no wrap.
+ Services.prefs.setIntPref("mailnews.wraplength", 0);
+
+ await richCreateMessage(fields, [], identity);
+
+ msgData = mailTestUtils.loadMessageToString(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.equal(
+ getMessageBody(msgData),
+ body.trim(),
+ "Should not wrap when wraplength is 0"
+ );
+
+ Services.prefs.clearUserPref("mailnews.wraplength");
+});
+
+/**
+ * Test handling of trailing NBSP.
+ */
+add_task(async function testNBSP() {
+ let identity = getSmtpIdentity(
+ "from@tinderbox.invalid",
+ getBasicSmtpServer()
+ );
+ let fields = Cc[
+ "@mozilla.org/messengercompose/composefields;1"
+ ].createInstance(Ci.nsIMsgCompFields);
+ fields.to = "Nobody <nobody@tinderbox.invalid>";
+ fields.subject = "Test text wrapping";
+ // The character after `test` is NBSP.
+ fields.body = "<html><body>åäö test <br></body></html>";
+ fields.forcePlainText = true;
+ await richCreateMessage(fields, [], identity);
+
+ let msgData = mailTestUtils.loadMessageToUTF16String(
+ gDraftFolder,
+ mailTestUtils.firstMsgHdr(gDraftFolder)
+ );
+ Assert.equal(
+ getMessageBody(msgData),
+ "åäö test",
+ "Trailing NBSP should be removed"
+ );
+});