vim-patch:8.2.0426: some errors were not tested for

Problem:    Some errors were not tested for.
Solution:   Add tests. (Dominique Pelle, closes vim/vim#5824)
9b9be007e7

Cherry-pick get_highest_fnum() from patch 8.1.1908 to make tests pass.
This commit is contained in:
zeertzjq 2022-07-15 11:43:42 +08:00
parent 7b5b7b3cc6
commit a649af4dba
5 changed files with 49 additions and 7 deletions

View File

@ -94,11 +94,19 @@ static char *e_buflocked = N_("E937: Attempt to delete a buffer that is in use")
// Number of times free_buffer() was called. // Number of times free_buffer() was called.
static int buf_free_count = 0; static int buf_free_count = 0;
static int top_file_num = 1; ///< highest file number
typedef enum { typedef enum {
kBffClearWinInfo = 1, kBffClearWinInfo = 1,
kBffInitChangedtick = 2, kBffInitChangedtick = 2,
} BufFreeFlags; } BufFreeFlags;
/// @return the highest possible buffer number
int get_highest_fnum(void)
{
return top_file_num - 1;
}
/// Read data from buffer for retrying. /// Read data from buffer for retrying.
/// ///
/// @param read_stdin read file from stdin, otherwise fifo /// @param read_stdin read file from stdin, otherwise fifo
@ -1644,8 +1652,6 @@ void no_write_message_nobang(const buf_T *const buf)
// functions for dealing with the buffer list // functions for dealing with the buffer list
// //
static int top_file_num = 1; ///< highest file number
/// Initialize b:changedtick and changedtick_val attribute /// Initialize b:changedtick and changedtick_val attribute
/// ///
/// @param[out] buf Buffer to initialize for. /// @param[out] buf Buffer to initialize for.

View File

@ -4616,8 +4616,9 @@ char *invalid_range(exarg_T *eap)
} }
break; break;
case ADDR_BUFFERS: case ADDR_BUFFERS:
if (eap->line1 < firstbuf->b_fnum // Only a boundary check, not whether the buffers actually
|| eap->line2 > lastbuf->b_fnum) { // exist.
if (eap->line1 < 1 || eap->line2 > get_highest_fnum()) {
return _(e_invrange); return _(e_invrange);
} }
break; break;

View File

@ -146,6 +146,7 @@ endfunc
func Test_bdelete_cmd() func Test_bdelete_cmd()
%bwipe! %bwipe!
call assert_fails('bdelete 5', 'E516:') call assert_fails('bdelete 5', 'E516:')
call assert_fails('1,1bdelete 1 2', 'E488:')
" Deleting a unlisted and unloaded buffer " Deleting a unlisted and unloaded buffer
edit Xfile1 edit Xfile1

View File

@ -290,9 +290,10 @@ func Test_set_errors()
call assert_fails('set regexpengine=3', 'E474:') call assert_fails('set regexpengine=3', 'E474:')
call assert_fails('set history=10001', 'E474:') call assert_fails('set history=10001', 'E474:')
call assert_fails('set numberwidth=21', 'E474:') call assert_fails('set numberwidth=21', 'E474:')
call assert_fails('set colorcolumn=-a') call assert_fails('set colorcolumn=-a', 'E474:')
call assert_fails('set colorcolumn=a') call assert_fails('set colorcolumn=a', 'E474:')
call assert_fails('set colorcolumn=1,') call assert_fails('set colorcolumn=1,', 'E474:')
call assert_fails('set colorcolumn=1;', 'E474:')
call assert_fails('set cmdheight=-1', 'E487:') call assert_fails('set cmdheight=-1', 'E487:')
call assert_fails('set cmdwinheight=-1', 'E487:') call assert_fails('set cmdwinheight=-1', 'E487:')
if has('conceal') if has('conceal')
@ -343,9 +344,13 @@ func Test_set_errors()
call assert_fails('set guicursor=i-ci,r-cr:h', 'E545:') call assert_fails('set guicursor=i-ci,r-cr:h', 'E545:')
call assert_fails('set guicursor=i-ci', 'E545:') call assert_fails('set guicursor=i-ci', 'E545:')
call assert_fails('set guicursor=x', 'E545:') call assert_fails('set guicursor=x', 'E545:')
call assert_fails('set guicursor=x:', 'E546:')
call assert_fails('set guicursor=r-cr:horx', 'E548:') call assert_fails('set guicursor=r-cr:horx', 'E548:')
call assert_fails('set guicursor=r-cr:hor0', 'E549:') call assert_fails('set guicursor=r-cr:hor0', 'E549:')
endif endif
if has('mouseshape')
call assert_fails('se mouseshape=i-r:x', 'E547:')
endif
call assert_fails('set backupext=~ patchmode=~', 'E589:') call assert_fails('set backupext=~ patchmode=~', 'E589:')
call assert_fails('set winminheight=10 winheight=9', 'E591:') call assert_fails('set winminheight=10 winheight=9', 'E591:')
call assert_fails('set winminwidth=10 winwidth=9', 'E592:') call assert_fails('set winminwidth=10 winwidth=9', 'E592:')

View File

@ -172,6 +172,35 @@ func Test_window_split_edit_bufnr()
%bw! %bw!
endfunc endfunc
func Test_window_split_no_room()
" N horizontal windows need >= 2*N + 1 lines:
" - 1 line + 1 status line in each window
" - 1 Ex command line
"
" 2*N + 1 <= &lines
" N <= (lines - 1)/2
"
" Beyond that number of windows, E36: Not enough room is expected.
let hor_win_count = (&lines - 1)/2
let hor_split_count = hor_win_count - 1
for s in range(1, hor_split_count) | split | endfor
call assert_fails('split', 'E36:')
" N vertical windows need >= 2*(N - 1) + 1 columns:
" - 1 column + 1 separator for each window (except last window)
" - 1 column for the last window which does not have separator
"
" 2*(N - 1) + 1 <= &columns
" 2*N - 1 <= &columns
" N <= (&columns + 1)/2
let ver_win_count = (&columns + 1)/2
let ver_split_count = ver_win_count - 1
for s in range(1, ver_split_count) | vsplit | endfor
call assert_fails('vsplit', 'E36:')
%bw!
endfunc
func Test_window_exchange() func Test_window_exchange()
e Xa e Xa