Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

178 lines
5.3 KiB
JavaScript

/* vim: set ts=2 et sw=2 tw=80: */
/* 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";
// shared-head.js handles imports, constants, and utility functions
Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/devtools/client/framework/test/shared-head.js", this);
const BASE_URI = "http://mochi.test:8888/browser/devtools/client/fontinspector/test/"
/**
* Open the toolbox, with the inspector tool visible.
* @param {Function} cb Optional callback, if you don't want to use the returned
* promise
* @return a promise that resolves when the inspector is ready
*/
var openInspector = Task.async(function*(cb) {
info("Opening the inspector");
let target = TargetFactory.forTab(gBrowser.selectedTab);
let inspector, toolbox;
// Checking if the toolbox and the inspector are already loaded
// The inspector-updated event should only be waited for if the inspector
// isn't loaded yet
toolbox = gDevTools.getToolbox(target);
if (toolbox) {
inspector = toolbox.getPanel("inspector");
if (inspector) {
info("Toolbox and inspector already open");
if (cb) {
return cb(inspector, toolbox);
} else {
return {
toolbox: toolbox,
inspector: inspector
};
}
}
}
info("Opening the toolbox");
toolbox = yield gDevTools.showToolbox(target, "inspector");
yield waitForToolboxFrameFocus(toolbox);
inspector = toolbox.getPanel("inspector");
info("Waiting for the inspector to update");
yield inspector.once("inspector-updated");
if (cb) {
return cb(inspector, toolbox);
} else {
return {
toolbox: toolbox,
inspector: inspector
};
}
});
/**
* Adds a new tab with the given URL, opens the inspector and selects the
* font-inspector tab.
*
* @return Object
* {
* toolbox,
* inspector,
* fontInspector
* }
*/
var openFontInspectorForURL = Task.async(function* (url) {
info("Opening tab " + url);
yield addTab(url);
let { toolbox, inspector } = yield openInspector();
/**
* Call selectNode to trigger font-inspector update so that we don't timeout
* if following conditions hold
* a) the initial 'fontinspector-updated' was emitted while we were waiting
* for openInspector to resolve
* b) the font-inspector tab was selected by default which means the call to
* select will not trigger another update.
*
* selectNode calls setNodeFront which always emits 'new-node' which calls
* FontInspector.update that emits the 'fontinspector-updated' event.
*/
let onUpdated = inspector.once("fontinspector-updated");
yield selectNode("body", inspector);
inspector.sidebar.select("fontinspector");
info("Waiting for font-inspector to update.");
yield onUpdated;
info("Font Inspector ready.");
let { fontInspector } = inspector.sidebar.getWindowForTab("fontinspector");
return {
fontInspector,
inspector,
toolbox
};
});
/**
* Select a node in the inspector given its selector.
*/
var selectNode = Task.async(function*(selector, inspector, reason="test") {
info("Selecting the node for '" + selector + "'");
let nodeFront = yield getNodeFront(selector, inspector);
let updated = inspector.once("inspector-updated");
inspector.selection.setNodeFront(nodeFront, reason);
yield updated;
});
/**
* Get the NodeFront for a given css selector, via the protocol
* @param {String|NodeFront} selector
* @param {InspectorPanel} inspector The instance of InspectorPanel currently
* loaded in the toolbox
* @return {Promise} Resolves to the NodeFront instance
*/
function getNodeFront(selector, {walker}) {
if (selector._form) {
return selector;
}
return walker.querySelector(walker.rootNode, selector);
}
/**
* Wait for the toolbox frame to receive focus after it loads
* @param {Toolbox} toolbox
* @return a promise that resolves when focus has been received
*/
function waitForToolboxFrameFocus(toolbox) {
info("Making sure that the toolbox's frame is focused");
let def = promise.defer();
let win = toolbox.frame.contentWindow;
waitForFocus(def.resolve, win);
return def.promise;
}
/**
* Clears the preview input field, types new text into it and waits for the
* preview images to be updated.
*
* @param {FontInspector} fontInspector - The FontInspector instance.
* @param {String} text - The text to preview.
*/
function* updatePreviewText(fontInspector, text) {
info(`Changing the preview text to '${text}'`);
let doc = fontInspector.chromeDoc;
let input = doc.getElementById("preview-text-input");
let update = fontInspector.inspector.once("fontinspector-updated");
info("Focusing the input field.");
input.focus();
is(doc.activeElement, input, "The input was focused.");
info("Blanking the input field.");
for (let i = input.value.length; i >= 0; i--) {
EventUtils.sendKey("BACK_SPACE", doc.defaultView);
}
is(input.value, "", "The input is now blank.");
info("Typing the specified text to the input field.");
EventUtils.sendString(text, doc.defaultView);
is(input.value, text, "The input now contains the correct text.");
info("Waiting for the font-inspector to update.");
yield update;
}