summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_addEngine_callback.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_addEngine_callback.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_addEngine_callback.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_addEngine_callback.js b/toolkit/components/search/tests/xpcshell/test_addEngine_callback.js
new file mode 100644
index 000000000..07eaf38bb
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_addEngine_callback.js
@@ -0,0 +1,95 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Tests covering nsIBrowserSearchService::addEngine's optional callback.
+ */
+
+Components.utils.import("resource://testing-common/MockRegistrar.jsm");
+
+"use strict";
+
+// Only need to stub the methods actually called by nsSearchService
+var promptService = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptService]),
+ confirmEx: function() {}
+};
+var prompt = {
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]),
+ alert: function() {}
+};
+// 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
+MockRegistrar.register("@mozilla.org/embedcomp/prompt-service;1", promptService);
+MockRegistrar.register("@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);
+ do_check_eq(engine.wrappedJSObject._loadPath,
+ "[http]localhost/test-search-engine.xml");
+ run_next_test();
+ },
+ onError: function (errorCode) {
+ do_throw("search callback returned error: " + errorCode);
+ }
+ }
+ Services.search.addEngine(gDataUrl + "engine.xml", null,
+ 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", null,
+ 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", null,
+ null, false, searchCallback);
+});
+
+function run_test() {
+ updateAppInfo();
+ useHttpServer();
+
+ run_next_test();
+}