1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/search/tests/xpcshell/test_defaultEngine.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,99 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/* 1.8 + * Test that currentEngine and defaultEngine properties can be set and yield the 1.9 + * proper events and behavior (search results) 1.10 + */ 1.11 + 1.12 +"use strict"; 1.13 + 1.14 +const Ci = Components.interfaces; 1.15 + 1.16 +Components.utils.import("resource://testing-common/httpd.js"); 1.17 + 1.18 +let waitForEngines = { 1.19 + "Test search engine": 1, 1.20 + "A second test engine": 1 1.21 +}; 1.22 + 1.23 +function search_observer(aSubject, aTopic, aData) { 1.24 + let engine = aSubject.QueryInterface(Ci.nsISearchEngine); 1.25 + do_print("Observer: " + aData + " for " + engine.name); 1.26 + 1.27 + if (aData != "engine-added") { 1.28 + return; 1.29 + } 1.30 + 1.31 + // If the engine is defined in `waitForEngines`, remove it from the list 1.32 + if (waitForEngines[engine.name]) { 1.33 + delete waitForEngines[engine.name]; 1.34 + } else { 1.35 + // This engine is not one we're waiting for, so bail out early. 1.36 + return; 1.37 + } 1.38 + 1.39 + // Only continue when both engines have been loaded. 1.40 + if (Object.keys(waitForEngines).length) 1.41 + return; 1.42 + 1.43 + let search = Services.search; 1.44 + 1.45 + let engine1 = search.getEngineByName("Test search engine"); 1.46 + let engine2 = search.getEngineByName("A second test engine"); 1.47 + 1.48 + search.defaultEngine = engine1; 1.49 + do_check_eq(search.defaultEngine, engine1); 1.50 + search.defaultEngine = engine2 1.51 + do_check_eq(search.defaultEngine, engine2); 1.52 + search.defaultEngine = engine1; 1.53 + do_check_eq(search.defaultEngine, engine1); 1.54 + 1.55 + // Test that hiding the currently-default engine affects the defaultEngine getter 1.56 + // (when the default is hidden, we fall back to the first in the list, so move 1.57 + // our second engine to that position) 1.58 + search.moveEngine(engine2, 0); 1.59 + engine1.hidden = true; 1.60 + do_check_eq(search.defaultEngine, engine2); 1.61 + 1.62 + // Test that the default engine is restored when it is unhidden 1.63 + engine1.hidden = false; 1.64 + do_check_eq(search.defaultEngine, engine1); 1.65 + 1.66 + // Test that setting defaultEngine to an already-hidden engine works, but 1.67 + // doesn't change the return value of the getter 1.68 + engine2.hidden = true; 1.69 + search.moveEngine(engine1, 0) 1.70 + search.defaultEngine = engine2; 1.71 + do_check_eq(search.defaultEngine, engine1); 1.72 + engine2.hidden = false; 1.73 + do_check_eq(search.defaultEngine, engine2); 1.74 + 1.75 + do_test_finished(); 1.76 +} 1.77 + 1.78 +function run_test() { 1.79 + removeMetadata(); 1.80 + updateAppInfo(); 1.81 + 1.82 + let httpServer = new HttpServer(); 1.83 + httpServer.start(-1); 1.84 + httpServer.registerDirectory("/", do_get_cwd()); 1.85 + let baseUrl = "http://localhost:" + httpServer.identity.primaryPort; 1.86 + 1.87 + do_register_cleanup(function cleanup() { 1.88 + httpServer.stop(function() {}); 1.89 + Services.obs.removeObserver(search_observer, "browser-search-engine-modified"); 1.90 + }); 1.91 + 1.92 + do_test_pending(); 1.93 + 1.94 + Services.obs.addObserver(search_observer, "browser-search-engine-modified", false); 1.95 + 1.96 + Services.search.addEngine(baseUrl + "/data/engine.xml", 1.97 + Ci.nsISearchEngine.DATA_XML, 1.98 + null, false); 1.99 + Services.search.addEngine(baseUrl + "/data/engine2.xml", 1.100 + Ci.nsISearchEngine.DATA_XML, 1.101 + null, false); 1.102 +}