summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/compose/test/unit/test_expandMailingLists.js
blob: aa5998196f7dd98f0667fb2708d01444d6faf910 (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */

/**
 * Tests nsMsgCompose expandMailingLists.
 */

var MsgComposeContractID = "@mozilla.org/messengercompose/compose;1";
var MsgComposeParamsContractID =
  "@mozilla.org/messengercompose/composeparams;1";
var MsgComposeFieldsContractID =
  "@mozilla.org/messengercompose/composefields;1";
var nsIMsgCompose = Ci.nsIMsgCompose;
var nsIMsgComposeParams = Ci.nsIMsgComposeParams;
var nsIMsgCompFields = Ci.nsIMsgCompFields;

var { MailServices } = ChromeUtils.import(
  "resource:///modules/MailServices.jsm"
);

/**
 * Helper to check population worked as expected.
 *
 * @param {string} aTo - Text in the To field.
 * @param {string} aCheckTo - The expected To addresses (after possible list population).
 */
function checkPopulate(aTo, aCheckTo) {
  let msgCompose = Cc[MsgComposeContractID].createInstance(nsIMsgCompose);

  // Set up some basic fields for compose.
  let fields = Cc[MsgComposeFieldsContractID].createInstance(nsIMsgCompFields);

  fields.to = aTo;

  // Set up some params
  let params =
    Cc[MsgComposeParamsContractID].createInstance(nsIMsgComposeParams);

  params.composeFields = fields;

  msgCompose.initialize(params);

  msgCompose.expandMailingLists();
  equal(fields.to, aCheckTo);
}

function run_test() {
  loadABFile("data/listexpansion", kPABData.fileName);

  // XXX Getting all directories ensures we create all ABs because mailing
  // lists need help initialising themselves
  MailServices.ab.directories;

  // Test expansion of list with no description.
  checkPopulate(
    "simpson <simpson>",
    'Simpson <homer@example.com>, Marge <marge@example.com>, Bart <bart@foobar.invalid>, "lisa@example.com" <lisa@example.com>'
  );

  // Test expansion fo list with description.
  checkPopulate(
    "marge <marges own list>",
    "Simpson <homer@example.com>, Marge <marge@example.com>"
  );

  // Special tests for bug 1287726: Lists in list. This is what the data looks like:
  // 1) family (list) = parents (list) + kids (list).
  // 2) parents (list) = homer + marge + parents (list recursion).
  // 3) kids (list) = older-kids (list) + maggie.
  // 4) older-kids (list) = bart + lisa.
  // 5) bad-kids (list) = older-kids + bad-younger-kids (list).
  // 6) bad-younger-kids (list) = maggie + bad-kids (list recursion).
  checkPopulate(
    "family <family>",
    "Simpson <homer@example.com>, Marge <marge@example.com>, " +
      '"lisa@example.com" <lisa@example.com>, Bart <bart@foobar.invalid>, Maggie <maggie@example.com>'
  );
  checkPopulate(
    "parents <parents>",
    "Simpson <homer@example.com>, Marge <marge@example.com>"
  );
  checkPopulate(
    "kids <kids>",
    '"lisa@example.com" <lisa@example.com>, Bart <bart@foobar.invalid>, ' +
      "Maggie <maggie@example.com>"
  );
  checkPopulate(
    "older-kids <older-kids>",
    '"lisa@example.com" <lisa@example.com>, Bart <bart@foobar.invalid>'
  );
  checkPopulate(
    "bad-kids <bad-kids>",
    '"lisa@example.com" <lisa@example.com>, Bart <bart@foobar.invalid>, ' +
      "Maggie <maggie@example.com>"
  );
  checkPopulate(
    "bad-younger-kids <bad-younger-kids>",
    "Maggie <maggie@example.com>, " +
      '"lisa@example.com" <lisa@example.com>, Bart <bart@foobar.invalid>'
  );

  // Test we don't mistake an email address for a list, with a few variations.
  checkPopulate("Simpson <homer@example.com>", "Simpson <homer@example.com>");
  checkPopulate("simpson <homer@example.com>", "simpson <homer@example.com>");
  checkPopulate(
    "simpson <homer@not-in-ab.invalid>",
    "simpson <homer@not-in-ab.invalid>"
  );

  checkPopulate("Marge <marge@example.com>", "Marge <marge@example.com>");
  checkPopulate("marge <marge@example.com>", "marge <marge@example.com>");
  checkPopulate(
    "marge <marge@not-in-ab.invalid>",
    "marge <marge@not-in-ab.invalid>"
  );
}