summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/test-window-observer.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/test-window-observer.js')
-rw-r--r--addon-sdk/source/test/test-window-observer.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/addon-sdk/source/test/test-window-observer.js b/addon-sdk/source/test/test-window-observer.js
new file mode 100644
index 000000000..7efb6993a
--- /dev/null
+++ b/addon-sdk/source/test/test-window-observer.js
@@ -0,0 +1,61 @@
+/* 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 { open, close } = require("sdk/window/helpers");
+const { browserWindows: windows } = require("sdk/windows");
+const { isBrowser } = require('sdk/window/utils');
+const app = require("sdk/system/xul-app");
+
+exports["test unload window observer"] = function(assert, done) {
+ // Hacky way to be able to create unloadable modules via makeSandboxedLoader.
+ let loader = Loader(module);
+ let observer = loader.require("sdk/windows/observer").observer;
+ let opened = 0;
+ let closed = 0;
+ let windowsOpen = windows.length;
+
+ observer.on("open", onOpen);
+ observer.on("close", onClose);
+
+ // On Fennec, only test that the module does not throw an error
+ if (app.is("Fennec")) {
+ assert.pass("Windows observer did not throw on Fennec");
+ return cleanUp();
+ }
+
+ // Open window and close it to trigger observers.
+ open().
+ then(close).
+ then(loader.unload).
+ then(open).
+ then(close).
+ then(function() {
+ // Enqueuing asserts to make sure that assertion is not performed early.
+ assert.equal(1, opened, "observer open was called before unload only");
+ assert.equal(windowsOpen + 1, closed, "observer close was called before unload only");
+ }).
+ then(cleanUp, assert.fail);
+
+ function cleanUp () {
+ observer.removeListener("open", onOpen);
+ observer.removeListener("close", onClose);
+ done();
+ }
+
+ function onOpen(window) {
+ // Ignoring non-browser windows
+ if (isBrowser(window))
+ opened++;
+ }
+ 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))
+ closed++;
+ }
+};
+
+require("sdk/test").run(exports);