/* -*- indent-tabs-mode: nil; js-indent-level: 2; fill-column: 80 -*- */ /* 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"; 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); }); }); }