| 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);
 |