diff options
Diffstat (limited to 'browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js')
-rw-r--r-- | browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js b/browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js new file mode 100644 index 000000000..3e60b282a --- /dev/null +++ b/browser/components/newtab/tests/xpcshell/test_NewTabSearchProvider.js @@ -0,0 +1,82 @@ +"use strict"; + +/* global XPCOMUtils, NewTabSearchProvider, run_next_test, ok, equal, do_check_true, do_get_profile, Services */ +/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */ + +const Cu = Components.utils; +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "NewTabSearchProvider", + "resource:///modules/NewTabSearchProvider.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "ContentSearch", + "resource:///modules/ContentSearch.jsm"); + +// ensure a profile exists +do_get_profile(); + +function run_test() { + run_next_test(); +} + +function hasProp(obj) { + return function(aProp) { + ok(obj.hasOwnProperty(aProp), `expect to have property ${aProp}`); + }; +} + +add_task(function* test_search() { + ContentSearch.init(); + let observerPromise = new Promise(resolve => { + Services.obs.addObserver(function observer(aSubject, aTopic, aData) { + if (aData === "init-complete" && aTopic === "browser-search-service") { + Services.obs.removeObserver(observer, "browser-search-service"); + resolve(); + } + }, "browser-search-service", false); + }); + Services.search.init(); + yield observerPromise; + do_check_true(Services.search.isInitialized); + + // get initial state of search and check it has correct properties + let state = yield NewTabSearchProvider.search.asyncGetState(); + let stateProps = hasProp(state); + ["engines", "currentEngine"].forEach(stateProps); + + // check that the current engine is correct and has correct properties + let {currentEngine} = state; + equal(currentEngine.name, Services.search.currentEngine.name, "Current engine has been correctly set"); + var engineProps = hasProp(currentEngine); + ["name", "placeholder", "iconBuffer"].forEach(engineProps); + + // create dummy test engines to test observer + Services.search.addEngineWithDetails("TestSearch1", "", "", "", "GET", + "http://example.com/?q={searchTerms}"); + Services.search.addEngineWithDetails("TestSearch2", "", "", "", "GET", + "http://example.com/?q={searchTerms}"); + + // set one of the dummy test engines to the default engine + Services.search.defaultEngine = Services.search.getEngineByName("TestSearch1"); + + // test that the event emitter is working by setting a new current engine "TestSearch2" + let engineName = "TestSearch2"; + NewTabSearchProvider.search.init(); + + // event emitter will fire when current engine is changed + let promise = new Promise(resolve => { + NewTabSearchProvider.search.once("browser-search-engine-modified", (name, data) => { // jshint ignore:line + resolve([name, data.name]); + }); + }); + + // set a new current engine + Services.search.currentEngine = Services.search.getEngineByName(engineName); + let expectedEngineName = Services.search.currentEngine.name; + + // emitter should fire and return the new engine + let [eventName, actualEngineName] = yield promise; + equal(eventName, "browser-search-engine-modified", `emitter sent the correct event ${eventName}`); + equal(expectedEngineName, actualEngineName, `emitter set the correct engine ${expectedEngineName}`); + NewTabSearchProvider.search.uninit(); +}); |