diff --git a/browser/components/search/test/Makefile.in b/browser/components/search/test/Makefile.in index f931c659ac35..1fe01b3f2d90 100644 --- a/browser/components/search/test/Makefile.in +++ b/browser/components/search/test/Makefile.in @@ -45,8 +45,9 @@ include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/config/rules.mk _BROWSER_TEST_FILES = browser_405664.js \ - browser_415700.js \ + browser_addEngine.js \ testEngine.xml \ + testEngine.src \ browser_426329.js \ 426329.xml \ browser_483086.js \ diff --git a/browser/components/search/test/browser_415700.js b/browser/components/search/test/browser_415700.js deleted file mode 100644 index a5899e749918..000000000000 --- a/browser/components/search/test/browser_415700.js +++ /dev/null @@ -1,85 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2008 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Ryan Flint (Original Author) - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ -var gSS = Services.search; - -function observers(aSubject, aTopic, aData) { - switch (aData) { - case "engine-added": - test2(); - break; - case "engine-current": - test3(); - break; - case "engine-removed": - test4(); - break; - } -} - -function test() { - waitForExplicitFinish(); - Services.obs.addObserver(observers, "browser-search-engine-modified", false); - - 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); -} - -function test2() { - var engine = gSS.getEngineByName("Foo"); - ok(engine, "Engine was added."); - - var aEngine = gSS.getEngineByAlias("fooalias"); - ok(!aEngine, "Alias was not parsed from engine description"); - - gSS.currentEngine = engine; -} - -function test3() { - var engine = gSS.currentEngine; - is(engine.name, "Foo", "Current engine was changed successfully"); - - gSS.removeEngine(engine); -} - -function test4() { - var engine = gSS.currentEngine; - ok(engine, "An engine is present."); - isnot(engine.name, "Foo", "Current engine reset after removal"); - - Services.obs.removeObserver(observers, "browser-search-engine-modified"); - finish(); -} diff --git a/browser/components/search/test/browser_addEngine.js b/browser/components/search/test/browser_addEngine.js new file mode 100644 index 000000000000..a8400a6f4254 --- /dev/null +++ b/browser/components/search/test/browser_addEngine.js @@ -0,0 +1,168 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Ryan Flint (Original Author) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +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"); +} diff --git a/browser/components/search/test/testEngine.src b/browser/components/search/test/testEngine.src new file mode 100644 index 000000000000..eb39fe8260e5 --- /dev/null +++ b/browser/components/search/test/testEngine.src @@ -0,0 +1,11 @@ + + + +