summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/util.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/util.js')
-rw-r--r--addon-sdk/source/test/util.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/addon-sdk/source/test/util.js b/addon-sdk/source/test/util.js
new file mode 100644
index 000000000..af6a6f564
--- /dev/null
+++ b/addon-sdk/source/test/util.js
@@ -0,0 +1,90 @@
+/* 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 {Cc, Ci} = require("chrome");
+const {getMostRecentBrowserWindow, open} = require("sdk/window/utils");
+const tabUtils = require("sdk/tabs/utils");
+const {when} = require("sdk/dom/events");
+
+
+var observerService = Cc["@mozilla.org/observer-service;1"]
+ .getService(Ci.nsIObserverService);
+
+const { ShimWaiver } = Cu.import("resource://gre/modules/ShimWaiver.jsm");
+const addObserver = ShimWaiver.getProperty(observerService, "addObserver");
+const removeObserver = ShimWaiver.getProperty(observerService, "removeObserver");
+
+const getActiveTab = (window=getMostRecentBrowserWindow()) =>
+ tabUtils.getActiveTab(window)
+
+const openWindow = () => {
+ const window = open();
+ return new Promise((resolve) => {
+ addObserver({
+ observe(subject, topic) {
+ if (subject === window) {
+ removeObserver(this, topic);
+ resolve(subject);
+ }
+ }
+ }, "browser-delayed-startup-finished", false);
+ });
+};
+exports.openWindow = openWindow;
+
+const closeWindow = (window) => {
+ const closed = when(window, "unload", true).then(_ => window);
+ window.close();
+ return closed;
+};
+exports.closeWindow = closeWindow;
+
+const openTab = (url, window=getMostRecentBrowserWindow()) => {
+ const tab = tabUtils.openTab(window, url);
+ const browser = tabUtils.getBrowserForTab(tab);
+
+ return when(browser, "load", true).then(_ => tab);
+};
+exports.openTab = openTab;
+
+const closeTab = (tab) => {
+ const result = when(tab, "TabClose").then(_ => tab);
+ tabUtils.closeTab(tab);
+
+ return result;
+};
+exports.closeTab = closeTab;
+
+const withTab = (test, uri="about:blank") => function*(assert) {
+ const tab = yield openTab(uri);
+ try {
+ yield* test(assert, tab);
+ }
+ finally {
+ yield closeTab(tab);
+ }
+};
+exports.withTab = withTab;
+
+const withWindow = () => function*(assert) {
+ const window = yield openWindow();
+ try {
+ yield* test(assert, window);
+ }
+ finally {
+ yield closeWindow(window);
+ }
+};
+exports.withWindow = withWindow;
+
+const receiveMessage = (manager, name) => new Promise((resolve) => {
+ manager.addMessageListener(name, {
+ receiveMessage(message) {
+ manager.removeMessageListener(name, this);
+ resolve(message);
+ }
+ });
+});
+exports.receiveMessage = receiveMessage;