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>"
);
}
|