aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-10-28 06:44:08 +0800
committerGitHub <noreply@github.com>2023-10-28 06:44:08 +0800
commitd2e7cc68e99019587a4c5184a47677a6837bbee9 (patch)
tree5f289889f50f16e3ce34518fb313c8382e8d0f00 /test
parent9455f6b17c6d1009af5d37d62884fe3042abdfa0 (diff)
parent063a78fda2a5a7c3f9b1ee1b606491378bde2193 (diff)
downloadrneovim-d2e7cc68e99019587a4c5184a47677a6837bbee9.tar.gz
rneovim-d2e7cc68e99019587a4c5184a47677a6837bbee9.tar.bz2
rneovim-d2e7cc68e99019587a4c5184a47677a6837bbee9.zip
Merge pull request #25806 from zeertzjq/vim-9.0.2074
vim-patch:9.0.{2074,2077}: Completion menu may be wrong
Diffstat (limited to 'test')
-rw-r--r--test/old/testdir/test_ins_complete.vim69
1 files changed, 67 insertions, 2 deletions
diff --git a/test/old/testdir/test_ins_complete.vim b/test/old/testdir/test_ins_complete.vim
index 8162c23634..fdbaa5ab95 100644
--- a/test/old/testdir/test_ins_complete.vim
+++ b/test/old/testdir/test_ins_complete.vim
@@ -2315,17 +2315,72 @@ func Test_complete_info_index()
" Ensure 'index' in complete_info() is coherent with the 'items' array.
set completeopt=menu,preview
- " Search forward.
+ " Search forward
call feedkeys("Go\<C-X>\<C-N>\<F5>\<Esc>_dd", 'tx')
call assert_equal("aaa", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
call feedkeys("Go\<C-X>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
call assert_equal("bbb", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("ccc", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("ddd", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("eee", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("fff", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ " Search forward: unselected item
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal(6 , len(g:compl_info['items']))
+ call assert_equal(-1 , g:compl_info['selected'])
- " Search backward.
+ " Search backward
call feedkeys("Go\<C-X>\<C-P>\<F5>\<Esc>_dd", 'tx')
call assert_equal("fff", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
call feedkeys("Go\<C-X>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
call assert_equal("eee", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("ddd", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("ccc", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("bbb", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("aaa", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ " search backwards: unselected item
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal(6 , len(g:compl_info['items']))
+ call assert_equal(-1 , g:compl_info['selected'])
+
+ " switch direction: forwards, then backwards
+ call feedkeys("Go\<C-X>\<C-N>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("fff", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ " switch direction: forwards, then backwards, then forwards again
+ call feedkeys("Go\<C-X>\<C-N>\<C-P>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-P>\<C-P>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("aaa", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+
+ " switch direction: backwards, then forwards
+ call feedkeys("Go\<C-X>\<C-P>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("aaa", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ " switch direction: backwards, then forwards, then backwards again
+ call feedkeys("Go\<C-X>\<C-P>\<C-P>\<C-N>\<C-N>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("fff", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
" Add 'noselect', check that 'selected' is -1 when nothing is selected.
set completeopt+=noselect
@@ -2337,6 +2392,16 @@ func Test_complete_info_index()
call feedkeys("Go\<C-X>\<C-P>\<F5>\<Esc>_dd", 'tx')
call assert_equal(-1, g:compl_info['selected'])
+ " Check if index out of range
+ " https://github.com/vim/vim/pull/12971
+ call feedkeys("Go\<C-X>\<C-N>\<C-P>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal(0, g:compl_info['selected'])
+ call assert_equal(6 , len(g:compl_info['items']))
+ call assert_equal("fff", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call feedkeys("Go\<C-X>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<C-N>\<F5>\<Esc>_dd", 'tx')
+ call assert_equal("aaa", g:compl_info['items'][g:compl_info['selected']]['word'])
+ call assert_equal(6 , len(g:compl_info['items']))
+
set completeopt&
bwipe!
endfunc