1ae3150ecSBram Moolenaar" Tests for editing the command line. 2ae3150ecSBram Moolenaar 34facea31SBram Moolenaarsource check.vim 44facea31SBram Moolenaarsource screendump.vim 524ebd83eSBram Moolenaarsource view_util.vim 6c82dd860SBram Moolenaarsource shared.vim 74facea31SBram Moolenaar 8ae3150ecSBram Moolenaarfunc Test_complete_tab() 9ae3150ecSBram Moolenaar call writefile(['testfile'], 'Xtestfile') 10ae3150ecSBram Moolenaar call feedkeys(":e Xtest\t\r", "tx") 11ae3150ecSBram Moolenaar call assert_equal('testfile', getline(1)) 126024c042SAlbert Liu 136024c042SAlbert Liu " Pressing <Tab> after '%' completes the current file, also on MS-Windows 146024c042SAlbert Liu call feedkeys(":e %\t\r", "tx") 156024c042SAlbert Liu call assert_equal('e Xtestfile', @:) 16ae3150ecSBram Moolenaar call delete('Xtestfile') 17ae3150ecSBram Moolenaarendfunc 18ae3150ecSBram Moolenaar 19ae3150ecSBram Moolenaarfunc Test_complete_list() 20ae3150ecSBram Moolenaar " We can't see the output, but at least we check the code runs properly. 21ae3150ecSBram Moolenaar call feedkeys(":e test\<C-D>\r", "tx") 22ae3150ecSBram Moolenaar call assert_equal('test', expand('%:t')) 23578fe947SBram Moolenaar 24578fe947SBram Moolenaar " If a command doesn't support completion, then CTRL-D should be literally 25578fe947SBram Moolenaar " used. 26578fe947SBram Moolenaar call feedkeys(":chistory \<C-D>\<C-B>\"\<CR>", 'xt') 27578fe947SBram Moolenaar call assert_equal("\"chistory \<C-D>", @:) 28ae3150ecSBram Moolenaarendfunc 29ae3150ecSBram Moolenaar 30ae3150ecSBram Moolenaarfunc Test_complete_wildmenu() 3137db6420SBram Moolenaar call mkdir('Xdir1/Xdir2', 'p') 3237db6420SBram Moolenaar call writefile(['testfile1'], 'Xdir1/Xtestfile1') 3337db6420SBram Moolenaar call writefile(['testfile2'], 'Xdir1/Xtestfile2') 3437db6420SBram Moolenaar call writefile(['testfile3'], 'Xdir1/Xdir2/Xtestfile3') 3537db6420SBram Moolenaar call writefile(['testfile3'], 'Xdir1/Xdir2/Xtestfile4') 36ae3150ecSBram Moolenaar set wildmenu 3737db6420SBram Moolenaar 3837db6420SBram Moolenaar " Pressing <Tab> completes, and moves to next files when pressing again. 3937db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Tab>\<CR>", 'tx') 4037db6420SBram Moolenaar call assert_equal('testfile1', getline(1)) 4137db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Tab>\<Tab>\<CR>", 'tx') 42ae3150ecSBram Moolenaar call assert_equal('testfile2', getline(1)) 43ae3150ecSBram Moolenaar 4437db6420SBram Moolenaar " <S-Tab> is like <Tab> but begin with the last match and then go to 4537db6420SBram Moolenaar " previous. 4637db6420SBram Moolenaar call feedkeys(":e Xdir1/Xtest\<S-Tab>\<CR>", 'tx') 4737db6420SBram Moolenaar call assert_equal('testfile2', getline(1)) 4837db6420SBram Moolenaar call feedkeys(":e Xdir1/Xtest\<S-Tab>\<S-Tab>\<CR>", 'tx') 4937db6420SBram Moolenaar call assert_equal('testfile1', getline(1)) 5037db6420SBram Moolenaar 5137db6420SBram Moolenaar " <Left>/<Right> to move to previous/next file. 5237db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Right>\<CR>", 'tx') 5337db6420SBram Moolenaar call assert_equal('testfile1', getline(1)) 5437db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Right>\<Right>\<CR>", 'tx') 5537db6420SBram Moolenaar call assert_equal('testfile2', getline(1)) 5637db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Right>\<Right>\<Left>\<CR>", 'tx') 5737db6420SBram Moolenaar call assert_equal('testfile1', getline(1)) 5837db6420SBram Moolenaar 5937db6420SBram Moolenaar " <Up>/<Down> to go up/down directories. 6037db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Down>\<CR>", 'tx') 6137db6420SBram Moolenaar call assert_equal('testfile3', getline(1)) 6237db6420SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<Down>\<Up>\<Right>\<CR>", 'tx') 6337db6420SBram Moolenaar call assert_equal('testfile1', getline(1)) 6437db6420SBram Moolenaar 653e112accSBram Moolenaar " this fails in some Unix GUIs, not sure why 663e112accSBram Moolenaar if !has('unix') || !has('gui_running') 673e112accSBram Moolenaar " <C-J>/<C-K> mappings to go up/down directories when 'wildcharm' is 68b0ac4ea5SBram Moolenaar " different than 'wildchar'. 69b0ac4ea5SBram Moolenaar set wildcharm=<C-Z> 70b0ac4ea5SBram Moolenaar cnoremap <C-J> <Down><C-Z> 71b0ac4ea5SBram Moolenaar cnoremap <C-K> <Up><C-Z> 72b0ac4ea5SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<C-J>\<CR>", 'tx') 73b0ac4ea5SBram Moolenaar call assert_equal('testfile3', getline(1)) 74b0ac4ea5SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>\<C-J>\<C-K>\<CR>", 'tx') 75b0ac4ea5SBram Moolenaar call assert_equal('testfile1', getline(1)) 76b0ac4ea5SBram Moolenaar set wildcharm=0 77b0ac4ea5SBram Moolenaar cunmap <C-J> 78b0ac4ea5SBram Moolenaar cunmap <C-K> 793e112accSBram Moolenaar endif 80b0ac4ea5SBram Moolenaar 81578fe947SBram Moolenaar " Test for canceling the wild menu by adding a character 82578fe947SBram Moolenaar redrawstatus 83578fe947SBram Moolenaar call feedkeys(":e Xdir1/\<Tab>x\<C-B>\"\<CR>", 'xt') 84578fe947SBram Moolenaar call assert_equal('"e Xdir1/Xdir2/x', @:) 85578fe947SBram Moolenaar 868d588cceSBram Moolenaar " Completion using a relative path 878d588cceSBram Moolenaar cd Xdir1/Xdir2 888d588cceSBram Moolenaar call feedkeys(":e ../\<Tab>\<Right>\<Down>\<C-A>\<C-B>\"\<CR>", 'tx') 898d588cceSBram Moolenaar call assert_equal('"e Xtestfile3 Xtestfile4', @:) 908d588cceSBram Moolenaar cd - 918d588cceSBram Moolenaar 920e05de46SBram Moolenaar cnoremap <expr> <F2> wildmenumode() 930e05de46SBram Moolenaar call feedkeys(":cd Xdir\<Tab>\<F2>\<C-B>\"\<CR>", 'tx') 940e05de46SBram Moolenaar call assert_equal('"cd Xdir1/1', @:) 950e05de46SBram Moolenaar cunmap <F2> 960e05de46SBram Moolenaar 9737db6420SBram Moolenaar " cleanup 9837db6420SBram Moolenaar %bwipe 9937db6420SBram Moolenaar call delete('Xdir1/Xdir2/Xtestfile4') 10037db6420SBram Moolenaar call delete('Xdir1/Xdir2/Xtestfile3') 10137db6420SBram Moolenaar call delete('Xdir1/Xtestfile2') 10237db6420SBram Moolenaar call delete('Xdir1/Xtestfile1') 10337db6420SBram Moolenaar call delete('Xdir1/Xdir2', 'd') 10437db6420SBram Moolenaar call delete('Xdir1', 'd') 105ae3150ecSBram Moolenaar set nowildmenu 106ae3150ecSBram Moolenaarendfunc 1074b2ce129SBram Moolenaar 108a60053b8SBram Moolenaarfunc Test_wildmenu_screendump() 109a60053b8SBram Moolenaar CheckScreendump 110a60053b8SBram Moolenaar 111a60053b8SBram Moolenaar let lines =<< trim [SCRIPT] 112a60053b8SBram Moolenaar set wildmenu hlsearch 113a60053b8SBram Moolenaar [SCRIPT] 114a60053b8SBram Moolenaar call writefile(lines, 'XTest_wildmenu') 115a60053b8SBram Moolenaar 116a60053b8SBram Moolenaar let buf = RunVimInTerminal('-S XTest_wildmenu', {'rows': 8}) 117a60053b8SBram Moolenaar call term_sendkeys(buf, ":vim\<Tab>") 118a60053b8SBram Moolenaar call VerifyScreenDump(buf, 'Test_wildmenu_1', {}) 119a60053b8SBram Moolenaar 120a60053b8SBram Moolenaar call term_sendkeys(buf, "\<Tab>") 121a60053b8SBram Moolenaar call VerifyScreenDump(buf, 'Test_wildmenu_2', {}) 122a60053b8SBram Moolenaar 123a60053b8SBram Moolenaar call term_sendkeys(buf, "\<Tab>") 124a60053b8SBram Moolenaar call VerifyScreenDump(buf, 'Test_wildmenu_3', {}) 125a60053b8SBram Moolenaar 12639f3b141SBram Moolenaar call term_sendkeys(buf, "\<Tab>\<Tab>") 127a60053b8SBram Moolenaar call VerifyScreenDump(buf, 'Test_wildmenu_4', {}) 128a60053b8SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 129a60053b8SBram Moolenaar 130a60053b8SBram Moolenaar " clean up 131a60053b8SBram Moolenaar call StopVimInTerminal(buf) 132a60053b8SBram Moolenaar call delete('XTest_wildmenu') 133a60053b8SBram Moolenaarendfunc 134a60053b8SBram Moolenaar 135cf5fdf7dSBram Moolenaarfunc Test_map_completion() 136cf5fdf7dSBram Moolenaar call feedkeys(":map <unique> <si\<Tab>\<Home>\"\<CR>", 'xt') 137cf5fdf7dSBram Moolenaar call assert_equal('"map <unique> <silent>', getreg(':')) 138cf5fdf7dSBram Moolenaar call feedkeys(":map <script> <un\<Tab>\<Home>\"\<CR>", 'xt') 139cf5fdf7dSBram Moolenaar call assert_equal('"map <script> <unique>', getreg(':')) 140cf5fdf7dSBram Moolenaar call feedkeys(":map <expr> <sc\<Tab>\<Home>\"\<CR>", 'xt') 141cf5fdf7dSBram Moolenaar call assert_equal('"map <expr> <script>', getreg(':')) 142cf5fdf7dSBram Moolenaar call feedkeys(":map <buffer> <e\<Tab>\<Home>\"\<CR>", 'xt') 143cf5fdf7dSBram Moolenaar call assert_equal('"map <buffer> <expr>', getreg(':')) 144cf5fdf7dSBram Moolenaar call feedkeys(":map <nowait> <b\<Tab>\<Home>\"\<CR>", 'xt') 145cf5fdf7dSBram Moolenaar call assert_equal('"map <nowait> <buffer>', getreg(':')) 146cf5fdf7dSBram Moolenaar call feedkeys(":map <special> <no\<Tab>\<Home>\"\<CR>", 'xt') 147cf5fdf7dSBram Moolenaar call assert_equal('"map <special> <nowait>', getreg(':')) 148cf5fdf7dSBram Moolenaar call feedkeys(":map <silent> <sp\<Tab>\<Home>\"\<CR>", 'xt') 149cf5fdf7dSBram Moolenaar call assert_equal('"map <silent> <special>', getreg(':')) 1502cb9f025SBram Moolenaar 1511776a28eSBram Moolenaar map <Middle>x middle 1521776a28eSBram Moolenaar 1532cb9f025SBram Moolenaar map ,f commaf 1542cb9f025SBram Moolenaar map ,g commaf 1551776a28eSBram Moolenaar map <Left> left 1561776a28eSBram Moolenaar map <A-Left>x shiftleft 1572cb9f025SBram Moolenaar call feedkeys(":map ,\<Tab>\<Home>\"\<CR>", 'xt') 1582cb9f025SBram Moolenaar call assert_equal('"map ,f', getreg(':')) 1592cb9f025SBram Moolenaar call feedkeys(":map ,\<Tab>\<Tab>\<Home>\"\<CR>", 'xt') 1602cb9f025SBram Moolenaar call assert_equal('"map ,g', getreg(':')) 1611776a28eSBram Moolenaar call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt') 1621776a28eSBram Moolenaar call assert_equal('"map <Left>', getreg(':')) 1631776a28eSBram Moolenaar call feedkeys(":map <A-Left>\<Tab>\<Home>\"\<CR>", 'xt') 16492b9e60cSBram Moolenaar call assert_equal("\"map <A-Left>\<Tab>", getreg(':')) 1652cb9f025SBram Moolenaar unmap ,f 1662cb9f025SBram Moolenaar unmap ,g 1671776a28eSBram Moolenaar unmap <Left> 1681776a28eSBram Moolenaar unmap <A-Left>x 1692cb9f025SBram Moolenaar 1702cb9f025SBram Moolenaar set cpo-=< cpo-=B cpo-=k 1712cb9f025SBram Moolenaar map <Left> left 1722cb9f025SBram Moolenaar call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt') 1732cb9f025SBram Moolenaar call assert_equal('"map <Left>', getreg(':')) 1741776a28eSBram Moolenaar call feedkeys(":map <M\<Tab>\<Home>\"\<CR>", 'xt') 17592b9e60cSBram Moolenaar call assert_equal("\"map <M\<Tab>", getreg(':')) 1762cb9f025SBram Moolenaar unmap <Left> 1772cb9f025SBram Moolenaar 1782cb9f025SBram Moolenaar set cpo+=< 1792cb9f025SBram Moolenaar map <Left> left 18061df0c79SBram Moolenaar exe "set t_k6=\<Esc>[17~" 18161df0c79SBram Moolenaar call feedkeys(":map \<Esc>[17~x f6x\<CR>", 'xt') 1822cb9f025SBram Moolenaar call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt') 1832cb9f025SBram Moolenaar call assert_equal('"map <Left>', getreg(':')) 184510671a0SBram Moolenaar if !has('gui_running') 18561df0c79SBram Moolenaar call feedkeys(":map \<Esc>[17~\<Tab>\<Home>\"\<CR>", 'xt') 18661df0c79SBram Moolenaar call assert_equal("\"map <F6>x", getreg(':')) 187510671a0SBram Moolenaar endif 1882cb9f025SBram Moolenaar unmap <Left> 18961df0c79SBram Moolenaar call feedkeys(":unmap \<Esc>[17~x\<CR>", 'xt') 1902cb9f025SBram Moolenaar set cpo-=< 1912cb9f025SBram Moolenaar 1922cb9f025SBram Moolenaar set cpo+=B 1932cb9f025SBram Moolenaar map <Left> left 1942cb9f025SBram Moolenaar call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt') 1952cb9f025SBram Moolenaar call assert_equal('"map <Left>', getreg(':')) 1962cb9f025SBram Moolenaar unmap <Left> 1972cb9f025SBram Moolenaar set cpo-=B 1982cb9f025SBram Moolenaar 1992cb9f025SBram Moolenaar set cpo+=k 2002cb9f025SBram Moolenaar map <Left> left 2012cb9f025SBram Moolenaar call feedkeys(":map <L\<Tab>\<Home>\"\<CR>", 'xt') 2022cb9f025SBram Moolenaar call assert_equal('"map <Left>', getreg(':')) 2032cb9f025SBram Moolenaar unmap <Left> 2042cb9f025SBram Moolenaar set cpo-=k 2051776a28eSBram Moolenaar 206531be47aSBram Moolenaar call assert_fails('call feedkeys(":map \\\\%(\<Tab>\<Home>\"\<CR>", "xt")', 'E53:') 207531be47aSBram Moolenaar 2081776a28eSBram Moolenaar unmap <Middle>x 2091776a28eSBram Moolenaar set cpo&vim 210cf5fdf7dSBram Moolenaarendfunc 211cf5fdf7dSBram Moolenaar 21215eedf1dSBram Moolenaarfunc Test_match_completion() 21315eedf1dSBram Moolenaar hi Aardig ctermfg=green 21415eedf1dSBram Moolenaar call feedkeys(":match \<Tab>\<Home>\"\<CR>", 'xt') 21515eedf1dSBram Moolenaar call assert_equal('"match Aardig', getreg(':')) 21615eedf1dSBram Moolenaar call feedkeys(":match \<S-Tab>\<Home>\"\<CR>", 'xt') 21715eedf1dSBram Moolenaar call assert_equal('"match none', getreg(':')) 21815eedf1dSBram Moolenaarendfunc 21915eedf1dSBram Moolenaar 22015eedf1dSBram Moolenaarfunc Test_highlight_completion() 22115eedf1dSBram Moolenaar hi Aardig ctermfg=green 22215eedf1dSBram Moolenaar call feedkeys(":hi \<Tab>\<Home>\"\<CR>", 'xt') 22315eedf1dSBram Moolenaar call assert_equal('"hi Aardig', getreg(':')) 224ea588154SBram Moolenaar call feedkeys(":hi default \<Tab>\<Home>\"\<CR>", 'xt') 225ea588154SBram Moolenaar call assert_equal('"hi default Aardig', getreg(':')) 226ea588154SBram Moolenaar call feedkeys(":hi clear Aa\<Tab>\<Home>\"\<CR>", 'xt') 227ea588154SBram Moolenaar call assert_equal('"hi clear Aardig', getreg(':')) 22815eedf1dSBram Moolenaar call feedkeys(":hi li\<S-Tab>\<Home>\"\<CR>", 'xt') 22915eedf1dSBram Moolenaar call assert_equal('"hi link', getreg(':')) 23015eedf1dSBram Moolenaar call feedkeys(":hi d\<S-Tab>\<Home>\"\<CR>", 'xt') 23115eedf1dSBram Moolenaar call assert_equal('"hi default', getreg(':')) 23215eedf1dSBram Moolenaar call feedkeys(":hi c\<S-Tab>\<Home>\"\<CR>", 'xt') 23315eedf1dSBram Moolenaar call assert_equal('"hi clear', getreg(':')) 23475e15670SBram Moolenaar call feedkeys(":hi clear Aardig Aard\<Tab>\<C-B>\"\<CR>", 'xt') 23575e15670SBram Moolenaar call assert_equal('"hi clear Aardig Aardig', getreg(':')) 23675e15670SBram Moolenaar call feedkeys(":hi Aardig \<Tab>\<C-B>\"\<CR>", 'xt') 23775e15670SBram Moolenaar call assert_equal("\"hi Aardig \t", getreg(':')) 238c96272e3SBram Moolenaar 239c96272e3SBram Moolenaar " A cleared group does not show up in completions. 240c96272e3SBram Moolenaar hi Anders ctermfg=green 241c96272e3SBram Moolenaar call assert_equal(['Aardig', 'Anders'], getcompletion('A', 'highlight')) 242c96272e3SBram Moolenaar hi clear Aardig 243c96272e3SBram Moolenaar call assert_equal(['Anders'], getcompletion('A', 'highlight')) 244c96272e3SBram Moolenaar hi clear Anders 245c96272e3SBram Moolenaar call assert_equal([], getcompletion('A', 'highlight')) 24615eedf1dSBram Moolenaarendfunc 24715eedf1dSBram Moolenaar 24875e15670SBram Moolenaar" Test for command-line expansion of "hi Ni " (easter egg) 24975e15670SBram Moolenaarfunc Test_highlight_easter_egg() 25075e15670SBram Moolenaar call test_override('ui_delay', 1) 25175e15670SBram Moolenaar call feedkeys(":hi Ni \<Tab>\<C-B>\"\<CR>", 'xt') 25275e15670SBram Moolenaar call assert_equal("\"hi Ni \<Tab>", @:) 25375e15670SBram Moolenaar call test_override('ALL', 0) 25475e15670SBram Moolenaarendfunc 25575e15670SBram Moolenaar 256aa4d7323SBram Moolenaarfunc Test_getcompletion() 257aa4d7323SBram Moolenaar let groupcount = len(getcompletion('', 'event')) 258aa4d7323SBram Moolenaar call assert_true(groupcount > 0) 2594c313b13SBram Moolenaar let matchcount = len('File'->getcompletion('event')) 260aa4d7323SBram Moolenaar call assert_true(matchcount > 0) 261aa4d7323SBram Moolenaar call assert_true(groupcount > matchcount) 262aa4d7323SBram Moolenaar 2630d3e24beSBram Moolenaar if has('menu') 264aa4d7323SBram Moolenaar source $VIMRUNTIME/menu.vim 265aa4d7323SBram Moolenaar let matchcount = len(getcompletion('', 'menu')) 266aa4d7323SBram Moolenaar call assert_true(matchcount > 0) 2670d3e24beSBram Moolenaar call assert_equal(['File.'], getcompletion('File', 'menu')) 268aa4d7323SBram Moolenaar call assert_true(matchcount > 0) 2690d3e24beSBram Moolenaar let matchcount = len(getcompletion('File.', 'menu')) 2700d3e24beSBram Moolenaar call assert_true(matchcount > 0) 2710d3e24beSBram Moolenaar endif 272aa4d7323SBram Moolenaar 273c1fb7631SBram Moolenaar let l = getcompletion('v:n', 'var') 274c1fb7631SBram Moolenaar call assert_true(index(l, 'v:null') >= 0) 275b56195edSBram Moolenaar let l = getcompletion('v:notexists', 'var') 276b56195edSBram Moolenaar call assert_equal([], l) 277c1fb7631SBram Moolenaar 278cd43effeSBram Moolenaar args a.c b.c 279cd43effeSBram Moolenaar let l = getcompletion('', 'arglist') 280cd43effeSBram Moolenaar call assert_equal(['a.c', 'b.c'], l) 281cd43effeSBram Moolenaar %argdelete 282cd43effeSBram Moolenaar 283c1fb7631SBram Moolenaar let l = getcompletion('', 'augroup') 284c1fb7631SBram Moolenaar call assert_true(index(l, 'END') >= 0) 285b56195edSBram Moolenaar let l = getcompletion('blahblah', 'augroup') 286b56195edSBram Moolenaar call assert_equal([], l) 287c1fb7631SBram Moolenaar 288c1fb7631SBram Moolenaar let l = getcompletion('', 'behave') 289c1fb7631SBram Moolenaar call assert_true(index(l, 'mswin') >= 0) 290b56195edSBram Moolenaar let l = getcompletion('not', 'behave') 291b56195edSBram Moolenaar call assert_equal([], l) 292c1fb7631SBram Moolenaar 293c1fb7631SBram Moolenaar let l = getcompletion('', 'color') 294c1fb7631SBram Moolenaar call assert_true(index(l, 'default') >= 0) 295b56195edSBram Moolenaar let l = getcompletion('dirty', 'color') 296b56195edSBram Moolenaar call assert_equal([], l) 297c1fb7631SBram Moolenaar 298c1fb7631SBram Moolenaar let l = getcompletion('', 'command') 299c1fb7631SBram Moolenaar call assert_true(index(l, 'sleep') >= 0) 300b56195edSBram Moolenaar let l = getcompletion('awake', 'command') 301b56195edSBram Moolenaar call assert_equal([], l) 302c1fb7631SBram Moolenaar 303c1fb7631SBram Moolenaar let l = getcompletion('', 'dir') 304b56195edSBram Moolenaar call assert_true(index(l, 'samples/') >= 0) 305b56195edSBram Moolenaar let l = getcompletion('NoMatch', 'dir') 306b56195edSBram Moolenaar call assert_equal([], l) 307c1fb7631SBram Moolenaar 308ae38a9dbSShougo Matsushita if glob('~/*') !=# '' 309ae38a9dbSShougo Matsushita let l = getcompletion('~/', 'dir') 310ae38a9dbSShougo Matsushita call assert_true(l[0][0] ==# '~') 311ae38a9dbSShougo Matsushita endif 312ae38a9dbSShougo Matsushita 313c1fb7631SBram Moolenaar let l = getcompletion('exe', 'expression') 314c1fb7631SBram Moolenaar call assert_true(index(l, 'executable(') >= 0) 315b56195edSBram Moolenaar let l = getcompletion('kill', 'expression') 316b56195edSBram Moolenaar call assert_equal([], l) 317c1fb7631SBram Moolenaar 318c1fb7631SBram Moolenaar let l = getcompletion('tag', 'function') 319c1fb7631SBram Moolenaar call assert_true(index(l, 'taglist(') >= 0) 320b56195edSBram Moolenaar let l = getcompletion('paint', 'function') 321b56195edSBram Moolenaar call assert_equal([], l) 322c1fb7631SBram Moolenaar 323b49edc11SBram Moolenaar let Flambda = {-> 'hello'} 324b49edc11SBram Moolenaar let l = getcompletion('', 'function') 325b49edc11SBram Moolenaar let l = filter(l, {i, v -> v =~ 'lambda'}) 326b56195edSBram Moolenaar call assert_equal([], l) 327b49edc11SBram Moolenaar 328c1fb7631SBram Moolenaar let l = getcompletion('run', 'file') 329c1fb7631SBram Moolenaar call assert_true(index(l, 'runtest.vim') >= 0) 330b56195edSBram Moolenaar let l = getcompletion('walk', 'file') 331b56195edSBram Moolenaar call assert_equal([], l) 332e9d58a64SBram Moolenaar set wildignore=*.vim 333e9d58a64SBram Moolenaar let l = getcompletion('run', 'file', 1) 334e9d58a64SBram Moolenaar call assert_true(index(l, 'runtest.vim') < 0) 335e9d58a64SBram Moolenaar set wildignore& 336c1fb7631SBram Moolenaar 337c1fb7631SBram Moolenaar let l = getcompletion('ha', 'filetype') 338c1fb7631SBram Moolenaar call assert_true(index(l, 'hamster') >= 0) 339b56195edSBram Moolenaar let l = getcompletion('horse', 'filetype') 340b56195edSBram Moolenaar call assert_equal([], l) 341c1fb7631SBram Moolenaar 342c1fb7631SBram Moolenaar let l = getcompletion('z', 'syntax') 343c1fb7631SBram Moolenaar call assert_true(index(l, 'zimbu') >= 0) 344b56195edSBram Moolenaar let l = getcompletion('emacs', 'syntax') 345b56195edSBram Moolenaar call assert_equal([], l) 346c1fb7631SBram Moolenaar 347c1fb7631SBram Moolenaar let l = getcompletion('jikes', 'compiler') 348c1fb7631SBram Moolenaar call assert_true(index(l, 'jikes') >= 0) 349b56195edSBram Moolenaar let l = getcompletion('break', 'compiler') 350b56195edSBram Moolenaar call assert_equal([], l) 351c1fb7631SBram Moolenaar 352c1fb7631SBram Moolenaar let l = getcompletion('last', 'help') 353c1fb7631SBram Moolenaar call assert_true(index(l, ':tablast') >= 0) 354b56195edSBram Moolenaar let l = getcompletion('giveup', 'help') 355b56195edSBram Moolenaar call assert_equal([], l) 356c1fb7631SBram Moolenaar 357c1fb7631SBram Moolenaar let l = getcompletion('time', 'option') 358c1fb7631SBram Moolenaar call assert_true(index(l, 'timeoutlen') >= 0) 359b56195edSBram Moolenaar let l = getcompletion('space', 'option') 360b56195edSBram Moolenaar call assert_equal([], l) 361c1fb7631SBram Moolenaar 362c1fb7631SBram Moolenaar let l = getcompletion('er', 'highlight') 363c1fb7631SBram Moolenaar call assert_true(index(l, 'ErrorMsg') >= 0) 364b56195edSBram Moolenaar let l = getcompletion('dark', 'highlight') 365b56195edSBram Moolenaar call assert_equal([], l) 366c1fb7631SBram Moolenaar 3679e507ca8SBram Moolenaar let l = getcompletion('', 'messages') 3689e507ca8SBram Moolenaar call assert_true(index(l, 'clear') >= 0) 3699e507ca8SBram Moolenaar let l = getcompletion('not', 'messages') 3709e507ca8SBram Moolenaar call assert_equal([], l) 3719e507ca8SBram Moolenaar 372cae92dc3SBram Moolenaar let l = getcompletion('', 'mapclear') 373cae92dc3SBram Moolenaar call assert_true(index(l, '<buffer>') >= 0) 374cae92dc3SBram Moolenaar let l = getcompletion('not', 'mapclear') 375cae92dc3SBram Moolenaar call assert_equal([], l) 376cae92dc3SBram Moolenaar 37762fe66f2SBram Moolenaar let l = getcompletion('.', 'shellcmd') 3786ab9e429SBram Moolenaar call assert_equal(['./', '../'], filter(l, 'v:val =~ "\\./"')) 37962fe66f2SBram Moolenaar call assert_equal(-1, match(l[2:], '^\.\.\?/$')) 38062fe66f2SBram Moolenaar let root = has('win32') ? 'C:\\' : '/' 38162fe66f2SBram Moolenaar let l = getcompletion(root, 'shellcmd') 38262fe66f2SBram Moolenaar let expected = map(filter(glob(root . '*', 0, 1), 38362fe66f2SBram Moolenaar \ 'isdirectory(v:val) || executable(v:val)'), 'isdirectory(v:val) ? v:val . ''/'' : v:val') 38462fe66f2SBram Moolenaar call assert_equal(expected, l) 38562fe66f2SBram Moolenaar 386b650b987SBram Moolenaar if has('cscope') 387b650b987SBram Moolenaar let l = getcompletion('', 'cscope') 388b650b987SBram Moolenaar let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show'] 389b650b987SBram Moolenaar call assert_equal(cmds, l) 390b650b987SBram Moolenaar " using cmdline completion must not change the result 391b650b987SBram Moolenaar call feedkeys(":cscope find \<c-d>\<c-c>", 'xt') 392b650b987SBram Moolenaar let l = getcompletion('', 'cscope') 393b650b987SBram Moolenaar call assert_equal(cmds, l) 394b650b987SBram Moolenaar let keys = ['a', 'c', 'd', 'e', 'f', 'g', 'i', 's', 't'] 395b650b987SBram Moolenaar let l = getcompletion('find ', 'cscope') 396b650b987SBram Moolenaar call assert_equal(keys, l) 397b650b987SBram Moolenaar endif 398b650b987SBram Moolenaar 3997522f698SBram Moolenaar if has('signs') 4007522f698SBram Moolenaar sign define Testing linehl=Comment 4017522f698SBram Moolenaar let l = getcompletion('', 'sign') 4027522f698SBram Moolenaar let cmds = ['define', 'jump', 'list', 'place', 'undefine', 'unplace'] 4037522f698SBram Moolenaar call assert_equal(cmds, l) 4047522f698SBram Moolenaar " using cmdline completion must not change the result 4057522f698SBram Moolenaar call feedkeys(":sign list \<c-d>\<c-c>", 'xt') 4067522f698SBram Moolenaar let l = getcompletion('', 'sign') 4077522f698SBram Moolenaar call assert_equal(cmds, l) 4087522f698SBram Moolenaar let l = getcompletion('list ', 'sign') 4097522f698SBram Moolenaar call assert_equal(['Testing'], l) 4107522f698SBram Moolenaar endif 4117522f698SBram Moolenaar 4121f1fd44eSBram Moolenaar " Command line completion tests 4131f1fd44eSBram Moolenaar let l = getcompletion('cd ', 'cmdline') 4141f1fd44eSBram Moolenaar call assert_true(index(l, 'samples/') >= 0) 4151f1fd44eSBram Moolenaar let l = getcompletion('cd NoMatch', 'cmdline') 4161f1fd44eSBram Moolenaar call assert_equal([], l) 4171f1fd44eSBram Moolenaar let l = getcompletion('let v:n', 'cmdline') 4181f1fd44eSBram Moolenaar call assert_true(index(l, 'v:null') >= 0) 4191f1fd44eSBram Moolenaar let l = getcompletion('let v:notexists', 'cmdline') 4201f1fd44eSBram Moolenaar call assert_equal([], l) 4211f1fd44eSBram Moolenaar let l = getcompletion('call tag', 'cmdline') 4221f1fd44eSBram Moolenaar call assert_true(index(l, 'taglist(') >= 0) 4231f1fd44eSBram Moolenaar let l = getcompletion('call paint', 'cmdline') 4241f1fd44eSBram Moolenaar call assert_equal([], l) 4251f1fd44eSBram Moolenaar 426ae38a9dbSShougo Matsushita func T(a, c, p) 427ae38a9dbSShougo Matsushita return "oneA\noneB\noneC" 428ae38a9dbSShougo Matsushita endfunc 429ae38a9dbSShougo Matsushita command -nargs=1 -complete=custom,T MyCmd 430ae38a9dbSShougo Matsushita let l = getcompletion('MyCmd ', 'cmdline') 431ae38a9dbSShougo Matsushita call assert_equal(['oneA', 'oneB', 'oneC'], l) 432ae38a9dbSShougo Matsushita 433ae38a9dbSShougo Matsushita delcommand MyCmd 434ae38a9dbSShougo Matsushita delfunc T 435ae38a9dbSShougo Matsushita 436c1fb7631SBram Moolenaar " For others test if the name is recognized. 43762fe66f2SBram Moolenaar let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user'] 438c1fb7631SBram Moolenaar if has('cmdline_hist') 439c1fb7631SBram Moolenaar call add(names, 'history') 440c1fb7631SBram Moolenaar endif 441c1fb7631SBram Moolenaar if has('gettext') 442c1fb7631SBram Moolenaar call add(names, 'locale') 443c1fb7631SBram Moolenaar endif 444c1fb7631SBram Moolenaar if has('profile') 445c1fb7631SBram Moolenaar call add(names, 'syntime') 446c1fb7631SBram Moolenaar endif 447c1fb7631SBram Moolenaar 448c1fb7631SBram Moolenaar set tags=Xtags 449c1fb7631SBram Moolenaar call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags') 450c1fb7631SBram Moolenaar 451c1fb7631SBram Moolenaar for name in names 452c1fb7631SBram Moolenaar let matchcount = len(getcompletion('', name)) 453c1fb7631SBram Moolenaar call assert_true(matchcount >= 0, 'No matches for ' . name) 454c1fb7631SBram Moolenaar endfor 455c1fb7631SBram Moolenaar 456c1fb7631SBram Moolenaar call delete('Xtags') 4570331faf7SBram Moolenaar set tags& 458c1fb7631SBram Moolenaar 459b7e24836SBram Moolenaar call assert_fails("call getcompletion('\\\\@!\\\\@=', 'buffer')", 'E871:') 460aa4d7323SBram Moolenaar call assert_fails('call getcompletion("", "burp")', 'E475:') 4611f1fd44eSBram Moolenaar call assert_fails('call getcompletion("abc", [])', 'E475:') 462aa4d7323SBram Moolenaarendfunc 46373d4e4c8SBram Moolenaar 464038e09eeSBram Moolenaarfunc Test_fullcommand() 465038e09eeSBram Moolenaar let tests = { 466038e09eeSBram Moolenaar \ '': '', 467038e09eeSBram Moolenaar \ ':': '', 468038e09eeSBram Moolenaar \ ':::': '', 469038e09eeSBram Moolenaar \ ':::5': '', 470038e09eeSBram Moolenaar \ 'not_a_cmd': '', 471038e09eeSBram Moolenaar \ 'Check': '', 472038e09eeSBram Moolenaar \ 'syntax': 'syntax', 473038e09eeSBram Moolenaar \ ':syntax': 'syntax', 474038e09eeSBram Moolenaar \ '::::syntax': 'syntax', 475038e09eeSBram Moolenaar \ 'sy': 'syntax', 476038e09eeSBram Moolenaar \ 'syn': 'syntax', 477038e09eeSBram Moolenaar \ 'synt': 'syntax', 478038e09eeSBram Moolenaar \ ':sy': 'syntax', 479038e09eeSBram Moolenaar \ '::::sy': 'syntax', 480038e09eeSBram Moolenaar \ 'match': 'match', 481038e09eeSBram Moolenaar \ '2match': 'match', 482038e09eeSBram Moolenaar \ '3match': 'match', 483038e09eeSBram Moolenaar \ 'aboveleft': 'aboveleft', 484038e09eeSBram Moolenaar \ 'abo': 'aboveleft', 485038e09eeSBram Moolenaar \ 's': 'substitute', 486038e09eeSBram Moolenaar \ '5s': 'substitute', 487038e09eeSBram Moolenaar \ ':5s': 'substitute', 488038e09eeSBram Moolenaar \ "'<,'>s": 'substitute', 489038e09eeSBram Moolenaar \ ":'<,'>s": 'substitute', 490038e09eeSBram Moolenaar \ 'CheckUni': 'CheckUnix', 491038e09eeSBram Moolenaar \ 'CheckUnix': 'CheckUnix', 492038e09eeSBram Moolenaar \ } 493038e09eeSBram Moolenaar 494038e09eeSBram Moolenaar for [in, want] in items(tests) 495038e09eeSBram Moolenaar call assert_equal(want, fullcommand(in)) 496038e09eeSBram Moolenaar endfor 4974c8e8c6eSBram Moolenaar call assert_equal('', fullcommand(test_null_string())) 498038e09eeSBram Moolenaar 499038e09eeSBram Moolenaar call assert_equal('syntax', 'syn'->fullcommand()) 50080c88eacSBram Moolenaar 50180c88eacSBram Moolenaar command -buffer BufferLocalCommand : 50280c88eacSBram Moolenaar command GlobalCommand : 50380c88eacSBram Moolenaar call assert_equal('GlobalCommand', fullcommand('GlobalCom')) 50480c88eacSBram Moolenaar call assert_equal('BufferLocalCommand', fullcommand('BufferL')) 50580c88eacSBram Moolenaar delcommand BufferLocalCommand 50680c88eacSBram Moolenaar delcommand GlobalCommand 507038e09eeSBram Moolenaarendfunc 508038e09eeSBram Moolenaar 5096ab9e429SBram Moolenaarfunc Test_shellcmd_completion() 5106ab9e429SBram Moolenaar let save_path = $PATH 5116ab9e429SBram Moolenaar 5126ab9e429SBram Moolenaar call mkdir('Xpathdir/Xpathsubdir', 'p') 5136ab9e429SBram Moolenaar call writefile([''], 'Xpathdir/Xfile.exe') 5146ab9e429SBram Moolenaar call setfperm('Xpathdir/Xfile.exe', 'rwx------') 5156ab9e429SBram Moolenaar 5166ab9e429SBram Moolenaar " Set PATH to example directory without trailing slash. 5176ab9e429SBram Moolenaar let $PATH = getcwd() . '/Xpathdir' 5186ab9e429SBram Moolenaar 5196ab9e429SBram Moolenaar " Test for the ":!<TAB>" case. Previously, this would include subdirs of 5206ab9e429SBram Moolenaar " dirs in the PATH, even though they won't be executed. We check that only 5216ab9e429SBram Moolenaar " subdirs of the PWD and executables from the PATH are included in the 5226ab9e429SBram Moolenaar " suggestions. 5236ab9e429SBram Moolenaar let actual = getcompletion('X', 'shellcmd') 5246ab9e429SBram Moolenaar let expected = map(filter(glob('*', 0, 1), 'isdirectory(v:val) && v:val[0] == "X"'), 'v:val . "/"') 5256ab9e429SBram Moolenaar call insert(expected, 'Xfile.exe') 5266ab9e429SBram Moolenaar call assert_equal(expected, actual) 5276ab9e429SBram Moolenaar 5286ab9e429SBram Moolenaar call delete('Xpathdir', 'rf') 5296ab9e429SBram Moolenaar let $PATH = save_path 5306ab9e429SBram Moolenaarendfunc 5316ab9e429SBram Moolenaar 53273d4e4c8SBram Moolenaarfunc Test_expand_star_star() 53373d4e4c8SBram Moolenaar call mkdir('a/b', 'p') 53473d4e4c8SBram Moolenaar call writefile(['asdfasdf'], 'a/b/fileXname') 53573d4e4c8SBram Moolenaar call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt') 53673d4e4c8SBram Moolenaar call assert_equal('find a/b/fileXname', getreg(':')) 5371773ddfdSBram Moolenaar bwipe! 53873d4e4c8SBram Moolenaar call delete('a', 'rf') 53973d4e4c8SBram Moolenaarendfunc 54021efc363SBram Moolenaar 54159cb041dSBram Moolenaarfunc Test_cmdline_paste() 54221efc363SBram Moolenaar let @a = "def" 54321efc363SBram Moolenaar call feedkeys(":abc \<C-R>a ghi\<C-B>\"\<CR>", 'tx') 54421efc363SBram Moolenaar call assert_equal('"abc def ghi', @:) 54521efc363SBram Moolenaar 54621efc363SBram Moolenaar new 54721efc363SBram Moolenaar call setline(1, 'asdf.x /tmp/some verylongword a;b-c*d ') 54821efc363SBram Moolenaar 54921efc363SBram Moolenaar call feedkeys(":aaa \<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx') 55021efc363SBram Moolenaar call assert_equal('"aaa asdf bbb', @:) 55121efc363SBram Moolenaar 55221efc363SBram Moolenaar call feedkeys("ft:aaa \<C-R>\<C-F> bbb\<C-B>\"\<CR>", 'tx') 55321efc363SBram Moolenaar call assert_equal('"aaa /tmp/some bbb', @:) 55421efc363SBram Moolenaar 555e2c8d839SBram Moolenaar call feedkeys(":aaa \<C-R>\<C-L> bbb\<C-B>\"\<CR>", 'tx') 556e2c8d839SBram Moolenaar call assert_equal('"aaa '.getline(1).' bbb', @:) 557e2c8d839SBram Moolenaar 55821efc363SBram Moolenaar set incsearch 55921efc363SBram Moolenaar call feedkeys("fy:aaa veryl\<C-R>\<C-W> bbb\<C-B>\"\<CR>", 'tx') 56021efc363SBram Moolenaar call assert_equal('"aaa verylongword bbb', @:) 56121efc363SBram Moolenaar 56221efc363SBram Moolenaar call feedkeys("f;:aaa \<C-R>\<C-A> bbb\<C-B>\"\<CR>", 'tx') 56321efc363SBram Moolenaar call assert_equal('"aaa a;b-c*d bbb', @:) 564eaaa9bbdSBram Moolenaar 565eaaa9bbdSBram Moolenaar call feedkeys(":\<C-\>etoupper(getline(1))\<CR>\<C-B>\"\<CR>", 'tx') 566eaaa9bbdSBram Moolenaar call assert_equal('"ASDF.X /TMP/SOME VERYLONGWORD A;B-C*D ', @:) 56721efc363SBram Moolenaar bwipe! 56872532d35SBram Moolenaar 56972532d35SBram Moolenaar " Error while typing a command used to cause that it was not executed 57072532d35SBram Moolenaar " in the end. 57172532d35SBram Moolenaar new 57272532d35SBram Moolenaar try 57372532d35SBram Moolenaar call feedkeys(":file \<C-R>%Xtestfile\<CR>", 'tx') 57472532d35SBram Moolenaar catch /^Vim\%((\a\+)\)\=:E32/ 57572532d35SBram Moolenaar " ignore error E32 57672532d35SBram Moolenaar endtry 57772532d35SBram Moolenaar call assert_equal("Xtestfile", bufname("%")) 5788d588cceSBram Moolenaar 579578fe947SBram Moolenaar " Try to paste an invalid register using <C-R> 580578fe947SBram Moolenaar call feedkeys(":\"one\<C-R>\<C-X>two\<CR>", 'xt') 581578fe947SBram Moolenaar call assert_equal('"onetwo', @:) 582578fe947SBram Moolenaar 58391ffc8a5SBram Moolenaar " Test for pasting register containing CTRL-H using CTRL-R and CTRL-R CTRL-R 584578fe947SBram Moolenaar let @a = "xy\<C-H>z" 585578fe947SBram Moolenaar call feedkeys(":\"\<C-R>a\<CR>", 'xt') 586578fe947SBram Moolenaar call assert_equal('"xz', @:) 58791ffc8a5SBram Moolenaar call feedkeys(":\"\<C-R>\<C-R>a\<CR>", 'xt') 58891ffc8a5SBram Moolenaar call assert_equal("\"xy\<C-H>z", @:) 589578fe947SBram Moolenaar call feedkeys(":\"\<C-R>\<C-O>a\<CR>", 'xt') 590578fe947SBram Moolenaar call assert_equal("\"xy\<C-H>z", @:) 591578fe947SBram Moolenaar 59291ffc8a5SBram Moolenaar " Test for pasting register containing CTRL-V using CTRL-R and CTRL-R CTRL-R 59391ffc8a5SBram Moolenaar let @a = "xy\<C-V>z" 59491ffc8a5SBram Moolenaar call feedkeys(":\"\<C-R>=@a\<CR>\<cr>", 'xt') 59591ffc8a5SBram Moolenaar call assert_equal('"xyz', @:) 59691ffc8a5SBram Moolenaar call feedkeys(":\"\<C-R>\<C-R>=@a\<CR>\<cr>", 'xt') 59791ffc8a5SBram Moolenaar call assert_equal("\"xy\<C-V>z", @:) 59891ffc8a5SBram Moolenaar 599578fe947SBram Moolenaar call assert_beeps('call feedkeys(":\<C-R>=\<C-R>=\<Esc>", "xt")') 600578fe947SBram Moolenaar 60172532d35SBram Moolenaar bwipe! 60221efc363SBram Moolenaarendfunc 603eaaa9bbdSBram Moolenaar 60459cb041dSBram Moolenaarfunc Test_cmdline_remove_char() 60559cb041dSBram Moolenaar let encoding_save = &encoding 60659cb041dSBram Moolenaar 60759cb041dSBram Moolenaar for e in ['utf8', 'latin1'] 60859cb041dSBram Moolenaar exe 'set encoding=' . e 60959cb041dSBram Moolenaar 610eaaa9bbdSBram Moolenaar call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx') 61159cb041dSBram Moolenaar call assert_equal('"abc ef', @:, e) 612eaaa9bbdSBram Moolenaar 613eaaa9bbdSBram Moolenaar call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx') 614eaaa9bbdSBram Moolenaar call assert_equal('"abcdef', @:) 615eaaa9bbdSBram Moolenaar 616eaaa9bbdSBram Moolenaar call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx') 61759cb041dSBram Moolenaar call assert_equal('"abc ghi', @:, e) 618eaaa9bbdSBram Moolenaar 619eaaa9bbdSBram Moolenaar call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx') 62059cb041dSBram Moolenaar call assert_equal('"def', @:, e) 62159cb041dSBram Moolenaar endfor 62259cb041dSBram Moolenaar 62359cb041dSBram Moolenaar let &encoding = encoding_save 62459cb041dSBram Moolenaarendfunc 62559cb041dSBram Moolenaar 62659cb041dSBram Moolenaarfunc Test_cmdline_keymap_ctrl_hat() 6276d91bcb4SBram Moolenaar CheckFeature keymap 62859cb041dSBram Moolenaar 62959cb041dSBram Moolenaar set keymap=esperanto 63059cb041dSBram Moolenaar call feedkeys(":\"Jxauxdo \<C-^>Jxauxdo \<C-^>Jxauxdo\<CR>", 'tx') 63159cb041dSBram Moolenaar call assert_equal('"Jxauxdo Ĵaŭdo Jxauxdo', @:) 63259cb041dSBram Moolenaar set keymap= 633eaaa9bbdSBram Moolenaarendfunc 634fe38b494SBram Moolenaar 635f1f6f3f7SBram Moolenaarfunc Test_illegal_address1() 636fe38b494SBram Moolenaar new 637fe38b494SBram Moolenaar 2;'( 638fe38b494SBram Moolenaar 2;') 639fe38b494SBram Moolenaar quit 640fe38b494SBram Moolenaarendfunc 641ba47b51fSBram Moolenaar 642f1f6f3f7SBram Moolenaarfunc Test_illegal_address2() 643f1f6f3f7SBram Moolenaar call writefile(['c', 'x', ' x', '.', '1;y'], 'Xtest.vim') 644f1f6f3f7SBram Moolenaar new 645f1f6f3f7SBram Moolenaar source Xtest.vim 646f1f6f3f7SBram Moolenaar " Trigger calling validate_cursor() 647f1f6f3f7SBram Moolenaar diffsp Xtest.vim 648f1f6f3f7SBram Moolenaar quit! 649f1f6f3f7SBram Moolenaar bwipe! 650f1f6f3f7SBram Moolenaar call delete('Xtest.vim') 651f1f6f3f7SBram Moolenaarendfunc 652f1f6f3f7SBram Moolenaar 653ba47b51fSBram Moolenaarfunc Test_cmdline_complete_wildoptions() 654ba47b51fSBram Moolenaar help 655ba47b51fSBram Moolenaar call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx') 656ba47b51fSBram Moolenaar let a = join(sort(split(@:)),' ') 657ba47b51fSBram Moolenaar set wildoptions=tagfile 658ba47b51fSBram Moolenaar call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx') 659ba47b51fSBram Moolenaar let b = join(sort(split(@:)),' ') 660ba47b51fSBram Moolenaar call assert_equal(a, b) 661ba47b51fSBram Moolenaar bw! 662ba47b51fSBram Moolenaarendfunc 663cbf20fbcSBram Moolenaar 664a33ddbbdSBram Moolenaarfunc Test_cmdline_complete_user_cmd() 665a33ddbbdSBram Moolenaar command! -complete=color -nargs=1 Foo : 666a33ddbbdSBram Moolenaar call feedkeys(":Foo \<Tab>\<Home>\"\<cr>", 'tx') 667a33ddbbdSBram Moolenaar call assert_equal('"Foo blue', @:) 668a33ddbbdSBram Moolenaar call feedkeys(":Foo b\<Tab>\<Home>\"\<cr>", 'tx') 669a33ddbbdSBram Moolenaar call assert_equal('"Foo blue', @:) 670a33ddbbdSBram Moolenaar delcommand Foo 671a33ddbbdSBram Moolenaarendfunc 672a33ddbbdSBram Moolenaar 673cc390ff5SBram Moolenaarfunc s:ScriptLocalFunction() 674cc390ff5SBram Moolenaar echo 'yes' 675cc390ff5SBram Moolenaarendfunc 676cc390ff5SBram Moolenaar 677cc390ff5SBram Moolenaarfunc Test_cmdline_complete_user_func() 678cc390ff5SBram Moolenaar call feedkeys(":func Test_cmdline_complete_user\<Tab>\<Home>\"\<cr>", 'tx') 6795aec755bSnaohiro ono call assert_match('"func Test_cmdline_complete_user_', @:) 680cc390ff5SBram Moolenaar call feedkeys(":func s:ScriptL\<Tab>\<Home>\"\<cr>", 'tx') 681cc390ff5SBram Moolenaar call assert_match('"func <SNR>\d\+_ScriptLocalFunction', @:) 6821bb4de53SBram Moolenaar 6831bb4de53SBram Moolenaar " g: prefix also works 6841bb4de53SBram Moolenaar call feedkeys(":echo g:Test_cmdline_complete_user_f\<Tab>\<Home>\"\<cr>", 'tx') 6851bb4de53SBram Moolenaar call assert_match('"echo g:Test_cmdline_complete_user_func', @:) 686069f9085SBram Moolenaar 687069f9085SBram Moolenaar " using g: prefix does not result in just "g:" matches from a lambda 688069f9085SBram Moolenaar let Fx = { a -> a } 689069f9085SBram Moolenaar call feedkeys(":echo g:\<Tab>\<Home>\"\<cr>", 'tx') 690069f9085SBram Moolenaar call assert_match('"echo g:[A-Z]', @:) 6915aec755bSnaohiro ono 6925aec755bSnaohiro ono " existence of script-local dict function does not break user function name 6935aec755bSnaohiro ono " completion 6945aec755bSnaohiro ono function s:a_dict_func() dict 6955aec755bSnaohiro ono endfunction 6965aec755bSnaohiro ono call feedkeys(":call Test_cmdline_complete_user\<Tab>\<Home>\"\<cr>", 'tx') 6975aec755bSnaohiro ono call assert_match('"call Test_cmdline_complete_user_', @:) 6985aec755bSnaohiro ono delfunction s:a_dict_func 699cc390ff5SBram Moolenaarendfunc 700cc390ff5SBram Moolenaar 7015f8f2d37SBram Moolenaarfunc Test_cmdline_complete_user_names() 7025f8f2d37SBram Moolenaar if has('unix') && executable('whoami') 7035f8f2d37SBram Moolenaar let whoami = systemlist('whoami')[0] 7045f8f2d37SBram Moolenaar let first_letter = whoami[0] 7055f8f2d37SBram Moolenaar if len(first_letter) > 0 7065f8f2d37SBram Moolenaar " Trying completion of :e ~x where x is the first letter of 7075f8f2d37SBram Moolenaar " the user name should complete to at least the user name. 7085f8f2d37SBram Moolenaar call feedkeys(':e ~' . first_letter . "\<c-a>\<c-B>\"\<cr>", 'tx') 7095f8f2d37SBram Moolenaar call assert_match('^"e \~.*\<' . whoami . '\>', @:) 7105f8f2d37SBram Moolenaar endif 7116d91bcb4SBram Moolenaar elseif has('win32') 7125f8f2d37SBram Moolenaar " Just in case: check that the system has an Administrator account. 7135f8f2d37SBram Moolenaar let names = system('net user') 7145f8f2d37SBram Moolenaar if names =~ 'Administrator' 7155f8f2d37SBram Moolenaar " Trying completion of :e ~A should complete to Administrator. 716346d2a35SBram Moolenaar " There could be other names starting with "A" before Administrator. 7175f8f2d37SBram Moolenaar call feedkeys(':e ~A' . "\<c-a>\<c-B>\"\<cr>", 'tx') 718346d2a35SBram Moolenaar call assert_match('^"e \~.*Administrator', @:) 7195f8f2d37SBram Moolenaar endif 7206d91bcb4SBram Moolenaar else 7216d91bcb4SBram Moolenaar throw 'Skipped: does not work on this platform' 7225f8f2d37SBram Moolenaar endif 7235f8f2d37SBram Moolenaarendfunc 7245f8f2d37SBram Moolenaar 725297610baSBram Moolenaarfunc Test_cmdline_complete_bang() 7266d91bcb4SBram Moolenaar CheckExecutable whoami 727297610baSBram Moolenaar call feedkeys(":!whoam\<C-A>\<C-B>\"\<CR>", 'tx') 728297610baSBram Moolenaar call assert_match('^".*\<whoami\>', @:) 729297610baSBram Moolenaarendfunc 730297610baSBram Moolenaar 7318b633135SBram Moolenaarfunc Test_cmdline_complete_languages() 73284cf6bd8SBram Moolenaar let lang = substitute(execute('language time'), '.*"\(.*\)"$', '\1', '') 73384cf6bd8SBram Moolenaar call assert_equal(lang, v:lc_time) 73484cf6bd8SBram Moolenaar 73584cf6bd8SBram Moolenaar let lang = substitute(execute('language ctype'), '.*"\(.*\)"$', '\1', '') 73684cf6bd8SBram Moolenaar call assert_equal(lang, v:ctype) 73784cf6bd8SBram Moolenaar 73884cf6bd8SBram Moolenaar let lang = substitute(execute('language collate'), '.*"\(.*\)"$', '\1', '') 73984cf6bd8SBram Moolenaar call assert_equal(lang, v:collate) 74084cf6bd8SBram Moolenaar 7415f8f2d37SBram Moolenaar let lang = substitute(execute('language messages'), '.*"\(.*\)"$', '\1', '') 74284cf6bd8SBram Moolenaar call assert_equal(lang, v:lang) 7435f8f2d37SBram Moolenaar 7445f8f2d37SBram Moolenaar call feedkeys(":language \<c-a>\<c-b>\"\<cr>", 'tx') 74584cf6bd8SBram Moolenaar call assert_match('^"language .*\<collate\>.*\<ctype\>.*\<messages\>.*\<time\>', @:) 7465f8f2d37SBram Moolenaar 7475f8f2d37SBram Moolenaar call assert_match('^"language .*\<' . lang . '\>', @:) 7485f8f2d37SBram Moolenaar 7495f8f2d37SBram Moolenaar call feedkeys(":language messages \<c-a>\<c-b>\"\<cr>", 'tx') 7505f8f2d37SBram Moolenaar call assert_match('^"language .*\<' . lang . '\>', @:) 7515f8f2d37SBram Moolenaar 7525f8f2d37SBram Moolenaar call feedkeys(":language ctype \<c-a>\<c-b>\"\<cr>", 'tx') 7535f8f2d37SBram Moolenaar call assert_match('^"language .*\<' . lang . '\>', @:) 7545f8f2d37SBram Moolenaar 7555f8f2d37SBram Moolenaar call feedkeys(":language time \<c-a>\<c-b>\"\<cr>", 'tx') 7565f8f2d37SBram Moolenaar call assert_match('^"language .*\<' . lang . '\>', @:) 75784cf6bd8SBram Moolenaar 75884cf6bd8SBram Moolenaar call feedkeys(":language collate \<c-a>\<c-b>\"\<cr>", 'tx') 75984cf6bd8SBram Moolenaar call assert_match('^"language .*\<' . lang . '\>', @:) 7605f8f2d37SBram Moolenaarendfunc 7615f8f2d37SBram Moolenaar 762297610baSBram Moolenaarfunc Test_cmdline_complete_env_variable() 763297610baSBram Moolenaar let $X_VIM_TEST_COMPLETE_ENV = 'foo' 764297610baSBram Moolenaar call feedkeys(":edit $X_VIM_TEST_COMPLETE_E\<C-A>\<C-B>\"\<CR>", 'tx') 765297610baSBram Moolenaar call assert_match('"edit $X_VIM_TEST_COMPLETE_ENV', @:) 766297610baSBram Moolenaar unlet $X_VIM_TEST_COMPLETE_ENV 767297610baSBram Moolenaarendfunc 768297610baSBram Moolenaar 7694941b5efSBram Moolenaarfunc Test_cmdline_complete_expression() 7704941b5efSBram Moolenaar let g:SomeVar = 'blah' 7714941b5efSBram Moolenaar for cmd in ['exe', 'echo', 'echon', 'echomsg'] 7724941b5efSBram Moolenaar call feedkeys(":" .. cmd .. " SomeV\<Tab>\<C-B>\"\<CR>", 'tx') 7734941b5efSBram Moolenaar call assert_match('"' .. cmd .. ' SomeVar', @:) 7744941b5efSBram Moolenaar call feedkeys(":" .. cmd .. " foo SomeV\<Tab>\<C-B>\"\<CR>", 'tx') 7754941b5efSBram Moolenaar call assert_match('"' .. cmd .. ' foo SomeVar', @:) 7764941b5efSBram Moolenaar endfor 7774941b5efSBram Moolenaar unlet g:SomeVar 7784941b5efSBram Moolenaarendfunc 7794941b5efSBram Moolenaar 78047016f57SBram Moolenaar" Unique function name for completion below 78147016f57SBram Moolenaarfunc s:WeirdFunc() 78247016f57SBram Moolenaar echo 'weird' 78347016f57SBram Moolenaarendfunc 78447016f57SBram Moolenaar 78524ebd83eSBram Moolenaar" Test for various command-line completion 78624ebd83eSBram Moolenaarfunc Test_cmdline_complete_various() 78724ebd83eSBram Moolenaar " completion for a command starting with a comment 78824ebd83eSBram Moolenaar call feedkeys(": :|\"\<C-A>\<C-B>\"\<CR>", 'xt') 78924ebd83eSBram Moolenaar call assert_equal("\" :|\"\<C-A>", @:) 79024ebd83eSBram Moolenaar 79124ebd83eSBram Moolenaar " completion for a range followed by a comment 79224ebd83eSBram Moolenaar call feedkeys(":1,2\"\<C-A>\<C-B>\"\<CR>", 'xt') 79324ebd83eSBram Moolenaar call assert_equal("\"1,2\"\<C-A>", @:) 79424ebd83eSBram Moolenaar 79524ebd83eSBram Moolenaar " completion for :k command 79624ebd83eSBram Moolenaar call feedkeys(":ka\<C-A>\<C-B>\"\<CR>", 'xt') 79724ebd83eSBram Moolenaar call assert_equal("\"ka\<C-A>", @:) 79824ebd83eSBram Moolenaar 79924ebd83eSBram Moolenaar " completion for short version of the :s command 80024ebd83eSBram Moolenaar call feedkeys(":sI \<C-A>\<C-B>\"\<CR>", 'xt') 80124ebd83eSBram Moolenaar call assert_equal("\"sI \<C-A>", @:) 80224ebd83eSBram Moolenaar 80324ebd83eSBram Moolenaar " completion for :write command 80424ebd83eSBram Moolenaar call mkdir('Xdir') 80524ebd83eSBram Moolenaar call writefile(['one'], 'Xdir/Xfile1') 80624ebd83eSBram Moolenaar let save_cwd = getcwd() 80724ebd83eSBram Moolenaar cd Xdir 80824ebd83eSBram Moolenaar call feedkeys(":w >> \<C-A>\<C-B>\"\<CR>", 'xt') 80924ebd83eSBram Moolenaar call assert_equal("\"w >> Xfile1", @:) 81024ebd83eSBram Moolenaar call chdir(save_cwd) 81124ebd83eSBram Moolenaar call delete('Xdir', 'rf') 81224ebd83eSBram Moolenaar 81324ebd83eSBram Moolenaar " completion for :w ! and :r ! commands 81424ebd83eSBram Moolenaar call feedkeys(":w !invalid_xyz_cmd\<C-A>\<C-B>\"\<CR>", 'xt') 81524ebd83eSBram Moolenaar call assert_equal("\"w !invalid_xyz_cmd", @:) 81624ebd83eSBram Moolenaar call feedkeys(":r !invalid_xyz_cmd\<C-A>\<C-B>\"\<CR>", 'xt') 81724ebd83eSBram Moolenaar call assert_equal("\"r !invalid_xyz_cmd", @:) 81824ebd83eSBram Moolenaar 81924ebd83eSBram Moolenaar " completion for :>> and :<< commands 82024ebd83eSBram Moolenaar call feedkeys(":>>>\<C-A>\<C-B>\"\<CR>", 'xt') 82124ebd83eSBram Moolenaar call assert_equal("\">>>\<C-A>", @:) 82224ebd83eSBram Moolenaar call feedkeys(":<<<\<C-A>\<C-B>\"\<CR>", 'xt') 82324ebd83eSBram Moolenaar call assert_equal("\"<<<\<C-A>", @:) 82424ebd83eSBram Moolenaar 82524ebd83eSBram Moolenaar " completion for command with +cmd argument 82624ebd83eSBram Moolenaar call feedkeys(":buffer +/pat Xabc\<C-A>\<C-B>\"\<CR>", 'xt') 82724ebd83eSBram Moolenaar call assert_equal("\"buffer +/pat Xabc", @:) 82824ebd83eSBram Moolenaar call feedkeys(":buffer +/pat\<C-A>\<C-B>\"\<CR>", 'xt') 82924ebd83eSBram Moolenaar call assert_equal("\"buffer +/pat\<C-A>", @:) 83024ebd83eSBram Moolenaar 83124ebd83eSBram Moolenaar " completion for a command with a trailing comment 83224ebd83eSBram Moolenaar call feedkeys(":ls \" comment\<C-A>\<C-B>\"\<CR>", 'xt') 83324ebd83eSBram Moolenaar call assert_equal("\"ls \" comment\<C-A>", @:) 83424ebd83eSBram Moolenaar 83524ebd83eSBram Moolenaar " completion for a command with a trailing command 83624ebd83eSBram Moolenaar call feedkeys(":ls | ls\<C-A>\<C-B>\"\<CR>", 'xt') 83724ebd83eSBram Moolenaar call assert_equal("\"ls | ls", @:) 83824ebd83eSBram Moolenaar 83924ebd83eSBram Moolenaar " completion for a command with an CTRL-V escaped argument 84024ebd83eSBram Moolenaar call feedkeys(":ls \<C-V>\<C-V>a\<C-A>\<C-B>\"\<CR>", 'xt') 84124ebd83eSBram Moolenaar call assert_equal("\"ls \<C-V>a\<C-A>", @:) 84224ebd83eSBram Moolenaar 84324ebd83eSBram Moolenaar " completion for a command that doesn't take additional arguments 84424ebd83eSBram Moolenaar call feedkeys(":all abc\<C-A>\<C-B>\"\<CR>", 'xt') 84524ebd83eSBram Moolenaar call assert_equal("\"all abc\<C-A>", @:) 84624ebd83eSBram Moolenaar 84724ebd83eSBram Moolenaar " completion for a command with a command modifier 84824ebd83eSBram Moolenaar call feedkeys(":topleft new\<C-A>\<C-B>\"\<CR>", 'xt') 84924ebd83eSBram Moolenaar call assert_equal("\"topleft new", @:) 85024ebd83eSBram Moolenaar 851e70e12b3SBram Moolenaar " completion for vim9 and legacy commands 852e70e12b3SBram Moolenaar call feedkeys(":vim9 call strle\<C-A>\<C-B>\"\<CR>", 'xt') 853e70e12b3SBram Moolenaar call assert_equal("\"vim9 call strlen(", @:) 854e70e12b3SBram Moolenaar call feedkeys(":legac call strle\<C-A>\<C-B>\"\<CR>", 'xt') 855e70e12b3SBram Moolenaar call assert_equal("\"legac call strlen(", @:) 856e70e12b3SBram Moolenaar 8574ee9d8e0SBram Moolenaar " completion for the :disassemble command 8584ee9d8e0SBram Moolenaar call feedkeys(":disas deb\<C-A>\<C-B>\"\<CR>", 'xt') 8594ee9d8e0SBram Moolenaar call assert_equal("\"disas debug", @:) 8604ee9d8e0SBram Moolenaar call feedkeys(":disas pro\<C-A>\<C-B>\"\<CR>", 'xt') 8614ee9d8e0SBram Moolenaar call assert_equal("\"disas profile", @:) 8624ee9d8e0SBram Moolenaar call feedkeys(":disas debug Test_cmdline_complete_var\<C-A>\<C-B>\"\<CR>", 'xt') 8634ee9d8e0SBram Moolenaar call assert_equal("\"disas debug Test_cmdline_complete_various", @:) 8644ee9d8e0SBram Moolenaar call feedkeys(":disas profile Test_cmdline_complete_var\<C-A>\<C-B>\"\<CR>", 'xt') 8654ee9d8e0SBram Moolenaar call assert_equal("\"disas profile Test_cmdline_complete_various", @:) 8669aecf79cSnaohiro ono call feedkeys(":disas Test_cmdline_complete_var\<C-A>\<C-B>\"\<CR>", 'xt') 8679aecf79cSnaohiro ono call assert_equal("\"disas Test_cmdline_complete_various", @:) 8684ee9d8e0SBram Moolenaar 86947016f57SBram Moolenaar call feedkeys(":disas s:WeirdF\<C-A>\<C-B>\"\<CR>", 'xt') 8709aecf79cSnaohiro ono call assert_match('"disas <SNR>\d\+_WeirdFunc', @:) 87147016f57SBram Moolenaar 872dfe04dbfSnaohiro ono call feedkeys(":disas \<S-Tab>\<C-B>\"\<CR>", 'xt') 873dfe04dbfSnaohiro ono call assert_match('"disas <SNR>\d\+_', @:) 874dfe04dbfSnaohiro ono call feedkeys(":disas debug \<S-Tab>\<C-B>\"\<CR>", 'xt') 875dfe04dbfSnaohiro ono call assert_match('"disas debug <SNR>\d\+_', @:) 876dfe04dbfSnaohiro ono 87724ebd83eSBram Moolenaar " completion for the :match command 87824ebd83eSBram Moolenaar call feedkeys(":match Search /pat/\<C-A>\<C-B>\"\<CR>", 'xt') 87924ebd83eSBram Moolenaar call assert_equal("\"match Search /pat/\<C-A>", @:) 88024ebd83eSBram Moolenaar 88124ebd83eSBram Moolenaar " completion for the :s command 88224ebd83eSBram Moolenaar call feedkeys(":s/from/to/g\<C-A>\<C-B>\"\<CR>", 'xt') 88324ebd83eSBram Moolenaar call assert_equal("\"s/from/to/g\<C-A>", @:) 88424ebd83eSBram Moolenaar 88524ebd83eSBram Moolenaar " completion for the :dlist command 88624ebd83eSBram Moolenaar call feedkeys(":dlist 10 /pat/ a\<C-A>\<C-B>\"\<CR>", 'xt') 88724ebd83eSBram Moolenaar call assert_equal("\"dlist 10 /pat/ a\<C-A>", @:) 88824ebd83eSBram Moolenaar 88924ebd83eSBram Moolenaar " completion for the :doautocmd command 89024ebd83eSBram Moolenaar call feedkeys(":doautocmd User MyCmd a.c\<C-A>\<C-B>\"\<CR>", 'xt') 89124ebd83eSBram Moolenaar call assert_equal("\"doautocmd User MyCmd a.c\<C-A>", @:) 89224ebd83eSBram Moolenaar 893afe8cf61SBram Moolenaar " completion of autocmd group after comma 894afe8cf61SBram Moolenaar call feedkeys(":doautocmd BufNew,BufEn\<C-A>\<C-B>\"\<CR>", 'xt') 895afe8cf61SBram Moolenaar call assert_equal("\"doautocmd BufNew,BufEnter", @:) 896afe8cf61SBram Moolenaar 897bfb2bb16SDominique Pelle " completion of file name in :doautocmd 898bfb2bb16SDominique Pelle call writefile([], 'Xfile1') 899bfb2bb16SDominique Pelle call writefile([], 'Xfile2') 900bfb2bb16SDominique Pelle call feedkeys(":doautocmd BufEnter Xfi\<C-A>\<C-B>\"\<CR>", 'xt') 901bfb2bb16SDominique Pelle call assert_equal("\"doautocmd BufEnter Xfile1 Xfile2", @:) 902bfb2bb16SDominique Pelle call delete('Xfile1') 903bfb2bb16SDominique Pelle call delete('Xfile2') 904bfb2bb16SDominique Pelle 90524ebd83eSBram Moolenaar " completion for the :augroup command 906b4d82e2aSBram Moolenaar augroup XTest.test 90724ebd83eSBram Moolenaar augroup END 90824ebd83eSBram Moolenaar call feedkeys(":augroup X\<C-A>\<C-B>\"\<CR>", 'xt') 909b4d82e2aSBram Moolenaar call assert_equal("\"augroup XTest.test", @:) 910b4d82e2aSBram Moolenaar call feedkeys(":au X\<C-A>\<C-B>\"\<CR>", 'xt') 911b4d82e2aSBram Moolenaar call assert_equal("\"au XTest.test", @:) 912b4d82e2aSBram Moolenaar augroup! XTest.test 91324ebd83eSBram Moolenaar 91424ebd83eSBram Moolenaar " completion for the :unlet command 91524ebd83eSBram Moolenaar call feedkeys(":unlet one two\<C-A>\<C-B>\"\<CR>", 'xt') 91624ebd83eSBram Moolenaar call assert_equal("\"unlet one two", @:) 91724ebd83eSBram Moolenaar 91821c1a0c2SBram Moolenaar " completion for the :buffer command with curlies 91939c47c31SBram Moolenaar " FIXME: what should happen on MS-Windows? 92039c47c31SBram Moolenaar if !has('win32') 92121c1a0c2SBram Moolenaar edit \{someFile} 92221c1a0c2SBram Moolenaar call feedkeys(":buf someFile\<C-A>\<C-B>\"\<CR>", 'xt') 92321c1a0c2SBram Moolenaar call assert_equal("\"buf {someFile}", @:) 92421c1a0c2SBram Moolenaar bwipe {someFile} 92539c47c31SBram Moolenaar endif 92621c1a0c2SBram Moolenaar 92724ebd83eSBram Moolenaar " completion for the :bdelete command 92824ebd83eSBram Moolenaar call feedkeys(":bdel a b c\<C-A>\<C-B>\"\<CR>", 'xt') 92924ebd83eSBram Moolenaar call assert_equal("\"bdel a b c", @:) 93024ebd83eSBram Moolenaar 93124ebd83eSBram Moolenaar " completion for the :mapclear command 93224ebd83eSBram Moolenaar call feedkeys(":mapclear \<C-A>\<C-B>\"\<CR>", 'xt') 93324ebd83eSBram Moolenaar call assert_equal("\"mapclear <buffer>", @:) 93424ebd83eSBram Moolenaar 93524ebd83eSBram Moolenaar " completion for user defined commands with menu names 93624ebd83eSBram Moolenaar menu Test.foo :ls<CR> 93724ebd83eSBram Moolenaar com -nargs=* -complete=menu MyCmd 93824ebd83eSBram Moolenaar call feedkeys(":MyCmd Te\<C-A>\<C-B>\"\<CR>", 'xt') 93924ebd83eSBram Moolenaar call assert_equal('"MyCmd Test.', @:) 94024ebd83eSBram Moolenaar delcom MyCmd 94124ebd83eSBram Moolenaar unmenu Test 94224ebd83eSBram Moolenaar 94324ebd83eSBram Moolenaar " completion for user defined commands with mappings 94424ebd83eSBram Moolenaar mapclear 94524ebd83eSBram Moolenaar map <F3> :ls<CR> 94624ebd83eSBram Moolenaar com -nargs=* -complete=mapping MyCmd 94724ebd83eSBram Moolenaar call feedkeys(":MyCmd <F\<C-A>\<C-B>\"\<CR>", 'xt') 94824ebd83eSBram Moolenaar call assert_equal('"MyCmd <F3>', @:) 94924ebd83eSBram Moolenaar mapclear 95024ebd83eSBram Moolenaar delcom MyCmd 95124ebd83eSBram Moolenaar 95224ebd83eSBram Moolenaar " completion for :set path= with multiple backslashes 95324ebd83eSBram Moolenaar call feedkeys(":set path=a\\\\\\ b\<C-A>\<C-B>\"\<CR>", 'xt') 95424ebd83eSBram Moolenaar call assert_equal('"set path=a\\\ b', @:) 95524ebd83eSBram Moolenaar 95624ebd83eSBram Moolenaar " completion for :set dir= with a backslash 95724ebd83eSBram Moolenaar call feedkeys(":set dir=a\\ b\<C-A>\<C-B>\"\<CR>", 'xt') 95824ebd83eSBram Moolenaar call assert_equal('"set dir=a\ b', @:) 95924ebd83eSBram Moolenaar 96024ebd83eSBram Moolenaar " completion for the :py3 commands 96124ebd83eSBram Moolenaar call feedkeys(":py3\<C-A>\<C-B>\"\<CR>", 'xt') 96224ebd83eSBram Moolenaar call assert_equal('"py3 py3do py3file', @:) 96324ebd83eSBram Moolenaar 964df749a2bSBram Moolenaar " completion for the :vim9 commands 965df749a2bSBram Moolenaar call feedkeys(":vim9\<C-A>\<C-B>\"\<CR>", 'xt') 966df749a2bSBram Moolenaar call assert_equal('"vim9cmd vim9script', @:) 967df749a2bSBram Moolenaar 96824ebd83eSBram Moolenaar " redir @" is not the start of a comment. So complete after that 96924ebd83eSBram Moolenaar call feedkeys(":redir @\" | cwin\t\<C-B>\"\<CR>", 'xt') 97024ebd83eSBram Moolenaar call assert_equal('"redir @" | cwindow', @:) 97124ebd83eSBram Moolenaar 97224ebd83eSBram Moolenaar " completion after a backtick 97324ebd83eSBram Moolenaar call feedkeys(":e `a1b2c\t\<C-B>\"\<CR>", 'xt') 97424ebd83eSBram Moolenaar call assert_equal('"e `a1b2c', @:) 97524ebd83eSBram Moolenaar 9768dfcce3aSBram Moolenaar " completion for :language command with an invalid argument 9778dfcce3aSBram Moolenaar call feedkeys(":language dummy \t\<C-B>\"\<CR>", 'xt') 9788dfcce3aSBram Moolenaar call assert_equal("\"language dummy \t", @:) 9798dfcce3aSBram Moolenaar 9808dfcce3aSBram Moolenaar " completion for commands after a :global command 9818b633135SBram Moolenaar call feedkeys(":g/a\\xb/clearj\t\<C-B>\"\<CR>", 'xt') 9828b633135SBram Moolenaar call assert_equal('"g/a\xb/clearjumps', @:) 9838dfcce3aSBram Moolenaar 9848dfcce3aSBram Moolenaar " completion with ambiguous user defined commands 9858dfcce3aSBram Moolenaar com TCmd1 echo 'TCmd1' 9868dfcce3aSBram Moolenaar com TCmd2 echo 'TCmd2' 9878dfcce3aSBram Moolenaar call feedkeys(":TCmd \t\<C-B>\"\<CR>", 'xt') 9888dfcce3aSBram Moolenaar call assert_equal('"TCmd ', @:) 9898dfcce3aSBram Moolenaar delcom TCmd1 9908dfcce3aSBram Moolenaar delcom TCmd2 9918dfcce3aSBram Moolenaar 9928dfcce3aSBram Moolenaar " completion after a range followed by a pipe (|) character 9938dfcce3aSBram Moolenaar call feedkeys(":1,10 | chist\t\<C-B>\"\<CR>", 'xt') 9948dfcce3aSBram Moolenaar call assert_equal('"1,10 | chistory', @:) 9959c929713SBram Moolenaar 9969c929713SBram Moolenaar " use <Esc> as the 'wildchar' for completion 9979c929713SBram Moolenaar set wildchar=<Esc> 9989c929713SBram Moolenaar call feedkeys(":g/a\\xb/clearj\<Esc>\<C-B>\"\<CR>", 'xt') 9999c929713SBram Moolenaar call assert_equal('"g/a\xb/clearjumps', @:) 10009c929713SBram Moolenaar " pressing <esc> twice should cancel the command 10019c929713SBram Moolenaar call feedkeys(":chist\<Esc>\<Esc>", 'xt') 10029c929713SBram Moolenaar call assert_equal('"g/a\xb/clearjumps', @:) 10039c929713SBram Moolenaar set wildchar& 100424ebd83eSBram Moolenaarendfunc 100524ebd83eSBram Moolenaar 1006c312b8b8SBram Moolenaarfunc Test_cmdline_write_alternatefile() 1007c312b8b8SBram Moolenaar new 1008c312b8b8SBram Moolenaar call setline('.', ['one', 'two']) 1009c312b8b8SBram Moolenaar f foo.txt 1010c312b8b8SBram Moolenaar new 1011c312b8b8SBram Moolenaar f #-A 1012c312b8b8SBram Moolenaar call assert_equal('foo.txt-A', expand('%')) 1013c312b8b8SBram Moolenaar f #<-B.txt 1014c312b8b8SBram Moolenaar call assert_equal('foo-B.txt', expand('%')) 1015c312b8b8SBram Moolenaar f %< 1016c312b8b8SBram Moolenaar call assert_equal('foo-B', expand('%')) 1017c312b8b8SBram Moolenaar new 1018e2e4075fSBram Moolenaar call assert_fails('f #<', 'E95:') 1019c312b8b8SBram Moolenaar bw! 1020c312b8b8SBram Moolenaar f foo-B.txt 1021c312b8b8SBram Moolenaar f %<-A 1022c312b8b8SBram Moolenaar call assert_equal('foo-B-A', expand('%')) 1023c312b8b8SBram Moolenaar bw! 1024c312b8b8SBram Moolenaar bw! 1025c312b8b8SBram Moolenaarendfunc 1026c312b8b8SBram Moolenaar 1027cbf20fbcSBram Moolenaar" using a leading backslash here 1028cbf20fbcSBram Moolenaarset cpo+=C 1029cbf20fbcSBram Moolenaar 1030cbf20fbcSBram Moolenaarfunc Test_cmdline_search_range() 1031cbf20fbcSBram Moolenaar new 1032cbf20fbcSBram Moolenaar call setline(1, ['a', 'b', 'c', 'd']) 1033cbf20fbcSBram Moolenaar /d 1034cbf20fbcSBram Moolenaar 1,\/s/b/B/ 1035cbf20fbcSBram Moolenaar call assert_equal('B', getline(2)) 1036cbf20fbcSBram Moolenaar 1037cbf20fbcSBram Moolenaar /a 1038cbf20fbcSBram Moolenaar $ 1039cbf20fbcSBram Moolenaar \?,4s/c/C/ 1040cbf20fbcSBram Moolenaar call assert_equal('C', getline(3)) 1041cbf20fbcSBram Moolenaar 1042cbf20fbcSBram Moolenaar call setline(1, ['a', 'b', 'c', 'd']) 1043cbf20fbcSBram Moolenaar %s/c/c/ 1044cbf20fbcSBram Moolenaar 1,\&s/b/B/ 1045cbf20fbcSBram Moolenaar call assert_equal('B', getline(2)) 1046cbf20fbcSBram Moolenaar 1047f0cee197SBram Moolenaar let @/ = 'apple' 10489b7bf9e9SBram Moolenaar call assert_fails('\/print', ['E486:.*apple']) 1049f0cee197SBram Moolenaar 1050cbf20fbcSBram Moolenaar bwipe! 1051cbf20fbcSBram Moolenaarendfunc 1052cbf20fbcSBram Moolenaar 1053f0cee197SBram Moolenaar" Test for the tick mark (') in an excmd range 1054f0cee197SBram Moolenaarfunc Test_tick_mark_in_range() 1055f0cee197SBram Moolenaar " If only the tick is passed as a range and no command is specified, there 1056f0cee197SBram Moolenaar " should not be an error 1057f0cee197SBram Moolenaar call feedkeys(":'\<CR>", 'xt') 1058f0cee197SBram Moolenaar call assert_equal("'", getreg(':')) 1059f0cee197SBram Moolenaar call assert_fails("',print", 'E78:') 1060f0cee197SBram Moolenaarendfunc 1061f0cee197SBram Moolenaar 1062f0cee197SBram Moolenaar" Test for using a line number followed by a search pattern as range 1063f0cee197SBram Moolenaarfunc Test_lnum_and_pattern_as_range() 1064f0cee197SBram Moolenaar new 1065f0cee197SBram Moolenaar call setline(1, ['foo 1', 'foo 2', 'foo 3']) 1066f0cee197SBram Moolenaar let @" = '' 1067f0cee197SBram Moolenaar 2/foo/yank 1068f0cee197SBram Moolenaar call assert_equal("foo 3\n", @") 1069f0cee197SBram Moolenaar call assert_equal(1, line('.')) 1070f0cee197SBram Moolenaar close! 1071f0cee197SBram Moolenaarendfunc 1072f0cee197SBram Moolenaar 107365189a12SBram Moolenaar" Tests for getcmdline(), getcmdpos() and getcmdtype() 107465189a12SBram Moolenaarfunc Check_cmdline(cmdtype) 107565189a12SBram Moolenaar call assert_equal('MyCmd a', getcmdline()) 107665189a12SBram Moolenaar call assert_equal(8, getcmdpos()) 107765189a12SBram Moolenaar call assert_equal(a:cmdtype, getcmdtype()) 107865189a12SBram Moolenaar return '' 107965189a12SBram Moolenaarendfunc 108065189a12SBram Moolenaar 108196e38a86SBram Moolenaarset cpo& 108296e38a86SBram Moolenaar 108365189a12SBram Moolenaarfunc Test_getcmdtype() 108465189a12SBram Moolenaar call feedkeys(":MyCmd a\<C-R>=Check_cmdline(':')\<CR>\<Esc>", "xt") 108565189a12SBram Moolenaar 108665189a12SBram Moolenaar let cmdtype = '' 108765189a12SBram Moolenaar debuggreedy 108865189a12SBram Moolenaar call feedkeys(":debug echo 'test'\<CR>", "t") 108965189a12SBram Moolenaar call feedkeys("let cmdtype = \<C-R>=string(getcmdtype())\<CR>\<CR>", "t") 109065189a12SBram Moolenaar call feedkeys("cont\<CR>", "xt") 109165189a12SBram Moolenaar 0debuggreedy 109265189a12SBram Moolenaar call assert_equal('>', cmdtype) 109365189a12SBram Moolenaar 109465189a12SBram Moolenaar call feedkeys("/MyCmd a\<C-R>=Check_cmdline('/')\<CR>\<Esc>", "xt") 109565189a12SBram Moolenaar call feedkeys("?MyCmd a\<C-R>=Check_cmdline('?')\<CR>\<Esc>", "xt") 109665189a12SBram Moolenaar 109765189a12SBram Moolenaar call feedkeys(":call input('Answer?')\<CR>", "t") 109831eb139bSBram Moolenaar call feedkeys("MyCmd a\<C-R>=Check_cmdline('@')\<CR>\<C-C>", "xt") 109965189a12SBram Moolenaar 110065189a12SBram Moolenaar call feedkeys(":insert\<CR>MyCmd a\<C-R>=Check_cmdline('-')\<CR>\<Esc>", "xt") 110165189a12SBram Moolenaar 110265189a12SBram Moolenaar cnoremap <expr> <F6> Check_cmdline('=') 110365189a12SBram Moolenaar call feedkeys("a\<C-R>=MyCmd a\<F6>\<Esc>\<Esc>", "xt") 110465189a12SBram Moolenaar cunmap <F6> 11058d588cceSBram Moolenaar 11068d588cceSBram Moolenaar call assert_equal('', getcmdline()) 110765189a12SBram Moolenaarendfunc 110865189a12SBram Moolenaar 110981612b7aSBram Moolenaarfunc Test_getcmdwintype() 111021829c5fSBram Moolenaar CheckFeature cmdwin 111121829c5fSBram Moolenaar 111281612b7aSBram Moolenaar call feedkeys("q/:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') 111381612b7aSBram Moolenaar call assert_equal('/', a) 111481612b7aSBram Moolenaar 111581612b7aSBram Moolenaar call feedkeys("q?:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') 111681612b7aSBram Moolenaar call assert_equal('?', a) 111781612b7aSBram Moolenaar 111881612b7aSBram Moolenaar call feedkeys("q::let a = getcmdwintype()\<CR>:q\<CR>", 'x!') 111981612b7aSBram Moolenaar call assert_equal(':', a) 112081612b7aSBram Moolenaar 112181612b7aSBram Moolenaar call feedkeys(":\<C-F>:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') 112281612b7aSBram Moolenaar call assert_equal(':', a) 112381612b7aSBram Moolenaar 112481612b7aSBram Moolenaar call assert_equal('', getcmdwintype()) 112581612b7aSBram Moolenaarendfunc 112681612b7aSBram Moolenaar 112796e38a86SBram Moolenaarfunc Test_getcmdwin_autocmd() 112821829c5fSBram Moolenaar CheckFeature cmdwin 112921829c5fSBram Moolenaar 113096e38a86SBram Moolenaar let s:seq = [] 113196e38a86SBram Moolenaar augroup CmdWin 113296e38a86SBram Moolenaar au WinEnter * call add(s:seq, 'WinEnter ' .. win_getid()) 113396e38a86SBram Moolenaar au WinLeave * call add(s:seq, 'WinLeave ' .. win_getid()) 113496e38a86SBram Moolenaar au BufEnter * call add(s:seq, 'BufEnter ' .. bufnr()) 113596e38a86SBram Moolenaar au BufLeave * call add(s:seq, 'BufLeave ' .. bufnr()) 113696e38a86SBram Moolenaar au CmdWinEnter * call add(s:seq, 'CmdWinEnter ' .. win_getid()) 113796e38a86SBram Moolenaar au CmdWinLeave * call add(s:seq, 'CmdWinLeave ' .. win_getid()) 113896e38a86SBram Moolenaar 113996e38a86SBram Moolenaar let org_winid = win_getid() 114096e38a86SBram Moolenaar let org_bufnr = bufnr() 114196e38a86SBram Moolenaar call feedkeys("q::let a = getcmdwintype()\<CR>:let s:cmd_winid = win_getid()\<CR>:let s:cmd_bufnr = bufnr()\<CR>:q\<CR>", 'x!') 114296e38a86SBram Moolenaar call assert_equal(':', a) 114396e38a86SBram Moolenaar call assert_equal([ 114496e38a86SBram Moolenaar \ 'WinLeave ' .. org_winid, 114596e38a86SBram Moolenaar \ 'WinEnter ' .. s:cmd_winid, 114696e38a86SBram Moolenaar \ 'BufLeave ' .. org_bufnr, 114796e38a86SBram Moolenaar \ 'BufEnter ' .. s:cmd_bufnr, 114896e38a86SBram Moolenaar \ 'CmdWinEnter ' .. s:cmd_winid, 114996e38a86SBram Moolenaar \ 'CmdWinLeave ' .. s:cmd_winid, 115096e38a86SBram Moolenaar \ 'BufLeave ' .. s:cmd_bufnr, 115196e38a86SBram Moolenaar \ 'WinLeave ' .. s:cmd_winid, 115296e38a86SBram Moolenaar \ 'WinEnter ' .. org_winid, 115396e38a86SBram Moolenaar \ 'BufEnter ' .. org_bufnr, 115496e38a86SBram Moolenaar \ ], s:seq) 115596e38a86SBram Moolenaar 115696e38a86SBram Moolenaar au! 115796e38a86SBram Moolenaar augroup END 115896e38a86SBram Moolenaarendfunc 115996e38a86SBram Moolenaar 116052604f24SBram Moolenaarfunc Test_verbosefile() 116152604f24SBram Moolenaar set verbosefile=Xlog 116252604f24SBram Moolenaar echomsg 'foo' 116352604f24SBram Moolenaar echomsg 'bar' 116452604f24SBram Moolenaar set verbosefile= 116552604f24SBram Moolenaar let log = readfile('Xlog') 116652604f24SBram Moolenaar call assert_match("foo\nbar", join(log, "\n")) 116752604f24SBram Moolenaar call delete('Xlog') 1168ad48e6c1SBram Moolenaar call mkdir('Xdir') 11699b7bf9e9SBram Moolenaar call assert_fails('set verbosefile=Xdir', ['E484:.*Xdir', 'E474:']) 1170ad48e6c1SBram Moolenaar call delete('Xdir', 'd') 117152604f24SBram Moolenaarendfunc 117252604f24SBram Moolenaar 11734facea31SBram Moolenaarfunc Test_verbose_option() 11744facea31SBram Moolenaar CheckScreendump 11754facea31SBram Moolenaar 11764facea31SBram Moolenaar let lines =<< trim [SCRIPT] 11774facea31SBram Moolenaar command DoSomething echo 'hello' |set ts=4 |let v = '123' |echo v 11784facea31SBram Moolenaar call feedkeys("\r", 't') " for the hit-enter prompt 11794facea31SBram Moolenaar set verbose=20 11804facea31SBram Moolenaar [SCRIPT] 11814facea31SBram Moolenaar call writefile(lines, 'XTest_verbose') 11824facea31SBram Moolenaar 11834facea31SBram Moolenaar let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12}) 11846a2c5a7dSBram Moolenaar call TermWait(buf, 50) 11854facea31SBram Moolenaar call term_sendkeys(buf, ":DoSomething\<CR>") 11864facea31SBram Moolenaar call VerifyScreenDump(buf, 'Test_verbose_option_1', {}) 11874facea31SBram Moolenaar 11884facea31SBram Moolenaar " clean up 11894facea31SBram Moolenaar call StopVimInTerminal(buf) 11904facea31SBram Moolenaar call delete('XTest_verbose') 11914facea31SBram Moolenaarendfunc 11924facea31SBram Moolenaar 1193ff3be4feSBram Moolenaarfunc Test_setcmdpos() 1194ff3be4feSBram Moolenaar func InsertTextAtPos(text, pos) 1195ff3be4feSBram Moolenaar call assert_equal(0, setcmdpos(a:pos)) 1196ff3be4feSBram Moolenaar return a:text 1197ff3be4feSBram Moolenaar endfunc 1198ff3be4feSBram Moolenaar 1199ff3be4feSBram Moolenaar " setcmdpos() with position in the middle of the command line. 1200ff3be4feSBram Moolenaar call feedkeys(":\"12\<C-R>=InsertTextAtPos('a', 3)\<CR>b\<CR>", 'xt') 1201ff3be4feSBram Moolenaar call assert_equal('"1ab2', @:) 1202ff3be4feSBram Moolenaar 1203ff3be4feSBram Moolenaar call feedkeys(":\"12\<C-R>\<C-R>=InsertTextAtPos('a', 3)\<CR>b\<CR>", 'xt') 1204ff3be4feSBram Moolenaar call assert_equal('"1b2a', @:) 1205ff3be4feSBram Moolenaar 1206ff3be4feSBram Moolenaar " setcmdpos() with position beyond the end of the command line. 1207ff3be4feSBram Moolenaar call feedkeys(":\"12\<C-B>\<C-R>=InsertTextAtPos('a', 10)\<CR>b\<CR>", 'xt') 1208ff3be4feSBram Moolenaar call assert_equal('"12ab', @:) 1209ff3be4feSBram Moolenaar 1210ff3be4feSBram Moolenaar " setcmdpos() returns 1 when not editing the command line. 1211196b4664SBram Moolenaar call assert_equal(1, 3->setcmdpos()) 1212ff3be4feSBram Moolenaarendfunc 1213ff3be4feSBram Moolenaar 1214c0676babSBram Moolenaarfunc Test_cmdline_overstrike() 121530276f2bSBram Moolenaar let encodings = ['latin1', 'utf8'] 1216c0676babSBram Moolenaar let encoding_save = &encoding 1217c0676babSBram Moolenaar 1218c0676babSBram Moolenaar for e in encodings 1219c0676babSBram Moolenaar exe 'set encoding=' . e 1220c0676babSBram Moolenaar 1221c0676babSBram Moolenaar " Test overstrike in the middle of the command line. 1222c0676babSBram Moolenaar call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt') 122359cb041dSBram Moolenaar call assert_equal('"0ab1cd4', @:, e) 1224c0676babSBram Moolenaar 1225c0676babSBram Moolenaar " Test overstrike going beyond end of command line. 1226c0676babSBram Moolenaar call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cdefgh\<enter>", 'xt') 122759cb041dSBram Moolenaar call assert_equal('"0ab1cdefgh', @:, e) 1228c0676babSBram Moolenaar 1229c0676babSBram Moolenaar " Test toggling insert/overstrike a few times. 1230c0676babSBram Moolenaar call feedkeys(":\"01234\<home>\<right>ab\<right>\<insert>cd\<right>\<insert>ef\<enter>", 'xt') 123159cb041dSBram Moolenaar call assert_equal('"ab0cd3ef4', @:, e) 1232c0676babSBram Moolenaar endfor 1233c0676babSBram Moolenaar 1234c0676babSBram Moolenaar " Test overstrike with multi-byte characters. 1235c0676babSBram Moolenaar call feedkeys(":\"テキストエディタ\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt') 123659cb041dSBram Moolenaar call assert_equal('"テabキcdエディタ', @:, e) 1237c0676babSBram Moolenaar 1238c0676babSBram Moolenaar let &encoding = encoding_save 1239c0676babSBram Moolenaarendfunc 1240a046b37cSBram Moolenaar 1241a046b37cSBram Moolenaarfunc Test_cmdwin_bug() 124221829c5fSBram Moolenaar CheckFeature cmdwin 124321829c5fSBram Moolenaar 1244a046b37cSBram Moolenaar let winid = win_getid() 1245a046b37cSBram Moolenaar sp 1246a046b37cSBram Moolenaar try 1247a046b37cSBram Moolenaar call feedkeys("q::call win_gotoid(" .. winid .. ")\<CR>:q\<CR>", 'x!') 1248a046b37cSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E11/ 1249a046b37cSBram Moolenaar endtry 1250a046b37cSBram Moolenaar bw! 1251a046b37cSBram Moolenaarendfunc 125252410575SBram Moolenaar 12531c329c04SBram Moolenaarfunc Test_cmdwin_restore() 125421829c5fSBram Moolenaar CheckFeature cmdwin 12551c329c04SBram Moolenaar CheckScreendump 12561c329c04SBram Moolenaar 12571c329c04SBram Moolenaar let lines =<< trim [SCRIPT] 1258*125ffd21SEgor Zvorykin augroup vimHints | au! | augroup END 12591c329c04SBram Moolenaar call setline(1, range(30)) 12601c329c04SBram Moolenaar 2split 12611c329c04SBram Moolenaar [SCRIPT] 12621c329c04SBram Moolenaar call writefile(lines, 'XTest_restore') 12631c329c04SBram Moolenaar 12641c329c04SBram Moolenaar let buf = RunVimInTerminal('-S XTest_restore', {'rows': 12}) 12656a2c5a7dSBram Moolenaar call TermWait(buf, 50) 12661c329c04SBram Moolenaar call term_sendkeys(buf, "q:") 12671c329c04SBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdwin_restore_1', {}) 12681c329c04SBram Moolenaar 12691c329c04SBram Moolenaar " normal restore 12701c329c04SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 12711c329c04SBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdwin_restore_2', {}) 12721c329c04SBram Moolenaar 12731c329c04SBram Moolenaar " restore after setting 'lines' with one window 12741c329c04SBram Moolenaar call term_sendkeys(buf, ":close\<CR>") 12751c329c04SBram Moolenaar call term_sendkeys(buf, "q:") 12761c329c04SBram Moolenaar call term_sendkeys(buf, ":set lines=18\<CR>") 12771c329c04SBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 12781c329c04SBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdwin_restore_3', {}) 12791c329c04SBram Moolenaar 12801c329c04SBram Moolenaar " clean up 12811c329c04SBram Moolenaar call StopVimInTerminal(buf) 12821c329c04SBram Moolenaar call delete('XTest_restore') 12831c329c04SBram Moolenaarendfunc 12841c329c04SBram Moolenaar 1285e5b4486cSBram Moolenaarfunc Test_cmdwin_no_terminal() 1286e5b4486cSBram Moolenaar CheckFeature cmdwin 1287e5b4486cSBram Moolenaar CheckFeature terminal 12880b496484SBram Moolenaar CheckNotMSWindows 1289e5b4486cSBram Moolenaar 1290e5b4486cSBram Moolenaar let buf = RunVimInTerminal('', {'rows': 12}) 1291e5b4486cSBram Moolenaar call TermWait(buf, 50) 1292e5b4486cSBram Moolenaar call term_sendkeys(buf, ":set cmdheight=2\<CR>") 1293e5b4486cSBram Moolenaar call term_sendkeys(buf, "q:") 1294e5b4486cSBram Moolenaar call term_sendkeys(buf, ":let buf = term_start(['/bin/echo'], #{hidden: 1})\<CR>") 1295e5b4486cSBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdwin_no_terminal', {}) 1296e5b4486cSBram Moolenaar call term_sendkeys(buf, ":q\<CR>") 1297e5b4486cSBram Moolenaar call StopVimInTerminal(buf) 1298e5b4486cSBram Moolenaarendfunc 1299e5b4486cSBram Moolenaar 130052410575SBram Moolenaarfunc Test_buffers_lastused() 130152410575SBram Moolenaar " check that buffers are sorted by time when wildmode has lastused 130252410575SBram Moolenaar call test_settime(1550020000) " middle 130352410575SBram Moolenaar edit bufa 130452410575SBram Moolenaar enew 130552410575SBram Moolenaar call test_settime(1550030000) " newest 130652410575SBram Moolenaar edit bufb 130752410575SBram Moolenaar enew 130852410575SBram Moolenaar call test_settime(1550010000) " oldest 130952410575SBram Moolenaar edit bufc 131052410575SBram Moolenaar enew 131152410575SBram Moolenaar call test_settime(0) 131252410575SBram Moolenaar enew 131352410575SBram Moolenaar 131452410575SBram Moolenaar call assert_equal(['bufa', 'bufb', 'bufc'], 131552410575SBram Moolenaar \ getcompletion('', 'buffer')) 131652410575SBram Moolenaar 131752410575SBram Moolenaar let save_wildmode = &wildmode 131852410575SBram Moolenaar set wildmode=full:lastused 131952410575SBram Moolenaar 132052410575SBram Moolenaar let cap = "\<c-r>=execute('let X=getcmdline()')\<cr>" 132152410575SBram Moolenaar call feedkeys(":b \<tab>" .. cap .. "\<esc>", 'xt') 132252410575SBram Moolenaar call assert_equal('b bufb', X) 132352410575SBram Moolenaar call feedkeys(":b \<tab>\<tab>" .. cap .. "\<esc>", 'xt') 132452410575SBram Moolenaar call assert_equal('b bufa', X) 132552410575SBram Moolenaar call feedkeys(":b \<tab>\<tab>\<tab>" .. cap .. "\<esc>", 'xt') 132652410575SBram Moolenaar call assert_equal('b bufc', X) 132752410575SBram Moolenaar enew 132852410575SBram Moolenaar 132952410575SBram Moolenaar edit other 133052410575SBram Moolenaar call feedkeys(":b \<tab>" .. cap .. "\<esc>", 'xt') 133152410575SBram Moolenaar call assert_equal('b bufb', X) 133252410575SBram Moolenaar call feedkeys(":b \<tab>\<tab>" .. cap .. "\<esc>", 'xt') 133352410575SBram Moolenaar call assert_equal('b bufa', X) 133452410575SBram Moolenaar call feedkeys(":b \<tab>\<tab>\<tab>" .. cap .. "\<esc>", 'xt') 133552410575SBram Moolenaar call assert_equal('b bufc', X) 133652410575SBram Moolenaar enew 133752410575SBram Moolenaar 133852410575SBram Moolenaar let &wildmode = save_wildmode 133952410575SBram Moolenaar 134052410575SBram Moolenaar bwipeout bufa 134152410575SBram Moolenaar bwipeout bufb 134252410575SBram Moolenaar bwipeout bufc 134352410575SBram Moolenaarendfunc 134485db5475SBram Moolenaar 134585db5475SBram Moolenaarfunc Test_cmdwin_feedkeys() 134621829c5fSBram Moolenaar CheckFeature cmdwin 134721829c5fSBram Moolenaar 134885db5475SBram Moolenaar " This should not generate E488 134985db5475SBram Moolenaar call feedkeys("q:\<CR>", 'x') 13501671f448SBram Moolenaar " Using feedkeys with q: only should automatically close the cmd window 13511671f448SBram Moolenaar call feedkeys('q:', 'xt') 13521671f448SBram Moolenaar call assert_equal(1, winnr('$')) 13531671f448SBram Moolenaar call assert_equal('', getcmdwintype()) 135485db5475SBram Moolenaarendfunc 1355309976ecSBram Moolenaar 1356309976ecSBram Moolenaar" Tests for the issues fixed in 7.4.441. 1357309976ecSBram Moolenaar" When 'cedit' is set to Ctrl-C, opening the command window hangs Vim 1358309976ecSBram Moolenaarfunc Test_cmdwin_cedit() 135921829c5fSBram Moolenaar CheckFeature cmdwin 136021829c5fSBram Moolenaar 1361309976ecSBram Moolenaar exe "set cedit=\<C-c>" 1362309976ecSBram Moolenaar normal! : 1363309976ecSBram Moolenaar call assert_equal(1, winnr('$')) 1364309976ecSBram Moolenaar 1365309976ecSBram Moolenaar let g:cmd_wintype = '' 1366309976ecSBram Moolenaar func CmdWinType() 1367309976ecSBram Moolenaar let g:cmd_wintype = getcmdwintype() 136800f3b4e0SBram Moolenaar let g:wintype = win_gettype() 1369309976ecSBram Moolenaar return '' 1370309976ecSBram Moolenaar endfunc 1371309976ecSBram Moolenaar 1372309976ecSBram Moolenaar call feedkeys("\<C-c>a\<C-R>=CmdWinType()\<CR>\<CR>") 1373309976ecSBram Moolenaar echo input('') 1374309976ecSBram Moolenaar call assert_equal('@', g:cmd_wintype) 137500f3b4e0SBram Moolenaar call assert_equal('command', g:wintype) 1376309976ecSBram Moolenaar 1377309976ecSBram Moolenaar set cedit&vim 1378309976ecSBram Moolenaar delfunc CmdWinType 1379309976ecSBram Moolenaarendfunc 1380309976ecSBram Moolenaar 13818d588cceSBram Moolenaar" Test for CmdwinEnter autocmd 13828d588cceSBram Moolenaarfunc Test_cmdwin_autocmd() 138321829c5fSBram Moolenaar CheckFeature cmdwin 138421829c5fSBram Moolenaar 13858d588cceSBram Moolenaar augroup CmdWin 13868d588cceSBram Moolenaar au! 1387b63f3ca6SBram Moolenaar autocmd BufLeave * if &buftype == '' | update | endif 13888d588cceSBram Moolenaar autocmd CmdwinEnter * startinsert 13898d588cceSBram Moolenaar augroup END 13908d588cceSBram Moolenaar 13918d588cceSBram Moolenaar call assert_fails('call feedkeys("q:xyz\<CR>", "xt")', 'E492:') 13928d588cceSBram Moolenaar call assert_equal('xyz', @:) 13938d588cceSBram Moolenaar 13948d588cceSBram Moolenaar augroup CmdWin 13958d588cceSBram Moolenaar au! 13968d588cceSBram Moolenaar augroup END 13978d588cceSBram Moolenaar augroup! CmdWin 13988d588cceSBram Moolenaarendfunc 13998d588cceSBram Moolenaar 1400479950f6SBram Moolenaarfunc Test_cmdlineclear_tabenter() 1401479950f6SBram Moolenaar CheckScreendump 1402479950f6SBram Moolenaar 1403479950f6SBram Moolenaar let lines =<< trim [SCRIPT] 1404479950f6SBram Moolenaar call setline(1, range(30)) 1405479950f6SBram Moolenaar [SCRIPT] 1406479950f6SBram Moolenaar 1407479950f6SBram Moolenaar call writefile(lines, 'XtestCmdlineClearTabenter') 1408479950f6SBram Moolenaar let buf = RunVimInTerminal('-S XtestCmdlineClearTabenter', #{rows: 10}) 14096a2c5a7dSBram Moolenaar call TermWait(buf, 25) 1410479950f6SBram Moolenaar " in one tab make the command line higher with CTRL-W - 1411479950f6SBram Moolenaar call term_sendkeys(buf, ":tabnew\<cr>\<C-w>-\<C-w>-gtgt") 1412479950f6SBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdlineclear_tabenter', {}) 1413479950f6SBram Moolenaar 1414479950f6SBram Moolenaar call StopVimInTerminal(buf) 1415479950f6SBram Moolenaar call delete('XtestCmdlineClearTabenter') 1416479950f6SBram Moolenaarendfunc 1417479950f6SBram Moolenaar 141846aa6f93SYegappan Lakshmanan" Test for expanding special keywords in cmdline 14199f6277bdSBram Moolenaarfunc Test_cmdline_expand_special() 14209f6277bdSBram Moolenaar %bwipe! 1421b8bd2e6eSBram Moolenaar call assert_fails('e #', 'E194:') 14229f6277bdSBram Moolenaar call assert_fails('e <afile>', 'E495:') 14239f6277bdSBram Moolenaar call assert_fails('e <abuf>', 'E496:') 14249f6277bdSBram Moolenaar call assert_fails('e <amatch>', 'E497:') 142546aa6f93SYegappan Lakshmanan 142646aa6f93SYegappan Lakshmanan call writefile([], 'Xfile.cpp') 142746aa6f93SYegappan Lakshmanan call writefile([], 'Xfile.java') 142846aa6f93SYegappan Lakshmanan new Xfile.cpp 142946aa6f93SYegappan Lakshmanan call feedkeys(":e %:r\<C-A>\<C-B>\"\<CR>", 'xt') 143046aa6f93SYegappan Lakshmanan call assert_equal('"e Xfile.cpp Xfile.java', @:) 143146aa6f93SYegappan Lakshmanan close 143246aa6f93SYegappan Lakshmanan call delete('Xfile.cpp') 143346aa6f93SYegappan Lakshmanan call delete('Xfile.java') 14349f6277bdSBram Moolenaarendfunc 14359f6277bdSBram Moolenaar 1436f0cee197SBram Moolenaarfunc Test_cmdwin_jump_to_win() 143721829c5fSBram Moolenaar CheckFeature cmdwin 143821829c5fSBram Moolenaar 1439f0cee197SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>\<C-W>\<CR>", "xt")', 'E11:') 1440f0cee197SBram Moolenaar new 1441f0cee197SBram Moolenaar set modified 14429b7bf9e9SBram Moolenaar call assert_fails('call feedkeys("q/:qall\<CR>", "xt")', ['E37:', 'E162:']) 1443f0cee197SBram Moolenaar close! 1444f0cee197SBram Moolenaar call feedkeys("q/:close\<CR>", "xt") 1445f0cee197SBram Moolenaar call assert_equal(1, winnr('$')) 1446f0cee197SBram Moolenaar call feedkeys("q/:exit\<CR>", "xt") 1447f0cee197SBram Moolenaar call assert_equal(1, winnr('$')) 14488d588cceSBram Moolenaar 14498d588cceSBram Moolenaar " opening command window twice should fail 14508d588cceSBram Moolenaar call assert_beeps('call feedkeys("q:q:\<CR>\<CR>", "xt")') 14518d588cceSBram Moolenaar call assert_equal(1, winnr('$')) 1452f0cee197SBram Moolenaarendfunc 1453f0cee197SBram Moolenaar 14549b7cce28SBram Moolenaarfunc Test_cmdwin_interrupted() 145521829c5fSBram Moolenaar CheckFeature cmdwin 14569b7cce28SBram Moolenaar CheckScreendump 14579b7cce28SBram Moolenaar 14589b7cce28SBram Moolenaar " aborting the :smile output caused the cmdline window to use the current 14599b7cce28SBram Moolenaar " buffer. 14609b7cce28SBram Moolenaar let lines =<< trim [SCRIPT] 14619b7cce28SBram Moolenaar au WinNew * smile 14629b7cce28SBram Moolenaar [SCRIPT] 14639b7cce28SBram Moolenaar call writefile(lines, 'XTest_cmdwin') 14649b7cce28SBram Moolenaar 14659b7cce28SBram Moolenaar let buf = RunVimInTerminal('-S XTest_cmdwin', {'rows': 18}) 14669b7cce28SBram Moolenaar " open cmdwin 14679b7cce28SBram Moolenaar call term_sendkeys(buf, "q:") 1468c82dd860SBram Moolenaar call WaitForAssert({-> assert_match('-- More --', term_getline(buf, 18))}) 14699b7cce28SBram Moolenaar " quit more prompt for :smile command 14709b7cce28SBram Moolenaar call term_sendkeys(buf, "q") 1471c82dd860SBram Moolenaar call WaitForAssert({-> assert_match('^$', term_getline(buf, 18))}) 14729b7cce28SBram Moolenaar " execute a simple command 14739b7cce28SBram Moolenaar call term_sendkeys(buf, "aecho 'done'\<CR>") 14749b7cce28SBram Moolenaar call VerifyScreenDump(buf, 'Test_cmdwin_interrupted', {}) 14759b7cce28SBram Moolenaar 14769b7cce28SBram Moolenaar " clean up 14779b7cce28SBram Moolenaar call StopVimInTerminal(buf) 14789b7cce28SBram Moolenaar call delete('XTest_cmdwin') 14799b7cce28SBram Moolenaarendfunc 14809b7cce28SBram Moolenaar 1481f0cee197SBram Moolenaar" Test for backtick expression in the command line 1482f0cee197SBram Moolenaarfunc Test_cmd_backtick() 1483f0cee197SBram Moolenaar %argd 1484f0cee197SBram Moolenaar argadd `=['a', 'b', 'c']` 1485f0cee197SBram Moolenaar call assert_equal(['a', 'b', 'c'], argv()) 1486f0cee197SBram Moolenaar %argd 1487bfb2bb16SDominique Pelle 1488bfb2bb16SDominique Pelle argadd `echo abc def` 1489bfb2bb16SDominique Pelle call assert_equal(['abc def'], argv()) 1490bfb2bb16SDominique Pelle %argd 1491f0cee197SBram Moolenaarendfunc 1492f0cee197SBram Moolenaar 1493818fc9adSBram Moolenaar" Test for the :! command 1494818fc9adSBram Moolenaarfunc Test_cmd_bang() 14956d91bcb4SBram Moolenaar CheckUnix 1496818fc9adSBram Moolenaar 1497818fc9adSBram Moolenaar let lines =<< trim [SCRIPT] 1498818fc9adSBram Moolenaar " Test for no previous command 1499818fc9adSBram Moolenaar call assert_fails('!!', 'E34:') 1500818fc9adSBram Moolenaar set nomore 1501818fc9adSBram Moolenaar " Test for cmdline expansion with :! 1502818fc9adSBram Moolenaar call setline(1, 'foo!') 1503818fc9adSBram Moolenaar silent !echo <cWORD> > Xfile.out 1504818fc9adSBram Moolenaar call assert_equal(['foo!'], readfile('Xfile.out')) 1505818fc9adSBram Moolenaar " Test for using previous command 1506818fc9adSBram Moolenaar silent !echo \! ! 1507818fc9adSBram Moolenaar call assert_equal(['! echo foo!'], readfile('Xfile.out')) 1508818fc9adSBram Moolenaar call writefile(v:errors, 'Xresult') 1509818fc9adSBram Moolenaar call delete('Xfile.out') 1510818fc9adSBram Moolenaar qall! 1511818fc9adSBram Moolenaar [SCRIPT] 1512818fc9adSBram Moolenaar call writefile(lines, 'Xscript') 1513818fc9adSBram Moolenaar if RunVim([], [], '--clean -S Xscript') 1514818fc9adSBram Moolenaar call assert_equal([], readfile('Xresult')) 1515818fc9adSBram Moolenaar endif 1516818fc9adSBram Moolenaar call delete('Xscript') 1517818fc9adSBram Moolenaar call delete('Xresult') 1518818fc9adSBram Moolenaarendfunc 1519818fc9adSBram Moolenaar 1520e0c3c3d6SBram Moolenaar" Test error: "E135: *Filter* Autocommands must not change current buffer" 1521e0c3c3d6SBram Moolenaarfunc Test_cmd_bang_E135() 1522e0c3c3d6SBram Moolenaar new 1523e0c3c3d6SBram Moolenaar call setline(1, ['a', 'b', 'c', 'd']) 1524e0c3c3d6SBram Moolenaar augroup test_cmd_filter_E135 1525e0c3c3d6SBram Moolenaar au! 1526e0c3c3d6SBram Moolenaar autocmd FilterReadPost * help 1527e0c3c3d6SBram Moolenaar augroup END 1528e0c3c3d6SBram Moolenaar call assert_fails('2,3!echo "x"', 'E135:') 1529e0c3c3d6SBram Moolenaar 1530e0c3c3d6SBram Moolenaar augroup test_cmd_filter_E135 1531e0c3c3d6SBram Moolenaar au! 1532e0c3c3d6SBram Moolenaar augroup END 1533e0c3c3d6SBram Moolenaar %bwipe! 1534e0c3c3d6SBram Moolenaarendfunc 1535e0c3c3d6SBram Moolenaar 15368d588cceSBram Moolenaar" Test for using ~ for home directory in cmdline completion matches 15378d588cceSBram Moolenaarfunc Test_cmdline_expand_home() 15388d588cceSBram Moolenaar call mkdir('Xdir') 15398d588cceSBram Moolenaar call writefile([], 'Xdir/Xfile1') 15408d588cceSBram Moolenaar call writefile([], 'Xdir/Xfile2') 15418d588cceSBram Moolenaar cd Xdir 15428d588cceSBram Moolenaar let save_HOME = $HOME 15438d588cceSBram Moolenaar let $HOME = getcwd() 15448d588cceSBram Moolenaar call feedkeys(":e ~/\<C-A>\<C-B>\"\<CR>", 'xt') 15458d588cceSBram Moolenaar call assert_equal('"e ~/Xfile1 ~/Xfile2', @:) 15468d588cceSBram Moolenaar let $HOME = save_HOME 15478d588cceSBram Moolenaar cd .. 15488d588cceSBram Moolenaar call delete('Xdir', 'rf') 15498d588cceSBram Moolenaarendfunc 15508d588cceSBram Moolenaar 1551578fe947SBram Moolenaar" Test for using CTRL-\ CTRL-G in the command line to go back to normal mode 1552578fe947SBram Moolenaar" or insert mode (when 'insertmode' is set) 1553578fe947SBram Moolenaarfunc Test_cmdline_ctrl_g() 1554578fe947SBram Moolenaar new 1555578fe947SBram Moolenaar call setline(1, 'abc') 1556578fe947SBram Moolenaar call cursor(1, 3) 1557578fe947SBram Moolenaar " If command line is entered from insert mode, using C-\ C-G should back to 1558578fe947SBram Moolenaar " insert mode 1559578fe947SBram Moolenaar call feedkeys("i\<C-O>:\<C-\>\<C-G>xy", 'xt') 1560578fe947SBram Moolenaar call assert_equal('abxyc', getline(1)) 1561578fe947SBram Moolenaar call assert_equal(4, col('.')) 1562578fe947SBram Moolenaar 1563578fe947SBram Moolenaar " If command line is entered in 'insertmode', using C-\ C-G should back to 1564578fe947SBram Moolenaar " 'insertmode' 1565578fe947SBram Moolenaar call feedkeys(":set im\<cr>\<C-L>:\<C-\>\<C-G>12\<C-L>:set noim\<cr>", 'xt') 1566578fe947SBram Moolenaar call assert_equal('ab12xyc', getline(1)) 1567578fe947SBram Moolenaar close! 1568578fe947SBram Moolenaarendfunc 1569578fe947SBram Moolenaar 1570578fe947SBram Moolenaar" Test for 'wildmode' 1571578fe947SBram Moolenaarfunc Test_wildmode() 1572578fe947SBram Moolenaar func T(a, c, p) 1573578fe947SBram Moolenaar return "oneA\noneB\noneC" 1574578fe947SBram Moolenaar endfunc 1575578fe947SBram Moolenaar command -nargs=1 -complete=custom,T MyCmd 1576578fe947SBram Moolenaar 1577578fe947SBram Moolenaar func SaveScreenLine() 157824ebd83eSBram Moolenaar let g:Sline = Screenline(&lines - 1) 1579578fe947SBram Moolenaar return '' 1580578fe947SBram Moolenaar endfunc 1581578fe947SBram Moolenaar cnoremap <expr> <F2> SaveScreenLine() 1582578fe947SBram Moolenaar 1583578fe947SBram Moolenaar set nowildmenu 1584578fe947SBram Moolenaar set wildmode=full,list 1585578fe947SBram Moolenaar let g:Sline = '' 1586578fe947SBram Moolenaar call feedkeys(":MyCmd \t\t\<F2>\<C-B>\"\<CR>", 'xt') 1587578fe947SBram Moolenaar call assert_equal('oneA oneB oneC', g:Sline) 1588578fe947SBram Moolenaar call assert_equal('"MyCmd oneA', @:) 1589578fe947SBram Moolenaar 1590578fe947SBram Moolenaar set wildmode=longest,full 1591578fe947SBram Moolenaar call feedkeys(":MyCmd o\t\<C-B>\"\<CR>", 'xt') 1592578fe947SBram Moolenaar call assert_equal('"MyCmd one', @:) 1593578fe947SBram Moolenaar call feedkeys(":MyCmd o\t\t\t\t\<C-B>\"\<CR>", 'xt') 1594578fe947SBram Moolenaar call assert_equal('"MyCmd oneC', @:) 1595578fe947SBram Moolenaar 1596578fe947SBram Moolenaar set wildmode=longest 1597578fe947SBram Moolenaar call feedkeys(":MyCmd one\t\t\<C-B>\"\<CR>", 'xt') 1598578fe947SBram Moolenaar call assert_equal('"MyCmd one', @:) 1599578fe947SBram Moolenaar 1600578fe947SBram Moolenaar set wildmode=list:longest 1601578fe947SBram Moolenaar let g:Sline = '' 1602578fe947SBram Moolenaar call feedkeys(":MyCmd \t\<F2>\<C-B>\"\<CR>", 'xt') 1603578fe947SBram Moolenaar call assert_equal('oneA oneB oneC', g:Sline) 1604578fe947SBram Moolenaar call assert_equal('"MyCmd one', @:) 1605578fe947SBram Moolenaar 1606578fe947SBram Moolenaar set wildmode="" 1607578fe947SBram Moolenaar call feedkeys(":MyCmd \t\t\<C-B>\"\<CR>", 'xt') 1608578fe947SBram Moolenaar call assert_equal('"MyCmd oneA', @:) 1609578fe947SBram Moolenaar 161024ebd83eSBram Moolenaar " Test for wildmode=longest with 'fileignorecase' set 161124ebd83eSBram Moolenaar set wildmode=longest 161224ebd83eSBram Moolenaar set fileignorecase 16138dfcce3aSBram Moolenaar argadd AAA AAAA AAAAA 16148dfcce3aSBram Moolenaar call feedkeys(":buffer a\t\<C-B>\"\<CR>", 'xt') 16158dfcce3aSBram Moolenaar call assert_equal('"buffer AAA', @:) 161624ebd83eSBram Moolenaar set fileignorecase& 161724ebd83eSBram Moolenaar 161824ebd83eSBram Moolenaar " Test for listing files with wildmode=list 161924ebd83eSBram Moolenaar set wildmode=list 162024ebd83eSBram Moolenaar let g:Sline = '' 162124ebd83eSBram Moolenaar call feedkeys(":b A\t\t\<F2>\<C-B>\"\<CR>", 'xt') 16228dfcce3aSBram Moolenaar call assert_equal('AAA AAAA AAAAA', g:Sline) 162324ebd83eSBram Moolenaar call assert_equal('"b A', @:) 162424ebd83eSBram Moolenaar 162524ebd83eSBram Moolenaar %argdelete 1626578fe947SBram Moolenaar delcommand MyCmd 1627578fe947SBram Moolenaar delfunc T 1628578fe947SBram Moolenaar delfunc SaveScreenLine 1629578fe947SBram Moolenaar cunmap <F2> 1630578fe947SBram Moolenaar set wildmode& 163124ebd83eSBram Moolenaar %bwipe! 1632578fe947SBram Moolenaarendfunc 1633578fe947SBram Moolenaar 1634578fe947SBram Moolenaar" Test for interrupting the command-line completion 1635578fe947SBram Moolenaarfunc Test_interrupt_compl() 1636578fe947SBram Moolenaar func F(lead, cmdl, p) 1637578fe947SBram Moolenaar if a:lead =~ 'tw' 1638578fe947SBram Moolenaar call interrupt() 1639578fe947SBram Moolenaar return 1640578fe947SBram Moolenaar endif 1641578fe947SBram Moolenaar return "one\ntwo\nthree" 1642578fe947SBram Moolenaar endfunc 1643578fe947SBram Moolenaar command -nargs=1 -complete=custom,F Tcmd 1644578fe947SBram Moolenaar 1645578fe947SBram Moolenaar set nowildmenu 1646578fe947SBram Moolenaar set wildmode=full 1647578fe947SBram Moolenaar let interrupted = 0 1648578fe947SBram Moolenaar try 1649578fe947SBram Moolenaar call feedkeys(":Tcmd tw\<Tab>\<C-B>\"\<CR>", 'xt') 1650578fe947SBram Moolenaar catch /^Vim:Interrupt$/ 1651578fe947SBram Moolenaar let interrupted = 1 1652578fe947SBram Moolenaar endtry 1653578fe947SBram Moolenaar call assert_equal(1, interrupted) 1654578fe947SBram Moolenaar 1655578fe947SBram Moolenaar delcommand Tcmd 1656578fe947SBram Moolenaar delfunc F 1657578fe947SBram Moolenaar set wildmode& 1658578fe947SBram Moolenaarendfunc 1659578fe947SBram Moolenaar 1660d30ae2fcSBram Moolenaar" Test for moving the cursor on the : command line 1661578fe947SBram Moolenaarfunc Test_cmdline_edit() 1662d30ae2fcSBram Moolenaar let str = ":one two\<C-U>" 1663d30ae2fcSBram Moolenaar let str ..= "one two\<C-W>\<C-W>" 166491ffc8a5SBram Moolenaar let str ..= "four\<BS>\<C-H>\<Del>\<kDel>" 1665d30ae2fcSBram Moolenaar let str ..= "\<Left>five\<Right>" 1666d30ae2fcSBram Moolenaar let str ..= "\<Home>two " 1667d30ae2fcSBram Moolenaar let str ..= "\<C-Left>one " 1668d30ae2fcSBram Moolenaar let str ..= "\<C-Right> three" 1669d30ae2fcSBram Moolenaar let str ..= "\<End>\<S-Left>four " 1670d30ae2fcSBram Moolenaar let str ..= "\<S-Right> six" 1671d30ae2fcSBram Moolenaar let str ..= "\<C-B>\"\<C-E> seven\<CR>" 1672d30ae2fcSBram Moolenaar call feedkeys(str, 'xt') 1673d30ae2fcSBram Moolenaar call assert_equal("\"one two three four five six seven", @:) 1674d30ae2fcSBram Moolenaarendfunc 1675d30ae2fcSBram Moolenaar 1676d30ae2fcSBram Moolenaar" Test for moving the cursor on the / command line in 'rightleft' mode 1677d30ae2fcSBram Moolenaarfunc Test_cmdline_edit_rightleft() 1678d30ae2fcSBram Moolenaar CheckFeature rightleft 1679d30ae2fcSBram Moolenaar set rightleft 1680d30ae2fcSBram Moolenaar set rightleftcmd=search 1681d30ae2fcSBram Moolenaar let str = "/one two\<C-U>" 1682d30ae2fcSBram Moolenaar let str ..= "one two\<C-W>\<C-W>" 168391ffc8a5SBram Moolenaar let str ..= "four\<BS>\<C-H>\<Del>\<kDel>" 1684d30ae2fcSBram Moolenaar let str ..= "\<Right>five\<Left>" 1685d30ae2fcSBram Moolenaar let str ..= "\<Home>two " 1686d30ae2fcSBram Moolenaar let str ..= "\<C-Right>one " 1687d30ae2fcSBram Moolenaar let str ..= "\<C-Left> three" 1688d30ae2fcSBram Moolenaar let str ..= "\<End>\<S-Right>four " 1689d30ae2fcSBram Moolenaar let str ..= "\<S-Left> six" 1690d30ae2fcSBram Moolenaar let str ..= "\<C-B>\"\<C-E> seven\<CR>" 1691d30ae2fcSBram Moolenaar call assert_fails("call feedkeys(str, 'xt')", 'E486:') 1692d30ae2fcSBram Moolenaar call assert_equal("\"one two three four five six seven", @/) 1693d30ae2fcSBram Moolenaar set rightleftcmd& 1694d30ae2fcSBram Moolenaar set rightleft& 1695d30ae2fcSBram Moolenaarendfunc 1696d30ae2fcSBram Moolenaar 1697d30ae2fcSBram Moolenaar" Test for using <C-\>e in the command line to evaluate an expression 1698d30ae2fcSBram Moolenaarfunc Test_cmdline_expr() 1699d30ae2fcSBram Moolenaar " Evaluate an expression from the beginning of a command line 1700d30ae2fcSBram Moolenaar call feedkeys(":abc\<C-B>\<C-\>e\"\\\"hello\"\<CR>\<CR>", 'xt') 1701d30ae2fcSBram Moolenaar call assert_equal('"hello', @:) 1702d30ae2fcSBram Moolenaar 1703d30ae2fcSBram Moolenaar " Use an invalid expression for <C-\>e 1704d30ae2fcSBram Moolenaar call assert_beeps('call feedkeys(":\<C-\>einvalid\<CR>", "tx")') 1705d30ae2fcSBram Moolenaar 1706d30ae2fcSBram Moolenaar " Insert literal <CTRL-\> in the command line 1707d30ae2fcSBram Moolenaar call feedkeys(":\"e \<C-\>\<C-Y>\<CR>", 'xt') 1708d30ae2fcSBram Moolenaar call assert_equal("\"e \<C-\>\<C-Y>", @:) 1709578fe947SBram Moolenaarendfunc 1710578fe947SBram Moolenaar 17110546d7dfSBram Moolenaar" Test for 'imcmdline' and 'imsearch' 17120546d7dfSBram Moolenaar" This test doesn't actually test the input method functionality. 17130546d7dfSBram Moolenaarfunc Test_cmdline_inputmethod() 17140546d7dfSBram Moolenaar new 17150546d7dfSBram Moolenaar call setline(1, ['', 'abc', '']) 17160546d7dfSBram Moolenaar set imcmdline 17170546d7dfSBram Moolenaar 17180546d7dfSBram Moolenaar call feedkeys(":\"abc\<CR>", 'xt') 17190546d7dfSBram Moolenaar call assert_equal("\"abc", @:) 17200546d7dfSBram Moolenaar call feedkeys(":\"\<C-^>abc\<C-^>\<CR>", 'xt') 17210546d7dfSBram Moolenaar call assert_equal("\"abc", @:) 17220546d7dfSBram Moolenaar call feedkeys("/abc\<CR>", 'xt') 17230546d7dfSBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 17240546d7dfSBram Moolenaar call feedkeys("/\<C-^>abc\<C-^>\<CR>", 'xt') 17250546d7dfSBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 17260546d7dfSBram Moolenaar 17270546d7dfSBram Moolenaar set imsearch=2 17280546d7dfSBram Moolenaar call cursor(1, 1) 17290546d7dfSBram Moolenaar call feedkeys("/abc\<CR>", 'xt') 17300546d7dfSBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 17310546d7dfSBram Moolenaar call cursor(1, 1) 17320546d7dfSBram Moolenaar call feedkeys("/\<C-^>abc\<C-^>\<CR>", 'xt') 17330546d7dfSBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 17340546d7dfSBram Moolenaar set imdisable 17350546d7dfSBram Moolenaar call feedkeys("/\<C-^>abc\<C-^>\<CR>", 'xt') 17360546d7dfSBram Moolenaar call assert_equal([2, 1], [line('.'), col('.')]) 17370546d7dfSBram Moolenaar set imdisable& 17380546d7dfSBram Moolenaar set imsearch& 17390546d7dfSBram Moolenaar 17400546d7dfSBram Moolenaar set imcmdline& 17410546d7dfSBram Moolenaar %bwipe! 17420546d7dfSBram Moolenaarendfunc 17430546d7dfSBram Moolenaar 174491ffc8a5SBram Moolenaar" Test for recursively getting multiple command line inputs 174591ffc8a5SBram Moolenaarfunc Test_cmdwin_multi_input() 174621829c5fSBram Moolenaar CheckFeature cmdwin 174721829c5fSBram Moolenaar 174891ffc8a5SBram Moolenaar call feedkeys(":\<C-R>=input('P: ')\<CR>\"cyan\<CR>\<CR>", 'xt') 174991ffc8a5SBram Moolenaar call assert_equal('"cyan', @:) 175091ffc8a5SBram Moolenaarendfunc 175191ffc8a5SBram Moolenaar 175291ffc8a5SBram Moolenaar" Test for using CTRL-_ in the command line with 'allowrevins' 175391ffc8a5SBram Moolenaarfunc Test_cmdline_revins() 175491ffc8a5SBram Moolenaar CheckNotMSWindows 175591ffc8a5SBram Moolenaar CheckFeature rightleft 175691ffc8a5SBram Moolenaar call feedkeys(":\"abc\<c-_>\<cr>", 'xt') 175791ffc8a5SBram Moolenaar call assert_equal("\"abc\<c-_>", @:) 175891ffc8a5SBram Moolenaar set allowrevins 175991ffc8a5SBram Moolenaar call feedkeys(":\"abc\<c-_>xyz\<c-_>\<CR>", 'xt') 176091ffc8a5SBram Moolenaar call assert_equal('"abcñèæ', @:) 176191ffc8a5SBram Moolenaar set allowrevins& 176291ffc8a5SBram Moolenaarendfunc 176391ffc8a5SBram Moolenaar 176491ffc8a5SBram Moolenaar" Test for typing UTF-8 composing characters in the command line 176591ffc8a5SBram Moolenaarfunc Test_cmdline_composing_chars() 176691ffc8a5SBram Moolenaar call feedkeys(":\"\<C-V>u3046\<C-V>u3099\<CR>", 'xt') 176791ffc8a5SBram Moolenaar call assert_equal('"ゔ', @:) 176891ffc8a5SBram Moolenaarendfunc 176991ffc8a5SBram Moolenaar 1770f5f1e10dSBram Moolenaar" Test for normal mode commands not supported in the cmd window 1771f5f1e10dSBram Moolenaarfunc Test_cmdwin_blocked_commands() 177221829c5fSBram Moolenaar CheckFeature cmdwin 177321829c5fSBram Moolenaar 1774f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:\<C-T>\<CR>", "xt")', 'E11:') 1775f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:\<C-]>\<CR>", "xt")', 'E11:') 1776f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:\<C-^>\<CR>", "xt")', 'E11:') 1777f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:Q\<CR>", "xt")', 'E11:') 1778f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:Z\<CR>", "xt")', 'E11:') 1779f5f1e10dSBram Moolenaar call assert_fails('call feedkeys("q:\<F1>\<CR>", "xt")', 'E11:') 1780951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>s\<CR>", "xt")', 'E11:') 1781951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>v\<CR>", "xt")', 'E11:') 1782951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>^\<CR>", "xt")', 'E11:') 1783951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>n\<CR>", "xt")', 'E11:') 1784951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>z\<CR>", "xt")', 'E11:') 1785951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>o\<CR>", "xt")', 'E11:') 1786951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>w\<CR>", "xt")', 'E11:') 1787951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>j\<CR>", "xt")', 'E11:') 1788951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>k\<CR>", "xt")', 'E11:') 1789951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>h\<CR>", "xt")', 'E11:') 1790951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>l\<CR>", "xt")', 'E11:') 1791951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>T\<CR>", "xt")', 'E11:') 1792951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>x\<CR>", "xt")', 'E11:') 1793951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>r\<CR>", "xt")', 'E11:') 1794951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>R\<CR>", "xt")', 'E11:') 1795951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>K\<CR>", "xt")', 'E11:') 1796951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>}\<CR>", "xt")', 'E11:') 1797951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>]\<CR>", "xt")', 'E11:') 1798951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>f\<CR>", "xt")', 'E11:') 1799951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>d\<CR>", "xt")', 'E11:') 1800951a2fb1SBram Moolenaar call assert_fails('call feedkeys("q:\<C-W>g\<CR>", "xt")', 'E11:') 1801f5f1e10dSBram Moolenaarendfunc 1802f5f1e10dSBram Moolenaar 1803ca68ae13SBram Moolenaar" Close the Cmd-line window in insert mode using CTRL-C 1804ca68ae13SBram Moolenaarfunc Test_cmdwin_insert_mode_close() 180521829c5fSBram Moolenaar CheckFeature cmdwin 180621829c5fSBram Moolenaar 1807ca68ae13SBram Moolenaar %bw! 1808ca68ae13SBram Moolenaar let s = '' 1809ca68ae13SBram Moolenaar exe "normal q:a\<C-C>let s='Hello'\<CR>" 1810ca68ae13SBram Moolenaar call assert_equal('Hello', s) 1811ca68ae13SBram Moolenaar call assert_equal(1, winnr('$')) 1812ca68ae13SBram Moolenaarendfunc 1813ca68ae13SBram Moolenaar 18140e71704bSBram Moolenaar" test that ";" works to find a match at the start of the first line 18150e71704bSBram Moolenaarfunc Test_zero_line_search() 18160e71704bSBram Moolenaar new 18170e71704bSBram Moolenaar call setline(1, ["1, pattern", "2, ", "3, pattern"]) 18180e71704bSBram Moolenaar call cursor(1,1) 18190e71704bSBram Moolenaar 0;/pattern/d 18200e71704bSBram Moolenaar call assert_equal(["2, ", "3, pattern"], getline(1,'$')) 18210e71704bSBram Moolenaar q! 18220e71704bSBram Moolenaarendfunc 18230e71704bSBram Moolenaar 1824c8cb8830SBram Moolenaarfunc Test_read_shellcmd() 1825c8cb8830SBram Moolenaar CheckUnix 1826c8cb8830SBram Moolenaar if executable('ls') 1827c8cb8830SBram Moolenaar " There should be ls in the $PATH 1828c8cb8830SBram Moolenaar call feedkeys(":r! l\<c-a>\<c-b>\"\<cr>", 'tx') 1829c8cb8830SBram Moolenaar call assert_match('^"r! .*\<ls\>', @:) 1830c8cb8830SBram Moolenaar endif 1831c8cb8830SBram Moolenaar 1832c8cb8830SBram Moolenaar if executable('rm') 1833c8cb8830SBram Moolenaar call feedkeys(":r! ++enc=utf-8 r\<c-a>\<c-b>\"\<cr>", 'tx') 1834c8cb8830SBram Moolenaar call assert_notmatch('^"r!.*\<runtest.vim\>', @:) 1835c8cb8830SBram Moolenaar call assert_match('^"r!.*\<rm\>', @:) 1836743d0620SBram Moolenaar 1837743d0620SBram Moolenaar call feedkeys(":r ++enc=utf-8 !rm\<c-a>\<c-b>\"\<cr>", 'tx') 1838743d0620SBram Moolenaar call assert_notmatch('^"r.*\<runtest.vim\>', @:) 1839743d0620SBram Moolenaar call assert_match('^"r ++enc\S\+ !.*\<rm\>', @:) 1840c8cb8830SBram Moolenaar endif 1841c8cb8830SBram Moolenaarendfunc 1842c8cb8830SBram Moolenaar 18434b2ce129SBram Moolenaar" Test for going up and down the directory tree using 'wildmenu' 18444b2ce129SBram Moolenaarfunc Test_wildmenu_dirstack() 18454b2ce129SBram Moolenaar CheckUnix 18464b2ce129SBram Moolenaar %bw! 18474b2ce129SBram Moolenaar call mkdir('Xdir1/dir2/dir3', 'p') 18484b2ce129SBram Moolenaar call writefile([], 'Xdir1/file1_1.txt') 18494b2ce129SBram Moolenaar call writefile([], 'Xdir1/file1_2.txt') 18504b2ce129SBram Moolenaar call writefile([], 'Xdir1/dir2/file2_1.txt') 18514b2ce129SBram Moolenaar call writefile([], 'Xdir1/dir2/file2_2.txt') 18524b2ce129SBram Moolenaar call writefile([], 'Xdir1/dir2/dir3/file3_1.txt') 18534b2ce129SBram Moolenaar call writefile([], 'Xdir1/dir2/dir3/file3_2.txt') 18544b2ce129SBram Moolenaar cd Xdir1/dir2/dir3 18554b2ce129SBram Moolenaar set wildmenu 18564b2ce129SBram Moolenaar 18574b2ce129SBram Moolenaar call feedkeys(":e \<Tab>\<C-B>\"\<CR>", 'xt') 18584b2ce129SBram Moolenaar call assert_equal('"e file3_1.txt', @:) 18594b2ce129SBram Moolenaar call feedkeys(":e \<Tab>\<Up>\<C-B>\"\<CR>", 'xt') 18604b2ce129SBram Moolenaar call assert_equal('"e ../dir3/', @:) 18614b2ce129SBram Moolenaar call feedkeys(":e \<Tab>\<Up>\<Up>\<C-B>\"\<CR>", 'xt') 18624b2ce129SBram Moolenaar call assert_equal('"e ../../dir2/', @:) 18634b2ce129SBram Moolenaar call feedkeys(":e \<Tab>\<Up>\<Up>\<Down>\<C-B>\"\<CR>", 'xt') 18644b2ce129SBram Moolenaar call assert_equal('"e ../../dir2/dir3/', @:) 18654b2ce129SBram Moolenaar call feedkeys(":e \<Tab>\<Up>\<Up>\<Down>\<Down>\<C-B>\"\<CR>", 'xt') 18664b2ce129SBram Moolenaar call assert_equal('"e ../../dir2/dir3/file3_1.txt', @:) 18674b2ce129SBram Moolenaar 18684b2ce129SBram Moolenaar cd - 18694b2ce129SBram Moolenaar call delete('Xdir1', 'rf') 18704b2ce129SBram Moolenaar set wildmenu& 18714b2ce129SBram Moolenaarendfunc 18724b2ce129SBram Moolenaar 187371c6f7a6Sobcat" Test for recalling newer or older cmdline from history with <Up>, <Down>, 187471c6f7a6Sobcat" <S-Up>, <S-Down>, <PageUp>, <PageDown>, <C-p>, or <C-n>. 187571c6f7a6Sobcatfunc Test_recalling_cmdline() 187671c6f7a6Sobcat CheckFeature cmdline_hist 187771c6f7a6Sobcat 187871c6f7a6Sobcat let g:cmdlines = [] 187971c6f7a6Sobcat cnoremap <Plug>(save-cmdline) <Cmd>let g:cmdlines += [getcmdline()]<CR> 188071c6f7a6Sobcat 188171c6f7a6Sobcat let histories = [ 188271c6f7a6Sobcat \ {'name': 'cmd', 'enter': ':', 'exit': "\<Esc>"}, 188371c6f7a6Sobcat \ {'name': 'search', 'enter': '/', 'exit': "\<Esc>"}, 188471c6f7a6Sobcat \ {'name': 'expr', 'enter': ":\<C-r>=", 'exit': "\<Esc>\<Esc>"}, 188571c6f7a6Sobcat \ {'name': 'input', 'enter': ":call input('')\<CR>", 'exit': "\<CR>"}, 188671c6f7a6Sobcat "\ TODO: {'name': 'debug', ...} 188771c6f7a6Sobcat \] 188871c6f7a6Sobcat let keypairs = [ 188971c6f7a6Sobcat \ {'older': "\<Up>", 'newer': "\<Down>", 'prefixmatch': v:true}, 189071c6f7a6Sobcat \ {'older': "\<S-Up>", 'newer': "\<S-Down>", 'prefixmatch': v:false}, 189171c6f7a6Sobcat \ {'older': "\<PageUp>", 'newer': "\<PageDown>", 'prefixmatch': v:false}, 189271c6f7a6Sobcat \ {'older': "\<C-p>", 'newer': "\<C-n>", 'prefixmatch': v:false}, 189371c6f7a6Sobcat \] 189471c6f7a6Sobcat let prefix = 'vi' 189571c6f7a6Sobcat for h in histories 189671c6f7a6Sobcat call histadd(h.name, 'vim') 189771c6f7a6Sobcat call histadd(h.name, 'virtue') 189871c6f7a6Sobcat call histadd(h.name, 'Virgo') 189971c6f7a6Sobcat call histadd(h.name, 'vogue') 190071c6f7a6Sobcat call histadd(h.name, 'emacs') 190171c6f7a6Sobcat for k in keypairs 190271c6f7a6Sobcat let g:cmdlines = [] 190371c6f7a6Sobcat let keyseqs = h.enter 190471c6f7a6Sobcat \ .. prefix 190571c6f7a6Sobcat \ .. repeat(k.older .. "\<Plug>(save-cmdline)", 2) 190671c6f7a6Sobcat \ .. repeat(k.newer .. "\<Plug>(save-cmdline)", 2) 190771c6f7a6Sobcat \ .. h.exit 190871c6f7a6Sobcat call feedkeys(keyseqs, 'xt') 190971c6f7a6Sobcat call histdel(h.name, -1) " delete the history added by feedkeys above 191071c6f7a6Sobcat let expect = k.prefixmatch 191171c6f7a6Sobcat \ ? ['virtue', 'vim', 'virtue', prefix] 191271c6f7a6Sobcat \ : ['emacs', 'vogue', 'emacs', prefix] 191371c6f7a6Sobcat call assert_equal(expect, g:cmdlines) 191471c6f7a6Sobcat endfor 191571c6f7a6Sobcat endfor 191671c6f7a6Sobcat 191771c6f7a6Sobcat unlet g:cmdlines 191871c6f7a6Sobcat cunmap <Plug>(save-cmdline) 191971c6f7a6Sobcatendfunc 192071c6f7a6Sobcat 1921847fe7d7SBram Moolenaarfunc Test_cmd_map_cmdlineChanged() 1922847fe7d7SBram Moolenaar let g:log = [] 1923847fe7d7SBram Moolenaar cnoremap <F1> l<Cmd><CR>s 1924847fe7d7SBram Moolenaar augroup test 1925847fe7d7SBram Moolenaar autocmd! 1926847fe7d7SBram Moolenaar autocmd CmdlineChanged : let g:log += [getcmdline()] 1927847fe7d7SBram Moolenaar augroup END 1928847fe7d7SBram Moolenaar 1929847fe7d7SBram Moolenaar call feedkeys(":\<F1>\<CR>", 'xt') 1930847fe7d7SBram Moolenaar call assert_equal(['l', 'ls'], g:log) 1931847fe7d7SBram Moolenaar 1932796139aeSBram Moolenaar let @b = 'b' 1933796139aeSBram Moolenaar cnoremap <F1> a<C-R>b 1934796139aeSBram Moolenaar let g:log = [] 1935796139aeSBram Moolenaar call feedkeys(":\<F1>\<CR>", 'xt') 1936796139aeSBram Moolenaar call assert_equal(['a', 'ab'], g:log) 1937796139aeSBram Moolenaar 1938847fe7d7SBram Moolenaar unlet g:log 1939847fe7d7SBram Moolenaar cunmap <F1> 1940847fe7d7SBram Moolenaar augroup test 1941847fe7d7SBram Moolenaar autocmd! 1942847fe7d7SBram Moolenaar augroup END 1943847fe7d7SBram Moolenaarendfunc 1944847fe7d7SBram Moolenaar 194546aa6f93SYegappan Lakshmanan" Test for the 'suffixes' option 194646aa6f93SYegappan Lakshmananfunc Test_suffixes_opt() 194746aa6f93SYegappan Lakshmanan call writefile([], 'Xfile') 194846aa6f93SYegappan Lakshmanan call writefile([], 'Xfile.c') 194946aa6f93SYegappan Lakshmanan call writefile([], 'Xfile.o') 195046aa6f93SYegappan Lakshmanan set suffixes= 195146aa6f93SYegappan Lakshmanan call feedkeys(":e Xfi*\<C-A>\<C-B>\"\<CR>", 'xt') 195246aa6f93SYegappan Lakshmanan call assert_equal('"e Xfile Xfile.c Xfile.o', @:) 195346aa6f93SYegappan Lakshmanan set suffixes=.c 195446aa6f93SYegappan Lakshmanan call feedkeys(":e Xfi*\<C-A>\<C-B>\"\<CR>", 'xt') 195546aa6f93SYegappan Lakshmanan call assert_equal('"e Xfile Xfile.o Xfile.c', @:) 195646aa6f93SYegappan Lakshmanan set suffixes=,, 195746aa6f93SYegappan Lakshmanan call feedkeys(":e Xfi*\<C-A>\<C-B>\"\<CR>", 'xt') 195846aa6f93SYegappan Lakshmanan call assert_equal('"e Xfile.c Xfile.o Xfile', @:) 195946aa6f93SYegappan Lakshmanan set suffixes& 196046aa6f93SYegappan Lakshmanan call delete('Xfile') 196146aa6f93SYegappan Lakshmanan call delete('Xfile.c') 196246aa6f93SYegappan Lakshmanan call delete('Xfile.o') 196346aa6f93SYegappan Lakshmananendfunc 1964847fe7d7SBram Moolenaar 1965309976ecSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1966