gecko-dev/toolkit/components/extensions/test/xpcshell/head.js
Kris Maglione 2ad60b1f3d Bug 1344616: Migrate content script mochitests to xpcshell. r=mixedpuppy
MozReview-Commit-ID: 2ljMgRTIi5r

--HG--
rename : toolkit/components/extensions/test/mochitest/test_ext_contentscript.html => toolkit/components/extensions/test/xpcshell/test_ext_contentscript.js
rename : toolkit/components/extensions/test/mochitest/test_ext_i18n.html => toolkit/components/extensions/test/xpcshell/test_ext_i18n.js
rename : toolkit/components/extensions/test/mochitest/test_ext_i18n_css.html => toolkit/components/extensions/test/xpcshell/test_ext_i18n_css.js
extra : rebase_source : adfe7c0d88a674076f37a8faf6dedf7400f316f0
2017-03-06 17:15:40 -08:00

116 lines
3.7 KiB
JavaScript

"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
/* exported createHttpServer, promiseConsoleOutput, cleanupDir */
Components.utils.import("resource://gre/modules/AppConstants.jsm");
Components.utils.import("resource://gre/modules/Task.jsm");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Timer.jsm");
Components.utils.import("resource://testing-common/AddonTestUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ContentTask",
"resource://testing-common/ContentTask.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Extension",
"resource://gre/modules/Extension.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionData",
"resource://gre/modules/Extension.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionManagement",
"resource://gre/modules/ExtensionManagement.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionTestUtils",
"resource://testing-common/ExtensionXPCShellUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
"resource://gre/modules/FileUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "HttpServer",
"resource://testing-common/httpd.js");
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
"resource://gre/modules/NetUtil.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
"resource://gre/modules/Schemas.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
ExtensionTestUtils.init(this);
/**
* Creates a new HttpServer for testing, and begins listening on the
* specified port. Automatically shuts down the server when the test
* unit ends.
*
* @param {integer} [port]
* The port to listen on. If omitted, listen on a random
* port. The latter is the preferred behavior.
*
* @returns {HttpServer}
*/
function createHttpServer(port = -1) {
let server = new HttpServer();
server.start(port);
do_register_cleanup(() => {
return new Promise(resolve => {
server.stop(resolve);
});
});
return server;
}
if (AppConstants.platform === "android") {
Services.io.offline = true;
}
var promiseConsoleOutput = Task.async(function* (task) {
const DONE = `=== console listener ${Math.random()} done ===`;
let listener;
let messages = [];
let awaitListener = new Promise(resolve => {
listener = msg => {
if (msg == DONE) {
resolve();
} else {
void (msg instanceof Ci.nsIConsoleMessage);
messages.push(msg);
}
};
});
Services.console.registerListener(listener);
try {
let result = yield task();
Services.console.logStringMessage(DONE);
yield awaitListener;
return {messages, result};
} finally {
Services.console.unregisterListener(listener);
}
});
// Attempt to remove a directory. If the Windows OS is still using the
// file sometimes remove() will fail. So try repeatedly until we can
// remove it or we give up.
function cleanupDir(dir) {
let count = 0;
return new Promise((resolve, reject) => {
function tryToRemoveDir() {
count += 1;
try {
dir.remove(true);
} catch (e) {
// ignore
}
if (!dir.exists()) {
return resolve();
}
if (count >= 25) {
return reject(`Failed to cleanup directory: ${dir}`);
}
setTimeout(tryToRemoveDir, 100);
}
tryToRemoveDir();
});
}