diff -r 000000000000 -r 6474c204b198 browser/devtools/sourceeditor/test/head.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/sourceeditor/test/head.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,110 @@ +/* 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"; + +const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); +const { require } = devtools; +const Editor = require("devtools/sourceeditor/editor"); + +gDevTools.testing = true; +SimpleTest.registerCleanupFunction(() => { + gDevTools.testing = false; +}); + +function setup(cb) { + const opt = "chrome,titlebar,toolbar,centerscreen,resizable,dialog=no"; + const url = "data:text/xml;charset=UTF-8," + + "" + + ""; + + let win = Services.ww.openWindow(null, url, "_blank", opt, null); + + win.addEventListener("load", function onLoad() { + win.removeEventListener("load", onLoad, false); + + waitForFocus(function () { + let box = win.document.querySelector("box"); + let editor = new Editor({ + value: "Hello.", + lineNumbers: true, + foldGutter: true, + gutters: [ "CodeMirror-linenumbers", "breakpoints", "CodeMirror-foldgutter" ] + }); + + editor.appendTo(box) + .then(() => cb(editor, win)) + .then(null, (err) => ok(false, err.message)); + }, win); + }, false); +} + +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(); + finish(); +} + +/** + * 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 = Services.io.newChannel(url, null, null); + let input = channel.open(); + 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 codeMirror_setStatus(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); + } +}