Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
function testJumpToLine(ed, inputLine, expectCursor) {
ed.jumpToLine();
const editorDoc = ed.container.contentDocument;
const lineInput = editorDoc.querySelector("input");
lineInput.value = inputLine;
EventUtils.synthesizeKey("VK_RETURN", {}, editorDoc.defaultView);
// CodeMirror lines and columns are 0-based.
ch(
ed.getCursor(),
expectCursor,
"jumpToLine " + inputLine + " expects cursor " + expectCursor.toSource()
);
}
async function test() {
waitForExplicitFinish();
const { ed, win } = await setup();
const textLines = [
"// line 1",
"// line 2",
"// line 3",
"// line 4",
"// line 5",
"",
];
ed.setText(textLines.join("\n"));
await promiseWaitForFocus();
const 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);
}