123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /* 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/. */
- "use strict";
- const { Cc, Ci, Cu } = require("chrome");
- const AddonInstaller = require("sdk/addon/installer");
- const { on, off } = require("sdk/system/events");
- const { setTimeout } = require("sdk/timers");
- const tmp = require("sdk/test/tmp-file");
- const system = require("sdk/system");
- const fixtures = require("./fixtures");
- const testFolderURL = module.uri.split('test-addon-installer.js')[0];
- const ADDON_URL = testFolderURL + "fixtures/addon-install-unit-test@mozilla.com.xpi";
- const ADDON_PATH = tmp.createFromURL(ADDON_URL);
- exports["test Install"] = function (assert, done) {
- // Save all events distpatched by bootstrap.js of the installed addon
- let events = [];
- function eventsObserver({ data }) {
- events.push(data);
- }
- on("addon-install-unit-test", eventsObserver);
- // Install the test addon
- AddonInstaller.install(ADDON_PATH).then(
- function onInstalled(id) {
- assert.equal(id, "addon-install-unit-test@mozilla.com", "`id` is valid");
- // Now uninstall it
- AddonInstaller.uninstall(id).then(function () {
- // Ensure that bootstrap.js methods of the addon have been called
- // successfully and in the right order
- let expectedEvents = ["install", "startup", "shutdown", "uninstall"];
- assert.equal(JSON.stringify(events),
- JSON.stringify(expectedEvents),
- "addon's bootstrap.js functions have been called");
- off("addon-install-unit-test", eventsObserver);
- done();
- });
- },
- function onFailure(code) {
- assert.fail("Install failed: "+code);
- off("addon-install-unit-test", eventsObserver);
- done();
- }
- );
- };
- exports["test Failing Install With Invalid Path"] = function (assert, done) {
- AddonInstaller.install("invalid-path").then(
- function onInstalled(id) {
- assert.fail("Unexpected success");
- done();
- },
- function onFailure(code) {
- assert.equal(code, AddonInstaller.ERROR_FILE_ACCESS,
- "Got expected error code");
- done();
- }
- );
- };
- exports["test Failing Install With Invalid File"] = function (assert, done) {
- let directory = system.pathFor("ProfD");
- AddonInstaller.install(directory).then(
- function onInstalled(id) {
- assert.fail("Unexpected success");
- done();
- },
- function onFailure(code) {
- assert.equal(code, AddonInstaller.ERROR_CORRUPT_FILE,
- "Got expected error code");
- done();
- }
- );
- }
- exports["test Update"] = function (assert, done) {
- // Save all events distpatched by bootstrap.js of the installed addon
- let events = [];
- let iteration = 1;
- let eventsObserver = ({data}) => events.push(data);
- on("addon-install-unit-test", eventsObserver);
- function onInstalled(id) {
- let prefix = "[" + iteration + "] ";
- assert.equal(id, "addon-install-unit-test@mozilla.com",
- prefix + "`id` is valid");
- // On 2nd and 3rd iteration, we receive uninstall events from the last
- // previously installed addon
- let expectedEvents =
- iteration == 1
- ? ["install", "startup"]
- : ["shutdown", "uninstall", "install", "startup"];
- assert.equal(JSON.stringify(events),
- JSON.stringify(expectedEvents),
- prefix + "addon's bootstrap.js functions have been called");
- if (iteration++ < 3) {
- next();
- }
- else {
- events = [];
- AddonInstaller.uninstall(id).then(function() {
- let expectedEvents = ["shutdown", "uninstall"];
- assert.equal(JSON.stringify(events),
- JSON.stringify(expectedEvents),
- prefix + "addon's bootstrap.js functions have been called");
- off("addon-install-unit-test", eventsObserver);
- done();
- });
- }
- }
- function onFailure(code) {
- assert.fail("Install failed: "+code);
- off("addon-install-unit-test", eventsObserver);
- done();
- }
- function next() {
- events = [];
- AddonInstaller.install(ADDON_PATH).then(onInstalled, onFailure);
- }
- next();
- };
- exports['test Uninstall failure'] = function (assert, done) {
- AddonInstaller.uninstall('invalid-addon-path').then(
- () => assert.fail('Addon uninstall should not resolve successfully'),
- () => assert.pass('Addon correctly rejected invalid uninstall')
- ).then(done, assert.fail);
- };
- exports['test Addon Disable and Enable'] = function (assert, done) {
- let ensureActive = (addonId) => AddonInstaller.isActive(addonId).then(state => {
- assert.equal(state, true, 'Addon should be enabled by default');
- return addonId;
- });
- let ensureInactive = (addonId) => AddonInstaller.isActive(addonId).then(state => {
- assert.equal(state, false, 'Addon should be disabled after disabling');
- return addonId;
- });
- AddonInstaller.install(ADDON_PATH)
- .then(ensureActive)
- .then(AddonInstaller.enable) // should do nothing, yet not fail
- .then(ensureActive)
- .then(AddonInstaller.disable)
- .then(ensureInactive)
- .then(AddonInstaller.disable) // should do nothing, yet not fail
- .then(ensureInactive)
- .then(AddonInstaller.enable)
- .then(ensureActive)
- .then(AddonInstaller.uninstall)
- .then(done, assert.fail);
- };
- exports['test Disable failure'] = function (assert, done) {
- AddonInstaller.disable('not-an-id').then(
- () => assert.fail('Addon disable should not resolve successfully'),
- () => assert.pass('Addon correctly rejected invalid disable')
- ).then(done, assert.fail);
- };
- exports['test Enable failure'] = function (assert, done) {
- AddonInstaller.enable('not-an-id').then(
- () => assert.fail('Addon enable should not resolve successfully'),
- () => assert.pass('Addon correctly rejected invalid enable')
- ).then(done, assert.fail);
- };
- require("test").run(exports);
|