Files
UXP-Fixed/toolkit/mozapps/webextensions/test/xpcshell/test_dependencies.js
T
2018-02-10 02:49:12 -05:00

145 lines
3.4 KiB
JavaScript

/* 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],
]);
});