diff options
Diffstat (limited to 'tools/addon-sdk-1.12/test/test-window-observer.js')
-rw-r--r-- | tools/addon-sdk-1.12/test/test-window-observer.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tools/addon-sdk-1.12/test/test-window-observer.js b/tools/addon-sdk-1.12/test/test-window-observer.js new file mode 100644 index 0000000..4a6264a --- /dev/null +++ b/tools/addon-sdk-1.12/test/test-window-observer.js @@ -0,0 +1,50 @@ +/* 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 { Loader } = require("sdk/test/loader"); +const timer = require("sdk/timers"); + +exports["test unload window observer"] = function(assert, done) { + // Hacky way to be able to create unloadable modules via makeSandboxedLoader. + let loader = Loader(module); + + let utils = loader.require("sdk/deprecated/window-utils"); + let { activeBrowserWindow: activeWindow } = utils; + let { isBrowser } = require('sdk/window/utils'); + let observer = loader.require("sdk/windows/observer").observer; + let opened = 0; + let closed = 0; + + observer.on("open", function onOpen(window) { + // Ignoring non-browser windows + if (isBrowser(window)) + opened++; + }); + observer.on("close", function onClose(window) { + // Ignore non-browser windows & already opened `activeWindow` (unload will + // emit close on it even though it is not actually closed). + if (isBrowser(window) && window !== activeWindow) + closed++; + }); + + // Open window and close it to trigger observers. + activeWindow.open().close(); + + // Unload the module so that all listeners set by observer are removed. + loader.unload(); + + // Open and close window once again. + activeWindow.open().close(); + + // Enqueuing asserts to make sure that assertion is not performed early. + timer.setTimeout(function () { + assert.equal(1, opened, "observer open was called before unload only"); + assert.equal(1, closed, "observer close was called before unload only"); + done(); + }, 0); +}; + +require("test").run(exports); |