diff -r 000000000000 -r 6474c204b198 addon-sdk/source/test/test-window-loader.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/test/test-window-loader.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,113 @@ +/* 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'; + +// Opening new windows in Fennec causes issues +module.metadata = { + engines: { + 'Firefox': '*' + } +}; + +const { WindowLoader } = require('sdk/windows/loader'), + { Trait } = require('sdk/deprecated/traits'); + +const Loader = Trait.compose( + WindowLoader, + { + constructor: function Loader(options) { + this._onLoad = options.onLoad; + this._onUnload = options.onUnload; + if ('window' in options) + this._window = options.window; + this._load(); + this.window = this._window; + }, + window: null, + _onLoad: null, + _onUnload: null, + _tabOptions: [] + } +); + +exports['test compositions with missing required properties'] = function(assert) { + assert.throws( + function() WindowLoader.compose({})(), + /Missing required property: _onLoad/, + 'should throw missing required property exception' + ); + assert.throws( + function() WindowLoader.compose({ _onLoad: null, _tabOptions: null })(), + /Missing required property: _onUnload/, + 'should throw missing required property `_onUnload`' + ); + assert.throws( + function() WindowLoader.compose({ _onUnload: null, _tabOptions: null })(), + /Missing required property: _onLoad/, + 'should throw missing required property `_onLoad`' + ); + assert.throws( + function() WindowLoader.compose({ _onUnload: null, _onLoad: null })(), + /Missing required property: _tabOptions/, + 'should throw missing required property `_tabOptions`' + ); +}; + +exports['test `load` events'] = function(assert, done) { + let onLoadCalled = false; + Loader({ + onLoad: function(window) { + onLoadCalled = true; + assert.equal(window, this._window, 'windows should match'); + assert.equal( + window.document.readyState, 'complete', 'window must be fully loaded' + ); + window.close(); + }, + onUnload: function(window) { + assert.equal(window, this._window, 'windows should match'); + assert.equal( + window.document.readyState, 'complete', 'window must be fully loaded' + ); + assert.ok(onLoadCalled, 'load callback is supposed to be called'); + done(); + } + }); +}; + +exports['test removeing listeners'] = function(assert, done) { + Loader({ + onLoad: function(window) { + assert.equal(window, this._window, 'windows should match'); + window.close(); + }, + onUnload: done + }); +}; + +exports['test create loader from opened window'] = function(assert, done) { + let onUnloadCalled = false; + Loader({ + onLoad: function(window) { + assert.equal(window, this._window, 'windows should match'); + assert.equal(window.document.readyState, 'complete', 'window must be fully loaded'); + Loader({ + window: window, + onLoad: function(win) { + assert.equal(win, window, 'windows should match'); + window.close(); + }, + onUnload: function(window) { + assert.ok(onUnloadCalled, 'first handler should be called already'); + done(); + } + }); + }, + onUnload: function(window) { + onUnloadCalled = true; + } + }); +}; + +require('sdk/test').run(exports);