Bug 1093566 - Migrate BrowserUITestUtils into BrowserTestUtils; r=Unfocused r=paolo

This commit is contained in:
Steven MacLeod 2015-02-23 12:48:54 -05:00
parent 519d688bf0
commit 877c5f3df7
5 changed files with 57 additions and 77 deletions

View File

@ -1,70 +0,0 @@
"use strict";
this.EXPORTED_SYMBOLS = [
"BrowserUITestUtils",
];
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/Timer.jsm");
/**
* Default wait period in millseconds, when waiting for the expected event to occur.
* @type {number}
*/
const DEFAULT_WAIT = 2000;
/**
* Test utility functions for dealing with the browser UI DOM.
*/
this.BrowserUITestUtils = {
/**
* Waits a specified number of miliseconds for a specified event to be
* fired on a specified element.
*
* Usage:
* let receivedEvent = BrowserUITestUtils.waitForEvent(element, "eventName");
* // Do some processing here that will cause the event to be fired
* // ...
* // Now yield until the Promise is fulfilled
* yield receivedEvent;
* if (receivedEvent && !(receivedEvent instanceof Error)) {
* receivedEvent.msg == "eventName";
* // ...
* }
*
* @param {Element} subject - The element that should receive the event.
* @param {string} eventName - The event to wait for.
* @param {number} timeoutMs - The number of miliseconds to wait before giving up.
* @param {Element} target - Expected target of the event.
* @returns {Promise} A Promise that resolves to the received event, or
* rejects with an Error.
*/
waitForEvent(subject, eventName, timeoutMs, target) {
return new Promise((resolve, reject) => {
function listener(event) {
if (target && target !== event.target) {
return;
}
subject.removeEventListener(eventName, listener);
clearTimeout(timerID);
resolve(event);
}
timeoutMs = timeoutMs || DEFAULT_WAIT;
let stack = new Error().stack;
let timerID = setTimeout(() => {
subject.removeEventListener(eventName, listener);
reject(new Error(`${eventName} event timeout at ${stack}`));
}, timeoutMs);
subject.addEventListener(eventName, listener);
});
},
};

View File

@ -6,10 +6,6 @@
SPHINX_TREES['sslerrorreport'] = 'content/docs/sslerrorreport'
TESTING_JS_MODULES += [
'content/test/BrowserUITestUtils.jsm',
]
MOCHITEST_MANIFESTS += [
'content/test/general/mochitest.ini',
]

View File

@ -4,7 +4,7 @@
function mouseInteraction(mouseEvent, responseEvent, itemNode) {
let eventPromise = BrowserUITestUtils.waitForEvent(RLSidebarUtils.list, responseEvent);
let eventPromise = BrowserTestUtils.waitForEvent(RLSidebarUtils.list, responseEvent);
let details = {};
if (mouseEvent != "click") {
details.type = mouseEvent;

View File

@ -2,8 +2,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "ReadingList",
"resource:///modules/readinglist/ReadingList.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ReadingListTestUtils",
"resource://testing-common/ReadingListTestUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "BrowserUITestUtils",
"resource://testing-common/BrowserUITestUtils.jsm");
XPCOMUtils.defineLazyGetter(this, "RLUtils", () => {

View File

@ -19,6 +19,7 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Timer.jsm");
Cu.import("resource://testing-common/TestUtils.jsm");
Cc["@mozilla.org/globalmessagemanager;1"]
@ -27,6 +28,14 @@ Cc["@mozilla.org/globalmessagemanager;1"]
"chrome://mochikit/content/tests/BrowserTestUtils/content-utils.js", true);
/**
* Default wait period in millseconds, when waiting for the expected
* event to occur.
* @type {number}
*/
const DEFAULT_WAIT = 2000;
this.BrowserTestUtils = {
/**
* @param {xul:browser} browser
@ -81,4 +90,51 @@ this.BrowserTestUtils = {
() => resolve(win));
});
},
/**
* Waits a specified number of miliseconds for a specified event to be
* fired on a specified element.
*
* Usage:
* let receivedEvent = BrowserTestUtil.waitForEvent(element, "eventName");
* // Do some processing here that will cause the event to be fired
* // ...
* // Now yield until the Promise is fulfilled
* yield receivedEvent;
* if (receivedEvent && !(receivedEvent instanceof Error)) {
* receivedEvent.msg == "eventName";
* // ...
* }
*
* @param {Element} subject - The element that should receive the event.
* @param {string} eventName - The event to wait for.
* @param {number} timeoutMs - The number of miliseconds to wait before giving up.
* @param {Element} target - Expected target of the event.
* @returns {Promise} A Promise that resolves to the received event, or
* rejects with an Error.
*/
waitForEvent(subject, eventName, timeoutMs, target) {
return new Promise((resolve, reject) => {
function listener(event) {
if (target && target !== event.target) {
return;
}
subject.removeEventListener(eventName, listener);
clearTimeout(timerID);
resolve(event);
}
timeoutMs = timeoutMs || DEFAULT_WAIT;
let stack = new Error().stack;
let timerID = setTimeout(() => {
subject.removeEventListener(eventName, listener);
reject(new Error(`${eventName} event timeout at ${stack}`));
}, timeoutMs);
subject.addEventListener(eventName, listener);
});
},
};