163a60dedSBram Moolenaar" Tests for user defined commands 263a60dedSBram Moolenaar 3cc7eb2aaSBram Moolenaarsource vim9.vim 4cc7eb2aaSBram Moolenaar 563a60dedSBram Moolenaar" Test for <mods> in user defined commands 663a60dedSBram Moolenaarfunction Test_cmdmods() 763a60dedSBram Moolenaar let g:mods = '' 863a60dedSBram Moolenaar 97a1637f4SBram Moolenaar command! -nargs=* MyCmd let g:mods = '<mods>' 1063a60dedSBram Moolenaar 1163a60dedSBram Moolenaar MyCmd 127a1637f4SBram Moolenaar call assert_equal('', g:mods) 1363a60dedSBram Moolenaar aboveleft MyCmd 147a1637f4SBram Moolenaar call assert_equal('aboveleft', g:mods) 153bcfca3aSBram Moolenaar abo MyCmd 167a1637f4SBram Moolenaar call assert_equal('aboveleft', g:mods) 1763a60dedSBram Moolenaar belowright MyCmd 187a1637f4SBram Moolenaar call assert_equal('belowright', g:mods) 193bcfca3aSBram Moolenaar bel MyCmd 207a1637f4SBram Moolenaar call assert_equal('belowright', g:mods) 2163a60dedSBram Moolenaar botright MyCmd 227a1637f4SBram Moolenaar call assert_equal('botright', g:mods) 233bcfca3aSBram Moolenaar bo MyCmd 247a1637f4SBram Moolenaar call assert_equal('botright', g:mods) 2563a60dedSBram Moolenaar browse MyCmd 267a1637f4SBram Moolenaar call assert_equal('browse', g:mods) 273bcfca3aSBram Moolenaar bro MyCmd 287a1637f4SBram Moolenaar call assert_equal('browse', g:mods) 2963a60dedSBram Moolenaar confirm MyCmd 307a1637f4SBram Moolenaar call assert_equal('confirm', g:mods) 313bcfca3aSBram Moolenaar conf MyCmd 327a1637f4SBram Moolenaar call assert_equal('confirm', g:mods) 3363a60dedSBram Moolenaar hide MyCmd 347a1637f4SBram Moolenaar call assert_equal('hide', g:mods) 353bcfca3aSBram Moolenaar hid MyCmd 367a1637f4SBram Moolenaar call assert_equal('hide', g:mods) 3763a60dedSBram Moolenaar keepalt MyCmd 387a1637f4SBram Moolenaar call assert_equal('keepalt', g:mods) 393bcfca3aSBram Moolenaar keepa MyCmd 407a1637f4SBram Moolenaar call assert_equal('keepalt', g:mods) 4163a60dedSBram Moolenaar keepjumps MyCmd 427a1637f4SBram Moolenaar call assert_equal('keepjumps', g:mods) 433bcfca3aSBram Moolenaar keepj MyCmd 447a1637f4SBram Moolenaar call assert_equal('keepjumps', g:mods) 4563a60dedSBram Moolenaar keepmarks MyCmd 467a1637f4SBram Moolenaar call assert_equal('keepmarks', g:mods) 473bcfca3aSBram Moolenaar kee MyCmd 487a1637f4SBram Moolenaar call assert_equal('keepmarks', g:mods) 4963a60dedSBram Moolenaar keeppatterns MyCmd 507a1637f4SBram Moolenaar call assert_equal('keeppatterns', g:mods) 513bcfca3aSBram Moolenaar keepp MyCmd 527a1637f4SBram Moolenaar call assert_equal('keeppatterns', g:mods) 533bcfca3aSBram Moolenaar leftabove MyCmd " results in :aboveleft 547a1637f4SBram Moolenaar call assert_equal('aboveleft', g:mods) 553bcfca3aSBram Moolenaar lefta MyCmd 567a1637f4SBram Moolenaar call assert_equal('aboveleft', g:mods) 5763a60dedSBram Moolenaar lockmarks MyCmd 587a1637f4SBram Moolenaar call assert_equal('lockmarks', g:mods) 593bcfca3aSBram Moolenaar loc MyCmd 607a1637f4SBram Moolenaar call assert_equal('lockmarks', g:mods) 613bcfca3aSBram Moolenaar " noautocmd MyCmd 6263a60dedSBram Moolenaar noswapfile MyCmd 637a1637f4SBram Moolenaar call assert_equal('noswapfile', g:mods) 643bcfca3aSBram Moolenaar nos MyCmd 657a1637f4SBram Moolenaar call assert_equal('noswapfile', g:mods) 663bcfca3aSBram Moolenaar rightbelow MyCmd " results in :belowright 677a1637f4SBram Moolenaar call assert_equal('belowright', g:mods) 683bcfca3aSBram Moolenaar rightb MyCmd 697a1637f4SBram Moolenaar call assert_equal('belowright', g:mods) 703bcfca3aSBram Moolenaar " sandbox MyCmd 7163a60dedSBram Moolenaar silent MyCmd 727a1637f4SBram Moolenaar call assert_equal('silent', g:mods) 733bcfca3aSBram Moolenaar sil MyCmd 747a1637f4SBram Moolenaar call assert_equal('silent', g:mods) 7563a60dedSBram Moolenaar tab MyCmd 767a1637f4SBram Moolenaar call assert_equal('tab', g:mods) 7763a60dedSBram Moolenaar topleft MyCmd 787a1637f4SBram Moolenaar call assert_equal('topleft', g:mods) 793bcfca3aSBram Moolenaar to MyCmd 807a1637f4SBram Moolenaar call assert_equal('topleft', g:mods) 813bcfca3aSBram Moolenaar " unsilent MyCmd 8263a60dedSBram Moolenaar verbose MyCmd 837a1637f4SBram Moolenaar call assert_equal('verbose', g:mods) 843bcfca3aSBram Moolenaar verb MyCmd 857a1637f4SBram Moolenaar call assert_equal('verbose', g:mods) 8663a60dedSBram Moolenaar vertical MyCmd 877a1637f4SBram Moolenaar call assert_equal('vertical', g:mods) 883bcfca3aSBram Moolenaar vert MyCmd 897a1637f4SBram Moolenaar call assert_equal('vertical', g:mods) 9063a60dedSBram Moolenaar 9163a60dedSBram Moolenaar aboveleft belowright botright browse confirm hide keepalt keepjumps 9263a60dedSBram Moolenaar \ keepmarks keeppatterns lockmarks noswapfile silent tab 9363a60dedSBram Moolenaar \ topleft verbose vertical MyCmd 9463a60dedSBram Moolenaar 957a1637f4SBram Moolenaar call assert_equal('browse confirm hide keepalt keepjumps ' . 967a1637f4SBram Moolenaar \ 'keepmarks keeppatterns lockmarks noswapfile silent ' . 977a1637f4SBram Moolenaar \ 'verbose aboveleft belowright botright tab topleft vertical', g:mods) 9863a60dedSBram Moolenaar 9963a60dedSBram Moolenaar let g:mods = '' 10063a60dedSBram Moolenaar command! -nargs=* MyQCmd let g:mods .= '<q-mods> ' 10163a60dedSBram Moolenaar 10263a60dedSBram Moolenaar vertical MyQCmd 10363a60dedSBram Moolenaar call assert_equal('"vertical" ', g:mods) 10463a60dedSBram Moolenaar 10563a60dedSBram Moolenaar delcommand MyCmd 10663a60dedSBram Moolenaar delcommand MyQCmd 10763a60dedSBram Moolenaar unlet g:mods 10863a60dedSBram Moolenaarendfunction 109eac784ecSBram Moolenaar 110e61e548dSBram Moolenaarfunc SaveCmdArgs(...) 111e61e548dSBram Moolenaar let g:args = a:000 112e61e548dSBram Moolenaarendfunc 113e61e548dSBram Moolenaar 114e61e548dSBram Moolenaarfunc Test_f_args() 115e61e548dSBram Moolenaar command -nargs=* TestFArgs call SaveCmdArgs(<f-args>) 116e61e548dSBram Moolenaar 117e61e548dSBram Moolenaar TestFArgs 118e61e548dSBram Moolenaar call assert_equal([], g:args) 119e61e548dSBram Moolenaar 120e61e548dSBram Moolenaar TestFArgs one two three 121e61e548dSBram Moolenaar call assert_equal(['one', 'two', 'three'], g:args) 122e61e548dSBram Moolenaar 123e61e548dSBram Moolenaar TestFArgs one\\two three 124e61e548dSBram Moolenaar call assert_equal(['one\two', 'three'], g:args) 125e61e548dSBram Moolenaar 126e61e548dSBram Moolenaar TestFArgs one\ two three 127e61e548dSBram Moolenaar call assert_equal(['one two', 'three'], g:args) 128e61e548dSBram Moolenaar 129e61e548dSBram Moolenaar TestFArgs one\"two three 130e61e548dSBram Moolenaar call assert_equal(['one\"two', 'three'], g:args) 131e61e548dSBram Moolenaar 132e61e548dSBram Moolenaar delcommand TestFArgs 133e61e548dSBram Moolenaarendfunc 134e61e548dSBram Moolenaar 135e61e548dSBram Moolenaarfunc Test_q_args() 136e61e548dSBram Moolenaar command -nargs=* TestQArgs call SaveCmdArgs(<q-args>) 137e61e548dSBram Moolenaar 138e61e548dSBram Moolenaar TestQArgs 139e61e548dSBram Moolenaar call assert_equal([''], g:args) 140e61e548dSBram Moolenaar 141e61e548dSBram Moolenaar TestQArgs one two three 142e61e548dSBram Moolenaar call assert_equal(['one two three'], g:args) 143e61e548dSBram Moolenaar 144e61e548dSBram Moolenaar TestQArgs one\\two three 145e61e548dSBram Moolenaar call assert_equal(['one\\two three'], g:args) 146e61e548dSBram Moolenaar 147e61e548dSBram Moolenaar TestQArgs one\ two three 148e61e548dSBram Moolenaar call assert_equal(['one\ two three'], g:args) 149e61e548dSBram Moolenaar 150e61e548dSBram Moolenaar TestQArgs one\"two three 151e61e548dSBram Moolenaar call assert_equal(['one\"two three'], g:args) 152e61e548dSBram Moolenaar 153e61e548dSBram Moolenaar delcommand TestQArgs 154e61e548dSBram Moolenaarendfunc 155e61e548dSBram Moolenaar 156e61e548dSBram Moolenaarfunc Test_reg_arg() 157e61e548dSBram Moolenaar command -nargs=* -reg TestRegArg call SaveCmdArgs("<reg>", "<register>") 158e61e548dSBram Moolenaar 159e61e548dSBram Moolenaar TestRegArg 160e61e548dSBram Moolenaar call assert_equal(['', ''], g:args) 161e61e548dSBram Moolenaar 162e61e548dSBram Moolenaar TestRegArg x 163e61e548dSBram Moolenaar call assert_equal(['x', 'x'], g:args) 164e61e548dSBram Moolenaar 165e61e548dSBram Moolenaar delcommand TestRegArg 166e61e548dSBram Moolenaarendfunc 167e61e548dSBram Moolenaar 168e61e548dSBram Moolenaarfunc Test_no_arg() 169e61e548dSBram Moolenaar command -nargs=* TestNoArg call SaveCmdArgs("<args>", "<>", "<x>", "<lt>") 170e61e548dSBram Moolenaar 171e61e548dSBram Moolenaar TestNoArg 172e61e548dSBram Moolenaar call assert_equal(['', '<>', '<x>', '<'], g:args) 173e61e548dSBram Moolenaar 174e61e548dSBram Moolenaar TestNoArg one 175e61e548dSBram Moolenaar call assert_equal(['one', '<>', '<x>', '<'], g:args) 176e61e548dSBram Moolenaar 177e61e548dSBram Moolenaar delcommand TestNoArg 178e61e548dSBram Moolenaarendfunc 179e61e548dSBram Moolenaar 180e61e548dSBram Moolenaarfunc Test_range_arg() 181e61e548dSBram Moolenaar command -range TestRangeArg call SaveCmdArgs(<range>, <line1>, <line2>) 182e61e548dSBram Moolenaar new 183e61e548dSBram Moolenaar call setline(1, range(100)) 184e61e548dSBram Moolenaar let lnum = line('.') 185e61e548dSBram Moolenaar 186e61e548dSBram Moolenaar TestRangeArg 187e61e548dSBram Moolenaar call assert_equal([0, lnum, lnum], g:args) 188e61e548dSBram Moolenaar 189e61e548dSBram Moolenaar 99TestRangeArg 190e61e548dSBram Moolenaar call assert_equal([1, 99, 99], g:args) 191e61e548dSBram Moolenaar 192e61e548dSBram Moolenaar 88,99TestRangeArg 193e61e548dSBram Moolenaar call assert_equal([2, 88, 99], g:args) 194e61e548dSBram Moolenaar 195e61e548dSBram Moolenaar call assert_fails('102TestRangeArg', 'E16:') 196e61e548dSBram Moolenaar 197e61e548dSBram Moolenaar bwipe! 198e61e548dSBram Moolenaar delcommand TestRangeArg 199e61e548dSBram Moolenaarendfunc 200e61e548dSBram Moolenaar 201eac784ecSBram Moolenaarfunc Test_Ambiguous() 202eac784ecSBram Moolenaar command Doit let g:didit = 'yes' 203eac784ecSBram Moolenaar command Dothat let g:didthat = 'also' 204eac784ecSBram Moolenaar call assert_fails('Do', 'E464:') 205eac784ecSBram Moolenaar Doit 206eac784ecSBram Moolenaar call assert_equal('yes', g:didit) 207eac784ecSBram Moolenaar Dothat 208eac784ecSBram Moolenaar call assert_equal('also', g:didthat) 209eac784ecSBram Moolenaar unlet g:didit 210eac784ecSBram Moolenaar unlet g:didthat 211eac784ecSBram Moolenaar 212eac784ecSBram Moolenaar delcommand Doit 213eac784ecSBram Moolenaar Do 214eac784ecSBram Moolenaar call assert_equal('also', g:didthat) 215eac784ecSBram Moolenaar delcommand Dothat 216e61e548dSBram Moolenaar 217e61e548dSBram Moolenaar call assert_fails("\x4ei\041", ' you demand a ') 218eac784ecSBram Moolenaarendfunc 219eac784ecSBram Moolenaar 22055d46913SBram Moolenaarfunc Test_redefine_on_reload() 22155d46913SBram Moolenaar call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists') 22255d46913SBram Moolenaar call assert_equal(0, exists(':ExistingCommand')) 22355d46913SBram Moolenaar source Xcommandexists 22455d46913SBram Moolenaar call assert_equal(2, exists(':ExistingCommand')) 22555d46913SBram Moolenaar " Redefining a command when reloading a script is OK. 22655d46913SBram Moolenaar source Xcommandexists 22755d46913SBram Moolenaar call assert_equal(2, exists(':ExistingCommand')) 22855d46913SBram Moolenaar 22955d46913SBram Moolenaar " But redefining in another script is not OK. 23055d46913SBram Moolenaar call writefile(['command ExistingCommand echo "yes"'], 'Xcommandexists2') 23155d46913SBram Moolenaar call assert_fails('source Xcommandexists2', 'E174:') 23255d46913SBram Moolenaar call delete('Xcommandexists2') 23355d46913SBram Moolenaar 23455d46913SBram Moolenaar " And defining twice in one script is not OK. 23555d46913SBram Moolenaar delcommand ExistingCommand 23655d46913SBram Moolenaar call assert_equal(0, exists(':ExistingCommand')) 23755d46913SBram Moolenaar call writefile([ 23855d46913SBram Moolenaar \ 'command ExistingCommand echo "yes"', 23955d46913SBram Moolenaar \ 'command ExistingCommand echo "no"', 24055d46913SBram Moolenaar \ ], 'Xcommandexists') 24155d46913SBram Moolenaar call assert_fails('source Xcommandexists', 'E174:') 24255d46913SBram Moolenaar call assert_equal(2, exists(':ExistingCommand')) 24355d46913SBram Moolenaar 24455d46913SBram Moolenaar call delete('Xcommandexists') 24555d46913SBram Moolenaar delcommand ExistingCommand 24655d46913SBram Moolenaarendfunc 24755d46913SBram Moolenaar 248eac784ecSBram Moolenaarfunc Test_CmdUndefined() 249eac784ecSBram Moolenaar call assert_fails('Doit', 'E492:') 250eac784ecSBram Moolenaar au CmdUndefined Doit :command Doit let g:didit = 'yes' 251eac784ecSBram Moolenaar Doit 252eac784ecSBram Moolenaar call assert_equal('yes', g:didit) 253eac784ecSBram Moolenaar delcommand Doit 254eac784ecSBram Moolenaar 255eac784ecSBram Moolenaar call assert_fails('Dothat', 'E492:') 256eac784ecSBram Moolenaar au CmdUndefined * let g:didnot = 'yes' 257eac784ecSBram Moolenaar call assert_fails('Dothat', 'E492:') 258eac784ecSBram Moolenaar call assert_equal('yes', g:didnot) 259eac784ecSBram Moolenaarendfunc 26065c836e6SBram Moolenaar 26165c836e6SBram Moolenaarfunc Test_CmdErrors() 26265c836e6SBram Moolenaar call assert_fails('com! docmd :', 'E183:') 26365c836e6SBram Moolenaar call assert_fails('com! \<Tab> :', 'E182:') 26465c836e6SBram Moolenaar call assert_fails('com! _ :', 'E182:') 26565c836e6SBram Moolenaar call assert_fails('com! X :', 'E841:') 26665c836e6SBram Moolenaar call assert_fails('com! - DoCmd :', 'E175:') 26765c836e6SBram Moolenaar call assert_fails('com! -xxx DoCmd :', 'E181:') 26865c836e6SBram Moolenaar call assert_fails('com! -addr DoCmd :', 'E179:') 269e61e548dSBram Moolenaar call assert_fails('com! -addr=asdf DoCmd :', 'E180:') 27065c836e6SBram Moolenaar call assert_fails('com! -complete DoCmd :', 'E179:') 27165c836e6SBram Moolenaar call assert_fails('com! -complete=xxx DoCmd :', 'E180:') 27265c836e6SBram Moolenaar call assert_fails('com! -complete=custom DoCmd :', 'E467:') 27365c836e6SBram Moolenaar call assert_fails('com! -complete=customlist DoCmd :', 'E467:') 27465c836e6SBram Moolenaar call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:') 27565c836e6SBram Moolenaar call assert_fails('com! -nargs=x DoCmd :', 'E176:') 27665c836e6SBram Moolenaar call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:') 27765c836e6SBram Moolenaar call assert_fails('com! -count=x DoCmd :', 'E178:') 27865c836e6SBram Moolenaar call assert_fails('com! -range=x DoCmd :', 'E178:') 27965c836e6SBram Moolenaar 280cc7eb2aaSBram Moolenaar com! -complete=file DoCmd : 281cc7eb2aaSBram Moolenaar call assert_match('E1208:', v:warningmsg) 282cc7eb2aaSBram Moolenaar let v:warningmsg = '' 283cc7eb2aaSBram Moolenaar com! -nargs=0 -complete=file DoCmd : 284cc7eb2aaSBram Moolenaar call assert_match('E1208:', v:warningmsg) 285cc7eb2aaSBram Moolenaar 286cc7eb2aaSBram Moolenaar let lines =<< trim END 287cc7eb2aaSBram Moolenaar vim9script 288cc7eb2aaSBram Moolenaar com! -complete=file DoCmd : 289cc7eb2aaSBram Moolenaar END 290cc7eb2aaSBram Moolenaar call CheckScriptFailure(lines, 'E1208', 2) 291cc7eb2aaSBram Moolenaar 292cc7eb2aaSBram Moolenaar let lines =<< trim END 293cc7eb2aaSBram Moolenaar vim9script 294cc7eb2aaSBram Moolenaar com! -nargs=0 -complete=file DoCmd : 295cc7eb2aaSBram Moolenaar END 296cc7eb2aaSBram Moolenaar call CheckScriptFailure(lines, 'E1208', 2) 297cc7eb2aaSBram Moolenaar 29865c836e6SBram Moolenaar com! -nargs=0 DoCmd : 29965c836e6SBram Moolenaar call assert_fails('DoCmd x', 'E488:') 30065c836e6SBram Moolenaar 30165c836e6SBram Moolenaar com! -nargs=1 DoCmd : 30265c836e6SBram Moolenaar call assert_fails('DoCmd', 'E471:') 30365c836e6SBram Moolenaar 30465c836e6SBram Moolenaar com! -nargs=+ DoCmd : 30565c836e6SBram Moolenaar call assert_fails('DoCmd', 'E471:') 30665c836e6SBram Moolenaar 30765c836e6SBram Moolenaar call assert_fails('com DoCmd :', 'E174:') 30865c836e6SBram Moolenaar comclear 30965c836e6SBram Moolenaar call assert_fails('delcom DoCmd', 'E184:') 31065c836e6SBram Moolenaarendfunc 31165c836e6SBram Moolenaar 31265c836e6SBram Moolenaarfunc CustomComplete(A, L, P) 31365c836e6SBram Moolenaar return "January\nFebruary\nMars\n" 31465c836e6SBram Moolenaarendfunc 31565c836e6SBram Moolenaar 31665c836e6SBram Moolenaarfunc CustomCompleteList(A, L, P) 31724ebd83eSBram Moolenaar return [ "Monday", "Tuesday", "Wednesday", {}] 31865c836e6SBram Moolenaarendfunc 31965c836e6SBram Moolenaar 32065c836e6SBram Moolenaarfunc Test_CmdCompletion() 32165c836e6SBram Moolenaar call feedkeys(":com -\<C-A>\<C-B>\"\<CR>", 'tx') 322*326e7da6SBram Moolenaar call assert_equal('"com -addr bang bar buffer complete count keepscript nargs range register', @:) 32365c836e6SBram Moolenaar 32465c836e6SBram Moolenaar call feedkeys(":com -nargs=0 -\<C-A>\<C-B>\"\<CR>", 'tx') 325*326e7da6SBram Moolenaar call assert_equal('"com -nargs=0 -addr bang bar buffer complete count keepscript nargs range register', @:) 32665c836e6SBram Moolenaar 32765c836e6SBram Moolenaar call feedkeys(":com -nargs=\<C-A>\<C-B>\"\<CR>", 'tx') 32865c836e6SBram Moolenaar call assert_equal('"com -nargs=* + 0 1 ?', @:) 32965c836e6SBram Moolenaar 33065c836e6SBram Moolenaar call feedkeys(":com -addr=\<C-A>\<C-B>\"\<CR>", 'tx') 33151a7454cSBram Moolenaar call assert_equal('"com -addr=arguments buffers lines loaded_buffers other quickfix tabs windows', @:) 33265c836e6SBram Moolenaar 33365c836e6SBram Moolenaar call feedkeys(":com -complete=co\<C-A>\<C-B>\"\<CR>", 'tx') 33465c836e6SBram Moolenaar call assert_equal('"com -complete=color command compiler', @:) 33565c836e6SBram Moolenaar 33665c836e6SBram Moolenaar command! DoCmd1 : 33765c836e6SBram Moolenaar command! DoCmd2 : 33865c836e6SBram Moolenaar call feedkeys(":com \<C-A>\<C-B>\"\<CR>", 'tx') 33965c836e6SBram Moolenaar call assert_equal('"com DoCmd1 DoCmd2', @:) 34065c836e6SBram Moolenaar 34165c836e6SBram Moolenaar call feedkeys(":DoC\<C-A>\<C-B>\"\<CR>", 'tx') 34265c836e6SBram Moolenaar call assert_equal('"DoCmd1 DoCmd2', @:) 34365c836e6SBram Moolenaar 34465c836e6SBram Moolenaar call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx') 34565c836e6SBram Moolenaar call assert_equal('"delcom DoCmd1 DoCmd2', @:) 34665c836e6SBram Moolenaar 34765c836e6SBram Moolenaar delcom DoCmd1 34865c836e6SBram Moolenaar call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx') 34965c836e6SBram Moolenaar call assert_equal('"delcom DoCmd2', @:) 35065c836e6SBram Moolenaar 35165c836e6SBram Moolenaar call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx') 35265c836e6SBram Moolenaar call assert_equal('"com DoCmd2', @:) 35365c836e6SBram Moolenaar 35465c836e6SBram Moolenaar delcom DoCmd2 35565c836e6SBram Moolenaar call feedkeys(":delcom DoC\<C-A>\<C-B>\"\<CR>", 'tx') 35665c836e6SBram Moolenaar call assert_equal('"delcom DoC', @:) 35765c836e6SBram Moolenaar 35865c836e6SBram Moolenaar call feedkeys(":com DoC\<C-A>\<C-B>\"\<CR>", 'tx') 35965c836e6SBram Moolenaar call assert_equal('"com DoC', @:) 36065c836e6SBram Moolenaar 361de69a735SMartin Tournoij com! -nargs=1 -complete=behave DoCmd : 36265c836e6SBram Moolenaar call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx') 36365c836e6SBram Moolenaar call assert_equal('"DoCmd mswin xterm', @:) 36465c836e6SBram Moolenaar 365de69a735SMartin Tournoij com! -nargs=* -complete=custom,CustomComplete DoCmd : 36665c836e6SBram Moolenaar call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx') 36765c836e6SBram Moolenaar call assert_equal('"DoCmd January February Mars', @:) 36865c836e6SBram Moolenaar 369de69a735SMartin Tournoij com! -nargs=? -complete=customlist,CustomCompleteList DoCmd : 37065c836e6SBram Moolenaar call feedkeys(":DoCmd \<C-A>\<C-B>\"\<CR>", 'tx') 37165c836e6SBram Moolenaar call assert_equal('"DoCmd Monday Tuesday Wednesday', @:) 37265c836e6SBram Moolenaar 373de69a735SMartin Tournoij com! -nargs=+ -complete=custom,CustomCompleteList DoCmd : 37465c836e6SBram Moolenaar call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E730:') 37565c836e6SBram Moolenaar 376de69a735SMartin Tournoij com! -nargs=+ -complete=customlist,CustomComp DoCmd : 37765c836e6SBram Moolenaar call assert_fails("call feedkeys(':DoCmd \<C-D>', 'tx')", 'E117:') 37824ebd83eSBram Moolenaar 37924ebd83eSBram Moolenaar " custom completion without a function 380de69a735SMartin Tournoij com! -nargs=? -complete=custom, DoCmd 38124ebd83eSBram Moolenaar call assert_beeps("call feedkeys(':DoCmd \t', 'tx')") 38224ebd83eSBram Moolenaar 3839d8d0b5cSBram Moolenaar " custom completion failure with the wrong function 384de69a735SMartin Tournoij com! -nargs=? -complete=custom,min DoCmd 3859d8d0b5cSBram Moolenaar call assert_fails("call feedkeys(':DoCmd \t', 'tx')", 'E118:') 3869d8d0b5cSBram Moolenaar 38724ebd83eSBram Moolenaar delcom DoCmd 38865c836e6SBram Moolenaarendfunc 38920951482SBram Moolenaar 39020951482SBram Moolenaarfunc CallExecute(A, L, P) 39120951482SBram Moolenaar " Drop first '\n' 39220951482SBram Moolenaar return execute('echo "hi"')[1:] 39320951482SBram Moolenaarendfunc 39420951482SBram Moolenaar 39520951482SBram Moolenaarfunc Test_use_execute_in_completion() 39620951482SBram Moolenaar command! -nargs=* -complete=custom,CallExecute DoExec : 39720951482SBram Moolenaar call feedkeys(":DoExec \<C-A>\<C-B>\"\<CR>", 'tx') 39820951482SBram Moolenaar call assert_equal('"DoExec hi', @:) 39920951482SBram Moolenaar delcommand DoExec 40020951482SBram Moolenaarendfunc 40151a7454cSBram Moolenaar 40251a7454cSBram Moolenaarfunc Test_addr_all() 40351a7454cSBram Moolenaar command! -addr=lines DoSomething let g:a1 = <line1> | let g:a2 = <line2> 40451a7454cSBram Moolenaar %DoSomething 40551a7454cSBram Moolenaar call assert_equal(1, g:a1) 40651a7454cSBram Moolenaar call assert_equal(line('$'), g:a2) 40751a7454cSBram Moolenaar 40851a7454cSBram Moolenaar command! -addr=arguments DoSomething let g:a1 = <line1> | let g:a2 = <line2> 40951a7454cSBram Moolenaar args one two three 41051a7454cSBram Moolenaar %DoSomething 41151a7454cSBram Moolenaar call assert_equal(1, g:a1) 41251a7454cSBram Moolenaar call assert_equal(3, g:a2) 41351a7454cSBram Moolenaar 41451a7454cSBram Moolenaar command! -addr=buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2> 41551a7454cSBram Moolenaar %DoSomething 41651a7454cSBram Moolenaar for low in range(1, bufnr('$')) 41751a7454cSBram Moolenaar if buflisted(low) 41851a7454cSBram Moolenaar break 41951a7454cSBram Moolenaar endif 42051a7454cSBram Moolenaar endfor 42151a7454cSBram Moolenaar call assert_equal(low, g:a1) 42251a7454cSBram Moolenaar call assert_equal(bufnr('$'), g:a2) 42351a7454cSBram Moolenaar 42451a7454cSBram Moolenaar command! -addr=loaded_buffers DoSomething let g:a1 = <line1> | let g:a2 = <line2> 42551a7454cSBram Moolenaar %DoSomething 42651a7454cSBram Moolenaar for low in range(1, bufnr('$')) 42751a7454cSBram Moolenaar if bufloaded(low) 42851a7454cSBram Moolenaar break 42951a7454cSBram Moolenaar endif 43051a7454cSBram Moolenaar endfor 43151a7454cSBram Moolenaar call assert_equal(low, g:a1) 43251a7454cSBram Moolenaar for up in range(bufnr('$'), 1, -1) 43351a7454cSBram Moolenaar if bufloaded(up) 43451a7454cSBram Moolenaar break 43551a7454cSBram Moolenaar endif 43651a7454cSBram Moolenaar endfor 43751a7454cSBram Moolenaar call assert_equal(up, g:a2) 43851a7454cSBram Moolenaar 43951a7454cSBram Moolenaar command! -addr=windows DoSomething let g:a1 = <line1> | let g:a2 = <line2> 44051a7454cSBram Moolenaar new 44151a7454cSBram Moolenaar %DoSomething 44251a7454cSBram Moolenaar call assert_equal(1, g:a1) 44351a7454cSBram Moolenaar call assert_equal(winnr('$'), g:a2) 44451a7454cSBram Moolenaar bwipe 44551a7454cSBram Moolenaar 44651a7454cSBram Moolenaar command! -addr=tabs DoSomething let g:a1 = <line1> | let g:a2 = <line2> 44751a7454cSBram Moolenaar tabnew 44851a7454cSBram Moolenaar %DoSomething 44951a7454cSBram Moolenaar call assert_equal(1, g:a1) 45051a7454cSBram Moolenaar call assert_equal(len(gettabinfo()), g:a2) 45151a7454cSBram Moolenaar bwipe 45251a7454cSBram Moolenaar 453b731689eSBram Moolenaar command! -addr=other DoSomething let g:a1 = <line1> | let g:a2 = <line2> 45451a7454cSBram Moolenaar DoSomething 455b731689eSBram Moolenaar call assert_equal(line('.'), g:a1) 456b731689eSBram Moolenaar call assert_equal(line('.'), g:a2) 457b731689eSBram Moolenaar %DoSomething 458b731689eSBram Moolenaar call assert_equal(1, g:a1) 459b731689eSBram Moolenaar call assert_equal(line('$'), g:a2) 46051a7454cSBram Moolenaar 46151a7454cSBram Moolenaar delcommand DoSomething 46251a7454cSBram Moolenaarendfunc 463d1f90bbcSBram Moolenaar 464d1f90bbcSBram Moolenaarfunc Test_command_list() 465d1f90bbcSBram Moolenaar command! DoCmd : 466d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 467d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 :", 468d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 469d1f90bbcSBram Moolenaar 470d1f90bbcSBram Moolenaar " Test with various -range= and -count= argument values. 471d1f90bbcSBram Moolenaar command! -range DoCmd : 472d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 473d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . :", 474d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 475d1f90bbcSBram Moolenaar command! -range=% DoCmd : 476d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 477d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 % :", 478d1f90bbcSBram Moolenaar \ execute('command! DoCmd')) 479d1f90bbcSBram Moolenaar command! -range=2 DoCmd : 480d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 481d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 2 :", 482d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 483d1f90bbcSBram Moolenaar command! -count=2 DoCmd : 484d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 485b731689eSBram Moolenaar \ .. "\n DoCmd 0 2c ? :", 486d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 487d1f90bbcSBram Moolenaar 488d1f90bbcSBram Moolenaar " Test with various -addr= argument values. 489d1f90bbcSBram Moolenaar command! -addr=lines DoCmd : 490d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 491d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . :", 492d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 493d1f90bbcSBram Moolenaar command! -addr=arguments DoCmd : 494d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 495d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . arg :", 496d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 497d1f90bbcSBram Moolenaar command! -addr=buffers DoCmd : 498d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 499d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . buf :", 500d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 501d1f90bbcSBram Moolenaar command! -addr=loaded_buffers DoCmd : 502d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 503d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . load :", 504d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 505d1f90bbcSBram Moolenaar command! -addr=windows DoCmd : 506d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 507d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . win :", 508d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 509d1f90bbcSBram Moolenaar command! -addr=tabs DoCmd : 510d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 511d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . tab :", 512d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 513d1f90bbcSBram Moolenaar command! -addr=other DoCmd : 514d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 515d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 . ? :", 516d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 517d1f90bbcSBram Moolenaar 518d1f90bbcSBram Moolenaar " Test with various -complete= argument values (non-exhaustive list) 519de69a735SMartin Tournoij command! -nargs=1 -complete=arglist DoCmd : 520d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 521de69a735SMartin Tournoij \ .. "\n DoCmd 1 arglist :", 522d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 523de69a735SMartin Tournoij command! -nargs=* -complete=augroup DoCmd : 524d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 525de69a735SMartin Tournoij \ .. "\n DoCmd * augroup :", 526d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 527de69a735SMartin Tournoij command! -nargs=? -complete=custom,CustomComplete DoCmd : 528d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 529de69a735SMartin Tournoij \ .. "\n DoCmd ? custom :", 530d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 531de69a735SMartin Tournoij command! -nargs=+ -complete=customlist,CustomComplete DoCmd : 532d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 533de69a735SMartin Tournoij \ .. "\n DoCmd + customlist :", 534d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 535d1f90bbcSBram Moolenaar 536d1f90bbcSBram Moolenaar " Test with various -narg= argument values. 537d1f90bbcSBram Moolenaar command! -nargs=0 DoCmd : 538d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 539d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 :", 540d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 541d1f90bbcSBram Moolenaar command! -nargs=1 DoCmd : 542d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 543d1f90bbcSBram Moolenaar \ .. "\n DoCmd 1 :", 544d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 545d1f90bbcSBram Moolenaar command! -nargs=* DoCmd : 546d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 547d1f90bbcSBram Moolenaar \ .. "\n DoCmd * :", 548d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 549d1f90bbcSBram Moolenaar command! -nargs=? DoCmd : 550d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 551d1f90bbcSBram Moolenaar \ .. "\n DoCmd ? :", 552d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 553d1f90bbcSBram Moolenaar command! -nargs=+ DoCmd : 554d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 555d1f90bbcSBram Moolenaar \ .. "\n DoCmd + :", 556d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 557d1f90bbcSBram Moolenaar 558d1f90bbcSBram Moolenaar " Test with other arguments. 559d1f90bbcSBram Moolenaar command! -bang DoCmd : 560d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 561d1f90bbcSBram Moolenaar \ .. "\n! DoCmd 0 :", 562d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 563d1f90bbcSBram Moolenaar command! -bar DoCmd : 564d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 565d1f90bbcSBram Moolenaar \ .. "\n| DoCmd 0 :", 566d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 567d1f90bbcSBram Moolenaar command! -register DoCmd : 568d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 569d1f90bbcSBram Moolenaar \ .. "\n\" DoCmd 0 :", 570d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 571d1f90bbcSBram Moolenaar command! -buffer DoCmd : 572d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 573d1f90bbcSBram Moolenaar \ .. "\nb DoCmd 0 :" 574d1f90bbcSBram Moolenaar \ .. "\n\" DoCmd 0 :", 575d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 576d1f90bbcSBram Moolenaar comclear 577d1f90bbcSBram Moolenaar 578d1f90bbcSBram Moolenaar " Test with many args. 579d1f90bbcSBram Moolenaar command! -bang -bar -register -buffer -nargs=+ -complete=environment -addr=windows -count=3 DoCmd : 580d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 581d1f90bbcSBram Moolenaar \ .. "\n!\"b|DoCmd + 3c win environment :", 582d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 583d1f90bbcSBram Moolenaar comclear 584d1f90bbcSBram Moolenaar 585d1f90bbcSBram Moolenaar " Test with special characters in command definition. 586d1f90bbcSBram Moolenaar command! DoCmd :<cr><tab><c-d> 587d1f90bbcSBram Moolenaar call assert_equal("\n Name Args Address Complete Definition" 588d1f90bbcSBram Moolenaar \ .. "\n DoCmd 0 :<CR><Tab><C-D>", 589d1f90bbcSBram Moolenaar \ execute('command DoCmd')) 590d1f90bbcSBram Moolenaar 591d1f90bbcSBram Moolenaar " Test output in verbose mode. 592d1f90bbcSBram Moolenaar command! DoCmd : 593d1f90bbcSBram Moolenaar call assert_match("^\n" 594d1f90bbcSBram Moolenaar \ .. " Name Args Address Complete Definition\n" 595d1f90bbcSBram Moolenaar \ .. " DoCmd 0 :\n" 596d1f90bbcSBram Moolenaar \ .. "\tLast set from .*/test_usercommands.vim line \\d\\+$", 597d1f90bbcSBram Moolenaar \ execute('verbose command DoCmd')) 598d1f90bbcSBram Moolenaar 599d1f90bbcSBram Moolenaar comclear 600d1f90bbcSBram Moolenaar call assert_equal("\nNo user-defined commands found", execute(':command Xxx')) 601d1f90bbcSBram Moolenaar call assert_equal("\nNo user-defined commands found", execute('command')) 602d1f90bbcSBram Moolenaarendfunc 60324ebd83eSBram Moolenaar 6048b633135SBram Moolenaar" Test for a custom user completion returning the wrong value type 6058b633135SBram Moolenaarfunc Test_usercmd_custom() 6068b633135SBram Moolenaar func T1(a, c, p) 6078b633135SBram Moolenaar return "a\nb\n" 6088b633135SBram Moolenaar endfunc 6098b633135SBram Moolenaar command -nargs=* -complete=customlist,T1 TCmd1 610ea04a6e8SBram Moolenaar call feedkeys(":TCmd1 \<C-A>\<C-B>\"\<CR>", 'xt') 611ea04a6e8SBram Moolenaar call assert_equal('"TCmd1 ', @:) 6128b633135SBram Moolenaar delcommand TCmd1 6138b633135SBram Moolenaar delfunc T1 6148b633135SBram Moolenaar 6158b633135SBram Moolenaar func T2(a, c, p) 616ea04a6e8SBram Moolenaar return {} 6178b633135SBram Moolenaar endfunc 6188b633135SBram Moolenaar command -nargs=* -complete=customlist,T2 TCmd2 619ea04a6e8SBram Moolenaar call feedkeys(":TCmd2 \<C-A>\<C-B>\"\<CR>", 'xt') 620ea04a6e8SBram Moolenaar call assert_equal('"TCmd2 ', @:) 6218b633135SBram Moolenaar delcommand TCmd2 6228b633135SBram Moolenaar delfunc T2 6238b633135SBram Moolenaarendfunc 6248b633135SBram Moolenaar 6255d7c2df5SBram Moolenaarfunc Test_usercmd_with_block() 6265d7c2df5SBram Moolenaar command DoSomething { 627ec1b0968SBram Moolenaar g:didit = 'yes' # comment 628ec1b0968SBram Moolenaar # comment line 6295d7c2df5SBram Moolenaar g:didmore = 'more' 6305d7c2df5SBram Moolenaar } 6315d7c2df5SBram Moolenaar DoSomething 6325d7c2df5SBram Moolenaar call assert_equal('yes', g:didit) 6335d7c2df5SBram Moolenaar call assert_equal('more', g:didmore) 6345d7c2df5SBram Moolenaar unlet g:didit 6355d7c2df5SBram Moolenaar unlet g:didmore 6366868634aSBram Moolenaar delcommand DoSomething 6376868634aSBram Moolenaar 6386868634aSBram Moolenaar command DoMap { 6396868634aSBram Moolenaar echo [1, 2, 3]->map((_, v) => v + 1) 6406868634aSBram Moolenaar } 6416868634aSBram Moolenaar DoMap 6426868634aSBram Moolenaar delcommand DoMap 6435d7c2df5SBram Moolenaar 6445d7c2df5SBram Moolenaar let lines =<< trim END 6455d7c2df5SBram Moolenaar command DoesNotEnd { 6465d7c2df5SBram Moolenaar echo 'hello' 6475d7c2df5SBram Moolenaar END 6485d7c2df5SBram Moolenaar call CheckScriptFailure(lines, 'E1026:') 64963b91736SBram Moolenaar 65063b91736SBram Moolenaar let lines =<< trim END 65163b91736SBram Moolenaar command BarCommand { 65263b91736SBram Moolenaar echo 'hello' | echo 'there' 65363b91736SBram Moolenaar } 65463b91736SBram Moolenaar BarCommand 65563b91736SBram Moolenaar END 65663b91736SBram Moolenaar call CheckScriptFailure(lines, 'E1231:') 6575d7c2df5SBram Moolenaarendfunc 6585d7c2df5SBram Moolenaar 659bdcba24dSBram Moolenaarfunc Test_delcommand_buffer() 660bdcba24dSBram Moolenaar command Global echo 'global' 661bdcba24dSBram Moolenaar command -buffer OneBuffer echo 'one' 662bdcba24dSBram Moolenaar new 663bdcba24dSBram Moolenaar command -buffer TwoBuffer echo 'two' 664bdcba24dSBram Moolenaar call assert_equal(0, exists(':OneBuffer')) 665bdcba24dSBram Moolenaar call assert_equal(2, exists(':Global')) 666bdcba24dSBram Moolenaar call assert_equal(2, exists(':TwoBuffer')) 667bdcba24dSBram Moolenaar delcommand -buffer TwoBuffer 668bdcba24dSBram Moolenaar call assert_equal(0, exists(':TwoBuffer')) 669bdcba24dSBram Moolenaar call assert_fails('delcommand -buffer Global', 'E1237:') 670bdcba24dSBram Moolenaar call assert_fails('delcommand -buffer OneBuffer', 'E1237:') 671bdcba24dSBram Moolenaar bwipe! 672bdcba24dSBram Moolenaar call assert_equal(2, exists(':OneBuffer')) 673bdcba24dSBram Moolenaar delcommand -buffer OneBuffer 674bdcba24dSBram Moolenaar call assert_equal(0, exists(':OneBuffer')) 675bdcba24dSBram Moolenaar call assert_fails('delcommand -buffer Global', 'E1237:') 676bdcba24dSBram Moolenaar delcommand Global 677bdcba24dSBram Moolenaar call assert_equal(0, exists(':Global')) 678bdcba24dSBram Moolenaarendfunc 679bdcba24dSBram Moolenaar 68024ebd83eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 681