summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mime/jsmime/test/unit/test_structured_header_emitters.js
diff options
context:
space:
mode:
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.js133
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"
+ );
+ });
+ });
+});