/* 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/. */ let SocialService = Components.utils.import("resource://gre/modules/SocialService.jsm", {}).SocialService; function ensureSocialEnabled() { let initiallyEnabled = SocialService.enabled; SocialService.enabled = true; registerCleanupFunction(function () { SocialService.enabled = initiallyEnabled; }); } // A helper to run a suite of tests. // The "test object" should be an object with function names as keys and a // function as the value. The functions will be called with a "cbnext" param // which should be called when the test is complete. // eg: // test = { // foo: function(cbnext) {... cbnext();} // } function runTests(tests, cbPreTest, cbPostTest) { waitForExplicitFinish(); let testIter = Iterator(tests); if (cbPreTest === undefined) { cbPreTest = function(cb) {cb()}; } if (cbPostTest === undefined) { cbPostTest = function(cb) {cb()}; } let runNextTest = function() { let name, func; try { [name, func] = testIter.next(); } catch (err if err instanceof StopIteration) { // out of items: finish(); return; } // We run on a timeout as the frameworker also makes use of timeouts, so // this helps keep the debug messages sane. window.setTimeout(function() { function cleanupAndRunNextTest() { info("sub-test " + name + " complete"); cbPostTest(runNextTest); } cbPreTest(function() { info("sub-test " + name + " starting"); try { func.call(tests, cleanupAndRunNextTest); } catch (ex) { ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack); cleanupAndRunNextTest(); } }) }, 0) } runNextTest(); }