diff -r 000000000000 -r 6474c204b198 browser/components/search/test/browser_addEngine.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/search/test/browser_addEngine.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,136 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +var gSS = Services.search; + +function observer(aSubject, aTopic, aData) { + if (!gCurrentTest) { + info("Observer called with no test active"); + return; + } + + let engine = aSubject.QueryInterface(Ci.nsISearchEngine); + info("Observer: " + aData + " for " + engine.name); + let method; + switch (aData) { + case "engine-added": + if (gCurrentTest.added) + method = "added" + break; + case "engine-current": + if (gCurrentTest.current) + method = "current"; + break; + case "engine-removed": + if (gCurrentTest.removed) + method = "removed"; + break; + } + + if (method) + gCurrentTest[method](engine); +} + +function checkEngine(checkObj, engineObj) { + info("Checking engine"); + for (var prop in checkObj) + is(checkObj[prop], engineObj[prop], prop + " is correct"); +} + +var gTests = [ + { + name: "opensearch install", + engine: { + name: "Foo", + alias: null, + description: "Foo Search", + searchForm: "http://mochi.test:8888/browser/browser/components/search/test/", + type: Ci.nsISearchEngine.TYPE_OPENSEARCH + }, + run: function () { + gSS.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml", + Ci.nsISearchEngine.DATA_XML, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC", + false); + }, + added: function (engine) { + ok(engine, "engine was added."); + + checkEngine(this.engine, engine); + + let engineFromSS = gSS.getEngineByName(this.engine.name); + is(engine, engineFromSS, "engine is obtainable via getEngineByName"); + + let aEngine = gSS.getEngineByAlias("fooalias"); + ok(!aEngine, "Alias was not parsed from engine description"); + + gSS.currentEngine = engine; + }, + current: function (engine) { + let currentEngine = gSS.currentEngine; + is(engine, currentEngine, "engine is current"); + is(engine.name, this.engine.name, "current engine was changed successfully"); + + gSS.removeEngine(engine); + }, + removed: function (engine) { + let currentEngine = gSS.currentEngine; + ok(currentEngine, "An engine is present."); + isnot(currentEngine.name, this.engine.name, "Current engine reset after removal"); + + nextTest(); + } + }, + { + name: "sherlock install", + engine: { + name: "Test Sherlock", + alias: null, + description: "Test Description", + searchForm: "http://example.com/searchform", + type: Ci.nsISearchEngine.TYPE_SHERLOCK + }, + run: function () { + gSS.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.src", + Ci.nsISearchEngine.DATA_TEXT, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC", + false); + }, + added: function (engine) { + ok(engine, "engine was added."); + checkEngine(this.engine, engine); + + let engineFromSS = gSS.getEngineByName(this.engine.name); + is(engineFromSS, engine, "engine is obtainable via getEngineByName"); + + gSS.removeEngine(engine); + }, + removed: function (engine) { + let currentEngine = gSS.currentEngine; + ok(currentEngine, "An engine is present."); + isnot(currentEngine.name, this.engine.name, "Current engine reset after removal"); + + nextTest(); + } + } +]; + +var gCurrentTest = null; +function nextTest() { + if (gTests.length) { + gCurrentTest = gTests.shift(); + info("Running " + gCurrentTest.name); + gCurrentTest.run(); + } else + executeSoon(finish); +} + +function test() { + waitForExplicitFinish(); + Services.obs.addObserver(observer, "browser-search-engine-modified", false); + registerCleanupFunction(cleanup); + + nextTest(); +} + +function cleanup() { + Services.obs.removeObserver(observer, "browser-search-engine-modified"); +}