summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js')
-rw-r--r--comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js b/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js
new file mode 100644
index 0000000000..5d1df70330
--- /dev/null
+++ b/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Test suite for nsIMsgHeaderParser functions:
+ * extractHeaderAddressMailboxes
+ * extractFirstName
+ * parseDecodedHeader
+ */
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+function run_test() {
+ // In this array, the sub arrays consist of the following elements:
+ // 0: input string (a comma separated list of recipients)
+ // 1: expected output from extractHeaderAddressMailboxes
+ // 2: list of recipient names in the string
+ // 3: first recipient name in the string
+ const checks = [
+ [
+ "abc@foo.invalid",
+ "abc@foo.invalid",
+ "abc@foo.invalid",
+ "abc@foo.invalid",
+ ],
+ ["foo <ghj@foo.invalid>", "ghj@foo.invalid", "foo", "foo"],
+ [
+ "abc@foo.invalid, foo <ghj@foo.invalid>",
+ "abc@foo.invalid, ghj@foo.invalid",
+ "abc@foo.invalid, foo",
+ "abc@foo.invalid",
+ ],
+ ["foo bar <foo@bar.invalid>", "foo@bar.invalid", "foo bar", "foo bar"],
+ [
+ "foo bar <foo@bar.invalid>, abc@foo.invalid, foo <ghj@foo.invalid>",
+ "foo@bar.invalid, abc@foo.invalid, ghj@foo.invalid",
+ "foo bar, abc@foo.invalid, foo",
+ "foo bar",
+ ],
+ // UTF-8 names
+ [
+ "foo\u00D0 bar <foo@bar.invalid>, \u00F6foo <ghj@foo.invalid>",
+ "foo@bar.invalid, ghj@foo.invalid",
+ "foo\u00D0 bar, \u00F6foo",
+ "foo\u00D0 bar",
+ ],
+ // More complicated examples drawn from RFC 2822
+ [
+ '"Joe Q. Public" <john.q.public@example.com>,Test <"abc!x.yz"@foo.invalid>, Test <test@[xyz!]>,"Giant; \\"Big\\" Box" <sysservices@example.net>',
+ 'john.q.public@example.com, "abc!x.yz"@foo.invalid, test@[xyz!], sysservices@example.net',
+ 'Joe Q. Public, Test, Test, Giant; "Big" Box',
+ // extractFirstName returns unquoted names, hence the difference.
+ "Joe Q. Public",
+ ],
+ // Bug 549931
+ [
+ "Undisclosed recipients:;",
+ "", // Mailboxes
+ "", // Address Names
+ "",
+ ], // Address Name
+ ];
+
+ // Test - empty strings
+
+ Assert.equal(MailServices.headerParser.extractHeaderAddressMailboxes(""), "");
+ Assert.equal(MailServices.headerParser.extractFirstName(""), "");
+
+ // Test - extractHeaderAddressMailboxes
+
+ for (let i = 0; i < checks.length; ++i) {
+ Assert.equal(
+ MailServices.headerParser.extractHeaderAddressMailboxes(checks[i][0]),
+ checks[i][1]
+ );
+ let _names = MailServices.headerParser
+ .parseDecodedHeader(checks[i][0])
+ .map(addr => addr.name || addr.email)
+ .join(", ");
+ Assert.equal(_names, checks[i][2]);
+ Assert.equal(
+ MailServices.headerParser.extractFirstName(checks[i][0]),
+ checks[i][3]
+ );
+ }
+}