diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:49:12 -0500 |
commit | 4fb11cd5966461bccc3ed1599b808237be6b0de9 (patch) | |
tree | d7f0ccd49cebb3544d52635ff1bd6ed4d763823f /toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js | |
parent | f164d9124708b50789dbb6959e1de96cc5697c48 (diff) | |
download | UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.gz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.lz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.tar.xz UXP-4fb11cd5966461bccc3ed1599b808237be6b0de9.zip |
Move WebExtensions enabled Add-ons Manager
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js b/toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js new file mode 100644 index 000000000..3afc03f84 --- /dev/null +++ b/toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js @@ -0,0 +1,144 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +const profileDir = gProfD.clone(); +profileDir.append("extensions"); + +createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1"); +startupManager(); + +const BOOTSTRAP = String.raw` + Components.utils.import("resource://gre/modules/Services.jsm"); + + function startup(data) { + Services.obs.notifyObservers(null, "test-addon-bootstrap-startup", data.id); + } + function shutdown(data) { + Services.obs.notifyObservers(null, "test-addon-bootstrap-shutdown", data.id); + } + function install() {} + function uninstall() {} +`; + +const ADDONS = [ + { + id: "addon1@dependency-test.mozilla.org", + dependencies: ["addon2@dependency-test.mozilla.org"], + }, + { + id: "addon2@dependency-test.mozilla.org", + dependencies: ["addon3@dependency-test.mozilla.org"], + }, + { + id: "addon3@dependency-test.mozilla.org", + }, + { + id: "addon4@dependency-test.mozilla.org", + }, + { + id: "addon5@dependency-test.mozilla.org", + dependencies: ["addon2@dependency-test.mozilla.org"], + }, +]; + +let addonFiles = []; + +let events = []; +add_task(function* setup() { + let startupObserver = (subject, topic, data) => { + events.push(["startup", data]); + }; + let shutdownObserver = (subject, topic, data) => { + events.push(["shutdown", data]); + }; + + Services.obs.addObserver(startupObserver, "test-addon-bootstrap-startup", false); + Services.obs.addObserver(shutdownObserver, "test-addon-bootstrap-shutdown", false); + do_register_cleanup(() => { + Services.obs.removeObserver(startupObserver, "test-addon-bootstrap-startup"); + Services.obs.removeObserver(shutdownObserver, "test-addon-bootstrap-shutdown"); + }); + + for (let addon of ADDONS) { + Object.assign(addon, { + targetApplications: [{ + id: "xpcshell@tests.mozilla.org", + minVersion: "1", + maxVersion: "1", + }], + version: "1.0", + name: addon.id, + bootstrap: true, + }); + + addonFiles.push(createTempXPIFile(addon, {"bootstrap.js": BOOTSTRAP})); + } +}); + +add_task(function*() { + deepEqual(events, [], "Should have no events"); + + yield promiseInstallAllFiles([addonFiles[3]]); + + deepEqual(events, [ + ["startup", ADDONS[3].id], + ]); + + events.length = 0; + + yield promiseInstallAllFiles([addonFiles[0]]); + deepEqual(events, [], "Should have no events"); + + yield promiseInstallAllFiles([addonFiles[1]]); + deepEqual(events, [], "Should have no events"); + + yield promiseInstallAllFiles([addonFiles[2]]); + + deepEqual(events, [ + ["startup", ADDONS[2].id], + ["startup", ADDONS[1].id], + ["startup", ADDONS[0].id], + ]); + + events.length = 0; + + yield promiseInstallAllFiles([addonFiles[2]]); + + deepEqual(events, [ + ["shutdown", ADDONS[0].id], + ["shutdown", ADDONS[1].id], + ["shutdown", ADDONS[2].id], + + ["startup", ADDONS[2].id], + ["startup", ADDONS[1].id], + ["startup", ADDONS[0].id], + ]); + + events.length = 0; + + yield promiseInstallAllFiles([addonFiles[4]]); + + deepEqual(events, [ + ["startup", ADDONS[4].id], + ]); + + events.length = 0; + + yield promiseRestartManager(); + + deepEqual(events, [ + ["shutdown", ADDONS[4].id], + ["shutdown", ADDONS[3].id], + ["shutdown", ADDONS[0].id], + ["shutdown", ADDONS[1].id], + ["shutdown", ADDONS[2].id], + + ["startup", ADDONS[2].id], + ["startup", ADDONS[1].id], + ["startup", ADDONS[0].id], + ["startup", ADDONS[3].id], + ["startup", ADDONS[4].id], + ]); +}); + |