|
@@ -3269,6 +3269,47 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
|
|
|
CHECK(code_edit->get_next_visible_line_offset_from(1, 1) == 4);
|
|
|
}
|
|
|
|
|
|
+ SUBCASE("[CodeEdit] folding comments including and/or adjacent to code regions") {
|
|
|
+ code_edit->add_comment_delimiter("#", "", true);
|
|
|
+
|
|
|
+ // Single line comment directly above a code region tag is not foldable.
|
|
|
+ code_edit->set_text("#line0\n#region a\nnothing\n#line3\n#endregion");
|
|
|
+ CHECK_FALSE(code_edit->can_fold_line(0));
|
|
|
+ CHECK_FALSE(code_edit->can_fold_line(3));
|
|
|
+
|
|
|
+ // Comment blocks.
|
|
|
+ // Foldable even when directly below a code region start tag.
|
|
|
+ code_edit->set_text("#line0\n#line1\n#region a\n#line3\n#line4\nnothing\n#endregion");
|
|
|
+ CHECK(code_edit->can_fold_line(3));
|
|
|
+
|
|
|
+ // Doesn't fold beyond region start tag.
|
|
|
+ code_edit->fold_line(0);
|
|
|
+ CHECK(code_edit->is_line_folded(0));
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(0, 1), 1);
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(2, 2), 1);
|
|
|
+
|
|
|
+ // Foldable even when directly below a code region end tag.
|
|
|
+ code_edit->set_text("#region a\nnothing\n#line2\n#line3\n#endregion\n#line5\n#line6");
|
|
|
+ CHECK(code_edit->can_fold_line(5));
|
|
|
+
|
|
|
+ // Doesn't fold beyond region end tag.
|
|
|
+ code_edit->fold_line(2);
|
|
|
+ CHECK(code_edit->is_line_folded(2));
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(2, 3), 1);
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(4, 4), 1);
|
|
|
+
|
|
|
+ code_edit->add_comment_delimiter("/*", "*/", false);
|
|
|
+
|
|
|
+ // Multiline comments.
|
|
|
+ // Folds a region tag inside it.
|
|
|
+ code_edit->set_text("/*\nnothing\n#region a\n*/\n#endregion");
|
|
|
+ CHECK(code_edit->can_fold_line(0));
|
|
|
+ code_edit->fold_line(0);
|
|
|
+ CHECK(code_edit->is_line_folded(0));
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(0, 3), 1);
|
|
|
+ CHECK_EQ(code_edit->get_visible_line_count_in_range(4, 4), 1);
|
|
|
+ }
|
|
|
+
|
|
|
SUBCASE("[CodeEdit] folding carets") {
|
|
|
// Folding a line moves all carets that would be hidden.
|
|
|
code_edit->set_text("test\n\tline1\n\t\tline 2\n");
|