diff options
Diffstat (limited to 'comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js')
-rw-r--r-- | comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js b/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js new file mode 100644 index 0000000000..a10ac5e4b4 --- /dev/null +++ b/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js @@ -0,0 +1,120 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* + * This suite ensures that we can correctly read and re-set the popularity + * indexes on a + */ + +var ACR = Ci.nsIAutoCompleteResult; + +var results = [ + { email: "d <ema@test.invalid>", dirName: kPABData.dirName }, + { email: "di <emai@test.invalid>", dirName: kPABData.dirName }, + { email: "dis <email@test.invalid>", dirName: kPABData.dirName }, + { email: "disp <e@test.invalid>", dirName: kPABData.dirName }, + { email: "displ <em@test.invalid>", dirName: kPABData.dirName }, + { email: "t <list>", dirName: kPABData.dirName }, + { email: "te <lis>", dirName: kPABData.dirName }, + { email: "tes <li>", dirName: kPABData.dirName }, + // this contact has a nickname of "abcdef" + { email: "test <l>", dirName: kPABData.dirName }, +]; + +var firstNames = [ + { search: "f", expected: [4, 0, 1, 2, 3, 8] }, + { search: "fi", expected: [4, 0, 1, 3] }, + { search: "fir", expected: [4, 0, 1] }, + { search: "firs", expected: [0, 1] }, + { search: "first", expected: [1] }, +]; + +var lastNames = [ + { search: "l", expected: [5, 6, 7, 8, 4, 0, 1, 2, 3] }, + { search: "la", expected: [4, 0, 2, 3] }, + { search: "las", expected: [4, 0, 3] }, + { search: "last", expected: [4, 0] }, + { search: "lastn", expected: [0] }, +]; + +var inputs = [firstNames, lastNames]; + +add_task(async () => { + loadABFile("../../../data/tb2hexpopularity", kPABData.fileName); + + // Test - Create a new search component + + let acs = Cc["@mozilla.org/autocomplete/search;1?name=addrbook"].getService( + Ci.nsIAutoCompleteSearch + ); + + let obs = new acObserver(); + + // Ensure we've got the comment column set up for extra checking. + Services.prefs.setIntPref("mail.autoComplete.commentColumn", 1); + + // Test - Matches + + // Now check multiple matches + async function checkInputItem(element, index) { + print("Search #" + index + ": search=" + element.search); + let resultPromise = obs.waitForResult(); + acs.startSearch( + element.search, + JSON.stringify({ type: "addr_to" }), + null, + obs + ); + await resultPromise; + + for (let i = 0; i < obs._result.matchCount; i++) { + print("... got " + i + ": " + obs._result.getValueAt(i)); + } + + for (let i = 0; i < element.expected.length; i++) { + print( + "... expected " + + i + + " (card " + + element.expected[i] + + "): " + + results[element.expected[i]].email + ); + } + + Assert.equal(obs._search, acs); + Assert.equal(obs._result.searchString, element.search); + Assert.equal(obs._result.searchResult, ACR.RESULT_SUCCESS); + Assert.equal(obs._result.errorDescription, null); + Assert.equal(obs._result.matchCount, element.expected.length); + Assert.equal(obs._result.defaultIndex, 0); + + for (let i = 0; i < element.expected.length; ++i) { + Assert.equal( + obs._result.getValueAt(i), + results[element.expected[i]].email + ); + Assert.equal( + obs._result.getCommentAt(i), + results[element.expected[i]].dirName + ); + Assert.equal(obs._result.getStyleAt(i), "local-abook"); + Assert.equal(obs._result.getImageAt(i), ""); + + // Card at result number 4 is the one with the TB 2 popularity set as "a" + // in the file, so check that we're now setting the popularity to 10 + // and hence future tests don't have to convert it. + if (element.expected[i] == 4) { + let result = obs._result.QueryInterface(Ci.nsIAbAutoCompleteResult); + Assert.equal( + result.getCardAt(i).getProperty("PopularityIndex", -1), + 10 + ); + } + } + } + + for (let inputSet of inputs) { + for (let i = 0; i < inputSet.length; i++) { + await checkInputItem(inputSet[i], i); + } + } +}); |