michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: **/ michael@0: michael@0: var gTests = [ michael@0: { michael@0: name: "normal search (search service)", michael@0: testText: "test search", michael@0: expectText: "test+search" michael@0: }, michael@0: { michael@0: name: "?-prefixed search (search service)", michael@0: testText: "? foo ", michael@0: expectText: "foo" michael@0: } michael@0: ]; michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab(); michael@0: michael@0: let searchObserver = function search_observer(aSubject, aTopic, aData) { michael@0: let engine = aSubject.QueryInterface(Ci.nsISearchEngine); michael@0: info("Observer: " + aData + " for " + engine.name); michael@0: michael@0: if (aData != "engine-added") michael@0: return; michael@0: michael@0: if (engine.name != "POST Search") michael@0: return; michael@0: michael@0: Services.search.defaultEngine = engine; michael@0: michael@0: registerCleanupFunction(function () { michael@0: Services.search.removeEngine(engine); michael@0: }); michael@0: michael@0: // ready to execute the tests! michael@0: executeSoon(nextTest); michael@0: }; michael@0: michael@0: Services.obs.addObserver(searchObserver, "browser-search-engine-modified", false); michael@0: michael@0: registerCleanupFunction(function () { michael@0: gBrowser.removeTab(tab); michael@0: michael@0: Services.obs.removeObserver(searchObserver, "browser-search-engine-modified"); michael@0: }); michael@0: michael@0: Services.search.addEngine("http://test:80/browser/browser/base/content/test/general/POSTSearchEngine.xml", michael@0: Ci.nsISearchEngine.DATA_XML, null, false); michael@0: } michael@0: michael@0: var gCurrTest; michael@0: function nextTest() { michael@0: if (gTests.length) { michael@0: gCurrTest = gTests.shift(); michael@0: doTest(); michael@0: } else { michael@0: finish(); michael@0: } michael@0: } michael@0: michael@0: function doTest() { michael@0: info("Running test: " + gCurrTest.name); michael@0: michael@0: waitForLoad(function () { michael@0: let loadedText = gBrowser.contentDocument.body.textContent; michael@0: ok(loadedText, "search page loaded"); michael@0: let needle = "searchterms=" + gCurrTest.expectText; michael@0: is(loadedText, needle, "The query POST data should be returned in the response"); michael@0: nextTest(); michael@0: }); michael@0: michael@0: // Simulate a user entering search terms michael@0: gURLBar.value = gCurrTest.testText; michael@0: gURLBar.focus(); michael@0: EventUtils.synthesizeKey("VK_RETURN", {}); michael@0: } michael@0: michael@0: michael@0: function waitForLoad(cb) { michael@0: let browser = gBrowser.selectedBrowser; michael@0: browser.addEventListener("load", function listener() { michael@0: if (browser.currentURI.spec == "about:blank") michael@0: return; michael@0: info("Page loaded: " + browser.currentURI.spec); michael@0: browser.removeEventListener("load", listener, true); michael@0: michael@0: cb(); michael@0: }, true); michael@0: }