tenfourfox/devtools/client/jsonview/test/head.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

147 lines
3.7 KiB
JavaScript

/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// shared-head.js handles imports, constants, and utility functions
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/framework/test/head.js", this);
const JSON_VIEW_PREF = "devtools.jsonview.enabled";
// Enable JSON View for the test
Services.prefs.setBoolPref(JSON_VIEW_PREF, true);
registerCleanupFunction(() => {
Services.prefs.clearUserPref(JSON_VIEW_PREF);
});
// XXX move some API into devtools/framework/test/shared-head.js
/**
* Add a new test tab in the browser and load the given url.
* @param {String} url The url to be loaded in the new tab
* @return a promise that resolves to the tab object when the url is loaded
*/
function addJsonViewTab(url) {
info("Adding a new JSON tab with URL: '" + url + "'");
let deferred = promise.defer();
addTab(url).then(tab => {
let browser = tab.linkedBrowser;
// Load devtools/shared/frame-script-utils.js
getFrameScript();
// Load frame script with helpers for JSON View tests.
let rootDir = getRootDirectory(gTestPath);
let frameScriptUrl = rootDir + "doc_frame_script.js";
browser.messageManager.loadFrameScript(frameScriptUrl, false);
// Resolve if the JSONView is fully loaded or wait
// for an initialization event.
if (content.window.wrappedJSObject.jsonViewInitialized) {
deferred.resolve(tab);
} else {
waitForContentMessage("Test:JsonView:JSONViewInitialized").then(() => {
deferred.resolve(tab);
});
}
});
return deferred.promise;
}
/**
* Expanding a node in the JSON tree
*/
function expandJsonNode(selector) {
info("Expanding node: '" + selector + "'");
let browser = gBrowser.selectedBrowser;
return BrowserTestUtils.synthesizeMouseAtCenter(selector, {}, browser);
}
/**
* Select JSON View tab (in the content).
*/
function selectJsonViewContentTab(name) {
info("Selecting tab: '" + name + "'");
let browser = gBrowser.selectedBrowser;
let selector = ".tabs-menu .tabs-menu-item." + name + " a";
return BrowserTestUtils.synthesizeMouseAtCenter(selector, {}, browser);
}
function getElementCount(selector) {
info("Get element count: '" + selector + "'");
let data = {
selector: selector
};
return executeInContent("Test:JsonView:GetElementCount", data).then(result => {
return result.count;
});
}
function getElementText(selector) {
info("Get element text: '" + selector + "'");
let data = {
selector: selector
};
return executeInContent("Test:JsonView:GetElementText", data).then(result => {
return result.text;
});
}
function focusElement(selector) {
info("Focus element: '" + selector + "'");
let data = {
selector: selector
};
return executeInContent("Test:JsonView:FocusElement", data);
}
/**
* Send the string aStr to the focused element.
*
* For now this method only works for ASCII characters and emulates the shift
* key state on US keyboard layout.
*/
function sendString(str, selector) {
info("Send string: '" + str + "'");
let data = {
selector: selector,
str: str
};
return executeInContent("Test:JsonView:SendString", data);
}
function waitForTime(aDelay) {
let deferred = promise.defer();
setTimeout(deferred.resolve, aDelay);
return deferred.promise;
}
function waitForClipboardPromise(setup, expected) {
return new Promise((resolve, reject) => {
SimpleTest.waitForClipboard(expected, setup, resolve, reject);
});
}
function waitForFilter() {
return executeInContent("Test:JsonView:WaitForFilter");
}
function normalizeNewLines(value) {
return value.replace("(\r\n|\n)", "\n");
}