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: * test_serialize_file: Add test engines michael@0: * michael@0: * Ensure that : michael@0: * - File is created. michael@0: * - File size is bigger than 0. michael@0: * - lazySerializeTask updates the file. michael@0: */ michael@0: michael@0: const Ci = Components.interfaces; michael@0: const Cu = Components.utils; michael@0: michael@0: Cu.import("resource://testing-common/httpd.js"); michael@0: Cu.import("resource://gre/modules/NetUtil.jsm"); michael@0: michael@0: add_test(function test_batchTask() { michael@0: let observer = function(aSubject, aTopic, aData) { michael@0: if (aTopic == "browser-search-engine-modified" && aData == "engine-loaded") { michael@0: let engine1 = Services.search.getEngineByName("Test search engine"); michael@0: let engine2 = Services.search.getEngineByName("Sherlock test search engine"); michael@0: if (engine1 && engine2) { michael@0: Services.obs.removeObserver(observer, aTopic); michael@0: // Test that files are written correctly. michael@0: let engineFile1 = engine1.wrappedJSObject._file; michael@0: let engineFile2 = engine2.wrappedJSObject._file; michael@0: do_check_true(engineFile1.exists()); michael@0: do_check_true(engineFile2.exists()); michael@0: do_check_neq(engineFile1.fileSize, 0); michael@0: do_check_neq(engineFile2.fileSize, 0); michael@0: run_next_test(); michael@0: } michael@0: } michael@0: } michael@0: michael@0: Services.obs.addObserver(observer, "browser-search-engine-modified", false); michael@0: Services.search.addEngine("http://localhost:4444/data/engine.xml", michael@0: Ci.nsISearchEngine.DATA_XML, null, false); michael@0: Services.search.addEngine("http://localhost:4444/data/engine.src", michael@0: Ci.nsISearchEngine.DATA_TEXT, michael@0: "http://localhost:4444/data/ico-size-16x16-png.ico", michael@0: false); michael@0: }); michael@0: michael@0: add_test(function test_addParam() { michael@0: let engine = Services.search.getEngineByName("Test search engine"); michael@0: engine.addParam("param-name", "param-value", null); michael@0: michael@0: function readAsyncFile(aFile, aCallback) { michael@0: NetUtil.asyncFetch(aFile, function(inputStream, status) { michael@0: do_check_true(Components.isSuccessCode(status)); michael@0: michael@0: let data = NetUtil.readInputStreamToString(inputStream, inputStream.available()); michael@0: aCallback(data); michael@0: }); michael@0: } michael@0: michael@0: let observer = function(aSubject, aTopic, aData) { michael@0: // The sherlock engine file may still be updated because the icon takes michael@0: // time be loaded, therefore, the engine name is checked here. michael@0: aSubject.QueryInterface(Ci.nsIFile); michael@0: if (aTopic == "browser-search-service" && michael@0: aData == "write-engine-to-disk-complete" && michael@0: aSubject.leafName == "test-search-engine.xml") { michael@0: Services.obs.removeObserver(observer, aTopic); michael@0: michael@0: let engineFile = engine.wrappedJSObject._file; michael@0: michael@0: readAsyncFile(engineFile, function(engineData) { michael@0: do_check_true(engineData.indexOf("param-name") > 0); michael@0: run_next_test(); michael@0: }); michael@0: } michael@0: } michael@0: Services.obs.addObserver(observer, "browser-search-service", false); michael@0: }); michael@0: michael@0: function run_test() { michael@0: updateAppInfo(); michael@0: michael@0: let httpServer = new HttpServer(); michael@0: httpServer.start(4444); michael@0: httpServer.registerDirectory("/", do_get_cwd()); michael@0: michael@0: do_register_cleanup(function cleanup() { michael@0: httpServer.stop(function() {}); michael@0: }); michael@0: michael@0: run_next_test(); michael@0: }