summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js')
-rw-r--r--comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch5.js120
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);
+ }
+ }
+});