Mypal/devtools/client/sourceeditor/test/browser_editor_goto_line.js
2021-02-04 16:48:36 +02:00

131 lines
3.4 KiB
JavaScript

/* -*- indent-tabs-mode: nil; js-indent-level: 2; fill-column: 80 -*- */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
function testJumpToLine(ed, inputLine, expectCursor) {
ed.jumpToLine();
let editorDoc = ed.container.contentDocument;
let lineInput = editorDoc.querySelector("input");
lineInput.value = inputLine;
EventUtils.synthesizeKey("VK_RETURN", { }, editorDoc.defaultView);
// CodeMirror lines and columns are 0-based, Scratchpad UI is 1-based.
ch(ed.getCursor(), expectCursor,
"jumpToLine " + inputLine + " expects cursor " + expectCursor.toSource());
}
function test() {
waitForExplicitFinish();
setup((ed, win) => {
let textLines = [
"// line 1",
"// line 2",
"// line 3",
"// line 4",
"// line 5",
""];
ed.setText(textLines.join("\n"));
waitForFocus(function () {
let testVectors = [
// Various useless inputs go to line 0, column 0 or do nothing.
["",
{line: 0, ch: 0}],
[":",
{line: 0, ch: 0}],
[" ",
{line: 0, ch: 0}],
[" : ",
{line: 0, ch: 0}],
["a:b",
{line: 0, ch: 0}],
["LINE: COLUMN ",
{line: 0, ch: 0}],
["-1",
{line: 0, ch: 0}],
[":-1",
{line: 0, ch: 0}],
["-1:-1",
{line: 0, ch: 0}],
["0",
{line: 0, ch: 0}],
[":0",
{line: 0, ch: 0}],
["0:0",
{line: 0, ch: 0}],
// Starting here expect data needs to get updated for length changes to
// "textLines" above.
// Just jump to line
["1",
{line: 0, ch: 0}],
// Jump to second character in line
["1:2",
{line: 0, ch: 1}],
// Jump to last character on line
["1:9",
{line: 0, ch: 8}],
// Jump just after last character on line (end of line)
["1:10",
{line: 0, ch: 9}],
// Jump one character past end of line (gets clamped to end of line)
["1:11",
{line: 0, ch: 9}],
["2",
{line: 1, ch: 0}],
["2:2",
{line: 1, ch: 1}],
["2:10",
{line: 1, ch: 9}],
["2:11",
{line: 1, ch: 10}],
["2:12",
{line: 1, ch: 10}],
["3",
{line: 2, ch: 0}],
["3:2",
{line: 2, ch: 1}],
["3:11",
{line: 2, ch: 10}],
["3:12",
{line: 2, ch: 11}],
["3:13",
{line: 2, ch: 11}],
["4",
{line: 3, ch: 0}],
["4:2",
{line: 3, ch: 1}],
["4:12",
{line: 3, ch: 11}],
["4:13",
{line: 3, ch: 12}],
["4:14",
{line: 3, ch: 12}],
["5",
{line: 4, ch: 0}],
["5:2",
{line: 4, ch: 1}],
["5:13",
{line: 4, ch: 12}],
["5:14",
{line: 4, ch: 13}],
["5:15",
{line: 4, ch: 13}],
// One line beyond last newline in editor text:
["6",
{line: 5, ch: 0}],
["6:2",
{line: 5, ch: 0}],
// Two line beyond last newline in editor text (gets clamped):
["7",
{line: 5, ch: 0}],
["7:2",
{line: 5, ch: 0}]
];
testVectors.forEach(vector => {
testJumpToLine(ed, vector[0], vector[1]);
});
teardown(ed, win);
});
});
}