summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/sourceeditor/test/browser_editor_goto_line.js
diff options
context:
space:
mode:
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.js91
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);
+}