summaryrefslogtreecommitdiffstats
path: root/tests/scene/test_code_edit.h
diff options
context:
space:
mode:
authorPucklaMotzer09 <jonaas.pucher000000@gmail.com>2022-09-28 17:09:45 +0200
committerPucklaJ <jonaas.pucher000000@gmail.com>2023-09-25 23:41:31 +0200
commitd2e651f403b7f583a66e37ef0331362ad70fd1c3 (patch)
tree9713b2ebebd061732618e1e3a817388976ca7d47 /tests/scene/test_code_edit.h
parent43b9e89a07bb0926fb66bddbf98981d25a5cccee (diff)
downloadredot-engine-d2e651f403b7f583a66e37ef0331362ad70fd1c3.tar.gz
Add Duplicate Lines shortcut to CodeTextEditor
This keyboard shortcut has been made with inspiration from the VS Code keyboard shortcut editor.action.copyLinesDownAction. It duplicates all selected lines and inserts them below no matter where the caret is within the line.
Diffstat (limited to 'tests/scene/test_code_edit.h')
-rw-r--r--tests/scene/test_code_edit.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/scene/test_code_edit.h b/tests/scene/test_code_edit.h
index 8576b38ce2..b44a47bf8a 100644
--- a/tests/scene/test_code_edit.h
+++ b/tests/scene/test_code_edit.h
@@ -3886,6 +3886,84 @@ TEST_CASE("[SceneTree][CodeEdit] New Line") {
memdelete(code_edit);
}
+TEST_CASE("[SceneTree][CodeEdit] Duplicate Lines") {
+ CodeEdit *code_edit = memnew(CodeEdit);
+ SceneTree::get_singleton()->get_root()->add_child(code_edit);
+ code_edit->grab_focus();
+
+ code_edit->set_text(R"(extends Node
+
+func _ready():
+ var a := len(OS.get_cmdline_args())
+ var b := get_child_count()
+ var c := a + b
+ for i in range(c):
+ print("This is the solution: ", sin(i))
+ var pos = get_index() - 1
+ print("Make sure this exits: %b" % pos)
+)");
+
+ /* Duplicate a single line without selection. */
+ code_edit->set_caret_line(0);
+ code_edit->duplicate_lines();
+ CHECK(code_edit->get_line(0) == "extends Node");
+ CHECK(code_edit->get_line(1) == "extends Node");
+ CHECK(code_edit->get_line(2) == "");
+
+ /* Duplicate multiple lines with selection. */
+ code_edit->set_caret_line(6);
+ code_edit->set_caret_column(15);
+ code_edit->select(4, 8, 6, 15);
+ code_edit->duplicate_lines();
+ CHECK(code_edit->get_line(6) == "\tvar c := a + b");
+ CHECK(code_edit->get_line(7) == "\tvar a := len(OS.get_cmdline_args())");
+ CHECK(code_edit->get_line(8) == "\tvar b := get_child_count()");
+ CHECK(code_edit->get_line(9) == "\tvar c := a + b");
+ CHECK(code_edit->get_line(10) == "\tfor i in range(c):");
+
+ /* Duplicate single lines with multiple carets. */
+ code_edit->deselect();
+ code_edit->set_caret_line(10);
+ code_edit->set_caret_column(1);
+ code_edit->add_caret(11, 2);
+ code_edit->add_caret(12, 1);
+ code_edit->duplicate_lines();
+ CHECK(code_edit->get_line(9) == "\tvar c := a + b");
+ CHECK(code_edit->get_line(10) == "\tfor i in range(c):");
+ CHECK(code_edit->get_line(11) == "\tfor i in range(c):");
+ CHECK(code_edit->get_line(12) == "\t\tprint(\"This is the solution: \", sin(i))");
+ CHECK(code_edit->get_line(13) == "\t\tprint(\"This is the solution: \", sin(i))");
+ CHECK(code_edit->get_line(14) == "\tvar pos = get_index() - 1");
+ CHECK(code_edit->get_line(15) == "\tvar pos = get_index() - 1");
+ CHECK(code_edit->get_line(16) == "\tprint(\"Make sure this exits: %b\" % pos)");
+
+ /* Duplicate multiple lines with multiple carets. */
+ code_edit->select(0, 0, 1, 2, 0);
+ code_edit->select(3, 0, 4, 2, 1);
+ code_edit->select(16, 0, 17, 0, 2);
+ code_edit->set_caret_line(1, false, true, 0, 0);
+ code_edit->set_caret_column(2, false, 0);
+ code_edit->set_caret_line(4, false, true, 0, 1);
+ code_edit->set_caret_column(2, false, 1);
+ code_edit->set_caret_line(17, false, true, 0, 2);
+ code_edit->set_caret_column(0, false, 2);
+ code_edit->duplicate_lines();
+ CHECK(code_edit->get_line(1) == "extends Node");
+ CHECK(code_edit->get_line(2) == "extends Node");
+ CHECK(code_edit->get_line(3) == "extends Node");
+ CHECK(code_edit->get_line(4) == "");
+ CHECK(code_edit->get_line(6) == "\tvar a := len(OS.get_cmdline_args())");
+ CHECK(code_edit->get_line(7) == "func _ready():");
+ CHECK(code_edit->get_line(8) == "\tvar a := len(OS.get_cmdline_args())");
+ CHECK(code_edit->get_line(9) == "\tvar b := get_child_count()");
+ CHECK(code_edit->get_line(20) == "\tprint(\"Make sure this exits: %b\" % pos)");
+ CHECK(code_edit->get_line(21) == "");
+ CHECK(code_edit->get_line(22) == "\tprint(\"Make sure this exits: %b\" % pos)");
+ CHECK(code_edit->get_line(23) == "");
+
+ memdelete(code_edit);
+}
+
} // namespace TestCodeEdit
#endif // TEST_CODE_EDIT_H