зеркало из https://github.com/mozilla/gecko-dev.git
114 строки
3.2 KiB
JavaScript
114 строки
3.2 KiB
JavaScript
/* 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);
|