diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-07-15 11:43:42 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-07-15 15:21:39 +0800 |
commit | a649af4dbaba5ef13dcbf610fe584dbc67cf2435 (patch) | |
tree | 9798e6718ce448953e32caf604641b063f58b5fc | |
parent | 7b5b7b3cc6306e9313dcf677f212cb132bd38aa0 (diff) | |
download | rneovim-a649af4dbaba5ef13dcbf610fe584dbc67cf2435.tar.gz rneovim-a649af4dbaba5ef13dcbf610fe584dbc67cf2435.tar.bz2 rneovim-a649af4dbaba5ef13dcbf610fe584dbc67cf2435.zip |
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)
https://github.com/vim/vim/commit/9b9be007e7d674f49fc2b650f840d08532b180ad
Cherry-pick get_highest_fnum() from patch 8.1.1908 to make tests pass.
-rw-r--r-- | src/nvim/buffer.c | 10 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 5 | ||||
-rw-r--r-- | src/nvim/testdir/test_buffer.vim | 1 | ||||
-rw-r--r-- | src/nvim/testdir/test_options.vim | 11 | ||||
-rw-r--r-- | src/nvim/testdir/test_window_cmd.vim | 29 |
5 files changed, 49 insertions, 7 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index ee3a8c26b8..09f5ebe217 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -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. static int buf_free_count = 0; +static int top_file_num = 1; ///< highest file number + typedef enum { kBffClearWinInfo = 1, kBffInitChangedtick = 2, } BufFreeFlags; +/// @return the highest possible buffer number +int get_highest_fnum(void) +{ + return top_file_num - 1; +} + /// Read data from buffer for retrying. /// /// @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 // -static int top_file_num = 1; ///< highest file number - /// Initialize b:changedtick and changedtick_val attribute /// /// @param[out] buf Buffer to initialize for. diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 9e8262fdfc..4e6846bf21 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -4616,8 +4616,9 @@ char *invalid_range(exarg_T *eap) } break; case ADDR_BUFFERS: - if (eap->line1 < firstbuf->b_fnum - || eap->line2 > lastbuf->b_fnum) { + // Only a boundary check, not whether the buffers actually + // exist. + if (eap->line1 < 1 || eap->line2 > get_highest_fnum()) { return _(e_invrange); } break; diff --git a/src/nvim/testdir/test_buffer.vim b/src/nvim/testdir/test_buffer.vim index 4cc559adb8..67be3e6747 100644 --- a/src/nvim/testdir/test_buffer.vim +++ b/src/nvim/testdir/test_buffer.vim @@ -146,6 +146,7 @@ endfunc func Test_bdelete_cmd() %bwipe! call assert_fails('bdelete 5', 'E516:') + call assert_fails('1,1bdelete 1 2', 'E488:') " Deleting a unlisted and unloaded buffer edit Xfile1 diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim index 7b6cfa6bb4..9f89d47758 100644 --- a/src/nvim/testdir/test_options.vim +++ b/src/nvim/testdir/test_options.vim @@ -290,9 +290,10 @@ func Test_set_errors() call assert_fails('set regexpengine=3', 'E474:') call assert_fails('set history=10001', 'E474:') call assert_fails('set numberwidth=21', 'E474:') - call assert_fails('set colorcolumn=-a') - call assert_fails('set colorcolumn=a') - call assert_fails('set colorcolumn=1,') + call assert_fails('set colorcolumn=-a', 'E474:') + call assert_fails('set colorcolumn=a', 'E474:') + 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 cmdwinheight=-1', 'E487:') 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', '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:hor0', 'E549:') 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 winminheight=10 winheight=9', 'E591:') call assert_fails('set winminwidth=10 winwidth=9', 'E592:') diff --git a/src/nvim/testdir/test_window_cmd.vim b/src/nvim/testdir/test_window_cmd.vim index cbc8ad05d2..41b0cd874c 100644 --- a/src/nvim/testdir/test_window_cmd.vim +++ b/src/nvim/testdir/test_window_cmd.vim @@ -172,6 +172,35 @@ func Test_window_split_edit_bufnr() %bw! 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() e Xa |