Files
palemoon27/toolkit/components/search/tests/xpcshell/test_addEngine_callback.js
T

113 lines
3.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/*
* Tests covering nsIBrowserSearchService::addEngine's optional callback.
*/
"use strict";
// Override the prompt service and nsIPrompt, since the search service currently
// prompts in response to certain installation failures we test here
// XXX this should disappear once bug 863474 is fixed
function replaceService(contractID, component) {
let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
let cid = registrar.contractIDToCID(contractID);
let oldFactory = Components.manager.getClassObject(Components.classes[contractID],
Ci.nsIFactory);
registrar.unregisterFactory(cid, oldFactory);
let factory = {
createInstance: function(aOuter, aIid) {
if (aOuter != null)
throw Components.results.NS_ERROR_NO_AGGREGATION;
return component.QueryInterface(aIid);
}
};
registrar.registerFactory(cid, "", contractID, factory);
}
// Only need to stub the methods actually called by nsSearchService
let promptService = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]),
confirmEx: function() {}
};
let prompt = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]),
alert: function() {}
};
replaceService("@mozilla.org/embedcomp/prompt-service;1", promptService);
replaceService("@mozilla.org/prompter;1", prompt);
// First test inits the search service
add_test(function init_search_service() {
Services.search.init(function (status) {
if (!Components.isSuccessCode(status))
do_throw("Failed to initialize search service");
run_next_test();
});
});
// Simple test of the search callback
add_test(function simple_callback_test() {
let searchCallback = {
onSuccess: function (engine) {
do_check_true(!!engine);
do_check_neq(engine.name, Services.search.defaultEngine.name);
run_next_test();
},
onError: function (errorCode) {
do_throw("search callback returned error: " + errorCode);
}
}
Services.search.addEngine(gDataUrl + "engine.xml",
Ci.nsISearchEngine.DATA_XML,
null, false, searchCallback);
});
// Test of the search callback on duplicate engine failures
add_test(function duplicate_failure_test() {
let searchCallback = {
onSuccess: function (engine) {
do_throw("this addition should not have succeeded");
},
onError: function (errorCode) {
do_check_true(!!errorCode);
do_check_eq(errorCode, Ci.nsISearchInstallCallback.ERROR_DUPLICATE_ENGINE);
run_next_test();
}
}
// Re-add the same engine added in the previous test
Services.search.addEngine(gDataUrl + "engine.xml",
Ci.nsISearchEngine.DATA_XML,
null, false, searchCallback);
});
// Test of the search callback on failure to load the engine failures
add_test(function load_failure_test() {
let searchCallback = {
onSuccess: function (engine) {
do_throw("this addition should not have succeeded");
},
onError: function (errorCode) {
do_check_true(!!errorCode);
do_check_eq(errorCode, Ci.nsISearchInstallCallback.ERROR_UNKNOWN_FAILURE);
run_next_test();
}
}
// Try adding an engine that doesn't exist
Services.search.addEngine("http://invalid/data/engine.xml",
Ci.nsISearchEngine.DATA_XML,
null, false, searchCallback);
});
function run_test() {
updateAppInfo();
useHttpServer();
run_next_test();
}