/* -*- 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 , Marge , Bart , "lisa@example.com" ' ); // Test expansion fo list with description. checkPopulate( "marge ", "Simpson , Marge " ); // 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 ", "Simpson , Marge , " + '"lisa@example.com" , Bart , Maggie ' ); checkPopulate( "parents ", "Simpson , Marge " ); checkPopulate( "kids ", '"lisa@example.com" , Bart , ' + "Maggie " ); checkPopulate( "older-kids ", '"lisa@example.com" , Bart ' ); checkPopulate( "bad-kids ", '"lisa@example.com" , Bart , ' + "Maggie " ); checkPopulate( "bad-younger-kids ", "Maggie , " + '"lisa@example.com" , Bart ' ); // Test we don't mistake an email address for a list, with a few variations. checkPopulate("Simpson ", "Simpson "); checkPopulate("simpson ", "simpson "); checkPopulate( "simpson ", "simpson " ); checkPopulate("Marge ", "Marge "); checkPopulate("marge ", "marge "); checkPopulate( "marge ", "marge " ); }