|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 Cu.import("resource://gre/modules/PriorityUrlProvider.jsm"); |
|
6 |
|
7 function run_test() { |
|
8 run_next_test(); |
|
9 } |
|
10 |
|
11 add_task(function* search_engine_match() { |
|
12 let engine = yield promiseDefaultSearchEngine(); |
|
13 let token = engine.getResultDomain(); |
|
14 let match = yield PriorityUrlProvider.getMatch(token.substr(0, 1)); |
|
15 do_check_eq(match.url, engine.searchForm); |
|
16 do_check_eq(match.title, engine.name); |
|
17 do_check_eq(match.iconUrl, engine.iconURI ? engine.iconURI.spec : null); |
|
18 do_check_eq(match.reason, "search"); |
|
19 }); |
|
20 |
|
21 add_task(function* no_match() { |
|
22 do_check_eq(null, yield PriorityUrlProvider.getMatch("test")); |
|
23 }); |
|
24 |
|
25 add_task(function* hide_search_engine_nomatch() { |
|
26 let engine = yield promiseDefaultSearchEngine(); |
|
27 let token = engine.getResultDomain(); |
|
28 let promiseTopic = promiseSearchTopic("engine-changed"); |
|
29 Services.search.removeEngine(engine); |
|
30 yield promiseTopic; |
|
31 do_check_true(engine.hidden); |
|
32 do_check_eq(null, yield PriorityUrlProvider.getMatch(token.substr(0, 1))); |
|
33 }); |
|
34 |
|
35 add_task(function* add_search_engine_match() { |
|
36 let promiseTopic = promiseSearchTopic("engine-added"); |
|
37 do_check_eq(null, yield PriorityUrlProvider.getMatch("bacon")); |
|
38 Services.search.addEngineWithDetails("bacon", "", "bacon", "Search Bacon", |
|
39 "GET", "http://www.bacon.moz/?search={searchTerms}"); |
|
40 yield promiseSearchTopic; |
|
41 let match = yield PriorityUrlProvider.getMatch("bacon"); |
|
42 do_check_eq(match.url, "http://www.bacon.moz"); |
|
43 do_check_eq(match.title, "bacon"); |
|
44 do_check_eq(match.iconUrl, null); |
|
45 do_check_eq(match.reason, "search"); |
|
46 }); |
|
47 |
|
48 add_task(function* remove_search_engine_nomatch() { |
|
49 let engine = Services.search.getEngineByName("bacon"); |
|
50 let promiseTopic = promiseSearchTopic("engine-removed"); |
|
51 Services.search.removeEngine(engine); |
|
52 yield promiseTopic; |
|
53 do_check_eq(null, yield PriorityUrlProvider.getMatch("bacon")); |
|
54 }); |
|
55 |
|
56 function promiseDefaultSearchEngine() { |
|
57 let deferred = Promise.defer(); |
|
58 Services.search.init( () => { |
|
59 deferred.resolve(Services.search.defaultEngine); |
|
60 }); |
|
61 return deferred.promise; |
|
62 } |
|
63 |
|
64 function promiseSearchTopic(expectedVerb) { |
|
65 let deferred = Promise.defer(); |
|
66 Services.obs.addObserver( function observe(subject, topic, verb) { |
|
67 do_log_info("browser-search-engine-modified: " + verb); |
|
68 if (verb == expectedVerb) { |
|
69 Services.obs.removeObserver(observe, "browser-search-engine-modified"); |
|
70 deferred.resolve(); |
|
71 } |
|
72 }, "browser-search-engine-modified", false); |
|
73 return deferred.promise; |
|
74 } |