@@ -3269,6 +3269,47 @@ TEST_CASE("[SceneTree][CodeEdit] folding") {
32693269 CHECK (code_edit->get_next_visible_line_offset_from (1 , 1 ) == 4 );
32703270 }
32713271
3272+ SUBCASE (" [CodeEdit] folding comments including and/or adjacent to code regions" ) {
3273+ code_edit->add_comment_delimiter (" #" , " " , true );
3274+
3275+ // Single line comment directly above a code region tag is not foldable.
3276+ code_edit->set_text (" #line0\n #region a\n nothing\n #line3\n #endregion" );
3277+ CHECK_FALSE (code_edit->can_fold_line (0 ));
3278+ CHECK_FALSE (code_edit->can_fold_line (3 ));
3279+
3280+ // Comment blocks.
3281+ // Foldable even when directly below a code region start tag.
3282+ code_edit->set_text (" #line0\n #line1\n #region a\n #line3\n #line4\n nothing\n #endregion" );
3283+ CHECK (code_edit->can_fold_line (3 ));
3284+
3285+ // Doesn't fold beyond region start tag.
3286+ code_edit->fold_line (0 );
3287+ CHECK (code_edit->is_line_folded (0 ));
3288+ CHECK_EQ (code_edit->get_visible_line_count_in_range (0 , 1 ), 1 );
3289+ CHECK_EQ (code_edit->get_visible_line_count_in_range (2 , 2 ), 1 );
3290+
3291+ // Foldable even when directly below a code region end tag.
3292+ code_edit->set_text (" #region a\n nothing\n #line2\n #line3\n #endregion\n #line5\n #line6" );
3293+ CHECK (code_edit->can_fold_line (5 ));
3294+
3295+ // Doesn't fold beyond region end tag.
3296+ code_edit->fold_line (2 );
3297+ CHECK (code_edit->is_line_folded (2 ));
3298+ CHECK_EQ (code_edit->get_visible_line_count_in_range (2 , 3 ), 1 );
3299+ CHECK_EQ (code_edit->get_visible_line_count_in_range (4 , 4 ), 1 );
3300+
3301+ code_edit->add_comment_delimiter (" /*" , " */" , false );
3302+
3303+ // Multiline comments.
3304+ // Folds a region tag inside it.
3305+ code_edit->set_text (" /*\n nothing\n #region a\n */\n #endregion" );
3306+ CHECK (code_edit->can_fold_line (0 ));
3307+ code_edit->fold_line (0 );
3308+ CHECK (code_edit->is_line_folded (0 ));
3309+ CHECK_EQ (code_edit->get_visible_line_count_in_range (0 , 3 ), 1 );
3310+ CHECK_EQ (code_edit->get_visible_line_count_in_range (4 , 4 ), 1 );
3311+ }
3312+
32723313 SUBCASE (" [CodeEdit] folding carets" ) {
32733314 // Folding a line moves all carets that would be hidden.
32743315 code_edit->set_text (" test\n\t line1\n\t\t line 2\n " );
0 commit comments