88 lines
2.7 KiB
JavaScript
88 lines
2.7 KiB
JavaScript
|
/* Any copyright is dedicated to the Public Domain.
|
||
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||
|
|
||
|
/**
|
||
|
* Recursively compare two objects and check that every property of expectedObj has the same value
|
||
|
* on actualObj.
|
||
|
*/
|
||
|
function isSubObjectOf(expectedObj, actualObj, name) {
|
||
|
for (let prop in expectedObj) {
|
||
|
if (typeof expectedObj[prop] == 'function')
|
||
|
continue;
|
||
|
if (expectedObj[prop] instanceof Object) {
|
||
|
is(actualObj[prop].length, expectedObj[prop].length, name + "[" + prop + "]");
|
||
|
isSubObjectOf(expectedObj[prop], actualObj[prop], name + "[" + prop + "]");
|
||
|
} else {
|
||
|
is(actualObj[prop], expectedObj[prop], name + "[" + prop + "]");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getLocale() {
|
||
|
const localePref = "general.useragent.locale";
|
||
|
return getLocalizedPref(localePref, Services.prefs.getCharPref(localePref));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Wrapper for nsIPrefBranch::getComplexValue.
|
||
|
* @param aPrefName
|
||
|
* The name of the pref to get.
|
||
|
* @returns aDefault if the requested pref doesn't exist.
|
||
|
*/
|
||
|
function getLocalizedPref(aPrefName, aDefault) {
|
||
|
try {
|
||
|
return Services.prefs.getComplexValue(aPrefName, Ci.nsIPrefLocalizedString).data;
|
||
|
} catch (ex) {
|
||
|
return aDefault;
|
||
|
}
|
||
|
|
||
|
return aDefault;
|
||
|
}
|
||
|
|
||
|
function promiseEvent(aTarget, aEventName, aPreventDefault) {
|
||
|
function cancelEvent(event) {
|
||
|
if (aPreventDefault) {
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return BrowserTestUtils.waitForEvent(aTarget, aEventName, false, cancelEvent);
|
||
|
}
|
||
|
|
||
|
function promiseNewEngine(basename, options = {}) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
//Default the setAsCurrent option to true.
|
||
|
let setAsCurrent =
|
||
|
options.setAsCurrent == undefined ? true : options.setAsCurrent;
|
||
|
info("Waiting for engine to be added: " + basename);
|
||
|
Services.search.init({
|
||
|
onInitComplete: function() {
|
||
|
let url = getRootDirectory(gTestPath) + basename;
|
||
|
let current = Services.search.currentEngine;
|
||
|
Services.search.addEngine(url, null, options.iconURL || "", false, {
|
||
|
onSuccess: function (engine) {
|
||
|
info("Search engine added: " + basename);
|
||
|
if (setAsCurrent) {
|
||
|
Services.search.currentEngine = engine;
|
||
|
}
|
||
|
registerCleanupFunction(() => {
|
||
|
if (setAsCurrent) {
|
||
|
Services.search.currentEngine = current;
|
||
|
}
|
||
|
Services.search.removeEngine(engine);
|
||
|
info("Search engine removed: " + basename);
|
||
|
});
|
||
|
resolve(engine);
|
||
|
},
|
||
|
onError: function (errCode) {
|
||
|
ok(false, "addEngine failed with error code " + errCode);
|
||
|
reject();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
}
|