diff options
Diffstat (limited to '')
-rw-r--r-- | comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch6.js | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch6.js b/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch6.js new file mode 100644 index 0000000000..08b38de7c3 --- /dev/null +++ b/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteSearch6.js @@ -0,0 +1,248 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/** + * Tests for for nsAbAutoCompleteSearch scoring. + */ + +var ACR = Ci.nsIAutoCompleteResult; + +var cards = [ + { + // 0 + email: "jd.who@example.com", + displayName: "John Doe (:xx)", + popularityIndex: 0, + firstName: "John", + value: "John Doe (:xx) <jd.who@example.com>", + }, + + { + // 1 + email: "janey_who@example.com", + displayName: "Jane Doe", + popularityIndex: 0, + value: "Jane Doe <janey_who@example.com>", + }, + + { + // 2 + email: "pf@example.com", + displayName: 'Paul "Shitbreak" Finch', + popularityIndex: 0, + value: 'Paul "Shitbreak" Finch <pf@example.com>', + }, + + { + // 3 + email: "js@example.com", + displayName: "Janine (Stifflers Mom)", + popularityIndex: 0, + value: "Janine (Stifflers Mom) <js@example.com>", + }, + + { + // 4 + email: "ex0@example.com", + displayName: "Ajden", + popularityIndex: 0, + value: "Ajden <ex0@example.com>", + }, + + { + // 5 + email: "5@example.com", + displayName: "Foxx", + popularityIndex: 0, + value: "Foxx <5@example.com>", + }, + + { + // 6 + email: "6@example.com", + displayName: "thewho", + popularityIndex: 0, + value: "thewho <6@example.com>", + }, + + { + // 7 + email: "7@example.com", + displayName: "fakeshit", + popularityIndex: 0, + value: "fakeshit <7@example.com>", + }, + + { + // 8 + email: "8@example.com", + displayName: "mastiff", + popularityIndex: 0, + value: "mastiff <8@example.com>", + }, + + { + // 9 + email: "9@example.com", + displayName: "anyjohn", + popularityIndex: 0, + value: "anyjohn <9@example.com>", + }, + + { + // 10 + email: "10@example.com", + displayName: "däsh l18n", + popularityIndex: 0, + value: "däsh l18n <10@example.com>", + }, + + { + // 11 + email: "11@example.com", + displayName: "paul mary", + popularityIndex: 0, + firstName: "paul", + lastName: "mary meyer", + value: "paul mary <11@example.com>", + }, + + { + // 12 + email: "12@example.com", + displayName: "paul meyer", + popularityIndex: 0, + firstName: "paul", + lastName: "mary meyer", + value: "paul meyer <12@example.com>", + }, + + { + // 13 + email: "13@example.com", + displayName: "mr iron man (exp dev)", + popularityIndex: 0, + firstName: "iron", + lastName: "man", + value: "mr iron man (exp dev) <13@example.com>", + }, + + { + // 14 + email: "14@example.com", + displayName: "michael", + popularityIndex: 0, + nickName: "short", + value: "michael <14@example.com>", + }, + + { + // 15 + email: "15@example.com", + displayName: "good boy", + popularityIndex: 0, + nickName: "sh", + value: "good boy <15@example.com>", + }, + + { + // 16 + email: "16@example.com", + displayName: "sherlock holmes", + popularityIndex: 0, + value: "sherlock holmes <16@example.com>", + }, +]; + +var inputs = [ + { search: "john", expected: [0, 9] }, + { search: "doe", expected: [1, 0] }, + { search: "jd", expected: [0, 4] }, + { search: "who", expected: [1, 0, 6] }, + { search: "xx", expected: [0, 5] }, + { search: "jan", expected: [1, 3] }, + // expecting nickname to score highest. + { search: "sh", expected: [15, 14, 2, 16, 10, 7] }, + { search: "st", expected: [3, 8] }, + { search: "paul mary", expected: [11, 12] }, + { search: '"paul mary"', expected: [11] }, + { search: '"iron man" mr "exp dev"', expected: [13] }, + { search: "short", expected: [14] }, +]; + +add_task(async () => { + // We set up the cards for this test manually as it is easier to set the + // popularity index and we don't need many. + + // Ensure all the directories are initialised. + MailServices.ab.directories; + + let ab = MailServices.ab.getDirectory(kPABData.URI); + + function createAndAddCard(element) { + var card = Cc["@mozilla.org/addressbook/cardproperty;1"].createInstance( + Ci.nsIAbCard + ); + + card.primaryEmail = element.email; + card.displayName = element.displayName; + card.setProperty("PopularityIndex", element.popularityIndex); + card.firstName = element.firstName; + card.lastName = element.lastName; + if ("nickName" in element) { + card.setProperty("NickName", element.nickName); + } + + ab.addCard(card); + } + + cards.forEach(createAndAddCard); + + // Test - duplicate elements + + var acs = Cc["@mozilla.org/autocomplete/search;1?name=addrbook"].getService( + Ci.nsIAutoCompleteSearch + ); + + var obs = new acObserver(); + + 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] + + "): " + + cards[element.expected[i]].value + ); + } + + 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); + + for (let i = 0; i < element.expected.length; ++i) { + Assert.equal(obs._result.getValueAt(i), cards[element.expected[i]].value); + Assert.equal(obs._result.getLabelAt(i), cards[element.expected[i]].value); + } + } + + for (let i = 0; i < inputs.length; i++) { + await checkInputItem(inputs[i], i); + } +}); |