diff options
Diffstat (limited to 'devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js')
-rw-r--r-- | devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js b/devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js new file mode 100644 index 0000000000..325c8c6dd5 --- /dev/null +++ b/devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js @@ -0,0 +1,91 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"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); +} |