vim-patch:8.2.5108: retab test disabled because it hangs on MS-Windows

Problem:    Retab test disabled because it hangs on MS-Windows.
Solution:   Also set got_int at the other place a overlong text is detected.

308660bd26

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq
2022-11-30 10:07:24 +08:00
parent e0c7b8955d
commit 22622df950
2 changed files with 14 additions and 15 deletions

View File

@@ -918,6 +918,16 @@ bool may_do_si(void)
return curbuf->b_p_si && !curbuf->b_p_cin && *curbuf->b_p_inde == NUL && !p_paste; return curbuf->b_p_si && !curbuf->b_p_cin && *curbuf->b_p_inde == NUL && !p_paste;
} }
/// Give a "resulting text too long" error and maybe set got_int.
static void emsg_text_too_long(void)
{
emsg(_(e_resulting_text_too_long));
// when not inside a try/catch set got_int to break out of any loop
if (trylevel == 0) {
got_int = true;
}
}
/// ":retab". /// ":retab".
void ex_retab(exarg_T *eap) void ex_retab(exarg_T *eap)
{ {
@@ -1009,7 +1019,7 @@ void ex_retab(exarg_T *eap)
old_len = (long)strlen(ptr); old_len = (long)strlen(ptr);
const long new_len = old_len - col + start_col + len + 1; const long new_len = old_len - col + start_col + len + 1;
if (new_len <= 0 || new_len >= MAXCOL) { if (new_len <= 0 || new_len >= MAXCOL) {
emsg(_(e_resulting_text_too_long)); emsg_text_too_long();
break; break;
} }
new_line = xmalloc((size_t)new_len); new_line = xmalloc((size_t)new_len);
@@ -1045,12 +1055,7 @@ void ex_retab(exarg_T *eap)
} }
vcol += win_chartabsize(curwin, ptr + col, (colnr_T)vcol); vcol += win_chartabsize(curwin, ptr + col, (colnr_T)vcol);
if (vcol >= MAXCOL) { if (vcol >= MAXCOL) {
emsg(_(e_resulting_text_too_long)); emsg_text_too_long();
// when not inside a try/catch set got_int to break out of any
// loop
if (trylevel == 0) {
got_int = true;
}
break; break;
} }
col += utfc_ptr2len(ptr + col); col += utfc_ptr2len(ptr + col);

View File

@@ -92,7 +92,7 @@ func RetabLoop()
endfunc endfunc
func Test_retab_endless() func Test_retab_endless()
" inside try/catch we catch the error message " inside try/catch we can catch the error message
call setline(1, "\t0\t") call setline(1, "\t0\t")
let caught = 'no' let caught = 'no'
try try
@@ -106,13 +106,7 @@ func Test_retab_endless()
endfunc endfunc
func Test_nocatch_retab_endless() func Test_nocatch_retab_endless()
" FIXME: why does this hang on MS-Windows? Is got_int reset somewhere? " when not inside try/catch an interrupt is generated to get out of loops
if has('win32')
let g:skipped_reason = "does not work on MS-Windows"
return
endif
" not inside try/catch an interrupt is generated to get out of loops
call setline(1, "\t0\t") call setline(1, "\t0\t")
call assert_fails('call RetabLoop()', ['E1240:', 'Interrupted']) call assert_fails('call RetabLoop()', ['E1240:', 'Interrupted'])