|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 /* |
|
5 * Test that currentEngine and defaultEngine properties can be set and yield the |
|
6 * proper events and behavior (search results) |
|
7 */ |
|
8 |
|
9 "use strict"; |
|
10 |
|
11 const Ci = Components.interfaces; |
|
12 |
|
13 Components.utils.import("resource://testing-common/httpd.js"); |
|
14 |
|
15 let waitForEngines = { |
|
16 "Test search engine": 1, |
|
17 "A second test engine": 1 |
|
18 }; |
|
19 |
|
20 function search_observer(aSubject, aTopic, aData) { |
|
21 let engine = aSubject.QueryInterface(Ci.nsISearchEngine); |
|
22 do_print("Observer: " + aData + " for " + engine.name); |
|
23 |
|
24 if (aData != "engine-added") { |
|
25 return; |
|
26 } |
|
27 |
|
28 // If the engine is defined in `waitForEngines`, remove it from the list |
|
29 if (waitForEngines[engine.name]) { |
|
30 delete waitForEngines[engine.name]; |
|
31 } else { |
|
32 // This engine is not one we're waiting for, so bail out early. |
|
33 return; |
|
34 } |
|
35 |
|
36 // Only continue when both engines have been loaded. |
|
37 if (Object.keys(waitForEngines).length) |
|
38 return; |
|
39 |
|
40 let search = Services.search; |
|
41 |
|
42 let engine1 = search.getEngineByName("Test search engine"); |
|
43 let engine2 = search.getEngineByName("A second test engine"); |
|
44 |
|
45 search.defaultEngine = engine1; |
|
46 do_check_eq(search.defaultEngine, engine1); |
|
47 search.defaultEngine = engine2 |
|
48 do_check_eq(search.defaultEngine, engine2); |
|
49 search.defaultEngine = engine1; |
|
50 do_check_eq(search.defaultEngine, engine1); |
|
51 |
|
52 // Test that hiding the currently-default engine affects the defaultEngine getter |
|
53 // (when the default is hidden, we fall back to the first in the list, so move |
|
54 // our second engine to that position) |
|
55 search.moveEngine(engine2, 0); |
|
56 engine1.hidden = true; |
|
57 do_check_eq(search.defaultEngine, engine2); |
|
58 |
|
59 // Test that the default engine is restored when it is unhidden |
|
60 engine1.hidden = false; |
|
61 do_check_eq(search.defaultEngine, engine1); |
|
62 |
|
63 // Test that setting defaultEngine to an already-hidden engine works, but |
|
64 // doesn't change the return value of the getter |
|
65 engine2.hidden = true; |
|
66 search.moveEngine(engine1, 0) |
|
67 search.defaultEngine = engine2; |
|
68 do_check_eq(search.defaultEngine, engine1); |
|
69 engine2.hidden = false; |
|
70 do_check_eq(search.defaultEngine, engine2); |
|
71 |
|
72 do_test_finished(); |
|
73 } |
|
74 |
|
75 function run_test() { |
|
76 removeMetadata(); |
|
77 updateAppInfo(); |
|
78 |
|
79 let httpServer = new HttpServer(); |
|
80 httpServer.start(-1); |
|
81 httpServer.registerDirectory("/", do_get_cwd()); |
|
82 let baseUrl = "http://localhost:" + httpServer.identity.primaryPort; |
|
83 |
|
84 do_register_cleanup(function cleanup() { |
|
85 httpServer.stop(function() {}); |
|
86 Services.obs.removeObserver(search_observer, "browser-search-engine-modified"); |
|
87 }); |
|
88 |
|
89 do_test_pending(); |
|
90 |
|
91 Services.obs.addObserver(search_observer, "browser-search-engine-modified", false); |
|
92 |
|
93 Services.search.addEngine(baseUrl + "/data/engine.xml", |
|
94 Ci.nsISearchEngine.DATA_XML, |
|
95 null, false); |
|
96 Services.search.addEngine(baseUrl + "/data/engine2.xml", |
|
97 Ci.nsISearchEngine.DATA_XML, |
|
98 null, false); |
|
99 } |