# HG changeset patch # User Bram Moolenaar # Date 1644837303 -3600 # Node ID 3f57b0a8cd299440a74d591131e5fff55df004c2 # Parent 48f7eaed2f2f9ecd14b665d61f389800a24eda4c patch 8.2.4376: not enough tests for command line completion Commit: https://github.com/vim/vim/commit/9773db6f9bce7a6f063e23179976d7825ace4d72 Author: Yegappan Lakshmanan Date: Mon Feb 14 11:10:59 2022 +0000 patch 8.2.4376: not enough tests for command line completion Problem: Not enough tests for command line completion. Solution: Add a few more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/9771) diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -5,6 +5,19 @@ source screendump.vim source view_util.vim source shared.vim +func SetUp() + func SaveLastScreenLine() + let g:Sline = Screenline(&lines - 1) + return '' + endfunc + cnoremap SaveLastScreenLine() +endfunc + +func TearDown() + delfunc SaveLastScreenLine + cunmap +endfunc + func Test_complete_tab() call writefile(['testfile'], 'Xtestfile') call feedkeys(":e Xtest\t\r", "tx") @@ -25,6 +38,43 @@ func Test_complete_list() " used. call feedkeys(":chistory \\\"\", 'xt') call assert_equal("\"chistory \", @:) + + " Test for displaying the tail of the completion matches + set wildmode=longest,full + call mkdir('Xtest') + call writefile([], 'Xtest/a.c') + call writefile([], 'Xtest/a.h') + let g:Sline = '' + call feedkeys(":e Xtest/\\\\"\", 'xt') + call assert_equal('a.c a.h', g:Sline) + call assert_equal('"e Xtest/', @:) + if has('win32') + " Test for 'completeslash' + set completeslash=backslash + call feedkeys(":e Xtest\\\"\", 'xt') + call assert_equal('"e Xtest\', @:) + set completeslash=slash + call feedkeys(":e Xtest\\\"\", 'xt') + call assert_equal('"e Xtest/', @:) + set completeslash& + endif + + " Test for displaying the tail with wildcards + let g:Sline = '' + call feedkeys(":e Xtes?/\\\\"\", 'xt') + call assert_equal('Xtest/a.c Xtest/a.h', g:Sline) + call assert_equal('"e Xtes?/', @:) + let g:Sline = '' + call feedkeys(":e Xtes*/\\\\"\", 'xt') + call assert_equal('Xtest/a.c Xtest/a.h', g:Sline) + call assert_equal('"e Xtes*/', @:) + let g:Sline = '' + call feedkeys(":e Xtes[/\\\\"\", 'xt') + call assert_equal(':e Xtes[/', g:Sline) + call assert_equal('"e Xtes[/', @:) + + call delete('Xtest', 'rf') + set wildmode& endfunc func Test_complete_wildmenu() @@ -280,6 +330,8 @@ func Test_getcompletion() args a.c b.c let l = getcompletion('', 'arglist') call assert_equal(['a.c', 'b.c'], l) + let l = getcompletion('a.', 'buffer') + call assert_equal(['a.c'], l) %argdelete let l = getcompletion('', 'augroup') @@ -968,7 +1020,7 @@ func Test_cmdline_complete_various() map :ls com -nargs=* -complete=mapping MyCmd call feedkeys(":MyCmd \\"\", 'xt') - call assert_equal('"MyCmd ', @:) + call assert_equal('"MyCmd ', @:) mapclear delcom MyCmd @@ -1032,6 +1084,9 @@ func Test_cmdline_complete_various() call assert_equal('"e \~Xtest', @:) call delete('~Xtest') endif + + call feedkeys(":py3f\\\"\", 'xt') + call assert_equal('"py3file', @:) endfunc " Test for 'wildignorecase' @@ -1041,6 +1096,7 @@ func Test_cmdline_wildignorecase() set wildignorecase call feedkeys(":e xt\\\"\", 'xt') call assert_equal('"e XTEST', @:) + call assert_equal(['XTEST'], getcompletion('xt', 'file')) set wildignorecase& call delete('XTEST') endfunc @@ -1610,22 +1666,16 @@ func Test_cmdline_ctrl_g() endfunc " Test for 'wildmode' -func Test_wildmode() +func Wildmode_tests() func T(a, c, p) return "oneA\noneB\noneC" endfunc command -nargs=1 -complete=custom,T MyCmd - func SaveScreenLine() - let g:Sline = Screenline(&lines - 1) - return '' - endfunc - cnoremap SaveScreenLine() - set nowildmenu set wildmode=full,list let g:Sline = '' - call feedkeys(":MyCmd \t\t\\\"\", 'xt') + call feedkeys(":MyCmd \t\t\\\"\", 'xt') call assert_equal('oneA oneB oneC', g:Sline) call assert_equal('"MyCmd oneA', @:) @@ -1641,7 +1691,7 @@ func Test_wildmode() set wildmode=list:longest let g:Sline = '' - call feedkeys(":MyCmd \t\\\"\", 'xt') + call feedkeys(":MyCmd \t\\\"\", 'xt') call assert_equal('oneA oneB oneC', g:Sline) call assert_equal('"MyCmd one', @:) @@ -1660,7 +1710,7 @@ func Test_wildmode() " Test for listing files with wildmode=list set wildmode=list let g:Sline = '' - call feedkeys(":b A\t\t\\\"\", 'xt') + call feedkeys(":b A\t\t\\\"\", 'xt') call assert_equal('AAA AAAA AAAAA', g:Sline) call assert_equal('"b A', @:) @@ -1670,17 +1720,29 @@ func Test_wildmode() set wildmenu call feedkeys(":help a*\t\\"\", 'xt') call assert_equal('"help a', @:) + " non existing file + call feedkeys(":e a1b2y3z4\t\\"\", 'xt') + call assert_equal('"e a1b2y3z4', @:) set wildmenu& %argdelete delcommand MyCmd delfunc T - delfunc SaveScreenLine - cunmap set wildmode& %bwipe! endfunc +func Test_wildmode() + " Test with utf-8 encoding + call Wildmode_tests() + + " Test with latin1 encoding + let save_encoding = &encoding + set encoding=latin1 + call Wildmode_tests() + let &encoding = save_encoding +endfunc + " Test for interrupting the command-line completion func Test_interrupt_compl() func F(lead, cmdl, p) @@ -2000,13 +2062,22 @@ func Test_suffixes_opt() set suffixes= call feedkeys(":e Xfi*\\\"\", 'xt') call assert_equal('"e Xfile Xfile.c Xfile.o', @:) + call feedkeys(":e Xfi*\\\\"\", 'xt') + call assert_equal('"e Xfile.c', @:) set suffixes=.c call feedkeys(":e Xfi*\\\"\", 'xt') call assert_equal('"e Xfile Xfile.o Xfile.c', @:) + call feedkeys(":e Xfi*\\\\"\", 'xt') + call assert_equal('"e Xfile.o', @:) set suffixes=,, call feedkeys(":e Xfi*\\\"\", 'xt') call assert_equal('"e Xfile.c Xfile.o Xfile', @:) + call feedkeys(":e Xfi*\\\\"\", 'xt') + call assert_equal('"e Xfile.o', @:) set suffixes& + " Test for getcompletion() with different patterns + call assert_equal(['Xfile', 'Xfile.c', 'Xfile.o'], getcompletion('Xfile', 'file')) + call assert_equal(['Xfile'], getcompletion('Xfile$', 'file')) call delete('Xfile') call delete('Xfile.c') call delete('Xfile.o') diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim --- a/src/testdir/test_usercommands.vim +++ b/src/testdir/test_usercommands.vim @@ -314,7 +314,7 @@ func CustomComplete(A, L, P) endfunc func CustomCompleteList(A, L, P) - return [ "Monday", "Tuesday", "Wednesday", {}] + return [ "Monday", "Tuesday", "Wednesday", {}, test_null_string()] endfunc func Test_CmdCompletion() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4376, +/**/ 4375, /**/ 4374,