summaryrefslogtreecommitdiffstats
path: root/devtools/client/webide/test/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/webide/test/head.js')
-rw-r--r--devtools/client/webide/test/head.js248
1 files changed, 248 insertions, 0 deletions
diff --git a/devtools/client/webide/test/head.js b/devtools/client/webide/test/head.js
new file mode 100644
index 000000000..c0171c730
--- /dev/null
+++ b/devtools/client/webide/test/head.js
@@ -0,0 +1,248 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+var {utils: Cu, classes: Cc, interfaces: Ci} = Components;
+
+const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
+const { FileUtils } = require("resource://gre/modules/FileUtils.jsm");
+const { gDevTools } = require("devtools/client/framework/devtools");
+const promise = require("promise");
+const Services = require("Services");
+const { Task } = require("devtools/shared/task");
+const { AppProjects } = require("devtools/client/webide/modules/app-projects");
+const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+const { DebuggerServer } = require("devtools/server/main");
+const flags = require("devtools/shared/flags");
+flags.testing = true;
+
+var TEST_BASE;
+if (window.location === "chrome://browser/content/browser.xul") {
+ TEST_BASE = "chrome://mochitests/content/browser/devtools/client/webide/test/";
+} else {
+ TEST_BASE = "chrome://mochitests/content/chrome/devtools/client/webide/test/";
+}
+
+Services.prefs.setBoolPref("devtools.webide.enabled", true);
+Services.prefs.setBoolPref("devtools.webide.enableLocalRuntime", true);
+
+Services.prefs.setCharPref("devtools.webide.addonsURL", TEST_BASE + "addons/simulators.json");
+Services.prefs.setCharPref("devtools.webide.simulatorAddonsURL", TEST_BASE + "addons/fxos_#SLASHED_VERSION#_simulator-#OS#.xpi");
+Services.prefs.setCharPref("devtools.webide.adbAddonURL", TEST_BASE + "addons/adbhelper-#OS#.xpi");
+Services.prefs.setCharPref("devtools.webide.adaptersAddonURL", TEST_BASE + "addons/fxdt-adapters-#OS#.xpi");
+Services.prefs.setCharPref("devtools.webide.templatesURL", TEST_BASE + "templates.json");
+Services.prefs.setCharPref("devtools.devices.url", TEST_BASE + "browser_devices.json");
+
+var registerCleanupFunction = registerCleanupFunction ||
+ SimpleTest.registerCleanupFunction;
+registerCleanupFunction(() => {
+ flags.testing = false;
+ Services.prefs.clearUserPref("devtools.webide.enabled");
+ Services.prefs.clearUserPref("devtools.webide.enableLocalRuntime");
+ Services.prefs.clearUserPref("devtools.webide.autoinstallADBHelper");
+ Services.prefs.clearUserPref("devtools.webide.autoinstallFxdtAdapters");
+ Services.prefs.clearUserPref("devtools.webide.busyTimeout");
+ Services.prefs.clearUserPref("devtools.webide.lastSelectedProject");
+ Services.prefs.clearUserPref("devtools.webide.lastConnectedRuntime");
+});
+
+var openWebIDE = Task.async(function* (autoInstallAddons) {
+ info("opening WebIDE");
+
+ Services.prefs.setBoolPref("devtools.webide.autoinstallADBHelper", !!autoInstallAddons);
+ Services.prefs.setBoolPref("devtools.webide.autoinstallFxdtAdapters", !!autoInstallAddons);
+
+ let ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
+ let win = ww.openWindow(null, "chrome://webide/content/", "webide", "chrome,centerscreen,resizable", null);
+
+ yield new Promise(resolve => {
+ win.addEventListener("load", function onLoad() {
+ win.removeEventListener("load", onLoad);
+ SimpleTest.requestCompleteLog();
+ SimpleTest.executeSoon(resolve);
+ });
+ });
+
+ info("WebIDE open");
+
+ return win;
+});
+
+function closeWebIDE(win) {
+ info("Closing WebIDE");
+
+ let deferred = promise.defer();
+
+ Services.prefs.clearUserPref("devtools.webide.widget.enabled");
+
+ win.addEventListener("unload", function onUnload() {
+ win.removeEventListener("unload", onUnload);
+ info("WebIDE closed");
+ SimpleTest.executeSoon(() => {
+ deferred.resolve();
+ });
+ });
+
+ win.close();
+
+ return deferred.promise;
+}
+
+function removeAllProjects() {
+ return Task.spawn(function* () {
+ yield AppProjects.load();
+ // use a new array so we're not iterating over the same
+ // underlying array that's being modified by AppProjects
+ let projects = AppProjects.projects.map(p => p.location);
+ for (let i = 0; i < projects.length; i++) {
+ yield AppProjects.remove(projects[i]);
+ }
+ });
+}
+
+function nextTick() {
+ let deferred = promise.defer();
+ SimpleTest.executeSoon(() => {
+ deferred.resolve();
+ });
+
+ return deferred.promise;
+}
+
+function waitForUpdate(win, update) {
+ info("Wait: " + update);
+ let deferred = promise.defer();
+ win.AppManager.on("app-manager-update", function onUpdate(e, what) {
+ info("Got: " + what);
+ if (what !== update) {
+ return;
+ }
+ win.AppManager.off("app-manager-update", onUpdate);
+ deferred.resolve(win.UI._updatePromise);
+ });
+ return deferred.promise;
+}
+
+function waitForTime(time) {
+ let deferred = promise.defer();
+ setTimeout(() => {
+ deferred.resolve();
+ }, time);
+ return deferred.promise;
+}
+
+function documentIsLoaded(doc) {
+ let deferred = promise.defer();
+ if (doc.readyState == "complete") {
+ deferred.resolve();
+ } else {
+ doc.addEventListener("readystatechange", function onChange() {
+ if (doc.readyState == "complete") {
+ doc.removeEventListener("readystatechange", onChange);
+ deferred.resolve();
+ }
+ });
+ }
+ return deferred.promise;
+}
+
+function lazyIframeIsLoaded(iframe) {
+ let deferred = promise.defer();
+ iframe.addEventListener("load", function onLoad() {
+ iframe.removeEventListener("load", onLoad, true);
+ deferred.resolve(nextTick());
+ }, true);
+ return deferred.promise;
+}
+
+function addTab(aUrl, aWindow) {
+ info("Adding tab: " + aUrl);
+
+ let deferred = promise.defer();
+ let targetWindow = aWindow || window;
+ let targetBrowser = targetWindow.gBrowser;
+
+ targetWindow.focus();
+ let tab = targetBrowser.selectedTab = targetBrowser.addTab(aUrl);
+ let linkedBrowser = tab.linkedBrowser;
+
+ BrowserTestUtils.browserLoaded(linkedBrowser).then(function () {
+ info("Tab added and finished loading: " + aUrl);
+ deferred.resolve(tab);
+ });
+
+ return deferred.promise;
+}
+
+function removeTab(aTab, aWindow) {
+ info("Removing tab.");
+
+ let deferred = promise.defer();
+ let targetWindow = aWindow || window;
+ let targetBrowser = targetWindow.gBrowser;
+ let tabContainer = targetBrowser.tabContainer;
+
+ tabContainer.addEventListener("TabClose", function onClose(aEvent) {
+ tabContainer.removeEventListener("TabClose", onClose, false);
+ info("Tab removed and finished closing.");
+ deferred.resolve();
+ }, false);
+
+ targetBrowser.removeTab(aTab);
+ return deferred.promise;
+}
+
+function getRuntimeDocument(win) {
+ return win.document.querySelector("#runtime-listing-panel-details").contentDocument;
+}
+
+function getProjectDocument(win) {
+ return win.document.querySelector("#project-listing-panel-details").contentDocument;
+}
+
+function getRuntimeWindow(win) {
+ return win.document.querySelector("#runtime-listing-panel-details").contentWindow;
+}
+
+function getProjectWindow(win) {
+ return win.document.querySelector("#project-listing-panel-details").contentWindow;
+}
+
+function connectToLocalRuntime(win) {
+ info("Loading local runtime.");
+
+ let panelNode;
+ let runtimePanel;
+
+ runtimePanel = getRuntimeDocument(win);
+
+ panelNode = runtimePanel.querySelector("#runtime-panel");
+ let items = panelNode.querySelectorAll(".runtime-panel-item-other");
+ is(items.length, 2, "Found 2 custom runtime buttons");
+
+ let updated = waitForUpdate(win, "runtime-global-actors");
+ items[1].click();
+ return updated;
+}
+
+function handleError(aError) {
+ ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
+ finish();
+}
+
+function waitForConnectionChange(expectedState, count = 1) {
+ return new Promise(resolve => {
+ let onConnectionChange = (_, state) => {
+ if (state != expectedState) {
+ return;
+ }
+ if (--count != 0) {
+ return;
+ }
+ DebuggerServer.off("connectionchange", onConnectionChange);
+ resolve();
+ };
+ DebuggerServer.on("connectionchange", onConnectionChange);
+ });
+}