addon-sdk/source/test/addons/addon-page/main.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/addon-sdk/source/test/addons/addon-page/main.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,202 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +'use strict';
     1.8 +
     1.9 +const { isTabOpen, activateTab, openTab,
    1.10 +        closeTab, getTabURL, getWindowHoldingTab } = require('sdk/tabs/utils');
    1.11 +const windows = require('sdk/deprecated/window-utils');
    1.12 +const { LoaderWithHookedConsole } = require('sdk/test/loader');
    1.13 +const { setTimeout } = require('sdk/timers');
    1.14 +const app = require("sdk/system/xul-app");
    1.15 +const tabs = require('sdk/tabs');
    1.16 +const isAustralis = "gCustomizeMode" in windows.activeBrowserWindow;
    1.17 +const { set: setPref, get: getPref } = require("sdk/preferences/service");
    1.18 +const { PrefsTarget } = require("sdk/preferences/event-target");
    1.19 +const { defer } = require('sdk/core/promise');
    1.20 +
    1.21 +const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings";
    1.22 +
    1.23 +let uri = require('sdk/self').data.url('index.html');
    1.24 +
    1.25 +function closeTabPromise(tab) {
    1.26 +  let { promise, resolve } = defer();
    1.27 +  let url = getTabURL(tab);
    1.28 +
    1.29 +  tabs.on('close', function onCloseTab(t) {
    1.30 +    if (t.url == url) {
    1.31 +      tabs.removeListener('close', onCloseTab);
    1.32 +      setTimeout(_ => resolve(tab))
    1.33 +    }
    1.34 +  });
    1.35 +  closeTab(tab);
    1.36 +
    1.37 +  return promise;
    1.38 +}
    1.39 +
    1.40 +function isChromeVisible(window) {
    1.41 +  let x = window.document.documentElement.getAttribute('disablechrome')
    1.42 +  return x !== 'true';
    1.43 +}
    1.44 +
    1.45 +// Once Bug 903018 is resolved, just move the application testing to
    1.46 +// module.metadata.engines
    1.47 +if (app.is('Firefox')) {
    1.48 +
    1.49 +exports['test add-on page deprecation message'] = function(assert, done) {
    1.50 +  let { loader, messages } = LoaderWithHookedConsole(module);
    1.51 +
    1.52 +  loader.require('sdk/preferences/event-target').PrefsTarget({
    1.53 +    branchName: "devtools.errorconsole."
    1.54 +  }).on("deprecation_warnings", function() {
    1.55 +    if (!getPref(DEPRECATE_PREF, false)) {
    1.56 +      return undefined;
    1.57 +    }
    1.58 +
    1.59 +    loader.require('sdk/addon-page');
    1.60 +
    1.61 +    assert.equal(messages.length, 1, "only one error is dispatched");
    1.62 +    assert.equal(messages[0].type, "error", "the console message is an error");
    1.63 +
    1.64 +    let msg = messages[0].msg;
    1.65 +    assert.ok(msg.indexOf("DEPRECATED") === 0,
    1.66 +              "The message is deprecation message");
    1.67 +
    1.68 +    loader.unload();
    1.69 +    done();
    1.70 +    return undefined;
    1.71 +  });
    1.72 +  setPref(DEPRECATE_PREF, false);
    1.73 +  setPref(DEPRECATE_PREF, true);
    1.74 +};
    1.75 +
    1.76 +exports['test that add-on page has no chrome'] = function(assert, done) {
    1.77 +  let { loader } = LoaderWithHookedConsole(module);
    1.78 +  loader.require('sdk/addon-page');
    1.79 +
    1.80 +  let window = windows.activeBrowserWindow;
    1.81 +  let tab = openTab(window, uri);
    1.82 +
    1.83 +  assert.ok(isChromeVisible(window), 'chrome is visible for non addon page');
    1.84 +
    1.85 +  // need to do this in another turn to make sure event listener
    1.86 +  // that sets property has time to do that.
    1.87 +  setTimeout(function() {
    1.88 +    activateTab(tab);
    1.89 +
    1.90 +    assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis,
    1.91 +      'chrome is not visible for addon page');
    1.92 +
    1.93 +    closeTabPromise(tab).then(function() {
    1.94 +      assert.ok(isChromeVisible(window), 'chrome is visible again');
    1.95 +      loader.unload();
    1.96 +      assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload');
    1.97 +      done();
    1.98 +    }).then(null, assert.fail);
    1.99 +  });
   1.100 +};
   1.101 +
   1.102 +exports['test that add-on page with hash has no chrome'] = function(assert, done) {
   1.103 +  let { loader } = LoaderWithHookedConsole(module);
   1.104 +  loader.require('sdk/addon-page');
   1.105 +
   1.106 +  let window = windows.activeBrowserWindow;
   1.107 +  let tab = openTab(window, uri + "#foo");
   1.108 +
   1.109 +  assert.ok(isChromeVisible(window), 'chrome is visible for non addon page');
   1.110 +
   1.111 +  // need to do this in another turn to make sure event listener
   1.112 +  // that sets property has time to do that.
   1.113 +  setTimeout(function() {
   1.114 +    activateTab(tab);
   1.115 +
   1.116 +    assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis,
   1.117 +      'chrome is not visible for addon page');
   1.118 +
   1.119 +    closeTabPromise(tab).then(function() {
   1.120 +      assert.ok(isChromeVisible(window), 'chrome is visible again');
   1.121 +      loader.unload();
   1.122 +      assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload');
   1.123 +      done();
   1.124 +    }).then(null, assert.fail);
   1.125 +  });
   1.126 +};
   1.127 +
   1.128 +exports['test that add-on page with querystring has no chrome'] = function(assert, done) {
   1.129 +  let { loader } = LoaderWithHookedConsole(module);
   1.130 +  loader.require('sdk/addon-page');
   1.131 +
   1.132 +  let window = windows.activeBrowserWindow;
   1.133 +  let tab = openTab(window, uri + '?foo=bar');
   1.134 +
   1.135 +  assert.ok(isChromeVisible(window), 'chrome is visible for non addon page');
   1.136 +
   1.137 +  // need to do this in another turn to make sure event listener
   1.138 +  // that sets property has time to do that.
   1.139 +  setTimeout(function() {
   1.140 +    activateTab(tab);
   1.141 +
   1.142 +    assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis,
   1.143 +      'chrome is not visible for addon page');
   1.144 +
   1.145 +    closeTabPromise(tab).then(function() {
   1.146 +      assert.ok(isChromeVisible(window), 'chrome is visible again');
   1.147 +      loader.unload();
   1.148 +      assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload');
   1.149 +      done();
   1.150 +    }).then(null, assert.fail);
   1.151 +  });
   1.152 +};
   1.153 +
   1.154 +exports['test that add-on page with hash and querystring has no chrome'] = function(assert, done) {
   1.155 +  let { loader } = LoaderWithHookedConsole(module);
   1.156 +  loader.require('sdk/addon-page');
   1.157 +
   1.158 +  let window = windows.activeBrowserWindow;
   1.159 +  let tab = openTab(window, uri + '#foo?foo=bar');
   1.160 +
   1.161 +  assert.ok(isChromeVisible(window), 'chrome is visible for non addon page');
   1.162 +
   1.163 +  // need to do this in another turn to make sure event listener
   1.164 +  // that sets property has time to do that.
   1.165 +  setTimeout(function() {
   1.166 +    activateTab(tab);
   1.167 +
   1.168 +    assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis,
   1.169 +      'chrome is not visible for addon page');
   1.170 +
   1.171 +    closeTabPromise(tab).then(function() {
   1.172 +      assert.ok(isChromeVisible(window), 'chrome is visible again');
   1.173 +      loader.unload();
   1.174 +      assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload');
   1.175 +      done();
   1.176 +    }).then(null, assert.fail);
   1.177 +  });
   1.178 +};
   1.179 +
   1.180 +exports['test that malformed uri is not an addon-page'] = function(assert, done) {
   1.181 +  let { loader } = LoaderWithHookedConsole(module);
   1.182 +  loader.require('sdk/addon-page');
   1.183 +
   1.184 +  let window = windows.activeBrowserWindow;
   1.185 +  let tab = openTab(window, uri + 'anguage');
   1.186 +
   1.187 +  // need to do this in another turn to make sure event listener
   1.188 +  // that sets property has time to do that.
   1.189 +  setTimeout(function() {
   1.190 +    activateTab(tab);
   1.191 +
   1.192 +    assert.ok(isChromeVisible(window), 'chrome is visible for malformed uri');
   1.193 +
   1.194 +    closeTabPromise(tab).then(function() {
   1.195 +      loader.unload();
   1.196 +      done();
   1.197 +    }).then(null, assert.fail);
   1.198 +  });
   1.199 +};
   1.200 +
   1.201 +} else {
   1.202 +  exports['test unsupported'] = (assert) => assert.pass('This application is unsupported.');
   1.203 +}
   1.204 +
   1.205 +require('sdk/test/runner').runTestsFromModule(module);

mercurial