michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /* michael@0: * Test that currentEngine and defaultEngine properties can be set and yield the michael@0: * proper events and behavior (search results) michael@0: */ michael@0: michael@0: "use strict"; michael@0: michael@0: const Ci = Components.interfaces; michael@0: michael@0: Components.utils.import("resource://testing-common/httpd.js"); michael@0: michael@0: let waitForEngines = { michael@0: "Test search engine": 1, michael@0: "A second test engine": 1 michael@0: }; michael@0: michael@0: function search_observer(aSubject, aTopic, aData) { michael@0: let engine = aSubject.QueryInterface(Ci.nsISearchEngine); michael@0: do_print("Observer: " + aData + " for " + engine.name); michael@0: michael@0: if (aData != "engine-added") { michael@0: return; michael@0: } michael@0: michael@0: // If the engine is defined in `waitForEngines`, remove it from the list michael@0: if (waitForEngines[engine.name]) { michael@0: delete waitForEngines[engine.name]; michael@0: } else { michael@0: // This engine is not one we're waiting for, so bail out early. michael@0: return; michael@0: } michael@0: michael@0: // Only continue when both engines have been loaded. michael@0: if (Object.keys(waitForEngines).length) michael@0: return; michael@0: michael@0: let search = Services.search; michael@0: michael@0: let engine1 = search.getEngineByName("Test search engine"); michael@0: let engine2 = search.getEngineByName("A second test engine"); michael@0: michael@0: search.defaultEngine = engine1; michael@0: do_check_eq(search.defaultEngine, engine1); michael@0: search.defaultEngine = engine2 michael@0: do_check_eq(search.defaultEngine, engine2); michael@0: search.defaultEngine = engine1; michael@0: do_check_eq(search.defaultEngine, engine1); michael@0: michael@0: // Test that hiding the currently-default engine affects the defaultEngine getter michael@0: // (when the default is hidden, we fall back to the first in the list, so move michael@0: // our second engine to that position) michael@0: search.moveEngine(engine2, 0); michael@0: engine1.hidden = true; michael@0: do_check_eq(search.defaultEngine, engine2); michael@0: michael@0: // Test that the default engine is restored when it is unhidden michael@0: engine1.hidden = false; michael@0: do_check_eq(search.defaultEngine, engine1); michael@0: michael@0: // Test that setting defaultEngine to an already-hidden engine works, but michael@0: // doesn't change the return value of the getter michael@0: engine2.hidden = true; michael@0: search.moveEngine(engine1, 0) michael@0: search.defaultEngine = engine2; michael@0: do_check_eq(search.defaultEngine, engine1); michael@0: engine2.hidden = false; michael@0: do_check_eq(search.defaultEngine, engine2); michael@0: michael@0: do_test_finished(); michael@0: } michael@0: michael@0: function run_test() { michael@0: removeMetadata(); michael@0: updateAppInfo(); michael@0: michael@0: let httpServer = new HttpServer(); michael@0: httpServer.start(-1); michael@0: httpServer.registerDirectory("/", do_get_cwd()); michael@0: let baseUrl = "http://localhost:" + httpServer.identity.primaryPort; michael@0: michael@0: do_register_cleanup(function cleanup() { michael@0: httpServer.stop(function() {}); michael@0: Services.obs.removeObserver(search_observer, "browser-search-engine-modified"); michael@0: }); michael@0: michael@0: do_test_pending(); michael@0: michael@0: Services.obs.addObserver(search_observer, "browser-search-engine-modified", false); michael@0: michael@0: Services.search.addEngine(baseUrl + "/data/engine.xml", michael@0: Ci.nsISearchEngine.DATA_XML, michael@0: null, false); michael@0: Services.search.addEngine(baseUrl + "/data/engine2.xml", michael@0: Ci.nsISearchEngine.DATA_XML, michael@0: null, false); michael@0: }