diff options
Diffstat (limited to 'comm/mailnews/mime/test/unit/test_rfc822_body.js')
-rw-r--r-- | comm/mailnews/mime/test/unit/test_rfc822_body.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/comm/mailnews/mime/test/unit/test_rfc822_body.js b/comm/mailnews/mime/test/unit/test_rfc822_body.js new file mode 100644 index 0000000000..8a64e68d42 --- /dev/null +++ b/comm/mailnews/mime/test/unit/test_rfc822_body.js @@ -0,0 +1,94 @@ +/* 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/. */ + +/** + * This test verifies that we emit a message/rfc822 body part as an attachment + * whether or not mail.inline_attachments is true. + */ + +var { MessageGenerator, SyntheticMessageSet } = ChromeUtils.import( + "resource://testing-common/mailnews/MessageGenerator.jsm" +); +var { MessageInjection } = ChromeUtils.import( + "resource://testing-common/mailnews/MessageInjection.jsm" +); +var { PromiseTestUtils } = ChromeUtils.import( + "resource://testing-common/mailnews/PromiseTestUtils.jsm" +); +var messenger = Cc["@mozilla.org/messenger;1"].createInstance(Ci.nsIMessenger); +var msgGen = new MessageGenerator(); +var messageInjection = new MessageInjection({ mode: "local" }); +var inbox = messageInjection.getInboxFolder(); + +add_task(async function test_rfc822_body_display_inline() { + Services.prefs.setBoolPref("mail.inline_attachments", true); + await help_test_rfc822_body({ + // a message whose body is itself a message + bodyPart: msgGen.makeMessage(), + attachmentCount: 1, + }); + await help_test_rfc822_body({ + // a message whose body is itself a message, and which has an attachment + bodyPart: msgGen.makeMessage({ + attachments: [ + { + body: "I'm an attachment!", + filename: "attachment.txt", + format: "", + }, + ], + }), + attachmentCount: 2, + }); +}); + +add_task(async function test_rfc822_body_no_display_inline() { + Services.prefs.setBoolPref("mail.inline_attachments", false); + await help_test_rfc822_body({ + // a message whose body is itself a message + bodyPart: msgGen.makeMessage(), + attachmentCount: 1, + }); + await help_test_rfc822_body({ + // a message whose body is itself a message, and which has an attachment + bodyPart: msgGen.makeMessage({ + attachments: [ + { + body: "I'm an attachment!", + filename: "attachment.txt", + format: "", + }, + ], + }), + attachmentCount: 1, + }); +}); + +async function help_test_rfc822_body(info) { + let synMsg = msgGen.makeMessage(info); + let synSet = new SyntheticMessageSet([synMsg]); + await messageInjection.addSetsToFolders([inbox], [synSet]); + + let msgURI = synSet.getMsgURI(0); + let msgService = MailServices.messageServiceFromURI(msgURI); + + let streamListener = new PromiseTestUtils.PromiseStreamListener({ + onStopRequest(request, statusCode) { + request.QueryInterface(Ci.nsIMailChannel); + Assert.equal(request.attachments.length, info.attachmentCount); + }, + }); + msgService.streamMessage( + msgURI, + streamListener, + null, + null, + true, // have them create the converter + // additional uri payload, note that "header=" is prepended automatically + "filter", + false + ); + + await streamListener.promise; +} |