To: vim_dev@googlegroups.com Subject: Patch 8.2.0396 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0396 Problem: Cmdexpand.c insufficiently tested. Solution: Add more tests. (Yegappan Lakshmanan, closes #5789) Files: src/testdir/test_cmdline.vim, src/testdir/test_taglist.vim, src/testdir/test_terminal.vim, src/testdir/test_usercommands.vim *** ../vim-8.2.0395/src/testdir/test_cmdline.vim 2020-03-10 07:48:06.571619551 +0100 --- src/testdir/test_cmdline.vim 2020-03-16 21:22:45.571133303 +0100 *************** *** 2,7 **** --- 2,8 ---- source check.vim source screendump.vim + source view_util.vim func Test_complete_tab() call writefile(['testfile'], 'Xtestfile') *************** *** 401,406 **** --- 402,408 ---- set tags& call assert_fails('call getcompletion("", "burp")', 'E475:') + call assert_fails('call getcompletion("abc", [])', 'E474:') endfunc func Test_shellcmd_completion() *************** *** 641,646 **** --- 643,791 ---- unlet $X_VIM_TEST_COMPLETE_ENV endfunc + " Test for various command-line completion + func Test_cmdline_complete_various() + " completion for a command starting with a comment + call feedkeys(": :|\"\\\"\", 'xt') + call assert_equal("\" :|\"\", @:) + + " completion for a range followed by a comment + call feedkeys(":1,2\"\\\"\", 'xt') + call assert_equal("\"1,2\"\", @:) + + " completion for :k command + call feedkeys(":ka\\\"\", 'xt') + call assert_equal("\"ka\", @:) + + " completion for short version of the :s command + call feedkeys(":sI \\\"\", 'xt') + call assert_equal("\"sI \", @:) + + " completion for :write command + call mkdir('Xdir') + call writefile(['one'], 'Xdir/Xfile1') + let save_cwd = getcwd() + cd Xdir + call feedkeys(":w >> \\\"\", 'xt') + call assert_equal("\"w >> Xfile1", @:) + call chdir(save_cwd) + call delete('Xdir', 'rf') + + " completion for :w ! and :r ! commands + call feedkeys(":w !invalid_xyz_cmd\\\"\", 'xt') + call assert_equal("\"w !invalid_xyz_cmd", @:) + call feedkeys(":r !invalid_xyz_cmd\\\"\", 'xt') + call assert_equal("\"r !invalid_xyz_cmd", @:) + + " completion for :>> and :<< commands + call feedkeys(":>>>\\\"\", 'xt') + call assert_equal("\">>>\", @:) + call feedkeys(":<<<\\\"\", 'xt') + call assert_equal("\"<<<\", @:) + + " completion for command with +cmd argument + call feedkeys(":buffer +/pat Xabc\\\"\", 'xt') + call assert_equal("\"buffer +/pat Xabc", @:) + call feedkeys(":buffer +/pat\\\"\", 'xt') + call assert_equal("\"buffer +/pat\", @:) + + " completion for a command with a trailing comment + call feedkeys(":ls \" comment\\\"\", 'xt') + call assert_equal("\"ls \" comment\", @:) + + " completion for a command with a trailing command + call feedkeys(":ls | ls\\\"\", 'xt') + call assert_equal("\"ls | ls", @:) + + " completion for a command with an CTRL-V escaped argument + call feedkeys(":ls \\a\\\"\", 'xt') + call assert_equal("\"ls \a\", @:) + + " completion for a command that doesn't take additional arguments + call feedkeys(":all abc\\\"\", 'xt') + call assert_equal("\"all abc\", @:) + + " completion for a command with a command modifier + call feedkeys(":topleft new\\\"\", 'xt') + call assert_equal("\"topleft new", @:) + + " completion for the :match command + call feedkeys(":match Search /pat/\\\"\", 'xt') + call assert_equal("\"match Search /pat/\", @:) + + " completion for the :s command + call feedkeys(":s/from/to/g\\\"\", 'xt') + call assert_equal("\"s/from/to/g\", @:) + + " completion for the :dlist command + call feedkeys(":dlist 10 /pat/ a\\\"\", 'xt') + call assert_equal("\"dlist 10 /pat/ a\", @:) + + " completion for the :doautocmd command + call feedkeys(":doautocmd User MyCmd a.c\\\"\", 'xt') + call assert_equal("\"doautocmd User MyCmd a.c\", @:) + + " completion for the :augroup command + augroup XTest + augroup END + call feedkeys(":augroup X\\\"\", 'xt') + call assert_equal("\"augroup XTest", @:) + augroup! XTest + + " completion for the :unlet command + call feedkeys(":unlet one two\\\"\", 'xt') + call assert_equal("\"unlet one two", @:) + + " completion for the :bdelete command + call feedkeys(":bdel a b c\\\"\", 'xt') + call assert_equal("\"bdel a b c", @:) + + " completion for the :mapclear command + call feedkeys(":mapclear \\\"\", 'xt') + call assert_equal("\"mapclear ", @:) + + " completion for user defined commands with menu names + menu Test.foo :ls + com -nargs=* -complete=menu MyCmd + call feedkeys(":MyCmd Te\\\"\", 'xt') + call assert_equal('"MyCmd Test.', @:) + delcom MyCmd + unmenu Test + + " completion for user defined commands with mappings + mapclear + map :ls + com -nargs=* -complete=mapping MyCmd + call feedkeys(":MyCmd \\"\", 'xt') + call assert_equal('"MyCmd ', @:) + mapclear + delcom MyCmd + + " completion for :set path= with multiple backslashes + call feedkeys(":set path=a\\\\\\ b\\\"\", 'xt') + call assert_equal('"set path=a\\\ b', @:) + + " completion for :set dir= with a backslash + call feedkeys(":set dir=a\\ b\\\"\", 'xt') + call assert_equal('"set dir=a\ b', @:) + + " completion for the :py3 commands + call feedkeys(":py3\\\"\", 'xt') + call assert_equal('"py3 py3do py3file', @:) + + " redir @" is not the start of a comment. So complete after that + call feedkeys(":redir @\" | cwin\t\\"\", 'xt') + call assert_equal('"redir @" | cwindow', @:) + + " completion after a backtick + call feedkeys(":e `a1b2c\t\\"\", 'xt') + call assert_equal('"e `a1b2c', @:) + + " completion for the expression register + call feedkeys(":\"\=float2\t\"\\"\", 'xt') + call assert_equal('"float2nr("', @=) + endfunc + func Test_cmdline_write_alternatefile() new call setline('.', ['one', 'two']) *************** *** 1116,1130 **** close! endfunc - " Return the 'len' characters in screen starting from (row,col) - func s:ScreenLine(row, col, len) - let s = '' - for i in range(a:len) - let s .= nr2char(screenchar(a:row, a:col + i)) - endfor - return s - endfunc - " Test for 'wildmode' func Test_wildmode() func T(a, c, p) --- 1261,1266 ---- *************** *** 1133,1139 **** command -nargs=1 -complete=custom,T MyCmd func SaveScreenLine() ! let g:Sline = s:ScreenLine(&lines - 1, 1, 20) return '' endfunc cnoremap SaveScreenLine() --- 1269,1275 ---- command -nargs=1 -complete=custom,T MyCmd func SaveScreenLine() ! let g:Sline = Screenline(&lines - 1) return '' endfunc cnoremap SaveScreenLine() *************** *** 1142,1148 **** set wildmode=full,list let g:Sline = '' call feedkeys(":MyCmd \t\t\\\"\", 'xt') ! call assert_equal('oneA oneB oneC ', g:Sline) call assert_equal('"MyCmd oneA', @:) set wildmode=longest,full --- 1278,1284 ---- set wildmode=full,list let g:Sline = '' call feedkeys(":MyCmd \t\t\\\"\", 'xt') ! call assert_equal('oneA oneB oneC', g:Sline) call assert_equal('"MyCmd oneA', @:) set wildmode=longest,full *************** *** 1158,1175 **** set wildmode=list:longest let g:Sline = '' call feedkeys(":MyCmd \t\\\"\", 'xt') ! call assert_equal('oneA oneB oneC ', g:Sline) call assert_equal('"MyCmd one', @:) set wildmode="" call feedkeys(":MyCmd \t\t\\"\", 'xt') call assert_equal('"MyCmd oneA', @:) delcommand MyCmd delfunc T delfunc SaveScreenLine cunmap set wildmode& endfunc " Test for interrupting the command-line completion --- 1294,1328 ---- set wildmode=list:longest let g:Sline = '' call feedkeys(":MyCmd \t\\\"\", 'xt') ! call assert_equal('oneA oneB oneC', g:Sline) call assert_equal('"MyCmd one', @:) set wildmode="" call feedkeys(":MyCmd \t\t\\"\", 'xt') call assert_equal('"MyCmd oneA', @:) + " Test for wildmode=longest with 'fileignorecase' set + set wildmode=longest + set fileignorecase + argadd AA AAA AAAA + call feedkeys(":buffer \t\\"\", 'xt') + call assert_equal('"buffer AA', @:) + set fileignorecase& + + " Test for listing files with wildmode=list + set wildmode=list + let g:Sline = '' + call feedkeys(":b A\t\t\\\"\", 'xt') + call assert_equal('AA AAA AAAA', g:Sline) + call assert_equal('"b A', @:) + + %argdelete delcommand MyCmd delfunc T delfunc SaveScreenLine cunmap set wildmode& + %bwipe! endfunc " Test for interrupting the command-line completion *** ../vim-8.2.0395/src/testdir/test_taglist.vim 2020-03-09 08:17:47.934476791 +0100 --- src/testdir/test_taglist.vim 2020-03-16 21:22:45.571133303 +0100 *************** *** 1,5 **** --- 1,7 ---- " test taglist(), tagfiles() functions and :tags command + source view_util.vim + func Test_taglist() call writefile([ \ "FFoo\tXfoo\t1", *************** *** 216,218 **** --- 218,238 ---- set tags& call delete('Xtags') endfunc + + " Test for :tag command completion with 'wildoptions' set to 'tagfile' + func Test_tag_complete_wildoptions() + call writefile(["foo\ta.c\t10;\"\tf", "bar\tb.c\t20;\"\td"], 'Xtags') + set tags=Xtags + set wildoptions=tagfile + + call feedkeys(":tag \\=Screenline(&lines - 1)\ : " + \ .. "\=Screenline(&lines - 2)\\\"\", 'xt') + + call assert_equal('"tag bar d b.c : foo f a.c', @:) + + call delete('Xtags') + set wildoptions& + set tags& + endfunc + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0395/src/testdir/test_terminal.vim 2020-03-15 20:33:11.288799820 +0100 --- src/testdir/test_terminal.vim 2020-03-16 21:22:45.571133303 +0100 *************** *** 2495,2501 **** call term_sendkeys(g:buf0, "exit\") sleep 100m ! exe g:buf0 .. 'bwipe' set hidden& endfunc --- 2495,2501 ---- call term_sendkeys(g:buf0, "exit\") sleep 100m ! exe g:buf0 .. 'bwipe!' set hidden& endfunc *** ../vim-8.2.0395/src/testdir/test_usercommands.vim 2019-05-01 17:16:53.000000000 +0200 --- src/testdir/test_usercommands.vim 2020-03-16 21:22:45.571133303 +0100 *************** *** 262,268 **** endfunc func CustomCompleteList(A, L, P) ! return [ "Monday", "Tuesday", "Wednesday" ] endfunc func Test_CmdCompletion() --- 262,268 ---- endfunc func CustomCompleteList(A, L, P) ! return [ "Monday", "Tuesday", "Wednesday", {}] endfunc func Test_CmdCompletion() *************** *** 327,332 **** --- 327,338 ---- com! -complete=customlist,CustomComp DoCmd : call assert_fails("call feedkeys(':DoCmd \', 'tx')", 'E117:') + + " custom completion without a function + com! -complete=custom, DoCmd + call assert_beeps("call feedkeys(':DoCmd \t', 'tx')") + + delcom DoCmd endfunc func CallExecute(A, L, P) *************** *** 542,544 **** --- 548,552 ---- call assert_equal("\nNo user-defined commands found", execute(':command Xxx')) call assert_equal("\nNo user-defined commands found", execute('command')) endfunc + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.2.0395/src/version.c 2020-03-16 21:08:28.581879755 +0100 --- src/version.c 2020-03-16 21:24:13.318834114 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 396, /**/ -- A KNIGHT rides into shot and hacks him to the ground. He rides off. We stay for a moment on the glade. A MIDDLE-AGED LADY in a C. & A. twin-set emerges from the trees and looks in horror at the body of her HUSBAND. MRS HISTORIAN: FRANK! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///