forked from mirrors/gecko-dev
MozReview-Commit-ID: 7Gx90a5y8t6 --HG-- extra : rebase_source : 9c8a6b15c19982d720b0163fbbf19d465da786fe
82 lines
3.1 KiB
JavaScript
82 lines
3.1 KiB
JavaScript
"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();
|
|
});
|