summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/addrbook/test/unit/test_nsAbAutoCompleteMyDomain.js
blob: 8faf6e064a59a4c92172b096eb3763fc2a643dae (plain)
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
116
117
118
119
120
121
122
123
124
125
126
127
128
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
 * Test suite for nsAbAutoCompleteSearch
 */

var ACR = Ci.nsIAutoCompleteResult;

function acObserver() {}

acObserver.prototype = {
  _search: null,
  _result: null,

  onSearchResult(aSearch, aResult) {
    this._search = aSearch;
    this._result = aResult;
  },
};

function run_test() {
  // Test - Create a new search component

  var acs = Cc["@mozilla.org/autocomplete/search;1?name=mydomain"].getService(
    Ci.nsIAutoCompleteSearch
  );

  var obs = new acObserver();
  let obsNews = new acObserver();
  let obsFollowup = new acObserver();

  // Set up an identity in the account manager with the default settings
  let identity = MailServices.accounts.createIdentity();

  // Initially disable autocomplete
  identity.autocompleteToMyDomain = false;
  identity.email = "myemail@foo.invalid";

  // Set up autocomplete parameters
  let params = JSON.stringify({ idKey: identity.key, type: "addr_to" });
  let paramsNews = JSON.stringify({
    idKey: identity.key,
    type: "addr_newsgroups",
  });
  let paramsFollowup = JSON.stringify({
    idKey: identity.key,
    type: "addr_followup",
  });

  // Test - Valid search - this should return no results (autocomplete disabled)
  acs.startSearch("test", params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, "test");
  Assert.equal(obs._result.searchResult, ACR.RESULT_FAILURE);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 0);

  // Now enable autocomplete for this identity
  identity.autocompleteToMyDomain = true;

  // Test - Search with empty string

  acs.startSearch(null, params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, null);
  Assert.equal(obs._result.searchResult, ACR.RESULT_FAILURE);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 0);

  acs.startSearch("", params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, "");
  Assert.equal(obs._result.searchResult, ACR.RESULT_FAILURE);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 0);

  // Test - Check ignoring result with comma

  acs.startSearch("a,b", params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, "a,b");
  Assert.equal(obs._result.searchResult, ACR.RESULT_FAILURE);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 0);

  // Test - Check returning search string with @ sign

  acs.startSearch("a@b", params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, "a@b");
  Assert.equal(obs._result.searchResult, ACR.RESULT_SUCCESS);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 1);

  Assert.equal(obs._result.getValueAt(0), "a@b");
  Assert.equal(obs._result.getLabelAt(0), "a@b");
  Assert.equal(obs._result.getCommentAt(0), null);
  Assert.equal(obs._result.getStyleAt(0), "default-match");
  Assert.equal(obs._result.getImageAt(0), null);

  // No autocomplete for addr_newsgroups!
  acs.startSearch("a@b", paramsNews, null, obsNews);
  Assert.ok(obsNews._result == null || obsNews._result.matchCount == 0);

  // No autocomplete for addr_followup!
  acs.startSearch("a@b", paramsFollowup, null, obsFollowup);
  Assert.ok(obsFollowup._result == null || obsFollowup._result.matchCount == 0);

  // Test - Add default domain

  acs.startSearch("test1", params, null, obs);

  Assert.equal(obs._search, acs);
  Assert.equal(obs._result.searchString, "test1");
  Assert.equal(obs._result.searchResult, ACR.RESULT_SUCCESS);
  Assert.equal(obs._result.errorDescription, null);
  Assert.equal(obs._result.matchCount, 1);

  Assert.equal(obs._result.getValueAt(0), "test1@foo.invalid");
  Assert.equal(obs._result.getLabelAt(0), "test1@foo.invalid");
  Assert.equal(obs._result.getCommentAt(0), null);
  Assert.equal(obs._result.getStyleAt(0), "default-match");
  Assert.equal(obs._result.getImageAt(0), null);
}