diff options
Diffstat (limited to 'browser/components/search/test/browser_webapi.js')
-rw-r--r-- | browser/components/search/test/browser_webapi.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_webapi.js b/browser/components/search/test/browser_webapi.js new file mode 100644 index 000000000..d8161ffbe --- /dev/null +++ b/browser/components/search/test/browser_webapi.js @@ -0,0 +1,92 @@ +var ROOT = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com"); +const searchBundle = Services.strings.createBundle("chrome://global/locale/search/search.properties"); +const brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties"); +const brandName = brandBundle.GetStringFromName("brandShortName"); + +function getString(key, ...params) { + return searchBundle.formatStringFromName(key, params, params.length); +} + +function AddSearchProvider(...args) { + return gBrowser.addTab(ROOT + "webapi.html?" + encodeURIComponent(JSON.stringify(args))); +} + +function promiseDialogOpened() { + return new Promise((resolve, reject) => { + Services.wm.addListener({ + onOpenWindow: function(xulWin) { + Services.wm.removeListener(this); + + let win = xulWin.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindow); + waitForFocus(() => { + if (win.location == "chrome://global/content/commonDialog.xul") + resolve(win) + else + reject(); + }, win); + } + }); + }); +} + +add_task(function* test_working() { + gBrowser.selectedTab = AddSearchProvider(ROOT + "testEngine.xml"); + + let dialog = yield promiseDialogOpened(); + is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog."); + is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"), + "Should have seen the right install message"); + dialog.document.documentElement.cancelDialog(); + + gBrowser.removeCurrentTab(); +}); + +add_task(function* test_HTTP() { + gBrowser.selectedTab = AddSearchProvider(ROOT.replace("http:", "HTTP:") + "testEngine.xml"); + + let dialog = yield promiseDialogOpened(); + is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog."); + is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"), + "Should have seen the right install message"); + dialog.document.documentElement.cancelDialog(); + + gBrowser.removeCurrentTab(); +}); + +add_task(function* test_relative() { + gBrowser.selectedTab = AddSearchProvider("testEngine.xml"); + + let dialog = yield promiseDialogOpened(); + is(dialog.args.promptType, "confirmEx", "Should see the confirmation dialog."); + is(dialog.args.text, getString("addEngineConfirmation", "Foo", "example.com"), + "Should have seen the right install message"); + dialog.document.documentElement.cancelDialog(); + + gBrowser.removeCurrentTab(); +}); + +add_task(function* test_invalid() { + gBrowser.selectedTab = AddSearchProvider("z://foobar"); + + let dialog = yield promiseDialogOpened(); + is(dialog.args.promptType, "alert", "Should see the alert dialog."); + is(dialog.args.text, getString("error_invalid_engine_msg", brandName), + "Should have seen the right error message") + dialog.document.documentElement.acceptDialog(); + + gBrowser.removeCurrentTab(); +}); + +add_task(function* test_missing() { + let url = ROOT + "foobar.xml"; + gBrowser.selectedTab = AddSearchProvider(url); + + let dialog = yield promiseDialogOpened(); + is(dialog.args.promptType, "alert", "Should see the alert dialog."); + is(dialog.args.text, getString("error_loading_engine_msg2", brandName, url), + "Should have seen the right error message") + dialog.document.documentElement.acceptDialog(); + + gBrowser.removeCurrentTab(); +}); |