diff options
Diffstat (limited to 'comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js')
-rw-r--r-- | comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js b/comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js new file mode 100644 index 0000000000..8915c372a0 --- /dev/null +++ b/comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js @@ -0,0 +1,133 @@ +"use strict"; +define(function (require) { + var assert = require("assert"); + var headeremitter = require("jsmime").headeremitter; + var MockDate = require("test/mock_date"); + + function arrayTest(data, fn) { + fn.toString = function () { + let text = Function.prototype.toString.call(this); + text = text.replace(/data\[([0-9]*)\]/g, function (m, p) { + return JSON.stringify(data[p]); + }); + return text; + }; + return test(JSON.stringify(data[0]), fn); + } + + function testHeader(header, tests) { + suite(header, function () { + tests.forEach(function (data) { + arrayTest(data, function () { + assert.deepEqual( + headeremitter.emitStructuredHeader(header, data[0], { + softMargin: 100, + useASCII: true, + }), + (header + ": " + data[1]).trim() + "\r\n" + ); + }); + }); + }); + } + + suite("Structured header emitters", function () { + // Ad-hoc header tests + // TODO: add structured encoder tests for Content-Type when it is added. + + testHeader("Content-Transfer-Encoding", [ + ["", ""], + ["8bit", "8bit"], + ["invalid", "invalid"], + ]); + + // Non-ad-hoc header tests + let addressing_headers = [ + "From", + "To", + "Cc", + "Bcc", + "Sender", + "Reply-To", + "Resent-Bcc", + "Resent-To", + "Resent-From", + "Resent-Cc", + "Resent-Sender", + "Approved", + "Disposition-Notification-To", + "Delivered-To", + "Return-Receipt-To", + "Resent-Reply-To", + "Mail-Reply-To", + "Mail-Followup-To", + ]; + let address_tests = [ + [{ name: "", email: "" }, ""], + [ + { name: "John Doe", email: "john.doe@test.invalid" }, + "John Doe <john.doe@test.invalid>", + ], + [ + [{ name: "John Doe", email: "john.doe@test.invalid" }], + "John Doe <john.doe@test.invalid>", + ], + [ + { name: "undisclosed-recipients", group: [] }, + "undisclosed-recipients: ;", + ], + ]; + addressing_headers.forEach(function (header) { + testHeader(header, address_tests); + }); + + let date_headers = [ + "Date", + "Expires", + "Injection-Date", + "NNTP-Posting-Date", + "Resent-Date", + ]; + let date_tests = [ + [ + new MockDate("2012-09-06T08:08:21-0700"), + "Thu, 6 Sep 2012 08:08:21 -0700", + ], + ]; + date_headers.forEach(function (header) { + testHeader(header, date_tests); + }); + + let unstructured_headers = [ + "Comments", + "Content-Description", + "Keywords", + "Subject", + ]; + let unstructured_tests = [ + ["", ""], + ["This is a subject", "This is a subject"], + [ + "\u79c1\u306f\u4ef6\u540d\u5348\u524d", + "=?UTF-8?B?56eB44Gv5Lu25ZCN5Y2I5YmN?=", + ], + ]; + unstructured_headers.forEach(function (header) { + testHeader(header, unstructured_tests); + }); + + test("emitStructuredHeaders", function () { + let headers = new Map(); + headers.set("From", [{ name: "", email: "bugzilla-daemon@mozilla.org" }]); + headers.set("subject", ["[Bug 939557] browsercomps.dll failed to build"]); + headers.set("x-capitalization-test", ["should capitalize"]); + let str = headeremitter.emitStructuredHeaders(headers, {}); + assert.equal( + str, + "From: bugzilla-daemon@mozilla.org\r\n" + + "Subject: [Bug 939557] browsercomps.dll failed to build\r\n" + + "X-Capitalization-Test: should capitalize\r\n" + ); + }); + }); +}); |