summaryrefslogtreecommitdiffstats
path: root/devtools/client/sourceeditor/test/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/sourceeditor/test/head.js')
-rw-r--r--devtools/client/sourceeditor/test/head.js163
1 files changed, 163 insertions, 0 deletions
diff --git a/devtools/client/sourceeditor/test/head.js b/devtools/client/sourceeditor/test/head.js
new file mode 100644
index 000000000..4f8473eaf
--- /dev/null
+++ b/devtools/client/sourceeditor/test/head.js
@@ -0,0 +1,163 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+/* import-globals-from ../../framework/test/shared-head.js */
+"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 { NetUtil } = require("resource://gre/modules/NetUtil.jsm");
+const Editor = require("devtools/client/sourceeditor/editor");
+const {getClientCssProperties} = require("devtools/shared/fronts/css-properties");
+
+flags.testing = true;
+SimpleTest.registerCleanupFunction(() => {
+ flags.testing = false;
+});
+
+function promiseWaitForFocus() {
+ return new Promise(resolve =>
+ waitForFocus(resolve));
+}
+
+function setup(cb, additionalOpts = {}) {
+ cb = cb || function () {};
+ let def = promise.defer();
+ const opt = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no";
+ const url = "data:application/vnd.mozilla.xul+xml;charset=UTF-8," +
+ "<?xml version='1.0'?>" +
+ "<?xml-stylesheet href='chrome://global/skin/global.css'?>" +
+ "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper" +
+ "/there.is.only.xul' title='Editor' width='600' height='500'>" +
+ "<box flex='1'/></window>";
+
+ let win = Services.ww.openWindow(null, url, "_blank", opt, null);
+ let opts = {
+ value: "Hello.",
+ lineNumbers: true,
+ foldGutter: true,
+ gutters: ["CodeMirror-linenumbers", "breakpoints", "CodeMirror-foldgutter"],
+ cssProperties: getClientCssProperties()
+ };
+
+ for (let o in additionalOpts) {
+ opts[o] = additionalOpts[o];
+ }
+
+ win.addEventListener("load", function onLoad() {
+ win.removeEventListener("load", onLoad, false);
+
+ waitForFocus(function () {
+ let box = win.document.querySelector("box");
+ let editor = new Editor(opts);
+
+ editor.appendTo(box)
+ .then(() => {
+ def.resolve({
+ ed: editor,
+ win: win,
+ edWin: editor.container.contentWindow.wrappedJSObject
+ });
+ cb(editor, win);
+ }, err => ok(false, err.message));
+ }, win);
+ }, false);
+
+ return def.promise;
+}
+
+function ch(exp, act, label) {
+ is(exp.line, act.line, label + " (line)");
+ is(exp.ch, act.ch, label + " (ch)");
+}
+
+function teardown(ed, win) {
+ ed.destroy();
+ win.close();
+
+ while (gBrowser.tabs.length > 1) {
+ gBrowser.removeCurrentTab();
+ }
+ finish();
+}
+
+/**
+ * Some tests may need to import one or more of the test helper scripts.
+ * A test helper script is simply a js file that contains common test code that
+ * is either not common-enough to be in head.js, or that is located in a
+ * separate directory.
+ * The script will be loaded synchronously and in the test's scope.
+ * @param {String} filePath The file path, relative to the current directory.
+ * Examples:
+ * - "helper_attributes_test_runner.js"
+ * - "../../../commandline/test/helpers.js"
+ */
+function loadHelperScript(filePath) {
+ let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
+ Services.scriptloader.loadSubScript(testDir + "/" + filePath, this);
+}
+
+/**
+ * This method returns the portion of the input string `source` up to the
+ * [line, ch] location.
+ */
+function limit(source, [line, ch]) {
+ line++;
+ let list = source.split("\n");
+ if (list.length < line) {
+ return source;
+ }
+ if (line == 1) {
+ return list[0].slice(0, ch);
+ }
+ return [...list.slice(0, line - 1), list[line - 1].slice(0, ch)].join("\n");
+}
+
+function read(url) {
+ let scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
+ .getService(Ci.nsIScriptableInputStream);
+
+ let channel = NetUtil.newChannel({
+ uri: url,
+ loadUsingSystemPrincipal: true
+ });
+ let input = channel.open2();
+ scriptableStream.init(input);
+
+ let data = "";
+ while (input.available()) {
+ data = data.concat(scriptableStream.read(input.available()));
+ }
+ scriptableStream.close();
+ input.close();
+
+ return data;
+}
+
+/**
+ * This function is called by the CodeMirror test runner to report status
+ * messages from the CM tests.
+ * @see codemirror.html
+ */
+function codemirrorSetStatus(statusMsg, type, customMsg) {
+ switch (type) {
+ case "expected":
+ case "ok":
+ ok(1, statusMsg);
+ break;
+ case "error":
+ case "fail":
+ ok(0, statusMsg);
+ break;
+ default:
+ info(statusMsg);
+ break;
+ }
+
+ if (customMsg && typeof customMsg == "string" && customMsg != statusMsg) {
+ info(customMsg);
+ }
+}