summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/mime/test/unit/test_nsIMsgHeaderParser2.js
blob: 5d1df703307a53b4a2d2c21aae9b3ab6dd057c64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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]
    );
  }
}