1eeb1b9c7SBram Moolenaar" Test for the quickfix feature. 2da59dd5dSBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature quickfix 5da59dd5dSBram Moolenaar 6e00fdf35SBram Moolenaarsource screendump.vim 7e00fdf35SBram Moolenaar 87eba3d2cSBram Moolenaarset encoding=utf-8 97eba3d2cSBram Moolenaar 102b946c9fSBram Moolenaarfunc s:setup_commands(cchar) 113ef5bf7dSBram Moolenaar if a:cchar == 'c' 123ef5bf7dSBram Moolenaar command! -nargs=* -bang Xlist <mods>clist<bang> <args> 133ef5bf7dSBram Moolenaar command! -nargs=* Xgetexpr <mods>cgetexpr <args> 14361c8f0eSBram Moolenaar command! -nargs=* Xaddexpr <mods>caddexpr <args> 1555b69264SBram Moolenaar command! -nargs=* -count Xolder <mods><count>colder <args> 163ef5bf7dSBram Moolenaar command! -nargs=* Xnewer <mods>cnewer <args> 173ef5bf7dSBram Moolenaar command! -nargs=* Xopen <mods> copen <args> 183ef5bf7dSBram Moolenaar command! -nargs=* Xwindow <mods>cwindow <args> 19537ef084SBram Moolenaar command! -nargs=* Xbottom <mods>cbottom <args> 203ef5bf7dSBram Moolenaar command! -nargs=* Xclose <mods>cclose <args> 213ef5bf7dSBram Moolenaar command! -nargs=* -bang Xfile <mods>cfile<bang> <args> 223ef5bf7dSBram Moolenaar command! -nargs=* Xgetfile <mods>cgetfile <args> 233ef5bf7dSBram Moolenaar command! -nargs=* Xaddfile <mods>caddfile <args> 243ef5bf7dSBram Moolenaar command! -nargs=* -bang Xbuffer <mods>cbuffer<bang> <args> 253ef5bf7dSBram Moolenaar command! -nargs=* Xgetbuffer <mods>cgetbuffer <args> 263ef5bf7dSBram Moolenaar command! -nargs=* Xaddbuffer <mods>caddbuffer <args> 273ef5bf7dSBram Moolenaar command! -nargs=* Xrewind <mods>crewind <args> 2899895eacSBram Moolenaar command! -count -nargs=* -bang Xnext <mods><count>cnext<bang> <args> 2999895eacSBram Moolenaar command! -count -nargs=* -bang Xprev <mods><count>cprev<bang> <args> 300fcc7c6dSBram Moolenaar command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args> 310fcc7c6dSBram Moolenaar command! -nargs=* -bang Xlast <mods>clast<bang> <args> 3225190db2SBram Moolenaar command! -count -nargs=* -bang Xnfile <mods><count>cnfile<bang> <args> 330fcc7c6dSBram Moolenaar command! -nargs=* -bang Xpfile <mods>cpfile<bang> <args> 343ef5bf7dSBram Moolenaar command! -nargs=* Xexpr <mods>cexpr <args> 35*bb01a1efSYegappan Lakshmanan command! -count=999 -nargs=* Xvimgrep <mods> <count>vimgrep <args> 36ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods> vimgrepadd <args> 37049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> grep <args> 38049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> grepadd <args> 39049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep helpgrep <args> 4074240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>cc 413ff33114SBram Moolenaar command! -count=1 -nargs=0 Xbelow <mods><count>cbelow 423ff33114SBram Moolenaar command! -count=1 -nargs=0 Xabove <mods><count>cabove 43cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xbefore <mods><count>cbefore 44cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xafter <mods><count>cafter 453ef5bf7dSBram Moolenaar let g:Xgetlist = function('getqflist') 463ef5bf7dSBram Moolenaar let g:Xsetlist = function('setqflist') 47b6fa30ccSBram Moolenaar call setqflist([], 'f') 483ef5bf7dSBram Moolenaar else 493ef5bf7dSBram Moolenaar command! -nargs=* -bang Xlist <mods>llist<bang> <args> 503ef5bf7dSBram Moolenaar command! -nargs=* Xgetexpr <mods>lgetexpr <args> 51361c8f0eSBram Moolenaar command! -nargs=* Xaddexpr <mods>laddexpr <args> 5255b69264SBram Moolenaar command! -nargs=* -count Xolder <mods><count>lolder <args> 533ef5bf7dSBram Moolenaar command! -nargs=* Xnewer <mods>lnewer <args> 543ef5bf7dSBram Moolenaar command! -nargs=* Xopen <mods> lopen <args> 553ef5bf7dSBram Moolenaar command! -nargs=* Xwindow <mods>lwindow <args> 56537ef084SBram Moolenaar command! -nargs=* Xbottom <mods>lbottom <args> 573ef5bf7dSBram Moolenaar command! -nargs=* Xclose <mods>lclose <args> 583ef5bf7dSBram Moolenaar command! -nargs=* -bang Xfile <mods>lfile<bang> <args> 593ef5bf7dSBram Moolenaar command! -nargs=* Xgetfile <mods>lgetfile <args> 603ef5bf7dSBram Moolenaar command! -nargs=* Xaddfile <mods>laddfile <args> 613ef5bf7dSBram Moolenaar command! -nargs=* -bang Xbuffer <mods>lbuffer<bang> <args> 623ef5bf7dSBram Moolenaar command! -nargs=* Xgetbuffer <mods>lgetbuffer <args> 633ef5bf7dSBram Moolenaar command! -nargs=* Xaddbuffer <mods>laddbuffer <args> 643ef5bf7dSBram Moolenaar command! -nargs=* Xrewind <mods>lrewind <args> 6599895eacSBram Moolenaar command! -count -nargs=* -bang Xnext <mods><count>lnext<bang> <args> 6699895eacSBram Moolenaar command! -count -nargs=* -bang Xprev <mods><count>lprev<bang> <args> 670fcc7c6dSBram Moolenaar command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args> 680fcc7c6dSBram Moolenaar command! -nargs=* -bang Xlast <mods>llast<bang> <args> 6925190db2SBram Moolenaar command! -count -nargs=* -bang Xnfile <mods><count>lnfile<bang> <args> 700fcc7c6dSBram Moolenaar command! -nargs=* -bang Xpfile <mods>lpfile<bang> <args> 713ef5bf7dSBram Moolenaar command! -nargs=* Xexpr <mods>lexpr <args> 72*bb01a1efSYegappan Lakshmanan command! -count=999 -nargs=* Xvimgrep <mods> <count>lvimgrep <args> 73ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods> lvimgrepadd <args> 74049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> lgrep <args> 75049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> lgrepadd <args> 76049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep lhelpgrep <args> 7774240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>ll 783ff33114SBram Moolenaar command! -count=1 -nargs=0 Xbelow <mods><count>lbelow 793ff33114SBram Moolenaar command! -count=1 -nargs=0 Xabove <mods><count>labove 80cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xbefore <mods><count>lbefore 81cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xafter <mods><count>lafter 823ef5bf7dSBram Moolenaar let g:Xgetlist = function('getloclist', [0]) 833ef5bf7dSBram Moolenaar let g:Xsetlist = function('setloclist', [0]) 84b6fa30ccSBram Moolenaar call setloclist(0, [], 'f') 853ef5bf7dSBram Moolenaar endif 862b946c9fSBram Moolenaarendfunc 873ef5bf7dSBram Moolenaar 88da59dd5dSBram Moolenaar" Tests for the :clist and :llist commands 892b946c9fSBram Moolenaarfunc XlistTests(cchar) 903ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 91da59dd5dSBram Moolenaar 92b6fa30ccSBram Moolenaar if a:cchar == 'l' 93b6fa30ccSBram Moolenaar call assert_fails('llist', 'E776:') 94b6fa30ccSBram Moolenaar endif 95da59dd5dSBram Moolenaar " With an empty list, command should return error 963ef5bf7dSBram Moolenaar Xgetexpr [] 973ef5bf7dSBram Moolenaar silent! Xlist 98da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E42: No Errors') 99da59dd5dSBram Moolenaar 100da59dd5dSBram Moolenaar " Populate the list and then try 1013ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1', 102da59dd5dSBram Moolenaar \ 'non-error 2', 'Xtestfile2:2:2:Line2', 10388a3e2b2SBram Moolenaar \ 'non-error| 3', 'Xtestfile3:3:1:Line3'] 104da59dd5dSBram Moolenaar 105da59dd5dSBram Moolenaar " List only valid entries 106ee85df37SBram Moolenaar let l = split(execute('Xlist', ''), "\n") 107da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 108da59dd5dSBram Moolenaar \ ' 4 Xtestfile2:2 col 2: Line2', 109da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 110da59dd5dSBram Moolenaar 111da59dd5dSBram Moolenaar " List all the entries 112ee85df37SBram Moolenaar let l = split(execute('Xlist!', ''), "\n") 113da59dd5dSBram Moolenaar call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', 114da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', 11588a3e2b2SBram Moolenaar \ ' 5: non-error| 3', ' 6 Xtestfile3:3 col 1: Line3'], l) 116da59dd5dSBram Moolenaar 117da59dd5dSBram Moolenaar " List a range of errors 118ee85df37SBram Moolenaar let l = split(execute('Xlist 3,6', ''), "\n") 119da59dd5dSBram Moolenaar call assert_equal([' 4 Xtestfile2:2 col 2: Line2', 120da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 121da59dd5dSBram Moolenaar 122ee85df37SBram Moolenaar let l = split(execute('Xlist! 3,4', ''), "\n") 123da59dd5dSBram Moolenaar call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 124da59dd5dSBram Moolenaar 125ee85df37SBram Moolenaar let l = split(execute('Xlist -6,-4', ''), "\n") 126da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l) 127da59dd5dSBram Moolenaar 128ee85df37SBram Moolenaar let l = split(execute('Xlist! -5,-3', ''), "\n") 129da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 130da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 131391b1dd0SBram Moolenaar 132391b1dd0SBram Moolenaar " Test for '+' 133ee85df37SBram Moolenaar let l = split(execute('Xlist! +2', ''), "\n") 134391b1dd0SBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 135391b1dd0SBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 136ee85df37SBram Moolenaar 137ee85df37SBram Moolenaar " Different types of errors 138ee85df37SBram Moolenaar call g:Xsetlist([{'lnum':10,'col':5,'type':'W', 'text':'Warning','nr':11}, 139ee85df37SBram Moolenaar \ {'lnum':20,'col':10,'type':'e','text':'Error','nr':22}, 140ee85df37SBram Moolenaar \ {'lnum':30,'col':15,'type':'i','text':'Info','nr':33}, 141ee85df37SBram Moolenaar \ {'lnum':40,'col':20,'type':'x', 'text':'Other','nr':44}, 142ee85df37SBram Moolenaar \ {'lnum':50,'col':25,'type':"\<C-A>",'text':'one','nr':55}]) 143ee85df37SBram Moolenaar let l = split(execute('Xlist', ""), "\n") 144ee85df37SBram Moolenaar call assert_equal([' 1:10 col 5 warning 11: Warning', 145ee85df37SBram Moolenaar \ ' 2:20 col 10 error 22: Error', 146ee85df37SBram Moolenaar \ ' 3:30 col 15 info 33: Info', 147ee85df37SBram Moolenaar \ ' 4:40 col 20 x 44: Other', 148ee85df37SBram Moolenaar \ ' 5:50 col 25 55: one'], l) 149ee85df37SBram Moolenaar 150d76ce852SBram Moolenaar " Test for module names, one needs to explicitly set `'valid':v:true` so 151d76ce852SBram Moolenaar call g:Xsetlist([ 152d76ce852SBram Moolenaar \ {'lnum':10,'col':5,'type':'W','module':'Data.Text','text':'ModuleWarning','nr':11,'valid':v:true}, 153d76ce852SBram Moolenaar \ {'lnum':20,'col':10,'type':'W','module':'Data.Text','filename':'Data/Text.hs','text':'ModuleWarning','nr':22,'valid':v:true}, 154d76ce852SBram Moolenaar \ {'lnum':30,'col':15,'type':'W','filename':'Data/Text.hs','text':'FileWarning','nr':33,'valid':v:true}]) 155d76ce852SBram Moolenaar let l = split(execute('Xlist', ""), "\n") 156d76ce852SBram Moolenaar call assert_equal([' 1 Data.Text:10 col 5 warning 11: ModuleWarning', 157d76ce852SBram Moolenaar \ ' 2 Data.Text:20 col 10 warning 22: ModuleWarning', 158d76ce852SBram Moolenaar \ ' 3 Data/Text.hs:30 col 15 warning 33: FileWarning'], l) 159d76ce852SBram Moolenaar 160f9ae154cSBram Moolenaar " For help entries in the quickfix list, only the filename without directory 161f9ae154cSBram Moolenaar " should be displayed 162f9ae154cSBram Moolenaar Xhelpgrep setqflist() 163f9ae154cSBram Moolenaar let l = split(execute('Xlist 1', ''), "\n") 164f9ae154cSBram Moolenaar call assert_match('^ 1 [^\\/]\{-}:', l[0]) 165f9ae154cSBram Moolenaar 166ee85df37SBram Moolenaar " Error cases 167ee85df37SBram Moolenaar call assert_fails('Xlist abc', 'E488:') 1682b946c9fSBram Moolenaarendfunc 169da59dd5dSBram Moolenaar 1702b946c9fSBram Moolenaarfunc Test_clist() 171da59dd5dSBram Moolenaar call XlistTests('c') 172da59dd5dSBram Moolenaar call XlistTests('l') 1732b946c9fSBram Moolenaarendfunc 174da59dd5dSBram Moolenaar 175da59dd5dSBram Moolenaar" Tests for the :colder, :cnewer, :lolder and :lnewer commands 176da59dd5dSBram Moolenaar" Note that this test assumes that a quickfix/location list is 177cfc0a350SBram Moolenaar" already set by the caller. 1782b946c9fSBram Moolenaarfunc XageTests(cchar) 1793ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 180da59dd5dSBram Moolenaar 18187f59b09SBram Moolenaar if a:cchar == 'l' 18287f59b09SBram Moolenaar " No location list for the current window 18387f59b09SBram Moolenaar call assert_fails('lolder', 'E776:') 18487f59b09SBram Moolenaar call assert_fails('lnewer', 'E776:') 18587f59b09SBram Moolenaar endif 18687f59b09SBram Moolenaar 187cf1ba35fSBram Moolenaar let list = [{'bufnr': bufnr('%'), 'lnum': 1}] 188b6fa30ccSBram Moolenaar call g:Xsetlist(list) 189b6fa30ccSBram Moolenaar 190da59dd5dSBram Moolenaar " Jumping to a non existent list should return error 1913ef5bf7dSBram Moolenaar silent! Xolder 99 192da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack') 193da59dd5dSBram Moolenaar 1943ef5bf7dSBram Moolenaar silent! Xnewer 99 195da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E381: At top of quickfix stack') 196da59dd5dSBram Moolenaar 197da59dd5dSBram Moolenaar " Add three quickfix/location lists 1983ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1'] 1993ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile2:2:2:Line2'] 2003ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile3:3:1:Line3'] 201da59dd5dSBram Moolenaar 202da59dd5dSBram Moolenaar " Go back two lists 2033ef5bf7dSBram Moolenaar Xolder 2043ef5bf7dSBram Moolenaar let l = g:Xgetlist() 205da59dd5dSBram Moolenaar call assert_equal('Line2', l[0].text) 206da59dd5dSBram Moolenaar 207da59dd5dSBram Moolenaar " Go forward two lists 2083ef5bf7dSBram Moolenaar Xnewer 2093ef5bf7dSBram Moolenaar let l = g:Xgetlist() 210da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 211da59dd5dSBram Moolenaar 212da59dd5dSBram Moolenaar " Test for the optional count argument 2133ef5bf7dSBram Moolenaar Xolder 2 2143ef5bf7dSBram Moolenaar let l = g:Xgetlist() 215da59dd5dSBram Moolenaar call assert_equal('Line1', l[0].text) 216da59dd5dSBram Moolenaar 2173ef5bf7dSBram Moolenaar Xnewer 2 2183ef5bf7dSBram Moolenaar let l = g:Xgetlist() 219da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 2202b946c9fSBram Moolenaarendfunc 221da59dd5dSBram Moolenaar 2222b946c9fSBram Moolenaarfunc Test_cage() 223da59dd5dSBram Moolenaar call XageTests('c') 224da59dd5dSBram Moolenaar call XageTests('l') 2252b946c9fSBram Moolenaarendfunc 226da59dd5dSBram Moolenaar 227da59dd5dSBram Moolenaar" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen 228da59dd5dSBram Moolenaar" commands 2292b946c9fSBram Moolenaarfunc XwindowTests(cchar) 2303ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 231da59dd5dSBram Moolenaar 232b6fa30ccSBram Moolenaar " Opening the location list window without any errors should fail 233b6fa30ccSBram Moolenaar if a:cchar == 'l' 234b6fa30ccSBram Moolenaar call assert_fails('lopen', 'E776:') 235b6fa30ccSBram Moolenaar endif 236b6fa30ccSBram Moolenaar 237da59dd5dSBram Moolenaar " Create a list with no valid entries 2383ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 239da59dd5dSBram Moolenaar 240da59dd5dSBram Moolenaar " Quickfix/Location window should not open with no valid errors 2413ef5bf7dSBram Moolenaar Xwindow 242da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 243da59dd5dSBram Moolenaar 244da59dd5dSBram Moolenaar " Create a list with valid entries 2453ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 2463ef5bf7dSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 247da59dd5dSBram Moolenaar 248da59dd5dSBram Moolenaar " Open the window 2493ef5bf7dSBram Moolenaar Xwindow 250da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 251da59dd5dSBram Moolenaar \ getline('.') ==# 'Xtestfile1|1 col 3| Line1') 252537ef084SBram Moolenaar redraw! 253da59dd5dSBram Moolenaar 254da59dd5dSBram Moolenaar " Close the window 2553ef5bf7dSBram Moolenaar Xclose 256da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 257da59dd5dSBram Moolenaar 258da59dd5dSBram Moolenaar " Create a list with no valid entries 2593ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 260da59dd5dSBram Moolenaar 261da59dd5dSBram Moolenaar " Open the window 2623ef5bf7dSBram Moolenaar Xopen 5 263da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1' 264c05d1c04SBram Moolenaar \ && winheight(0) == 5) 265da59dd5dSBram Moolenaar 266da59dd5dSBram Moolenaar " Opening the window again, should move the cursor to that window 267da59dd5dSBram Moolenaar wincmd t 2683ef5bf7dSBram Moolenaar Xopen 7 269da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 270c05d1c04SBram Moolenaar \ winheight(0) == 7 && 271da59dd5dSBram Moolenaar \ getline('.') ==# '|| non-error 1') 272da59dd5dSBram Moolenaar 27315a7bdcbSBram Moolenaar " :cnext in quickfix window should move to the next entry 27415a7bdcbSBram Moolenaar Xnext 27515a7bdcbSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 276da59dd5dSBram Moolenaar 277da59dd5dSBram Moolenaar " Calling cwindow should close the quickfix window with no valid errors 2783ef5bf7dSBram Moolenaar Xwindow 279da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 280b6fa30ccSBram Moolenaar 281f9ae154cSBram Moolenaar " Specifying the width should adjust the width for a vertically split 282f9ae154cSBram Moolenaar " quickfix window. 283f9ae154cSBram Moolenaar vert Xopen 284f9ae154cSBram Moolenaar call assert_equal(10, winwidth(0)) 285f9ae154cSBram Moolenaar vert Xopen 12 286f9ae154cSBram Moolenaar call assert_equal(12, winwidth(0)) 287f9ae154cSBram Moolenaar Xclose 288f9ae154cSBram Moolenaar 2895d3c9f8cSBram Moolenaar " Horizontally or vertically splitting the quickfix window should create a 2905d3c9f8cSBram Moolenaar " normal window/buffer 2915d3c9f8cSBram Moolenaar Xopen 2925d3c9f8cSBram Moolenaar wincmd s 2935d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].quickfix) 2945d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].loclist) 2955d3c9f8cSBram Moolenaar call assert_notequal('quickfix', &buftype) 2965d3c9f8cSBram Moolenaar close 2975d3c9f8cSBram Moolenaar Xopen 2985d3c9f8cSBram Moolenaar wincmd v 2995d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].quickfix) 3005d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].loclist) 3015d3c9f8cSBram Moolenaar call assert_notequal('quickfix', &buftype) 3025d3c9f8cSBram Moolenaar close 3035d3c9f8cSBram Moolenaar Xopen 3045d3c9f8cSBram Moolenaar Xclose 3055d3c9f8cSBram Moolenaar 306b6fa30ccSBram Moolenaar if a:cchar == 'c' 307b6fa30ccSBram Moolenaar " Opening the quickfix window in multiple tab pages should reuse the 308b6fa30ccSBram Moolenaar " quickfix buffer 309b6fa30ccSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 310b6fa30ccSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 311b6fa30ccSBram Moolenaar Xopen 312b6fa30ccSBram Moolenaar let qfbufnum = bufnr('%') 313b6fa30ccSBram Moolenaar tabnew 314b6fa30ccSBram Moolenaar Xopen 315b6fa30ccSBram Moolenaar call assert_equal(qfbufnum, bufnr('%')) 316b6fa30ccSBram Moolenaar new | only | tabonly 317b6fa30ccSBram Moolenaar endif 3182b946c9fSBram Moolenaarendfunc 319da59dd5dSBram Moolenaar 3202b946c9fSBram Moolenaarfunc Test_cwindow() 321da59dd5dSBram Moolenaar call XwindowTests('c') 322da59dd5dSBram Moolenaar call XwindowTests('l') 3232b946c9fSBram Moolenaarendfunc 324da59dd5dSBram Moolenaar 32536d50222SBram Moolenaarfunc Test_copenHeight() 32636d50222SBram Moolenaar copen 32736d50222SBram Moolenaar wincmd H 32836d50222SBram Moolenaar let height = winheight(0) 32936d50222SBram Moolenaar copen 10 33036d50222SBram Moolenaar call assert_equal(height, winheight(0)) 33136d50222SBram Moolenaar quit 33236d50222SBram Moolenaarendfunc 33336d50222SBram Moolenaar 3341142a31bSBram Moolenaarfunc Test_copenHeight_tabline() 3351142a31bSBram Moolenaar set tabline=foo showtabline=2 3361142a31bSBram Moolenaar copen 3371142a31bSBram Moolenaar wincmd H 3381142a31bSBram Moolenaar let height = winheight(0) 3391142a31bSBram Moolenaar copen 10 3401142a31bSBram Moolenaar call assert_equal(height, winheight(0)) 3411142a31bSBram Moolenaar quit 3421142a31bSBram Moolenaar set tabline& showtabline& 3431142a31bSBram Moolenaarendfunc 3441142a31bSBram Moolenaar 3451142a31bSBram Moolenaar 346da59dd5dSBram Moolenaar" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile 347da59dd5dSBram Moolenaar" commands. 3482b946c9fSBram Moolenaarfunc XfileTests(cchar) 3493ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 350da59dd5dSBram Moolenaar 351da59dd5dSBram Moolenaar call writefile(['Xtestfile1:700:10:Line 700', 352da59dd5dSBram Moolenaar \ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1') 353da59dd5dSBram Moolenaar 354da59dd5dSBram Moolenaar enew! 3553ef5bf7dSBram Moolenaar Xfile Xqftestfile1 3563ef5bf7dSBram Moolenaar let l = g:Xgetlist() 357da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 358da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 359da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 360da59dd5dSBram Moolenaar 361049cba9eSBram Moolenaar " Test with a non existent file 362e2e4075fSBram Moolenaar call assert_fails('Xfile non_existent_file', 'E40:') 363049cba9eSBram Moolenaar 364da59dd5dSBram Moolenaar " Run cfile/lfile from a modified buffer 365da59dd5dSBram Moolenaar enew! 366da59dd5dSBram Moolenaar silent! put ='Quickfix' 3673ef5bf7dSBram Moolenaar silent! Xfile Xqftestfile1 368da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)') 369da59dd5dSBram Moolenaar 370da59dd5dSBram Moolenaar call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1') 3713ef5bf7dSBram Moolenaar Xaddfile Xqftestfile1 3723ef5bf7dSBram Moolenaar let l = g:Xgetlist() 373da59dd5dSBram Moolenaar call assert_true(len(l) == 3 && 374da59dd5dSBram Moolenaar \ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900') 375da59dd5dSBram Moolenaar 376da59dd5dSBram Moolenaar call writefile(['Xtestfile1:222:77:Line 222', 377da59dd5dSBram Moolenaar \ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1') 378da59dd5dSBram Moolenaar 379da59dd5dSBram Moolenaar enew! 3803ef5bf7dSBram Moolenaar Xgetfile Xqftestfile1 3813ef5bf7dSBram Moolenaar let l = g:Xgetlist() 382da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 383da59dd5dSBram Moolenaar \ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' && 384da59dd5dSBram Moolenaar \ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333') 385da59dd5dSBram Moolenaar 38670077dd1SBram Moolenaar " Test for a file with a long line and without a newline at the end 38770077dd1SBram Moolenaar let text = repeat('x', 1024) 38870077dd1SBram Moolenaar let t = 'a.txt:18:' . text 38970077dd1SBram Moolenaar call writefile([t], 'Xqftestfile1', 'b') 39070077dd1SBram Moolenaar silent! Xfile Xqftestfile1 39170077dd1SBram Moolenaar call assert_equal(text, g:Xgetlist()[0].text) 39270077dd1SBram Moolenaar 393da59dd5dSBram Moolenaar call delete('Xqftestfile1') 3942b946c9fSBram Moolenaarendfunc 395da59dd5dSBram Moolenaar 3962b946c9fSBram Moolenaarfunc Test_cfile() 397da59dd5dSBram Moolenaar call XfileTests('c') 398da59dd5dSBram Moolenaar call XfileTests('l') 3992b946c9fSBram Moolenaarendfunc 400da59dd5dSBram Moolenaar 401da59dd5dSBram Moolenaar" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and 402da59dd5dSBram Moolenaar" :lgetbuffer commands. 4032b946c9fSBram Moolenaarfunc XbufferTests(cchar) 4043ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 405da59dd5dSBram Moolenaar 406da59dd5dSBram Moolenaar enew! 407da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile7:700:10:Line 700', 408da59dd5dSBram Moolenaar \ 'Xtestfile8:800:15:Line 800']) 4093ef5bf7dSBram Moolenaar Xbuffer! 4103ef5bf7dSBram Moolenaar let l = g:Xgetlist() 411da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 412da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 413da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 414da59dd5dSBram Moolenaar 415da59dd5dSBram Moolenaar enew! 416da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile9:900:55:Line 900', 417da59dd5dSBram Moolenaar \ 'Xtestfile10:950:66:Line 950']) 4183ef5bf7dSBram Moolenaar Xgetbuffer 4193ef5bf7dSBram Moolenaar let l = g:Xgetlist() 420da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 421da59dd5dSBram Moolenaar \ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' && 422da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950') 423da59dd5dSBram Moolenaar 424da59dd5dSBram Moolenaar enew! 425da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile11:700:20:Line 700', 426da59dd5dSBram Moolenaar \ 'Xtestfile12:750:25:Line 750']) 4273ef5bf7dSBram Moolenaar Xaddbuffer 4283ef5bf7dSBram Moolenaar let l = g:Xgetlist() 429da59dd5dSBram Moolenaar call assert_true(len(l) == 4 && 430da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' && 431da59dd5dSBram Moolenaar \ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' && 432da59dd5dSBram Moolenaar \ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750') 433ab47c61fSBram Moolenaar enew! 434da59dd5dSBram Moolenaar 435ee85df37SBram Moolenaar " Check for invalid buffer 436ee85df37SBram Moolenaar call assert_fails('Xbuffer 199', 'E474:') 437ee85df37SBram Moolenaar 438ee85df37SBram Moolenaar " Check for unloaded buffer 439ee85df37SBram Moolenaar edit Xtestfile1 440ee85df37SBram Moolenaar let bnr = bufnr('%') 441ee85df37SBram Moolenaar enew! 442ee85df37SBram Moolenaar call assert_fails('Xbuffer ' . bnr, 'E681:') 443ee85df37SBram Moolenaar 444ee85df37SBram Moolenaar " Check for invalid range 445ee85df37SBram Moolenaar " Using Xbuffer will not run the range check in the cbuffer/lbuffer 446ee85df37SBram Moolenaar " commands. So directly call the commands. 447ee85df37SBram Moolenaar if (a:cchar == 'c') 448ee85df37SBram Moolenaar call assert_fails('900,999cbuffer', 'E16:') 449ee85df37SBram Moolenaar else 450ee85df37SBram Moolenaar call assert_fails('900,999lbuffer', 'E16:') 451ee85df37SBram Moolenaar endif 4522b946c9fSBram Moolenaarendfunc 453da59dd5dSBram Moolenaar 4542b946c9fSBram Moolenaarfunc Test_cbuffer() 455da59dd5dSBram Moolenaar call XbufferTests('c') 456da59dd5dSBram Moolenaar call XbufferTests('l') 4572b946c9fSBram Moolenaarendfunc 458da59dd5dSBram Moolenaar 4592b946c9fSBram Moolenaarfunc XexprTests(cchar) 4600fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 4610fcc7c6dSBram Moolenaar 4620fcc7c6dSBram Moolenaar call assert_fails('Xexpr 10', 'E777:') 4632b946c9fSBram Moolenaarendfunc 4640fcc7c6dSBram Moolenaar 4652b946c9fSBram Moolenaarfunc Test_cexpr() 4660fcc7c6dSBram Moolenaar call XexprTests('c') 4670fcc7c6dSBram Moolenaar call XexprTests('l') 4682b946c9fSBram Moolenaarendfunc 4690fcc7c6dSBram Moolenaar 4700fcc7c6dSBram Moolenaar" Tests for :cnext, :cprev, :cfirst, :clast commands 4712b946c9fSBram Moolenaarfunc Xtest_browse(cchar) 4720fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 4730fcc7c6dSBram Moolenaar 47474240d3fSBram Moolenaar call g:Xsetlist([], 'f') 475b6fa30ccSBram Moolenaar " Jumping to first or next location list entry without any error should 476b6fa30ccSBram Moolenaar " result in failure 47774240d3fSBram Moolenaar if a:cchar == 'c' 47874240d3fSBram Moolenaar let err = 'E42:' 47915a7bdcbSBram Moolenaar let cmd = '$cc' 48074240d3fSBram Moolenaar else 48174240d3fSBram Moolenaar let err = 'E776:' 48215a7bdcbSBram Moolenaar let cmd = '$ll' 483b6fa30ccSBram Moolenaar endif 48474240d3fSBram Moolenaar call assert_fails('Xnext', err) 48574240d3fSBram Moolenaar call assert_fails('Xprev', err) 48674240d3fSBram Moolenaar call assert_fails('Xnfile', err) 48774240d3fSBram Moolenaar call assert_fails('Xpfile', err) 48815a7bdcbSBram Moolenaar call assert_fails(cmd, err) 489b6fa30ccSBram Moolenaar 490f9ae154cSBram Moolenaar Xexpr '' 491f9ae154cSBram Moolenaar call assert_fails(cmd, 'E42:') 492f9ae154cSBram Moolenaar 4930fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile1') 4940fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile2') 4950fcc7c6dSBram Moolenaar 4960fcc7c6dSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 4970fcc7c6dSBram Moolenaar \ 'Xqftestfile1:6:Line6', 4980fcc7c6dSBram Moolenaar \ 'Xqftestfile2:10:Line10', 49999895eacSBram Moolenaar \ 'Xqftestfile2:11:Line11', 50099895eacSBram Moolenaar \ 'RegularLine1', 50199895eacSBram Moolenaar \ 'RegularLine2'] 5020fcc7c6dSBram Moolenaar 5030fcc7c6dSBram Moolenaar Xfirst 504818fc9adSBram Moolenaar call assert_fails('-5Xcc', 'E16:') 505e2e4075fSBram Moolenaar call assert_fails('Xprev', 'E553:') 506e2e4075fSBram Moolenaar call assert_fails('Xpfile', 'E553:') 5070fcc7c6dSBram Moolenaar Xnfile 508bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 5090fcc7c6dSBram Moolenaar call assert_equal(10, line('.')) 5100fcc7c6dSBram Moolenaar Xpfile 511bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 5120fcc7c6dSBram Moolenaar call assert_equal(6, line('.')) 51374240d3fSBram Moolenaar 5Xcc 51474240d3fSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx':0}).idx) 51574240d3fSBram Moolenaar 2Xcc 51674240d3fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx':0}).idx) 517f9ae154cSBram Moolenaar if a:cchar == 'c' 518f9ae154cSBram Moolenaar cc 519f9ae154cSBram Moolenaar else 520f9ae154cSBram Moolenaar ll 521f9ae154cSBram Moolenaar endif 522f9ae154cSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx':0}).idx) 52374240d3fSBram Moolenaar 10Xcc 52474240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'idx':0}).idx) 5250fcc7c6dSBram Moolenaar Xlast 52699895eacSBram Moolenaar Xprev 527bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 5280fcc7c6dSBram Moolenaar call assert_equal(11, line('.')) 529e2e4075fSBram Moolenaar call assert_fails('Xnext', 'E553:') 530e2e4075fSBram Moolenaar call assert_fails('Xnfile', 'E553:') 531f9ae154cSBram Moolenaar " To process the range using quickfix list entries, directly use the 532f9ae154cSBram Moolenaar " quickfix commands (don't use the user defined commands) 533f9ae154cSBram Moolenaar if a:cchar == 'c' 534f9ae154cSBram Moolenaar $cc 535f9ae154cSBram Moolenaar else 536f9ae154cSBram Moolenaar $ll 537f9ae154cSBram Moolenaar endif 538f9ae154cSBram Moolenaar call assert_equal(6, g:Xgetlist({'idx':0}).idx) 5390fcc7c6dSBram Moolenaar Xrewind 540bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 5410fcc7c6dSBram Moolenaar call assert_equal(5, line('.')) 5420fcc7c6dSBram Moolenaar 54399895eacSBram Moolenaar 10Xnext 544bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 54599895eacSBram Moolenaar call assert_equal(11, line('.')) 54699895eacSBram Moolenaar 10Xprev 547bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 54899895eacSBram Moolenaar call assert_equal(5, line('.')) 54999895eacSBram Moolenaar 55074240d3fSBram Moolenaar " Jumping to an error from the error window using cc command 55174240d3fSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 55274240d3fSBram Moolenaar \ 'Xqftestfile1:6:Line6', 55374240d3fSBram Moolenaar \ 'Xqftestfile2:10:Line10', 55474240d3fSBram Moolenaar \ 'Xqftestfile2:11:Line11'] 55574240d3fSBram Moolenaar Xopen 55674240d3fSBram Moolenaar 10Xcc 55774240d3fSBram Moolenaar call assert_equal(11, line('.')) 558bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 559f0cee197SBram Moolenaar Xopen 560f0cee197SBram Moolenaar call cursor(2, 1) 561f0cee197SBram Moolenaar if a:cchar == 'c' 562f0cee197SBram Moolenaar .cc 563f0cee197SBram Moolenaar else 564f0cee197SBram Moolenaar .ll 565f0cee197SBram Moolenaar endif 566f0cee197SBram Moolenaar call assert_equal(6, line('.')) 567bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 56874240d3fSBram Moolenaar 56974240d3fSBram Moolenaar " Jumping to an error from the error window (when only the error window is 57074240d3fSBram Moolenaar " present) 57174240d3fSBram Moolenaar Xopen | only 57274240d3fSBram Moolenaar Xlast 1 57374240d3fSBram Moolenaar call assert_equal(5, line('.')) 574bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 57574240d3fSBram Moolenaar 576ee85df37SBram Moolenaar Xexpr "" 577ee85df37SBram Moolenaar call assert_fails('Xnext', 'E42:') 578ee85df37SBram Moolenaar 5790fcc7c6dSBram Moolenaar call delete('Xqftestfile1') 5800fcc7c6dSBram Moolenaar call delete('Xqftestfile2') 581fc2b270cSBram Moolenaar 582fc2b270cSBram Moolenaar " Should be able to use next/prev with invalid entries 583fc2b270cSBram Moolenaar Xexpr "" 584fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 585fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 58688a3e2b2SBram Moolenaar Xaddexpr ['foo', 'bar', 'baz', 'quux', 'sh|moo'] 587fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'size' : 0}).size) 588fc2b270cSBram Moolenaar Xlast 589fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx' : 0}).idx) 590fc2b270cSBram Moolenaar Xfirst 591fc2b270cSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 592fc2b270cSBram Moolenaar 2Xnext 593fc2b270cSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 5942b946c9fSBram Moolenaarendfunc 5950fcc7c6dSBram Moolenaar 5962b946c9fSBram Moolenaarfunc Test_browse() 5970fcc7c6dSBram Moolenaar call Xtest_browse('c') 5980fcc7c6dSBram Moolenaar call Xtest_browse('l') 5992b946c9fSBram Moolenaarendfunc 6000fcc7c6dSBram Moolenaar 6012b946c9fSBram Moolenaarfunc Test_nomem() 6028e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_dirname_start'), 0, 0) 603a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 60475bdf6aaSBram Moolenaar 605ce90e36fSBram Moolenaar call GetAllocId('qf_dirname_now')->test_alloc_fail(0, 0) 606a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 60775bdf6aaSBram Moolenaar 6088e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_namebuf'), 0, 0) 609a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 61075bdf6aaSBram Moolenaar 6118e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_errmsg'), 0, 0) 612a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 61375bdf6aaSBram Moolenaar 6148e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_pattern'), 0, 0) 615a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 61675bdf6aaSBram Moolenaar 61775bdf6aaSBram Moolenaarendfunc 61875bdf6aaSBram Moolenaar 6192b946c9fSBram Moolenaarfunc s:test_xhelpgrep(cchar) 620049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 621049cba9eSBram Moolenaar Xhelpgrep quickfix 622049cba9eSBram Moolenaar Xopen 623049cba9eSBram Moolenaar if a:cchar == 'c' 624049cba9eSBram Moolenaar let title_text = ':helpgrep quickfix' 625049cba9eSBram Moolenaar else 626049cba9eSBram Moolenaar let title_text = ':lhelpgrep quickfix' 627049cba9eSBram Moolenaar endif 628049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ title_text, w:quickfix_title) 62999895eacSBram Moolenaar 63099895eacSBram Moolenaar " Jumping to a help topic should open the help window 63199895eacSBram Moolenaar only 63299895eacSBram Moolenaar Xnext 63399895eacSBram Moolenaar call assert_true(&buftype == 'help') 63499895eacSBram Moolenaar call assert_true(winnr('$') == 2) 63599895eacSBram Moolenaar " Jumping to the next match should reuse the help window 63699895eacSBram Moolenaar Xnext 63799895eacSBram Moolenaar call assert_true(&buftype == 'help') 63899895eacSBram Moolenaar call assert_true(winnr() == 1) 63999895eacSBram Moolenaar call assert_true(winnr('$') == 2) 64099895eacSBram Moolenaar " Jumping to the next match from the quickfix window should reuse the help 64199895eacSBram Moolenaar " window 64299895eacSBram Moolenaar Xopen 64399895eacSBram Moolenaar Xnext 64499895eacSBram Moolenaar call assert_true(&buftype == 'help') 64599895eacSBram Moolenaar call assert_true(winnr() == 1) 64699895eacSBram Moolenaar call assert_true(winnr('$') == 2) 64799895eacSBram Moolenaar 64862ef7974SBram Moolenaar " This wipes out the buffer, make sure that doesn't cause trouble. 649049cba9eSBram Moolenaar Xclose 650ee85df37SBram Moolenaar 651f9ae154cSBram Moolenaar " When the current window is vertically split, jumping to a help match 652f9ae154cSBram Moolenaar " should open the help window at the top. 653f9ae154cSBram Moolenaar only | enew 654f9ae154cSBram Moolenaar let w1 = win_getid() 655f9ae154cSBram Moolenaar vert new 656f9ae154cSBram Moolenaar let w2 = win_getid() 657f9ae154cSBram Moolenaar Xnext 658f9ae154cSBram Moolenaar let w3 = win_getid() 659f9ae154cSBram Moolenaar call assert_true(&buftype == 'help') 660f9ae154cSBram Moolenaar call assert_true(winnr() == 1) 661a106e6cdSBram Moolenaar " See jump_to_help_window() for details 662a106e6cdSBram Moolenaar let w2_width = winwidth(w2) 663a106e6cdSBram Moolenaar if w2_width != &columns && w2_width < 80 664a106e6cdSBram Moolenaar call assert_equal(['col', [['leaf', w3], 665a106e6cdSBram Moolenaar \ ['row', [['leaf', w2], ['leaf', w1]]]]], winlayout()) 666a106e6cdSBram Moolenaar else 667a106e6cdSBram Moolenaar call assert_equal(['row', [['col', [['leaf', w3], ['leaf', w2]]], 668a106e6cdSBram Moolenaar \ ['leaf', w1]]] , winlayout()) 669a106e6cdSBram Moolenaar endif 670f9ae154cSBram Moolenaar 671f9ae154cSBram Moolenaar new | only 672f9ae154cSBram Moolenaar set buftype=help 673f9ae154cSBram Moolenaar set modified 674f9ae154cSBram Moolenaar call assert_fails('Xnext', 'E37:') 675f9ae154cSBram Moolenaar set nomodified 676f9ae154cSBram Moolenaar new | only 677f9ae154cSBram Moolenaar 678b4d5fbabSBram Moolenaar if a:cchar == 'l' 679b4d5fbabSBram Moolenaar " When a help window is present, running :lhelpgrep should reuse the 680b4d5fbabSBram Moolenaar " help window and not the current window 681b4d5fbabSBram Moolenaar new | only 682b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 683b4d5fbabSBram Moolenaar help index.txt 684b4d5fbabSBram Moolenaar wincmd w 685b4d5fbabSBram Moolenaar lhelpgrep quickfix 686b4d5fbabSBram Moolenaar call assert_equal(1, winnr()) 687b4d5fbabSBram Moolenaar call assert_notequal([], getloclist(1)) 688b4d5fbabSBram Moolenaar call assert_equal([], getloclist(2)) 689b4d5fbabSBram Moolenaar endif 690b4d5fbabSBram Moolenaar 69199895eacSBram Moolenaar new | only 69299895eacSBram Moolenaar 693ee85df37SBram Moolenaar " Search for non existing help string 694ee85df37SBram Moolenaar call assert_fails('Xhelpgrep a1b2c3', 'E480:') 695108e7b42SBram Moolenaar " Invalid regular expression 6969b7bf9e9SBram Moolenaar call assert_fails('Xhelpgrep \@<!', 'E866:') 6972b946c9fSBram Moolenaarendfunc 698049cba9eSBram Moolenaar 6992b946c9fSBram Moolenaarfunc Test_helpgrep() 700049cba9eSBram Moolenaar call s:test_xhelpgrep('c') 701cf25fdb8SBram Moolenaar helpclose 702049cba9eSBram Moolenaar call s:test_xhelpgrep('l') 70362ef7974SBram Moolenaarendfunc 70475bdf6aaSBram Moolenaar 705e5a2dc87SBram Moolenaardef Test_helpgrep_vim9_restore_cpo() 706e5a2dc87SBram Moolenaar assert_equal('aABceFs', &cpo) 707e5a2dc87SBram Moolenaar 708e5a2dc87SBram Moolenaar var rtp_save = &rtp 709e5a2dc87SBram Moolenaar var dir = 'Xruntime/after' 710e5a2dc87SBram Moolenaar &rtp ..= ',' .. dir 711e5a2dc87SBram Moolenaar mkdir(dir .. '/ftplugin', 'p') 71239f3b141SBram Moolenaar writefile(['vim9script'], dir .. '/ftplugin/qf.vim') 713e5a2dc87SBram Moolenaar filetype plugin on 714e5a2dc87SBram Moolenaar silent helpgrep grail 715e5a2dc87SBram Moolenaar cwindow 716e5a2dc87SBram Moolenaar silent helpgrep grail 717e5a2dc87SBram Moolenaar 718e5a2dc87SBram Moolenaar assert_equal('aABceFs', &cpo) 719e5a2dc87SBram Moolenaar delete(dir, 'rf') 720e5a2dc87SBram Moolenaar &rtp = rtp_save 721e5a2dc87SBram Moolenaar cclose 722e5a2dc87SBram Moolenaar helpclose 723e5a2dc87SBram Moolenaarenddef 724e5a2dc87SBram Moolenaar 7256920c72dSBram Moolenaarfunc Test_errortitle() 7266920c72dSBram Moolenaar augroup QfBufWinEnter 7276920c72dSBram Moolenaar au! 7286920c72dSBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7296920c72dSBram Moolenaar augroup END 7306920c72dSBram Moolenaar copen 7316920c72dSBram Moolenaar let a=[{'lnum': 308, 'bufnr': bufnr(''), 'col': 58, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': ' au BufWinEnter * :let g:a=get(w:, ''quickfix_title'', ''NONE'')'}] 7326920c72dSBram Moolenaar call setqflist(a) 7336920c72dSBram Moolenaar call assert_equal(':setqflist()', g:a) 7346920c72dSBram Moolenaar augroup QfBufWinEnter 7356920c72dSBram Moolenaar au! 7366920c72dSBram Moolenaar augroup END 7376920c72dSBram Moolenaar augroup! QfBufWinEnter 7386920c72dSBram Moolenaarendfunc 739e27dba49SBram Moolenaar 7405584df65SBram Moolenaarfunc Test_vimgreptitle() 7415584df65SBram Moolenaar augroup QfBufWinEnter 7425584df65SBram Moolenaar au! 7435584df65SBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7445584df65SBram Moolenaar augroup END 7455584df65SBram Moolenaar try 7465584df65SBram Moolenaar vimgrep /pattern/j file 7475584df65SBram Moolenaar catch /E480/ 7485584df65SBram Moolenaar endtry 7495584df65SBram Moolenaar copen 7505584df65SBram Moolenaar call assert_equal(': vimgrep /pattern/j file', g:a) 7515584df65SBram Moolenaar augroup QfBufWinEnter 7525584df65SBram Moolenaar au! 7535584df65SBram Moolenaar augroup END 7545584df65SBram Moolenaar augroup! QfBufWinEnter 7555584df65SBram Moolenaarendfunc 7565584df65SBram Moolenaar 7572b946c9fSBram Moolenaarfunc XqfTitleTests(cchar) 7583ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 759e27dba49SBram Moolenaar 7603ef5bf7dSBram Moolenaar Xgetexpr ['file:1:1:message'] 7613ef5bf7dSBram Moolenaar let l = g:Xgetlist() 762e27dba49SBram Moolenaar if a:cchar == 'c' 763e27dba49SBram Moolenaar call setqflist(l, 'r') 764e27dba49SBram Moolenaar else 765e27dba49SBram Moolenaar call setloclist(0, l, 'r') 766e27dba49SBram Moolenaar endif 767e27dba49SBram Moolenaar 7683ef5bf7dSBram Moolenaar Xopen 769e27dba49SBram Moolenaar if a:cchar == 'c' 770e27dba49SBram Moolenaar let title = ':setqflist()' 771e27dba49SBram Moolenaar else 772e27dba49SBram Moolenaar let title = ':setloclist()' 773e27dba49SBram Moolenaar endif 774e27dba49SBram Moolenaar call assert_equal(title, w:quickfix_title) 7753ef5bf7dSBram Moolenaar Xclose 7762b946c9fSBram Moolenaarendfunc 777e27dba49SBram Moolenaar 778e27dba49SBram Moolenaar" Tests for quickfix window's title 7792b946c9fSBram Moolenaarfunc Test_qf_title() 780e27dba49SBram Moolenaar call XqfTitleTests('c') 781e27dba49SBram Moolenaar call XqfTitleTests('l') 7822b946c9fSBram Moolenaarendfunc 783e27dba49SBram Moolenaar 784e27dba49SBram Moolenaar" Tests for 'errorformat' 7852b946c9fSBram Moolenaarfunc Test_efm() 786e27dba49SBram Moolenaar let save_efm = &efm 787e27dba49SBram Moolenaar set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%# 788e27dba49SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 789e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 790e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 791e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC'] 792e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 793e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 794e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY'] 795e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 796e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l) 797e27dba49SBram Moolenaar let &efm = save_efm 7982b946c9fSBram Moolenaarendfunc 7991ff2b64bSBram Moolenaar 8001ff2b64bSBram Moolenaar" This will test for problems in quickfix: 8011ff2b64bSBram Moolenaar" A. incorrectly copying location lists which caused the location list to show 8021ff2b64bSBram Moolenaar" a different name than the file that was actually being displayed. 8031ff2b64bSBram Moolenaar" B. not reusing the window for which the location list window is opened but 8041ff2b64bSBram Moolenaar" instead creating new windows. 8051ff2b64bSBram Moolenaar" C. make sure that the location list window is not reused instead of the 8061ff2b64bSBram Moolenaar" window it belongs to. 8071ff2b64bSBram Moolenaar" 8081ff2b64bSBram Moolenaar" Set up the test environment: 8092b946c9fSBram Moolenaarfunc ReadTestProtocol(name) 8101ff2b64bSBram Moolenaar let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '') 8111ff2b64bSBram Moolenaar let word = substitute(base, '\v(.*)\..*', '\1', '') 8121ff2b64bSBram Moolenaar 8131ff2b64bSBram Moolenaar setl modifiable 8141ff2b64bSBram Moolenaar setl noreadonly 8151ff2b64bSBram Moolenaar setl noswapfile 8161ff2b64bSBram Moolenaar setl bufhidden=delete 8171ff2b64bSBram Moolenaar %del _ 8181ff2b64bSBram Moolenaar " For problem 2: 8191ff2b64bSBram Moolenaar " 'buftype' has to be set to reproduce the constant opening of new windows 8201ff2b64bSBram Moolenaar setl buftype=nofile 8211ff2b64bSBram Moolenaar 8221ff2b64bSBram Moolenaar call setline(1, word) 8231ff2b64bSBram Moolenaar 8241ff2b64bSBram Moolenaar setl nomodified 8251ff2b64bSBram Moolenaar setl nomodifiable 8261ff2b64bSBram Moolenaar setl readonly 8271ff2b64bSBram Moolenaar exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '') 8282b946c9fSBram Moolenaarendfunc 8291ff2b64bSBram Moolenaar 8302b946c9fSBram Moolenaarfunc Test_locationlist() 8311ff2b64bSBram Moolenaar enew 8321ff2b64bSBram Moolenaar 8331ff2b64bSBram Moolenaar augroup testgroup 8341ff2b64bSBram Moolenaar au! 8351ff2b64bSBram Moolenaar autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>")) 8361ff2b64bSBram Moolenaar augroup END 8371ff2b64bSBram Moolenaar 8381ff2b64bSBram Moolenaar let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ] 8391ff2b64bSBram Moolenaar 8401ff2b64bSBram Moolenaar let qflist = [] 8411ff2b64bSBram Moolenaar for word in words 8421ff2b64bSBram Moolenaar call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', }) 8431ff2b64bSBram Moolenaar " NOTE: problem 1: 8441ff2b64bSBram Moolenaar " intentionally not setting 'lnum' so that the quickfix entries are not 8451ff2b64bSBram Moolenaar " valid 846aad222c9SBram Moolenaar eval qflist->setloclist(0, ' ') 8471ff2b64bSBram Moolenaar endfor 8481ff2b64bSBram Moolenaar 8491ff2b64bSBram Moolenaar " Test A 8501ff2b64bSBram Moolenaar lrewind 8511ff2b64bSBram Moolenaar enew 8521ff2b64bSBram Moolenaar lopen 85399895eacSBram Moolenaar 4lnext 8541ff2b64bSBram Moolenaar vert split 8551ff2b64bSBram Moolenaar wincmd L 8561ff2b64bSBram Moolenaar lopen 8571ff2b64bSBram Moolenaar wincmd p 8581ff2b64bSBram Moolenaar lnext 8591ff2b64bSBram Moolenaar let fileName = expand("%") 8601ff2b64bSBram Moolenaar wincmd p 8611ff2b64bSBram Moolenaar let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '') 8621ff2b64bSBram Moolenaar let fileName = substitute(fileName, '\\', '/', 'g') 8631ff2b64bSBram Moolenaar let locationListFileName = substitute(locationListFileName, '\\', '/', 'g') 8641ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", fileName) 8651ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", locationListFileName) 8661ff2b64bSBram Moolenaar 8671ff2b64bSBram Moolenaar wincmd n | only 8681ff2b64bSBram Moolenaar 8691ff2b64bSBram Moolenaar " Test B: 8701ff2b64bSBram Moolenaar lrewind 8711ff2b64bSBram Moolenaar lopen 8721ff2b64bSBram Moolenaar 2 8731ff2b64bSBram Moolenaar exe "normal \<CR>" 8741ff2b64bSBram Moolenaar wincmd p 8751ff2b64bSBram Moolenaar 3 8761ff2b64bSBram Moolenaar exe "normal \<CR>" 8771ff2b64bSBram Moolenaar wincmd p 8781ff2b64bSBram Moolenaar 4 8791ff2b64bSBram Moolenaar exe "normal \<CR>" 8801ff2b64bSBram Moolenaar call assert_equal(2, winnr('$')) 8811ff2b64bSBram Moolenaar wincmd n | only 8821ff2b64bSBram Moolenaar 8831ff2b64bSBram Moolenaar " Test C: 8841ff2b64bSBram Moolenaar lrewind 8851ff2b64bSBram Moolenaar lopen 8861ff2b64bSBram Moolenaar " Let's move the location list window to the top to check whether it (the 8871ff2b64bSBram Moolenaar " first window found) will be reused when we try to open new windows: 8881ff2b64bSBram Moolenaar wincmd K 8891ff2b64bSBram Moolenaar 2 8901ff2b64bSBram Moolenaar exe "normal \<CR>" 8911ff2b64bSBram Moolenaar wincmd p 8921ff2b64bSBram Moolenaar 3 8931ff2b64bSBram Moolenaar exe "normal \<CR>" 8941ff2b64bSBram Moolenaar wincmd p 8951ff2b64bSBram Moolenaar 4 8961ff2b64bSBram Moolenaar exe "normal \<CR>" 8971ff2b64bSBram Moolenaar 1wincmd w 8981ff2b64bSBram Moolenaar call assert_equal('quickfix', &buftype) 8991ff2b64bSBram Moolenaar 2wincmd w 9001ff2b64bSBram Moolenaar let bufferName = expand("%") 9011ff2b64bSBram Moolenaar let bufferName = substitute(bufferName, '\\', '/', 'g') 9021ff2b64bSBram Moolenaar call assert_equal('test://quux.txt', bufferName) 9031ff2b64bSBram Moolenaar 9041ff2b64bSBram Moolenaar wincmd n | only 9051ff2b64bSBram Moolenaar 9061ff2b64bSBram Moolenaar augroup! testgroup 9072b946c9fSBram Moolenaarendfunc 9080899d698SBram Moolenaar 9092b946c9fSBram Moolenaarfunc Test_locationlist_curwin_was_closed() 9100899d698SBram Moolenaar augroup testgroup 9110899d698SBram Moolenaar au! 912d106e5baSBram Moolenaar autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>")) 9130899d698SBram Moolenaar augroup END 9140899d698SBram Moolenaar 9152b946c9fSBram Moolenaar func! R(n) 9160899d698SBram Moolenaar quit 9170899d698SBram Moolenaar endfunc 9180899d698SBram Moolenaar 9190899d698SBram Moolenaar new 9200899d698SBram Moolenaar let q = [] 921d106e5baSBram Moolenaar call add(q, {'filename': 'test_curwin.txt' }) 9220899d698SBram Moolenaar call setloclist(0, q) 9230899d698SBram Moolenaar call assert_fails('lrewind', 'E924:') 9240899d698SBram Moolenaar 9250899d698SBram Moolenaar augroup! testgroup 9262b946c9fSBram Moolenaarendfunc 9277eba3d2cSBram Moolenaar 9282b946c9fSBram Moolenaarfunc Test_locationlist_cross_tab_jump() 9290a9046fbSBram Moolenaar call writefile(['loclistfoo'], 'loclistfoo') 9300a9046fbSBram Moolenaar call writefile(['loclistbar'], 'loclistbar') 9310a9046fbSBram Moolenaar set switchbuf=usetab 9320a9046fbSBram Moolenaar 9330a9046fbSBram Moolenaar edit loclistfoo 9340a9046fbSBram Moolenaar tabedit loclistbar 9350a9046fbSBram Moolenaar silent lgrep loclistfoo loclist* 9360a9046fbSBram Moolenaar call assert_equal(1, tabpagenr()) 9370a9046fbSBram Moolenaar 9380a9046fbSBram Moolenaar enew | only | tabonly 9390a9046fbSBram Moolenaar set switchbuf&vim 9400a9046fbSBram Moolenaar call delete('loclistfoo') 9410a9046fbSBram Moolenaar call delete('loclistbar') 9422b946c9fSBram Moolenaarendfunc 9430a9046fbSBram Moolenaar 9447eba3d2cSBram Moolenaar" More tests for 'errorformat' 9452b946c9fSBram Moolenaarfunc Test_efm1() 9467eba3d2cSBram Moolenaar " The 'errorformat' setting is different on non-Unix systems. 9477eba3d2cSBram Moolenaar " This test works only on Unix-like systems. 9486d91bcb4SBram Moolenaar CheckUnix 9497eba3d2cSBram Moolenaar 950c79745a8SBram Moolenaar let l =<< trim [DATA] 951c79745a8SBram Moolenaar "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set. 952c79745a8SBram Moolenaar "Xtestfile", line 6 col 19; this is an error 953c79745a8SBram Moolenaar gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c 954c79745a8SBram Moolenaar Xtestfile:9: parse error before `asd' 955c79745a8SBram Moolenaar make: *** [vim] Error 1 956c79745a8SBram Moolenaar in file "Xtestfile" linenr 10: there is an error 957c79745a8SBram Moolenaar 958c79745a8SBram Moolenaar 2 returned 959c79745a8SBram Moolenaar "Xtestfile", line 11 col 1; this is an error 960c79745a8SBram Moolenaar "Xtestfile", line 12 col 2; this is another error 961c79745a8SBram Moolenaar "Xtestfile", line 14:10; this is an error in column 10 962c79745a8SBram Moolenaar =Xtestfile=, line 15:10; this is another error, but in vcol 10 this time 963c79745a8SBram Moolenaar "Xtestfile", linenr 16: yet another problem 964c79745a8SBram Moolenaar Error in "Xtestfile" at line 17: 965c79745a8SBram Moolenaar x should be a dot 966c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 967c79745a8SBram Moolenaar ^ 968c79745a8SBram Moolenaar Error in "Xtestfile" at line 18: 969c79745a8SBram Moolenaar x should be a dot 970c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 971c79745a8SBram Moolenaar .............^ 972c79745a8SBram Moolenaar Error in "Xtestfile" at line 19: 973c79745a8SBram Moolenaar x should be a dot 974c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 975c79745a8SBram Moolenaar --------------^ 976c79745a8SBram Moolenaar Error in "Xtestfile" at line 20: 977c79745a8SBram Moolenaar x should be a dot 978c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 979c79745a8SBram Moolenaar ^ 980c79745a8SBram Moolenaar 981c79745a8SBram Moolenaar Does anyone know what is the problem and how to correction it? 982c79745a8SBram Moolenaar "Xtestfile", line 21 col 9: What is the title of the quickfix window? 983c79745a8SBram Moolenaar "Xtestfile", line 22 col 9: What is the title of the quickfix window? 984c79745a8SBram Moolenaar [DATA] 9857eba3d2cSBram Moolenaar 9867eba3d2cSBram Moolenaar call writefile(l, 'Xerrorfile1') 9877eba3d2cSBram Moolenaar call writefile(l[:-2], 'Xerrorfile2') 9887eba3d2cSBram Moolenaar 989e7eb9270SBram Moolenaar let m =<< [DATA] 990c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2 991c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3 992c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4 993c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5 994c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6 995c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7 996c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8 997c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9 998c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10 999c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11 1000c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12 1001c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13 1002c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14 1003c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15 1004c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16 1005c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 1006c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 1007c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 1008c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 1009c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21 1010c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22 1011c79745a8SBram Moolenaar[DATA] 10127eba3d2cSBram Moolenaar call writefile(m, 'Xtestfile') 10137eba3d2cSBram Moolenaar 10147eba3d2cSBram Moolenaar let save_efm = &efm 10157eba3d2cSBram Moolenaar set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m 10167eba3d2cSBram Moolenaar set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m 10177eba3d2cSBram Moolenaar 10187eba3d2cSBram Moolenaar exe 'cf Xerrorfile2' 10197eba3d2cSBram Moolenaar clast 10207eba3d2cSBram Moolenaar copen 10217eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile2', w:quickfix_title) 10227eba3d2cSBram Moolenaar wincmd p 10237eba3d2cSBram Moolenaar 10247eba3d2cSBram Moolenaar exe 'cf Xerrorfile1' 10257eba3d2cSBram Moolenaar call assert_equal([4, 12], [line('.'), col('.')]) 10267eba3d2cSBram Moolenaar cn 10277eba3d2cSBram Moolenaar call assert_equal([6, 19], [line('.'), col('.')]) 10287eba3d2cSBram Moolenaar cn 10297eba3d2cSBram Moolenaar call assert_equal([9, 2], [line('.'), col('.')]) 10307eba3d2cSBram Moolenaar cn 10317eba3d2cSBram Moolenaar call assert_equal([10, 2], [line('.'), col('.')]) 10327eba3d2cSBram Moolenaar cn 10337eba3d2cSBram Moolenaar call assert_equal([11, 1], [line('.'), col('.')]) 10347eba3d2cSBram Moolenaar cn 10357eba3d2cSBram Moolenaar call assert_equal([12, 2], [line('.'), col('.')]) 10367eba3d2cSBram Moolenaar cn 10377eba3d2cSBram Moolenaar call assert_equal([14, 10], [line('.'), col('.')]) 10387eba3d2cSBram Moolenaar cn 10397eba3d2cSBram Moolenaar call assert_equal([15, 3, 10], [line('.'), col('.'), virtcol('.')]) 10407eba3d2cSBram Moolenaar cn 10417eba3d2cSBram Moolenaar call assert_equal([16, 2], [line('.'), col('.')]) 10427eba3d2cSBram Moolenaar cn 10437eba3d2cSBram Moolenaar call assert_equal([17, 6], [line('.'), col('.')]) 10447eba3d2cSBram Moolenaar cn 10457eba3d2cSBram Moolenaar call assert_equal([18, 7], [line('.'), col('.')]) 10467eba3d2cSBram Moolenaar cn 10477eba3d2cSBram Moolenaar call assert_equal([19, 8], [line('.'), col('.')]) 10487eba3d2cSBram Moolenaar cn 10497eba3d2cSBram Moolenaar call assert_equal([20, 9], [line('.'), col('.')]) 10507eba3d2cSBram Moolenaar clast 10517eba3d2cSBram Moolenaar cprev 10527eba3d2cSBram Moolenaar cprev 10537eba3d2cSBram Moolenaar wincmd w 10547eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile1', w:quickfix_title) 10557eba3d2cSBram Moolenaar wincmd p 10567eba3d2cSBram Moolenaar 10577eba3d2cSBram Moolenaar let &efm = save_efm 10587eba3d2cSBram Moolenaar call delete('Xerrorfile1') 10597eba3d2cSBram Moolenaar call delete('Xerrorfile2') 10607eba3d2cSBram Moolenaar call delete('Xtestfile') 10612b946c9fSBram Moolenaarendfunc 1062ffec3c53SBram Moolenaar 1063ab47c61fSBram Moolenaar" Test for quickfix directory stack support 10642b946c9fSBram Moolenaarfunc s:dir_stack_tests(cchar) 106538df43bdSBram Moolenaar call s:setup_commands(a:cchar) 106638df43bdSBram Moolenaar 1067ab47c61fSBram Moolenaar let save_efm=&efm 1068ab47c61fSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 1069ab47c61fSBram Moolenaar 1070361c8f0eSBram Moolenaar let lines = ["Entering dir 'dir1/a'", 1071361c8f0eSBram Moolenaar \ 'habits2.txt:1:Nine Healthy Habits', 1072361c8f0eSBram Moolenaar \ "Entering dir 'b'", 1073361c8f0eSBram Moolenaar \ 'habits3.txt:2:0 Hours of television', 1074361c8f0eSBram Moolenaar \ 'habits2.txt:7:5 Small meals', 1075361c8f0eSBram Moolenaar \ "Entering dir 'dir1/c'", 1076361c8f0eSBram Moolenaar \ 'habits4.txt:3:1 Hour of exercise', 1077361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/c'", 1078361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/a'", 1079361c8f0eSBram Moolenaar \ 'habits1.txt:4:2 Liters of water', 1080361c8f0eSBram Moolenaar \ "Entering dir 'dir2'", 1081361c8f0eSBram Moolenaar \ 'habits5.txt:5:3 Cups of hot green tea', 1082361c8f0eSBram Moolenaar \ "Leaving dir 'dir2'" 1083361c8f0eSBram Moolenaar \] 1084ab47c61fSBram Moolenaar 1085361c8f0eSBram Moolenaar Xexpr "" 1086361c8f0eSBram Moolenaar for l in lines 1087361c8f0eSBram Moolenaar Xaddexpr l 1088361c8f0eSBram Moolenaar endfor 1089ab47c61fSBram Moolenaar 10903ef5bf7dSBram Moolenaar let qf = g:Xgetlist() 1091ab47c61fSBram Moolenaar 1092ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr)) 1093ab47c61fSBram Moolenaar call assert_equal(1, qf[1].lnum) 1094ab47c61fSBram Moolenaar call assert_equal('dir1/a/b/habits3.txt', bufname(qf[3].bufnr)) 1095ab47c61fSBram Moolenaar call assert_equal(2, qf[3].lnum) 1096ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[4].bufnr)) 1097ab47c61fSBram Moolenaar call assert_equal(7, qf[4].lnum) 1098ab47c61fSBram Moolenaar call assert_equal('dir1/c/habits4.txt', bufname(qf[6].bufnr)) 1099ab47c61fSBram Moolenaar call assert_equal(3, qf[6].lnum) 1100ab47c61fSBram Moolenaar call assert_equal('habits1.txt', bufname(qf[9].bufnr)) 1101ab47c61fSBram Moolenaar call assert_equal(4, qf[9].lnum) 1102ab47c61fSBram Moolenaar call assert_equal('dir2/habits5.txt', bufname(qf[11].bufnr)) 1103ab47c61fSBram Moolenaar call assert_equal(5, qf[11].lnum) 1104ab47c61fSBram Moolenaar 1105ab47c61fSBram Moolenaar let &efm=save_efm 11062b946c9fSBram Moolenaarendfunc 1107ab47c61fSBram Moolenaar 1108ab47c61fSBram Moolenaar" Tests for %D and %X errorformat options 11092b946c9fSBram Moolenaarfunc Test_efm_dirstack() 1110ab47c61fSBram Moolenaar " Create the directory stack and files 1111ab47c61fSBram Moolenaar call mkdir('dir1') 1112ab47c61fSBram Moolenaar call mkdir('dir1/a') 1113ab47c61fSBram Moolenaar call mkdir('dir1/a/b') 1114ab47c61fSBram Moolenaar call mkdir('dir1/c') 1115ab47c61fSBram Moolenaar call mkdir('dir2') 1116ab47c61fSBram Moolenaar 1117ab47c61fSBram Moolenaar let lines = ["Nine Healthy Habits", 1118ab47c61fSBram Moolenaar \ "0 Hours of television", 1119ab47c61fSBram Moolenaar \ "1 Hour of exercise", 1120ab47c61fSBram Moolenaar \ "2 Liters of water", 1121ab47c61fSBram Moolenaar \ "3 Cups of hot green tea", 1122ab47c61fSBram Moolenaar \ "4 Short mental breaks", 1123ab47c61fSBram Moolenaar \ "5 Small meals", 1124ab47c61fSBram Moolenaar \ "6 AM wake up time", 1125ab47c61fSBram Moolenaar \ "7 Minutes of laughter", 1126ab47c61fSBram Moolenaar \ "8 Hours of sleep (at least)", 1127ab47c61fSBram Moolenaar \ "9 PM end of the day and off to bed" 1128ab47c61fSBram Moolenaar \ ] 1129ab47c61fSBram Moolenaar call writefile(lines, 'habits1.txt') 1130ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/habits2.txt') 1131ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/b/habits3.txt') 1132ab47c61fSBram Moolenaar call writefile(lines, 'dir1/c/habits4.txt') 1133ab47c61fSBram Moolenaar call writefile(lines, 'dir2/habits5.txt') 1134ab47c61fSBram Moolenaar 1135ab47c61fSBram Moolenaar call s:dir_stack_tests('c') 1136ab47c61fSBram Moolenaar call s:dir_stack_tests('l') 1137ab47c61fSBram Moolenaar 1138ab47c61fSBram Moolenaar call delete('dir1', 'rf') 1139ab47c61fSBram Moolenaar call delete('dir2', 'rf') 1140ab47c61fSBram Moolenaar call delete('habits1.txt') 11412b946c9fSBram Moolenaarendfunc 1142ab47c61fSBram Moolenaar 11439b457948SBram Moolenaar" Test for resync after continuing an ignored message 11442b946c9fSBram Moolenaarfunc Xefm_ignore_continuations(cchar) 11459b457948SBram Moolenaar call s:setup_commands(a:cchar) 11469b457948SBram Moolenaar 11479b457948SBram Moolenaar let save_efm = &efm 11489b457948SBram Moolenaar 11499b457948SBram Moolenaar let &efm = 11509b457948SBram Moolenaar \ '%Eerror %m %l,' . 11519b457948SBram Moolenaar \ '%-Wignored %m %l,' . 11529b457948SBram Moolenaar \ '%+Cmore ignored %m %l,' . 11539b457948SBram Moolenaar \ '%Zignored end' 11549b457948SBram Moolenaar Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4'] 11559b457948SBram Moolenaar let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]') 11569b457948SBram Moolenaar call assert_equal([['resync', 1, 4, 'E']], l) 11579b457948SBram Moolenaar 11589b457948SBram Moolenaar let &efm = save_efm 11592b946c9fSBram Moolenaarendfunc 11609b457948SBram Moolenaar 11612b946c9fSBram Moolenaarfunc Test_efm_ignore_continuations() 11629b457948SBram Moolenaar call Xefm_ignore_continuations('c') 11639b457948SBram Moolenaar call Xefm_ignore_continuations('l') 11642b946c9fSBram Moolenaarendfunc 11659b457948SBram Moolenaar 11660fcc7c6dSBram Moolenaar" Tests for invalid error format specifies 11672b946c9fSBram Moolenaarfunc Xinvalid_efm_Tests(cchar) 11680fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 11690fcc7c6dSBram Moolenaar 1170049cba9eSBram Moolenaar let save_efm = &efm 1171049cba9eSBram Moolenaar 11720fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%f:%l:%m 11730fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:') 11740fcc7c6dSBram Moolenaar 11750fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%r:%m 11760fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 11770fcc7c6dSBram Moolenaar 11780fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%O:%f:%l:%m 11790fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 11800fcc7c6dSBram Moolenaar 11810fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*[^a-z 11820fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:') 11830fcc7c6dSBram Moolenaar 11840fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*c 11850fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:') 11860fcc7c6dSBram Moolenaar 11870fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%L%M%N 11880fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:') 11890fcc7c6dSBram Moolenaar 11900fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%m:%R 11910fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') 11920fcc7c6dSBram Moolenaar 119370077dd1SBram Moolenaar " Invalid regular expression 119470077dd1SBram Moolenaar set efm=%\\%%k 119570077dd1SBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E867:') 119670077dd1SBram Moolenaar 11970fcc7c6dSBram Moolenaar set efm= 11980fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') 11990fcc7c6dSBram Moolenaar 12000fcc7c6dSBram Moolenaar set efm=%DEntering\ dir\ abc,%f:%l:%m 12010fcc7c6dSBram Moolenaar call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:') 12020fcc7c6dSBram Moolenaar 12030fcc7c6dSBram Moolenaar let &efm = save_efm 12042b946c9fSBram Moolenaarendfunc 12050fcc7c6dSBram Moolenaar 12062b946c9fSBram Moolenaarfunc Test_invalid_efm() 12070fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('c') 12080fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('l') 12092b946c9fSBram Moolenaarendfunc 12100fcc7c6dSBram Moolenaar 12110fcc7c6dSBram Moolenaar" TODO: 12120fcc7c6dSBram Moolenaar" Add tests for the following formats in 'errorformat' 12130fcc7c6dSBram Moolenaar" %r %O 12142b946c9fSBram Moolenaarfunc Test_efm2() 12150fcc7c6dSBram Moolenaar let save_efm = &efm 1216049cba9eSBram Moolenaar 1217049cba9eSBram Moolenaar " Test for %s format in efm 1218049cba9eSBram Moolenaar set efm=%f:%s 1219049cba9eSBram Moolenaar cexpr 'Xtestfile:Line search text' 1220049cba9eSBram Moolenaar let l = getqflist() 122170077dd1SBram Moolenaar call assert_equal('^\VLine search text\$', l[0].pattern) 122270077dd1SBram Moolenaar call assert_equal(0, l[0].lnum) 1223049cba9eSBram Moolenaar 1224ee85df37SBram Moolenaar let l = split(execute('clist', ''), "\n") 1225ee85df37SBram Moolenaar call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l) 1226ee85df37SBram Moolenaar 122770077dd1SBram Moolenaar " Test for a long line 122870077dd1SBram Moolenaar cexpr 'Xtestfile:' . repeat('a', 1026) 122970077dd1SBram Moolenaar let l = getqflist() 123070077dd1SBram Moolenaar call assert_equal('^\V' . repeat('a', 1019) . '\$', l[0].pattern) 123170077dd1SBram Moolenaar 12320fcc7c6dSBram Moolenaar " Test for %P, %Q and %t format specifiers 1233c79745a8SBram Moolenaar let lines =<< trim [DATA] 1234c79745a8SBram Moolenaar [Xtestfile1] 1235c79745a8SBram Moolenaar (1,17) error: ';' missing 1236c79745a8SBram Moolenaar (21,2) warning: variable 'z' not defined 1237c79745a8SBram Moolenaar (67,3) error: end of file found before string ended 1238c79745a8SBram Moolenaar -- 1239c79745a8SBram Moolenaar 1240c79745a8SBram Moolenaar [Xtestfile2] 1241c79745a8SBram Moolenaar -- 1242c79745a8SBram Moolenaar 1243c79745a8SBram Moolenaar [Xtestfile3] 1244c79745a8SBram Moolenaar NEW compiler v1.1 1245c79745a8SBram Moolenaar (2,2) warning: variable 'x' not defined 1246c79745a8SBram Moolenaar (67,3) warning: 's' already defined 1247c79745a8SBram Moolenaar -- 1248c79745a8SBram Moolenaar [DATA] 1249c79745a8SBram Moolenaar 1250ee85df37SBram Moolenaar set efm=%+P[%f]%r,(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%+Q--%r 1251391b1dd0SBram Moolenaar " To exercise the push/pop file functionality in quickfix, the test files 1252391b1dd0SBram Moolenaar " need to be created. 1253391b1dd0SBram Moolenaar call writefile(['Line1'], 'Xtestfile1') 1254391b1dd0SBram Moolenaar call writefile(['Line2'], 'Xtestfile2') 1255391b1dd0SBram Moolenaar call writefile(['Line3'], 'Xtestfile3') 1256361c8f0eSBram Moolenaar cexpr "" 1257361c8f0eSBram Moolenaar for l in lines 1258361c8f0eSBram Moolenaar caddexpr l 1259361c8f0eSBram Moolenaar endfor 1260049cba9eSBram Moolenaar let l = getqflist() 1261ee85df37SBram Moolenaar call assert_equal(12, len(l)) 1262049cba9eSBram Moolenaar call assert_equal(21, l[2].lnum) 1263049cba9eSBram Moolenaar call assert_equal(2, l[2].col) 12640fcc7c6dSBram Moolenaar call assert_equal('w', l[2].type) 12650fcc7c6dSBram Moolenaar call assert_equal('e', l[3].type) 1266391b1dd0SBram Moolenaar call delete('Xtestfile1') 1267391b1dd0SBram Moolenaar call delete('Xtestfile2') 1268391b1dd0SBram Moolenaar call delete('Xtestfile3') 12690fcc7c6dSBram Moolenaar 127070077dd1SBram Moolenaar " Test for %P, %Q with non-existing files 127170077dd1SBram Moolenaar cexpr lines 127270077dd1SBram Moolenaar let l = getqflist() 127370077dd1SBram Moolenaar call assert_equal(14, len(l)) 127470077dd1SBram Moolenaar call assert_equal('[Xtestfile1]', l[0].text) 127570077dd1SBram Moolenaar call assert_equal('[Xtestfile2]', l[6].text) 127670077dd1SBram Moolenaar call assert_equal('[Xtestfile3]', l[9].text) 127770077dd1SBram Moolenaar 12780fcc7c6dSBram Moolenaar " Tests for %E, %C and %Z format specifiers 1279c79745a8SBram Moolenaar let lines =<< trim [DATA] 1280c79745a8SBram Moolenaar Error 275 1281c79745a8SBram Moolenaar line 42 1282c79745a8SBram Moolenaar column 3 1283c79745a8SBram Moolenaar ' ' expected after '--' 1284c79745a8SBram Moolenaar [DATA] 1285c79745a8SBram Moolenaar 12860fcc7c6dSBram Moolenaar set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m 12870fcc7c6dSBram Moolenaar cgetexpr lines 12880fcc7c6dSBram Moolenaar let l = getqflist() 12890fcc7c6dSBram Moolenaar call assert_equal(275, l[0].nr) 12900fcc7c6dSBram Moolenaar call assert_equal(42, l[0].lnum) 12910fcc7c6dSBram Moolenaar call assert_equal(3, l[0].col) 12920fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 12930fcc7c6dSBram Moolenaar call assert_equal("\n' ' expected after '--'", l[0].text) 12940fcc7c6dSBram Moolenaar 12950fcc7c6dSBram Moolenaar " Test for %> 1296c79745a8SBram Moolenaar let lines =<< trim [DATA] 1297c79745a8SBram Moolenaar Error in line 147 of foo.c: 1298c79745a8SBram Moolenaar unknown variable 'i' 1299c79745a8SBram Moolenaar [DATA] 1300c79745a8SBram Moolenaar 13010fcc7c6dSBram Moolenaar set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m 13020fcc7c6dSBram Moolenaar cgetexpr lines 13030fcc7c6dSBram Moolenaar let l = getqflist() 13040fcc7c6dSBram Moolenaar call assert_equal(147, l[0].lnum) 13050fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 13060fcc7c6dSBram Moolenaar call assert_equal("\nunknown variable 'i'", l[0].text) 1307049cba9eSBram Moolenaar 1308e87e6dddSBram Moolenaar " Test for %A, %C and other formats 1309c79745a8SBram Moolenaar let lines =<< trim [DATA] 1310c79745a8SBram Moolenaar ============================================================== 1311c79745a8SBram Moolenaar FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest) 1312c79745a8SBram Moolenaar -------------------------------------------------------------- 1313c79745a8SBram Moolenaar Traceback (most recent call last): 1314c79745a8SBram Moolenaar File "unittests/dbfacadeTest.py", line 89, in testFoo 1315c79745a8SBram Moolenaar self.assertEquals(34, dtid) 1316c79745a8SBram Moolenaar File "/usr/lib/python2.2/unittest.py", line 286, in 1317c79745a8SBram Moolenaar failUnlessEqual 1318c79745a8SBram Moolenaar raise self.failureException, \\ 131970077dd1SBram Moolenaar W:AssertionError: 34 != 33 1320c79745a8SBram Moolenaar 1321c79745a8SBram Moolenaar -------------------------------------------------------------- 1322c79745a8SBram Moolenaar Ran 27 tests in 0.063s 1323c79745a8SBram Moolenaar [DATA] 1324c79745a8SBram Moolenaar 132570077dd1SBram Moolenaar set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%t:%m 1326e87e6dddSBram Moolenaar cgetexpr lines 1327e87e6dddSBram Moolenaar let l = getqflist() 1328e87e6dddSBram Moolenaar call assert_equal(8, len(l)) 1329e87e6dddSBram Moolenaar call assert_equal(89, l[4].lnum) 1330e87e6dddSBram Moolenaar call assert_equal(1, l[4].valid) 1331e87e6dddSBram Moolenaar call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr)) 133270077dd1SBram Moolenaar call assert_equal('W', l[4].type) 1333e87e6dddSBram Moolenaar 1334d76ce852SBram Moolenaar " Test for %o 1335d76ce852SBram Moolenaar set efm=%f(%o):%l\ %m 1336bc7845daSBram Moolenaar cgetexpr ['Xotestfile(Language.PureScript.Types):20 Error'] 1337bc7845daSBram Moolenaar call writefile(['Line1'], 'Xotestfile') 1338d76ce852SBram Moolenaar let l = getqflist() 1339d76ce852SBram Moolenaar call assert_equal(1, len(l), string(l)) 1340d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types', l[0].module) 1341d76ce852SBram Moolenaar copen 1342d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types|20| Error', getline(1)) 1343d76ce852SBram Moolenaar call feedkeys("\<CR>", 'xn') 1344bc7845daSBram Moolenaar call assert_equal('Xotestfile', expand('%:t')) 1345d76ce852SBram Moolenaar cclose 1346d76ce852SBram Moolenaar bd 1347bc7845daSBram Moolenaar call delete("Xotestfile") 1348d76ce852SBram Moolenaar 134970077dd1SBram Moolenaar " Test for a long module name 135070077dd1SBram Moolenaar cexpr 'Xtest(' . repeat('m', 1026) . '):15 message' 135170077dd1SBram Moolenaar let l = getqflist() 135270077dd1SBram Moolenaar call assert_equal(repeat('m', 1024), l[0].module) 135370077dd1SBram Moolenaar call assert_equal(15, l[0].lnum) 135470077dd1SBram Moolenaar call assert_equal('message', l[0].text) 135570077dd1SBram Moolenaar 135699895eacSBram Moolenaar " The following sequence of commands used to crash Vim 135799895eacSBram Moolenaar set efm=%W%m 135899895eacSBram Moolenaar cgetexpr ['msg1'] 135999895eacSBram Moolenaar let l = getqflist() 136099895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 136199895eacSBram Moolenaar call assert_equal('msg1', l[0].text) 136299895eacSBram Moolenaar set efm=%C%m 136399895eacSBram Moolenaar lexpr 'msg2' 136499895eacSBram Moolenaar let l = getloclist(0) 136599895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 136699895eacSBram Moolenaar call assert_equal('msg2', l[0].text) 136799895eacSBram Moolenaar lopen 136899895eacSBram Moolenaar call setqflist([], 'r') 136999895eacSBram Moolenaar caddbuf 137099895eacSBram Moolenaar let l = getqflist() 137199895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 137299895eacSBram Moolenaar call assert_equal('|| msg2', l[0].text) 137399895eacSBram Moolenaar 137478ddc06bSBram Moolenaar " When matching error lines, case should be ignored. Test for this. 137578ddc06bSBram Moolenaar set noignorecase 137678ddc06bSBram Moolenaar let l=getqflist({'lines' : ['Xtest:FOO10:Line 20'], 'efm':'%f:foo%l:%m'}) 137778ddc06bSBram Moolenaar call assert_equal(10, l.items[0].lnum) 137878ddc06bSBram Moolenaar call assert_equal('Line 20', l.items[0].text) 137978ddc06bSBram Moolenaar set ignorecase& 138078ddc06bSBram Moolenaar 138199895eacSBram Moolenaar new | only 1382049cba9eSBram Moolenaar let &efm = save_efm 13832b946c9fSBram Moolenaarendfunc 1384049cba9eSBram Moolenaar 1385e928366dSBram Moolenaar" Test for '%t' (error type) field in 'efm' 1386e928366dSBram Moolenaarfunc Test_efm_error_type() 1387e928366dSBram Moolenaar let save_efm = &efm 1388e928366dSBram Moolenaar 1389e928366dSBram Moolenaar " error type 1390e928366dSBram Moolenaar set efm=%f:%l:%t:%m 1391e928366dSBram Moolenaar cexpr ["Xfile1:10:E:msg1", "Xfile1:20:W:msg2", "Xfile1:30:I:msg3", 1392e928366dSBram Moolenaar \ "Xfile1:40:N:msg4", "Xfile1:50:R:msg5"] 1393e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1394e928366dSBram Moolenaar call assert_equal([ 1395e928366dSBram Moolenaar \ ' 1 Xfile1:10 error: msg1', 1396e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning: msg2', 1397e928366dSBram Moolenaar \ ' 3 Xfile1:30 info: msg3', 1398e928366dSBram Moolenaar \ ' 4 Xfile1:40 note: msg4', 1399e928366dSBram Moolenaar \ ' 5 Xfile1:50 R: msg5'], output) 1400e928366dSBram Moolenaar 1401e928366dSBram Moolenaar " error type and a error number 1402e928366dSBram Moolenaar set efm=%f:%l:%t:%n:%m 1403e928366dSBram Moolenaar cexpr ["Xfile1:10:E:2:msg1", "Xfile1:20:W:4:msg2", "Xfile1:30:I:6:msg3", 1404e928366dSBram Moolenaar \ "Xfile1:40:N:8:msg4", "Xfile1:50:R:3:msg5"] 1405e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1406e928366dSBram Moolenaar call assert_equal([ 1407e928366dSBram Moolenaar \ ' 1 Xfile1:10 error 2: msg1', 1408e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning 4: msg2', 1409e928366dSBram Moolenaar \ ' 3 Xfile1:30 info 6: msg3', 1410e928366dSBram Moolenaar \ ' 4 Xfile1:40 note 8: msg4', 1411e928366dSBram Moolenaar \ ' 5 Xfile1:50 R 3: msg5'], output) 1412e928366dSBram Moolenaar let &efm = save_efm 1413e928366dSBram Moolenaarendfunc 1414e928366dSBram Moolenaar 14152b946c9fSBram Moolenaarfunc XquickfixChangedByAutocmd(cchar) 14163ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1417ffec3c53SBram Moolenaar if a:cchar == 'c' 1418ffec3c53SBram Moolenaar let ErrorNr = 'E925' 14192b946c9fSBram Moolenaar func! ReadFunc() 1420ffec3c53SBram Moolenaar colder 1421ffec3c53SBram Moolenaar cgetexpr [] 1422ffec3c53SBram Moolenaar endfunc 1423ffec3c53SBram Moolenaar else 1424ffec3c53SBram Moolenaar let ErrorNr = 'E926' 14252b946c9fSBram Moolenaar func! ReadFunc() 1426ffec3c53SBram Moolenaar lolder 1427ffec3c53SBram Moolenaar lgetexpr [] 1428ffec3c53SBram Moolenaar endfunc 1429ffec3c53SBram Moolenaar endif 1430ffec3c53SBram Moolenaar 1431ffec3c53SBram Moolenaar augroup testgroup 1432ffec3c53SBram Moolenaar au! 1433d106e5baSBram Moolenaar autocmd BufReadCmd test_changed.txt call ReadFunc() 1434ffec3c53SBram Moolenaar augroup END 1435ffec3c53SBram Moolenaar 1436d106e5baSBram Moolenaar new | only 1437ffec3c53SBram Moolenaar let words = [ "a", "b" ] 1438ffec3c53SBram Moolenaar let qflist = [] 1439ffec3c53SBram Moolenaar for word in words 1440d106e5baSBram Moolenaar call add(qflist, {'filename': 'test_changed.txt'}) 14413ef5bf7dSBram Moolenaar call g:Xsetlist(qflist, ' ') 1442ffec3c53SBram Moolenaar endfor 14433ef5bf7dSBram Moolenaar call assert_fails('Xrewind', ErrorNr . ':') 1444ffec3c53SBram Moolenaar 1445ffec3c53SBram Moolenaar augroup! testgroup 1446ffec3c53SBram Moolenaarendfunc 1447ffec3c53SBram Moolenaar 14482b946c9fSBram Moolenaarfunc Test_quickfix_was_changed_by_autocmd() 1449ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('c') 1450ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('l') 14512b946c9fSBram Moolenaarendfunc 14528b20179cSBram Moolenaar 14534d170af0SBram Moolenaarfunc Test_setloclist_in_autocommand() 14544d170af0SBram Moolenaar call writefile(['test1', 'test2'], 'Xfile') 14554d170af0SBram Moolenaar edit Xfile 14564d170af0SBram Moolenaar let s:bufnr = bufnr() 14574d170af0SBram Moolenaar call setloclist(1, 14584d170af0SBram Moolenaar \ [{'bufnr' : s:bufnr, 'lnum' : 1, 'text' : 'test1'}, 14594d170af0SBram Moolenaar \ {'bufnr' : s:bufnr, 'lnum' : 2, 'text' : 'test2'}]) 14604d170af0SBram Moolenaar 14614d170af0SBram Moolenaar augroup Test_LocList 14624d170af0SBram Moolenaar au! 14634d170af0SBram Moolenaar autocmd BufEnter * call setloclist(1, 14644d170af0SBram Moolenaar \ [{'bufnr' : s:bufnr, 'lnum' : 1, 'text' : 'test1'}, 14654d170af0SBram Moolenaar \ {'bufnr' : s:bufnr, 'lnum' : 2, 'text' : 'test2'}], 'r') 14664d170af0SBram Moolenaar augroup END 14674d170af0SBram Moolenaar 14684d170af0SBram Moolenaar lopen 14694d170af0SBram Moolenaar call assert_fails('exe "normal j\<CR>"', 'E926:') 14704d170af0SBram Moolenaar 14714d170af0SBram Moolenaar augroup Test_LocList 14724d170af0SBram Moolenaar au! 14734d170af0SBram Moolenaar augroup END 14744d170af0SBram Moolenaar call delete('Xfile') 14754d170af0SBram Moolenaarendfunc 14764d170af0SBram Moolenaar 14778b20179cSBram Moolenaarfunc Test_caddbuffer_to_empty() 14788b20179cSBram Moolenaar helpgr quickfix 14798b20179cSBram Moolenaar call setqflist([], 'r') 14808b20179cSBram Moolenaar cad 1481f68f1d70SBram Moolenaar try 1482f68f1d70SBram Moolenaar cn 1483f68f1d70SBram Moolenaar catch 1484f68f1d70SBram Moolenaar " number of matches is unknown 1485f68f1d70SBram Moolenaar call assert_true(v:exception =~ 'E553:') 1486f68f1d70SBram Moolenaar endtry 14878b20179cSBram Moolenaar quit! 14888b20179cSBram Moolenaarendfunc 148989c64d55SBram Moolenaar 149089c64d55SBram Moolenaarfunc Test_cgetexpr_works() 149189c64d55SBram Moolenaar " this must not crash Vim 149289c64d55SBram Moolenaar cgetexpr [$x] 14933ef5bf7dSBram Moolenaar lgetexpr [$x] 149489c64d55SBram Moolenaarendfunc 1495c1808d58SBram Moolenaar 1496c1808d58SBram Moolenaar" Tests for the setqflist() and setloclist() functions 14972b946c9fSBram Moolenaarfunc SetXlistTests(cchar, bnum) 14983ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1499c1808d58SBram Moolenaar 15003ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1}, 1501c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 2}]) 15023ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1503c1808d58SBram Moolenaar call assert_equal(2, len(l)) 1504c1808d58SBram Moolenaar call assert_equal(2, l[1].lnum) 1505c1808d58SBram Moolenaar 15063ef5bf7dSBram Moolenaar Xnext 15073ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a') 15083ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1509c1808d58SBram Moolenaar call assert_equal(3, len(l)) 15103ef5bf7dSBram Moolenaar Xnext 1511c1808d58SBram Moolenaar call assert_equal(3, line('.')) 1512c1808d58SBram Moolenaar 15132b2b8ae5SBram Moolenaar " Appending entries to the list should not change the cursor position 15142b2b8ae5SBram Moolenaar " in the quickfix window 15153ef5bf7dSBram Moolenaar Xwindow 15162b2b8ae5SBram Moolenaar 1 15173ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4}, 15182b2b8ae5SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'a') 15192b2b8ae5SBram Moolenaar call assert_equal(1, line('.')) 15202b2b8ae5SBram Moolenaar close 15212b2b8ae5SBram Moolenaar 15223ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}, 1523c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 4}, 1524c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'r') 15253ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1526c1808d58SBram Moolenaar call assert_equal(3, len(l)) 1527c1808d58SBram Moolenaar call assert_equal(5, l[2].lnum) 1528c1808d58SBram Moolenaar 15293ef5bf7dSBram Moolenaar call g:Xsetlist([]) 15303ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1531c1808d58SBram Moolenaar call assert_equal(0, len(l)) 1532ee85df37SBram Moolenaar 1533f1d21c8cSBram Moolenaar " Tests for setting the 'valid' flag 1534f1d21c8cSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':4, 'valid':0}]) 1535f1d21c8cSBram Moolenaar Xwindow 1536f1d21c8cSBram Moolenaar call assert_equal(1, winnr('$')) 1537f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1538f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1539f1d21c8cSBram Moolenaar call assert_equal(0, g:Xgetlist()[0].valid) 15409752c72fSBram Moolenaar " Adding a non-valid entry should not mark the list as having valid entries 15419752c72fSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':5, 'valid':0}], 'a') 15429752c72fSBram Moolenaar Xwindow 15439752c72fSBram Moolenaar call assert_equal(1, winnr('$')) 15449752c72fSBram Moolenaar 15459752c72fSBram Moolenaar " :cnext/:cprev should still work even with invalid entries in the list 15469752c72fSBram Moolenaar let l = [{'bufnr' : a:bnum, 'lnum' : 1, 'text' : '1', 'valid' : 0}, 15479752c72fSBram Moolenaar \ {'bufnr' : a:bnum, 'lnum' : 2, 'text' : '2', 'valid' : 0}] 15489752c72fSBram Moolenaar call g:Xsetlist(l) 15499752c72fSBram Moolenaar Xnext 15509752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 15519752c72fSBram Moolenaar Xprev 15529752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 15539752c72fSBram Moolenaar " :cnext/:cprev should still work after appending invalid entries to an 15549752c72fSBram Moolenaar " empty list 15559752c72fSBram Moolenaar call g:Xsetlist([]) 15569752c72fSBram Moolenaar call g:Xsetlist(l, 'a') 15579752c72fSBram Moolenaar Xnext 15589752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 15599752c72fSBram Moolenaar Xprev 15609752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 15619752c72fSBram Moolenaar 1562f1d21c8cSBram Moolenaar call g:Xsetlist([{'text':'Text1', 'valid':1}]) 1563f1d21c8cSBram Moolenaar Xwindow 1564f1d21c8cSBram Moolenaar call assert_equal(2, winnr('$')) 1565f1d21c8cSBram Moolenaar Xclose 1566f1d21c8cSBram Moolenaar let save_efm = &efm 1567f1d21c8cSBram Moolenaar set efm=%m 1568f1d21c8cSBram Moolenaar Xgetexpr 'TestMessage' 1569f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1570f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1571f1d21c8cSBram Moolenaar call assert_equal(1, g:Xgetlist()[0].valid) 1572f1d21c8cSBram Moolenaar let &efm = save_efm 1573f1d21c8cSBram Moolenaar 1574ee85df37SBram Moolenaar " Error cases: 1575ee85df37SBram Moolenaar " Refer to a non-existing buffer and pass a non-dictionary type 1576ee85df37SBram Moolenaar call assert_fails("call g:Xsetlist([{'bufnr':998, 'lnum':4}," . 1577ee85df37SBram Moolenaar \ " {'bufnr':999, 'lnum':5}])", 'E92:') 1578ee85df37SBram Moolenaar call g:Xsetlist([[1, 2,3]]) 1579ee85df37SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 158099fa7219SBram Moolenaar call assert_fails('call g:Xsetlist([], [])', 'E928:') 15812b946c9fSBram Moolenaarendfunc 1582c1808d58SBram Moolenaar 15832b946c9fSBram Moolenaarfunc Test_setqflist() 1584c1808d58SBram Moolenaar new Xtestfile | only 1585c1808d58SBram Moolenaar let bnum = bufnr('%') 1586c1808d58SBram Moolenaar call setline(1, range(1,5)) 1587c1808d58SBram Moolenaar 1588c1808d58SBram Moolenaar call SetXlistTests('c', bnum) 1589c1808d58SBram Moolenaar call SetXlistTests('l', bnum) 1590c1808d58SBram Moolenaar 15911cee693bSBram Moolenaar enew! 1592c1808d58SBram Moolenaar call delete('Xtestfile') 15932b946c9fSBram Moolenaarendfunc 1594d106e5baSBram Moolenaar 15952b946c9fSBram Moolenaarfunc Xlist_empty_middle(cchar) 15963ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 15973ef5bf7dSBram Moolenaar 15981cee693bSBram Moolenaar " create three quickfix lists 1599ee85df37SBram Moolenaar let @/ = 'Test_' 1600ee85df37SBram Moolenaar Xvimgrep // test_quickfix.vim 16013ef5bf7dSBram Moolenaar let testlen = len(g:Xgetlist()) 16021cee693bSBram Moolenaar call assert_true(testlen > 0) 16033ef5bf7dSBram Moolenaar Xvimgrep empty test_quickfix.vim 16043ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) > 0) 16053ef5bf7dSBram Moolenaar Xvimgrep matches test_quickfix.vim 16063ef5bf7dSBram Moolenaar let matchlen = len(g:Xgetlist()) 16071cee693bSBram Moolenaar call assert_true(matchlen > 0) 16083ef5bf7dSBram Moolenaar Xolder 16091cee693bSBram Moolenaar " make the middle list empty 16103ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 16113ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 16123ef5bf7dSBram Moolenaar Xolder 16133ef5bf7dSBram Moolenaar call assert_equal(testlen, len(g:Xgetlist())) 16143ef5bf7dSBram Moolenaar Xnewer 16153ef5bf7dSBram Moolenaar Xnewer 16163ef5bf7dSBram Moolenaar call assert_equal(matchlen, len(g:Xgetlist())) 16171cee693bSBram Moolenaarendfunc 16181cee693bSBram Moolenaar 16192b946c9fSBram Moolenaarfunc Test_setqflist_empty_middle() 16203ef5bf7dSBram Moolenaar call Xlist_empty_middle('c') 16213ef5bf7dSBram Moolenaar call Xlist_empty_middle('l') 16222b946c9fSBram Moolenaarendfunc 16233ef5bf7dSBram Moolenaar 16242b946c9fSBram Moolenaarfunc Xlist_empty_older(cchar) 16253ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 16263ef5bf7dSBram Moolenaar 16271cee693bSBram Moolenaar " create three quickfix lists 16283ef5bf7dSBram Moolenaar Xvimgrep one test_quickfix.vim 16293ef5bf7dSBram Moolenaar let onelen = len(g:Xgetlist()) 16301cee693bSBram Moolenaar call assert_true(onelen > 0) 16313ef5bf7dSBram Moolenaar Xvimgrep two test_quickfix.vim 16323ef5bf7dSBram Moolenaar let twolen = len(g:Xgetlist()) 16331cee693bSBram Moolenaar call assert_true(twolen > 0) 16343ef5bf7dSBram Moolenaar Xvimgrep three test_quickfix.vim 16353ef5bf7dSBram Moolenaar let threelen = len(g:Xgetlist()) 16361cee693bSBram Moolenaar call assert_true(threelen > 0) 16373ef5bf7dSBram Moolenaar Xolder 2 16381cee693bSBram Moolenaar " make the first list empty, check the others didn't change 16393ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 16403ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 16413ef5bf7dSBram Moolenaar Xnewer 16423ef5bf7dSBram Moolenaar call assert_equal(twolen, len(g:Xgetlist())) 16433ef5bf7dSBram Moolenaar Xnewer 16443ef5bf7dSBram Moolenaar call assert_equal(threelen, len(g:Xgetlist())) 16452b946c9fSBram Moolenaarendfunc 16463ef5bf7dSBram Moolenaar 16472b946c9fSBram Moolenaarfunc Test_setqflist_empty_older() 16483ef5bf7dSBram Moolenaar call Xlist_empty_older('c') 16493ef5bf7dSBram Moolenaar call Xlist_empty_older('l') 16502b946c9fSBram Moolenaarendfunc 16511cee693bSBram Moolenaar 16522b946c9fSBram Moolenaarfunc XquickfixSetListWithAct(cchar) 16533ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 16543ef5bf7dSBram Moolenaar 1655d106e5baSBram Moolenaar let list1 = [{'filename': 'fnameA', 'text': 'A'}, 1656d106e5baSBram Moolenaar \ {'filename': 'fnameB', 'text': 'B'}] 1657d106e5baSBram Moolenaar let list2 = [{'filename': 'fnameC', 'text': 'C'}, 1658d106e5baSBram Moolenaar \ {'filename': 'fnameD', 'text': 'D'}, 1659d106e5baSBram Moolenaar \ {'filename': 'fnameE', 'text': 'E'}] 1660d106e5baSBram Moolenaar 1661eeb1b9c7SBram Moolenaar " {action} is unspecified. Same as specifying ' '. 1662d106e5baSBram Moolenaar new | only 16633ef5bf7dSBram Moolenaar silent! Xnewer 99 16643ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16653ef5bf7dSBram Moolenaar call g:Xsetlist(list2) 16663ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1667d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1668d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1669d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1670d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 16713ef5bf7dSBram Moolenaar silent! Xolder 16723ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1673d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1674d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1675d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1676d106e5baSBram Moolenaar 1677d106e5baSBram Moolenaar " {action} is specified ' '. 1678d106e5baSBram Moolenaar new | only 16793ef5bf7dSBram Moolenaar silent! Xnewer 99 16803ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16813ef5bf7dSBram Moolenaar call g:Xsetlist(list2, ' ') 16823ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1683d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1684d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1685d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1686d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 16873ef5bf7dSBram Moolenaar silent! Xolder 16883ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1689d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1690d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1691d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1692d106e5baSBram Moolenaar 1693d106e5baSBram Moolenaar " {action} is specified 'a'. 1694d106e5baSBram Moolenaar new | only 16953ef5bf7dSBram Moolenaar silent! Xnewer 99 16963ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16973ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'a') 16983ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1699d106e5baSBram Moolenaar call assert_equal(5, len(li)) 1700d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1701d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1702d106e5baSBram Moolenaar call assert_equal('C', li[2]['text']) 1703d106e5baSBram Moolenaar call assert_equal('D', li[3]['text']) 1704d106e5baSBram Moolenaar call assert_equal('E', li[4]['text']) 1705d106e5baSBram Moolenaar 1706d106e5baSBram Moolenaar " {action} is specified 'r'. 1707d106e5baSBram Moolenaar new | only 17083ef5bf7dSBram Moolenaar silent! Xnewer 99 17093ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 17103ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'r') 17113ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1712d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1713d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1714d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1715d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 1716d106e5baSBram Moolenaar 1717d106e5baSBram Moolenaar " Test for wrong value. 1718d106e5baSBram Moolenaar new | only 17193ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(0)", 'E714:') 17203ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, '')", 'E927:') 17213ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:') 17223ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:') 17233ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 0)", 'E928:') 1724d106e5baSBram Moolenaarendfunc 1725d106e5baSBram Moolenaar 1726a0ca7d00SBram Moolenaarfunc Test_setqflist_invalid_nr() 1727a0ca7d00SBram Moolenaar " The following command used to crash Vim 1728aad222c9SBram Moolenaar eval []->setqflist(' ', {'nr' : $XXX_DOES_NOT_EXIST}) 1729a0ca7d00SBram Moolenaarendfunc 1730a0ca7d00SBram Moolenaar 173199234f29SBram Moolenaarfunc Test_setqflist_user_sets_buftype() 173299234f29SBram Moolenaar call setqflist([{'text': 'foo'}, {'text': 'bar'}]) 173399234f29SBram Moolenaar set buftype=quickfix 173499234f29SBram Moolenaar call setqflist([], 'a') 173599234f29SBram Moolenaar enew 173699234f29SBram Moolenaarendfunc 173799234f29SBram Moolenaar 17382b946c9fSBram Moolenaarfunc Test_quickfix_set_list_with_act() 1739d106e5baSBram Moolenaar call XquickfixSetListWithAct('c') 1740d106e5baSBram Moolenaar call XquickfixSetListWithAct('l') 17412b946c9fSBram Moolenaarendfunc 17426be8c8e1SBram Moolenaar 17432b946c9fSBram Moolenaarfunc XLongLinesTests(cchar) 17443ef5bf7dSBram Moolenaar let l = g:Xgetlist() 17456be8c8e1SBram Moolenaar 1746049cba9eSBram Moolenaar call assert_equal(4, len(l)) 17476be8c8e1SBram Moolenaar call assert_equal(1, l[0].lnum) 17486be8c8e1SBram Moolenaar call assert_equal(1, l[0].col) 1749049cba9eSBram Moolenaar call assert_equal(1975, len(l[0].text)) 17506be8c8e1SBram Moolenaar call assert_equal(2, l[1].lnum) 17516be8c8e1SBram Moolenaar call assert_equal(1, l[1].col) 17526be8c8e1SBram Moolenaar call assert_equal(4070, len(l[1].text)) 17536be8c8e1SBram Moolenaar call assert_equal(3, l[2].lnum) 17546be8c8e1SBram Moolenaar call assert_equal(1, l[2].col) 1755049cba9eSBram Moolenaar call assert_equal(4070, len(l[2].text)) 1756049cba9eSBram Moolenaar call assert_equal(4, l[3].lnum) 1757049cba9eSBram Moolenaar call assert_equal(1, l[3].col) 1758049cba9eSBram Moolenaar call assert_equal(10, len(l[3].text)) 17596be8c8e1SBram Moolenaar 17603ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 17612b946c9fSBram Moolenaarendfunc 17626be8c8e1SBram Moolenaar 17632b946c9fSBram Moolenaarfunc s:long_lines_tests(cchar) 17643ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 17653ef5bf7dSBram Moolenaar 17666be8c8e1SBram Moolenaar let testfile = 'samples/quickfix.txt' 17676be8c8e1SBram Moolenaar 17686be8c8e1SBram Moolenaar " file 17693ef5bf7dSBram Moolenaar exe 'Xgetfile' testfile 17703ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17716be8c8e1SBram Moolenaar 17726be8c8e1SBram Moolenaar " list 17733ef5bf7dSBram Moolenaar Xexpr readfile(testfile) 17743ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17756be8c8e1SBram Moolenaar 17766be8c8e1SBram Moolenaar " string 17773ef5bf7dSBram Moolenaar Xexpr join(readfile(testfile), "\n") 17783ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17796be8c8e1SBram Moolenaar 17806be8c8e1SBram Moolenaar " buffer 17813ef5bf7dSBram Moolenaar exe 'edit' testfile 17823ef5bf7dSBram Moolenaar exe 'Xbuffer' bufnr('%') 1783f50df392SBram Moolenaar call XLongLinesTests(a:cchar) 17842b946c9fSBram Moolenaarendfunc 17853ef5bf7dSBram Moolenaar 17862b946c9fSBram Moolenaarfunc Test_long_lines() 17873ef5bf7dSBram Moolenaar call s:long_lines_tests('c') 17883ef5bf7dSBram Moolenaar call s:long_lines_tests('l') 17892b946c9fSBram Moolenaarendfunc 1790049cba9eSBram Moolenaar 179159941cbdSBram Moolenaarfunc Test_cgetfile_on_long_lines() 179259941cbdSBram Moolenaar " Problematic values if the line is longer than 4096 bytes. Then 1024 bytes 179359941cbdSBram Moolenaar " are read at a time. 179459941cbdSBram Moolenaar for len in [4078, 4079, 4080, 5102, 5103, 5104, 6126, 6127, 6128, 7150, 7151, 7152] 179559941cbdSBram Moolenaar let lines = [ 179659941cbdSBram Moolenaar \ '/tmp/file1:1:1:aaa', 179759941cbdSBram Moolenaar \ '/tmp/file2:1:1:%s', 179859941cbdSBram Moolenaar \ '/tmp/file3:1:1:bbb', 179959941cbdSBram Moolenaar \ '/tmp/file4:1:1:ccc', 180059941cbdSBram Moolenaar \ ] 180159941cbdSBram Moolenaar let lines[1] = substitute(lines[1], '%s', repeat('x', len), '') 180259941cbdSBram Moolenaar call writefile(lines, 'Xcqetfile.txt') 180359941cbdSBram Moolenaar cgetfile Xcqetfile.txt 180459941cbdSBram Moolenaar call assert_equal(4, getqflist(#{size: v:true}).size, 'with length ' .. len) 180559941cbdSBram Moolenaar endfor 180659941cbdSBram Moolenaar call delete('Xcqetfile.txt') 180759941cbdSBram Moolenaarendfunc 180859941cbdSBram Moolenaar 18092b946c9fSBram Moolenaarfunc s:create_test_file(filename) 1810049cba9eSBram Moolenaar let l = [] 1811049cba9eSBram Moolenaar for i in range(1, 20) 1812049cba9eSBram Moolenaar call add(l, 'Line' . i) 1813049cba9eSBram Moolenaar endfor 1814049cba9eSBram Moolenaar call writefile(l, a:filename) 18152b946c9fSBram Moolenaarendfunc 1816049cba9eSBram Moolenaar 18172b946c9fSBram Moolenaarfunc Test_switchbuf() 1818049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile1') 1819049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile2') 1820049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile3') 1821049cba9eSBram Moolenaar 1822049cba9eSBram Moolenaar new | only 1823049cba9eSBram Moolenaar edit Xqftestfile1 1824049cba9eSBram Moolenaar let file1_winid = win_getid() 1825049cba9eSBram Moolenaar new Xqftestfile2 1826049cba9eSBram Moolenaar let file2_winid = win_getid() 1827049cba9eSBram Moolenaar cgetexpr ['Xqftestfile1:5:Line5', 1828049cba9eSBram Moolenaar \ 'Xqftestfile1:6:Line6', 1829049cba9eSBram Moolenaar \ 'Xqftestfile2:10:Line10', 1830049cba9eSBram Moolenaar \ 'Xqftestfile2:11:Line11', 1831049cba9eSBram Moolenaar \ 'Xqftestfile3:15:Line15', 1832049cba9eSBram Moolenaar \ 'Xqftestfile3:16:Line16'] 1833049cba9eSBram Moolenaar 1834049cba9eSBram Moolenaar new 1835049cba9eSBram Moolenaar let winid = win_getid() 1836049cba9eSBram Moolenaar cfirst | cnext 1837049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 183899895eacSBram Moolenaar 2cnext 1839049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 184099895eacSBram Moolenaar 2cnext 1841049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 1842049cba9eSBram Moolenaar 1843f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in windows in the current 1844f9ae154cSBram Moolenaar " tabpage and jump to an existing window (if present) 1845049cba9eSBram Moolenaar set switchbuf=useopen 1846f9ae154cSBram Moolenaar enew 1847049cba9eSBram Moolenaar cfirst | cnext 1848049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 184999895eacSBram Moolenaar 2cnext 1850049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 185199895eacSBram Moolenaar 2cnext 1852049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1853049cba9eSBram Moolenaar 1854f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in tabpages and jump to an 1855f9ae154cSBram Moolenaar " existing tabpage (if present) 1856049cba9eSBram Moolenaar enew | only 1857049cba9eSBram Moolenaar set switchbuf=usetab 1858049cba9eSBram Moolenaar tabedit Xqftestfile1 1859049cba9eSBram Moolenaar tabedit Xqftestfile2 186074240d3fSBram Moolenaar tabedit Xqftestfile3 1861049cba9eSBram Moolenaar tabfirst 1862049cba9eSBram Moolenaar cfirst | cnext 1863049cba9eSBram Moolenaar call assert_equal(2, tabpagenr()) 186499895eacSBram Moolenaar 2cnext 1865049cba9eSBram Moolenaar call assert_equal(3, tabpagenr()) 186674240d3fSBram Moolenaar 6cnext 186774240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 186874240d3fSBram Moolenaar 2cpfile 186974240d3fSBram Moolenaar call assert_equal(2, tabpagenr()) 187074240d3fSBram Moolenaar 2cnfile 187174240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 1872049cba9eSBram Moolenaar tabfirst | tabonly | enew 1873049cba9eSBram Moolenaar 1874f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new window for every file 1875049cba9eSBram Moolenaar set switchbuf=split 1876049cba9eSBram Moolenaar cfirst | cnext 1877049cba9eSBram Moolenaar call assert_equal(1, winnr('$')) 1878049cba9eSBram Moolenaar cnext | cnext 1879049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1880049cba9eSBram Moolenaar cnext | cnext 1881049cba9eSBram Moolenaar call assert_equal(3, winnr('$')) 1882049cba9eSBram Moolenaar 1883f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new tabpage for every file 1884049cba9eSBram Moolenaar set switchbuf=newtab 1885f9ae154cSBram Moolenaar enew | only 1886049cba9eSBram Moolenaar cfirst | cnext 1887049cba9eSBram Moolenaar call assert_equal(1, tabpagenr('$')) 1888049cba9eSBram Moolenaar cnext | cnext 1889049cba9eSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1890049cba9eSBram Moolenaar cnext | cnext 1891049cba9eSBram Moolenaar call assert_equal(3, tabpagenr('$')) 1892049cba9eSBram Moolenaar tabfirst | enew | tabonly | only 1893049cba9eSBram Moolenaar 1894539aa6b2SBram Moolenaar set switchbuf=uselast 1895539aa6b2SBram Moolenaar split 1896539aa6b2SBram Moolenaar let last_winid = win_getid() 1897539aa6b2SBram Moolenaar copen 1898539aa6b2SBram Moolenaar exe "normal 1G\<CR>" 1899539aa6b2SBram Moolenaar call assert_equal(last_winid, win_getid()) 1900539aa6b2SBram Moolenaar enew | only 1901539aa6b2SBram Moolenaar 1902f9ae154cSBram Moolenaar " With an empty 'switchbuf', jumping to a quickfix entry should open the 1903f9ae154cSBram Moolenaar " file in an existing window (if present) 1904049cba9eSBram Moolenaar set switchbuf= 1905049cba9eSBram Moolenaar edit Xqftestfile1 1906049cba9eSBram Moolenaar let file1_winid = win_getid() 1907049cba9eSBram Moolenaar new Xqftestfile2 1908049cba9eSBram Moolenaar let file2_winid = win_getid() 1909049cba9eSBram Moolenaar copen 1910049cba9eSBram Moolenaar exe "normal 1G\<CR>" 1911049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 1912049cba9eSBram Moolenaar copen 1913049cba9eSBram Moolenaar exe "normal 3G\<CR>" 1914049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1915049cba9eSBram Moolenaar copen | only 1916049cba9eSBram Moolenaar exe "normal 5G\<CR>" 1917049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1918049cba9eSBram Moolenaar call assert_equal(1, bufwinnr('Xqftestfile3')) 1919049cba9eSBram Moolenaar 1920391b1dd0SBram Moolenaar " If only quickfix window is open in the current tabpage, jumping to an 19211bc353b6SBram Moolenaar " entry with 'switchbuf' set to 'usetab' should search in other tabpages. 1922049cba9eSBram Moolenaar enew | only 1923391b1dd0SBram Moolenaar set switchbuf=usetab 1924391b1dd0SBram Moolenaar tabedit Xqftestfile1 1925391b1dd0SBram Moolenaar tabedit Xqftestfile2 1926391b1dd0SBram Moolenaar tabedit Xqftestfile3 1927391b1dd0SBram Moolenaar tabfirst 1928391b1dd0SBram Moolenaar copen | only 1929391b1dd0SBram Moolenaar clast 1930391b1dd0SBram Moolenaar call assert_equal(4, tabpagenr()) 1931391b1dd0SBram Moolenaar tabfirst | tabonly | enew | only 1932049cba9eSBram Moolenaar 1933f9ae154cSBram Moolenaar " Jumping to a file that is not present in any of the tabpages and the 1934f9ae154cSBram Moolenaar " current tabpage doesn't have any usable windows, should open it in a new 1935f9ae154cSBram Moolenaar " window in the current tabpage. 1936f9ae154cSBram Moolenaar copen | only 1937f9ae154cSBram Moolenaar cfirst 1938f9ae154cSBram Moolenaar call assert_equal(1, tabpagenr()) 1939bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 1940f9ae154cSBram Moolenaar 1941f9ae154cSBram Moolenaar " If opening a file changes 'switchbuf', then the new value should be 1942f9ae154cSBram Moolenaar " retained. 194341d4299fSBram Moolenaar set modeline&vim 1944f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=split"], 'Xqftestfile1') 1945f9ae154cSBram Moolenaar enew | only 1946f9ae154cSBram Moolenaar set switchbuf&vim 1947f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1948f9ae154cSBram Moolenaar call assert_equal('split', &switchbuf) 1949f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=usetab"], 'Xqftestfile1') 1950f9ae154cSBram Moolenaar enew | only 1951f9ae154cSBram Moolenaar set switchbuf=useopen 1952f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1953f9ae154cSBram Moolenaar call assert_equal('usetab', &switchbuf) 1954f9ae154cSBram Moolenaar call writefile(["vim: switchbuf&vim"], 'Xqftestfile1') 1955f9ae154cSBram Moolenaar enew | only 1956f9ae154cSBram Moolenaar set switchbuf=useopen 1957f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1958f9ae154cSBram Moolenaar call assert_equal('', &switchbuf) 1959f9ae154cSBram Moolenaar 1960049cba9eSBram Moolenaar call delete('Xqftestfile1') 1961049cba9eSBram Moolenaar call delete('Xqftestfile2') 1962049cba9eSBram Moolenaar call delete('Xqftestfile3') 1963391b1dd0SBram Moolenaar set switchbuf&vim 1964391b1dd0SBram Moolenaar 1965391b1dd0SBram Moolenaar enew | only 19662b946c9fSBram Moolenaarendfunc 1967049cba9eSBram Moolenaar 19682b946c9fSBram Moolenaarfunc Xadjust_qflnum(cchar) 1969049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 1970049cba9eSBram Moolenaar 1971049cba9eSBram Moolenaar enew | only 1972049cba9eSBram Moolenaar 1973c1542744SBram Moolenaar let fname = 'Xqftestfile' . a:cchar 1974c1542744SBram Moolenaar call s:create_test_file(fname) 1975c1542744SBram Moolenaar exe 'edit ' . fname 1976049cba9eSBram Moolenaar 1977c1542744SBram Moolenaar Xgetexpr [fname . ':5:Line5', 1978c1542744SBram Moolenaar \ fname . ':10:Line10', 1979c1542744SBram Moolenaar \ fname . ':15:Line15', 1980c1542744SBram Moolenaar \ fname . ':20:Line20'] 1981049cba9eSBram Moolenaar 1982049cba9eSBram Moolenaar 6,14delete 1983049cba9eSBram Moolenaar call append(6, ['Buffer', 'Window']) 1984049cba9eSBram Moolenaar 1985049cba9eSBram Moolenaar let l = g:Xgetlist() 1986049cba9eSBram Moolenaar call assert_equal(5, l[0].lnum) 1987049cba9eSBram Moolenaar call assert_equal(6, l[2].lnum) 1988049cba9eSBram Moolenaar call assert_equal(13, l[3].lnum) 1989049cba9eSBram Moolenaar 1990f9ae154cSBram Moolenaar " If a file doesn't have any quickfix entries, then deleting lines in the 1991f9ae154cSBram Moolenaar " file should not update the quickfix list 1992f9ae154cSBram Moolenaar call g:Xsetlist([], 'f') 1993f9ae154cSBram Moolenaar 1,2delete 1994f9ae154cSBram Moolenaar call assert_equal([], g:Xgetlist()) 1995f9ae154cSBram Moolenaar 1996049cba9eSBram Moolenaar enew! 1997c1542744SBram Moolenaar call delete(fname) 19982b946c9fSBram Moolenaarendfunc 1999049cba9eSBram Moolenaar 20002b946c9fSBram Moolenaarfunc Test_adjust_lnum() 2001c1542744SBram Moolenaar call setloclist(0, []) 2002049cba9eSBram Moolenaar call Xadjust_qflnum('c') 2003c1542744SBram Moolenaar call setqflist([]) 2004049cba9eSBram Moolenaar call Xadjust_qflnum('l') 20052b946c9fSBram Moolenaarendfunc 2006049cba9eSBram Moolenaar 2007049cba9eSBram Moolenaar" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands 20082b946c9fSBram Moolenaarfunc s:test_xgrep(cchar) 2009049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 2010049cba9eSBram Moolenaar 2011049cba9eSBram Moolenaar " The following lines are used for the grep test. Don't remove. 2012049cba9eSBram Moolenaar " Grep_Test_Text: Match 1 2013049cba9eSBram Moolenaar " Grep_Test_Text: Match 2 2014049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 1 2015049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 2 2016049cba9eSBram Moolenaar enew! | only 2017049cba9eSBram Moolenaar set makeef&vim 2018049cba9eSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 201915a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 5) 2020049cba9eSBram Moolenaar Xopen 2021049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ '^:grep') 2022049cba9eSBram Moolenaar Xclose 2023049cba9eSBram Moolenaar enew 2024049cba9eSBram Moolenaar set makeef=Temp_File_## 2025049cba9eSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 202615a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 202715a7bdcbSBram Moolenaar 202815a7bdcbSBram Moolenaar " Try with 'grepprg' set to 'internal' 202915a7bdcbSBram Moolenaar set grepprg=internal 203015a7bdcbSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 203115a7bdcbSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 203215a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 203315a7bdcbSBram Moolenaar set grepprg&vim 2034f9ae154cSBram Moolenaar 2035f9ae154cSBram Moolenaar call writefile(['Vim'], 'XtestTempFile') 2036f9ae154cSBram Moolenaar set makeef=XtestTempFile 2037f9ae154cSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 203815a7bdcbSBram Moolenaar call assert_equal(5, len(g:Xgetlist())) 2039f9ae154cSBram Moolenaar call assert_false(filereadable('XtestTempFile')) 2040f9ae154cSBram Moolenaar set makeef&vim 20412b946c9fSBram Moolenaarendfunc 2042049cba9eSBram Moolenaar 20432b946c9fSBram Moolenaarfunc Test_grep() 2044049cba9eSBram Moolenaar " The grepprg may not be set on non-Unix systems 20456d91bcb4SBram Moolenaar CheckUnix 2046049cba9eSBram Moolenaar 2047049cba9eSBram Moolenaar call s:test_xgrep('c') 2048049cba9eSBram Moolenaar call s:test_xgrep('l') 20492b946c9fSBram Moolenaarendfunc 2050361c8f0eSBram Moolenaar 20512b946c9fSBram Moolenaarfunc Test_two_windows() 2052361c8f0eSBram Moolenaar " Use one 'errorformat' for two windows. Add an expression to each of them, 2053361c8f0eSBram Moolenaar " make sure they each keep their own state. 2054361c8f0eSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 2055361c8f0eSBram Moolenaar call mkdir('Xone/a', 'p') 2056361c8f0eSBram Moolenaar call mkdir('Xtwo/a', 'p') 2057361c8f0eSBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 2058361c8f0eSBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 2059361c8f0eSBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 2060361c8f0eSBram Moolenaar 2061361c8f0eSBram Moolenaar new one 2062361c8f0eSBram Moolenaar let one_id = win_getid() 2063361c8f0eSBram Moolenaar lexpr "" 2064361c8f0eSBram Moolenaar new two 2065361c8f0eSBram Moolenaar let two_id = win_getid() 2066361c8f0eSBram Moolenaar lexpr "" 2067361c8f0eSBram Moolenaar 2068361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xtwo/a'" 2069361c8f0eSBram Moolenaar call win_gotoid(one_id) 2070361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xone/a'" 2071361c8f0eSBram Moolenaar call win_gotoid(two_id) 2072361c8f0eSBram Moolenaar laddexpr 'two.txt:5:two two two' 2073361c8f0eSBram Moolenaar call win_gotoid(one_id) 2074361c8f0eSBram Moolenaar laddexpr 'one.txt:3:one one one' 2075361c8f0eSBram Moolenaar 2076361c8f0eSBram Moolenaar let loc_one = getloclist(one_id) 2077361c8f0eSBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr)) 2078361c8f0eSBram Moolenaar call assert_equal(3, loc_one[1].lnum) 2079361c8f0eSBram Moolenaar 2080361c8f0eSBram Moolenaar let loc_two = getloclist(two_id) 2081361c8f0eSBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr)) 2082361c8f0eSBram Moolenaar call assert_equal(5, loc_two[1].lnum) 2083361c8f0eSBram Moolenaar 2084361c8f0eSBram Moolenaar call win_gotoid(one_id) 2085361c8f0eSBram Moolenaar bwipe! 2086361c8f0eSBram Moolenaar call win_gotoid(two_id) 2087361c8f0eSBram Moolenaar bwipe! 2088361c8f0eSBram Moolenaar call delete('Xone', 'rf') 2089361c8f0eSBram Moolenaar call delete('Xtwo', 'rf') 2090361c8f0eSBram Moolenaarendfunc 2091dcb17001SBram Moolenaar 20922b946c9fSBram Moolenaarfunc XbottomTests(cchar) 2093537ef084SBram Moolenaar call s:setup_commands(a:cchar) 2094537ef084SBram Moolenaar 2095b6fa30ccSBram Moolenaar " Calling lbottom without any errors should fail 2096b6fa30ccSBram Moolenaar if a:cchar == 'l' 2097b6fa30ccSBram Moolenaar call assert_fails('lbottom', 'E776:') 2098b6fa30ccSBram Moolenaar endif 2099b6fa30ccSBram Moolenaar 2100537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'foo', 'lnum': 42}]) 2101537ef084SBram Moolenaar Xopen 2102dcb17001SBram Moolenaar let wid = win_getid() 2103dcb17001SBram Moolenaar call assert_equal(1, line('.')) 2104dcb17001SBram Moolenaar wincmd w 2105537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'var', 'lnum': 24}], 'a') 2106537ef084SBram Moolenaar Xbottom 2107dcb17001SBram Moolenaar call win_gotoid(wid) 2108dcb17001SBram Moolenaar call assert_equal(2, line('.')) 2109537ef084SBram Moolenaar Xclose 2110dcb17001SBram Moolenaarendfunc 2111537ef084SBram Moolenaar 2112537ef084SBram Moolenaar" Tests for the :cbottom and :lbottom commands 21132b946c9fSBram Moolenaarfunc Test_cbottom() 2114537ef084SBram Moolenaar call XbottomTests('c') 2115537ef084SBram Moolenaar call XbottomTests('l') 21162b946c9fSBram Moolenaarendfunc 2117f6acffbeSBram Moolenaar 21182b946c9fSBram Moolenaarfunc HistoryTest(cchar) 2119f6acffbeSBram Moolenaar call s:setup_commands(a:cchar) 2120f6acffbeSBram Moolenaar 2121f6acffbeSBram Moolenaar " clear all lists after the first one, then replace the first one. 2122f6acffbeSBram Moolenaar call g:Xsetlist([]) 2123b6fa30ccSBram Moolenaar call assert_fails('Xolder 99', 'E380:') 2124f6acffbeSBram Moolenaar let entry = {'filename': 'foo', 'lnum': 42} 2125f6acffbeSBram Moolenaar call g:Xsetlist([entry], 'r') 2126f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry]) 2127f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry, entry]) 2128f6acffbeSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 2129f6acffbeSBram Moolenaar call assert_equal(3, len(res)) 2130f6acffbeSBram Moolenaar let common = 'errors :set' . (a:cchar == 'c' ? 'qf' : 'loc') . 'list()' 2131f6acffbeSBram Moolenaar call assert_equal(' error list 1 of 3; 1 ' . common, res[0]) 2132f6acffbeSBram Moolenaar call assert_equal(' error list 2 of 3; 2 ' . common, res[1]) 2133f6acffbeSBram Moolenaar call assert_equal('> error list 3 of 3; 3 ' . common, res[2]) 2134b4d5fbabSBram Moolenaar 21358ffc7c8bSBram Moolenaar " Test for changing the quickfix lists 21368ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 21378ffc7c8bSBram Moolenaar exe '1' . a:cchar . 'hist' 21388ffc7c8bSBram Moolenaar call assert_equal(1, g:Xgetlist({'nr' : 0}).nr) 21398ffc7c8bSBram Moolenaar exe '3' . a:cchar . 'hist' 21408ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 21418ffc7c8bSBram Moolenaar call assert_fails('-2' . a:cchar . 'hist', 'E16:') 21428ffc7c8bSBram Moolenaar call assert_fails('4' . a:cchar . 'hist', 'E16:') 21438ffc7c8bSBram Moolenaar 2144b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 2145b4d5fbabSBram Moolenaar let l = split(execute(a:cchar . 'hist'), "\n") 2146b4d5fbabSBram Moolenaar call assert_equal('No entries', l[0]) 21478ffc7c8bSBram Moolenaar if a:cchar == 'c' 21488ffc7c8bSBram Moolenaar call assert_fails('4chist', 'E16:') 21498ffc7c8bSBram Moolenaar else 21508ffc7c8bSBram Moolenaar call assert_fails('4lhist', 'E776:') 21518ffc7c8bSBram Moolenaar endif 21525b69c22fSBram Moolenaar 21535b69c22fSBram Moolenaar " An empty list should still show the stack history 21545b69c22fSBram Moolenaar call g:Xsetlist([]) 21555b69c22fSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 21565b69c22fSBram Moolenaar call assert_equal('> error list 1 of 1; 0 ' . common, res[0]) 21575b69c22fSBram Moolenaar 21585b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 2159f6acffbeSBram Moolenaarendfunc 2160f6acffbeSBram Moolenaar 2161f6acffbeSBram Moolenaarfunc Test_history() 2162f6acffbeSBram Moolenaar call HistoryTest('c') 2163f6acffbeSBram Moolenaar call HistoryTest('l') 2164f6acffbeSBram Moolenaarendfunc 2165015102e9SBram Moolenaar 2166015102e9SBram Moolenaarfunc Test_duplicate_buf() 2167015102e9SBram Moolenaar " make sure we can get the highest buffer number 2168015102e9SBram Moolenaar edit DoesNotExist 2169015102e9SBram Moolenaar edit DoesNotExist2 2170015102e9SBram Moolenaar let last_buffer = bufnr("$") 2171015102e9SBram Moolenaar 2172015102e9SBram Moolenaar " make sure only one buffer is created 2173015102e9SBram Moolenaar call writefile(['this one', 'that one'], 'Xgrepthis') 2174015102e9SBram Moolenaar vimgrep one Xgrepthis 2175015102e9SBram Moolenaar vimgrep one Xgrepthis 2176015102e9SBram Moolenaar call assert_equal(last_buffer + 1, bufnr("$")) 2177015102e9SBram Moolenaar 2178015102e9SBram Moolenaar call delete('Xgrepthis') 2179015102e9SBram Moolenaarendfunc 2180d823fa91SBram Moolenaar 2181d823fa91SBram Moolenaar" Quickfix/Location list set/get properties tests 21822b946c9fSBram Moolenaarfunc Xproperty_tests(cchar) 2183d823fa91SBram Moolenaar call s:setup_commands(a:cchar) 2184d823fa91SBram Moolenaar 2185d823fa91SBram Moolenaar " Error cases 2186d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist(99)', 'E715:') 2187d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist(99)', 'E714:') 2188d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 2189d823fa91SBram Moolenaar 2190d823fa91SBram Moolenaar " Set and get the title 2191b6fa30ccSBram Moolenaar call g:Xsetlist([]) 2192d823fa91SBram Moolenaar Xopen 2193d823fa91SBram Moolenaar wincmd p 2194d823fa91SBram Moolenaar call g:Xsetlist([{'filename':'foo', 'lnum':27}]) 219586f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'title' : 'Sample'}) 219686f100dcSBram Moolenaar call assert_equal(0, s) 2197d823fa91SBram Moolenaar let d = g:Xgetlist({"title":1}) 2198d823fa91SBram Moolenaar call assert_equal('Sample', d.title) 2199a2aa8a2bSBram Moolenaar " Try setting title to a non-string value 2200a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'title' : ['Test']})) 2201a2aa8a2bSBram Moolenaar call assert_equal('Sample', g:Xgetlist({"title":1}).title) 2202d823fa91SBram Moolenaar 2203d823fa91SBram Moolenaar Xopen 2204d823fa91SBram Moolenaar call assert_equal('Sample', w:quickfix_title) 2205d823fa91SBram Moolenaar Xclose 2206d823fa91SBram Moolenaar 22072b529bb6SBram Moolenaar " Tests for action argument 22082b529bb6SBram Moolenaar silent! Xolder 999 22092b529bb6SBram Moolenaar let qfnr = g:Xgetlist({'all':1}).nr 22102b529bb6SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'N1'}) 22112b529bb6SBram Moolenaar call assert_equal('N1', g:Xgetlist({'all':1}).title) 22122b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N2'}) 22132b529bb6SBram Moolenaar call assert_equal(qfnr + 1, g:Xgetlist({'all':1}).nr) 2214890680caSBram Moolenaar 2215890680caSBram Moolenaar let res = g:Xgetlist({'nr': 0}) 2216890680caSBram Moolenaar call assert_equal(qfnr + 1, res.nr) 2217890680caSBram Moolenaar call assert_equal(['nr'], keys(res)) 2218890680caSBram Moolenaar 22192b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N3'}) 22202b529bb6SBram Moolenaar call assert_equal('N2', g:Xgetlist({'nr':2, 'title':1}).title) 22212b529bb6SBram Moolenaar 2222ee85df37SBram Moolenaar " Changing the title of an earlier quickfix list 222355b69264SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'NewTitle', 'nr' : 2}) 2224ee85df37SBram Moolenaar call assert_equal('NewTitle', g:Xgetlist({'nr':2, 'title':1}).title) 2225ee85df37SBram Moolenaar 2226ee85df37SBram Moolenaar " Changing the title of an invalid quickfix list 2227ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2228ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 99})) 2229ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2230ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 'abc'})) 2231ee85df37SBram Moolenaar 2232ee85df37SBram Moolenaar if a:cchar == 'c' 2233ee85df37SBram Moolenaar copen 2234ee85df37SBram Moolenaar call assert_equal({'winid':win_getid()}, getqflist({'winid':1})) 2235ee85df37SBram Moolenaar cclose 2236ee85df37SBram Moolenaar endif 2237ee85df37SBram Moolenaar 2238d823fa91SBram Moolenaar " Invalid arguments 2239e2e4075fSBram Moolenaar call assert_fails('call g:Xgetlist([])', 'E715:') 2240e2e4075fSBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 2241d823fa91SBram Moolenaar let s = g:Xsetlist([], 'a', {'abc':1}) 2242d823fa91SBram Moolenaar call assert_equal(-1, s) 2243d823fa91SBram Moolenaar 2244d823fa91SBram Moolenaar call assert_equal({}, g:Xgetlist({'abc':1})) 2245a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':99, 'title':1}).title) 2246a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':[], 'title':1}).title) 2247d823fa91SBram Moolenaar 2248d823fa91SBram Moolenaar if a:cchar == 'l' 2249890680caSBram Moolenaar call assert_equal({}, getloclist(99, {'title': 1})) 2250d823fa91SBram Moolenaar endif 22518f77c5a4SBram Moolenaar 22528f77c5a4SBram Moolenaar " Context related tests 225386f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'context':[1,2,3]}) 225486f100dcSBram Moolenaar call assert_equal(0, s) 22558f77c5a4SBram Moolenaar call test_garbagecollect_now() 22568f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22578f77c5a4SBram Moolenaar call assert_equal([1,2,3], d.context) 22588f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':{'color':'green'}}) 22598f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22608f77c5a4SBram Moolenaar call assert_equal({'color':'green'}, d.context) 22618f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':"Context info"}) 22628f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22638f77c5a4SBram Moolenaar call assert_equal("Context info", d.context) 22648f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':246}) 22658f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22668f77c5a4SBram Moolenaar call assert_equal(246, d.context) 226792b83ccfSBram Moolenaar " set other Vim data types as context 226892b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_blob()}) 226992b83ccfSBram Moolenaar if has('channel') 227092b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_channel()}) 227192b83ccfSBram Moolenaar endif 227292b83ccfSBram Moolenaar if has('job') 227392b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_job()}) 227492b83ccfSBram Moolenaar endif 227592b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_function()}) 227692b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_partial()}) 227792b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : ''}) 227892b83ccfSBram Moolenaar call test_garbagecollect_now() 22798f77c5a4SBram Moolenaar if a:cchar == 'l' 22808f77c5a4SBram Moolenaar " Test for copying context across two different location lists 22818f77c5a4SBram Moolenaar new | only 22828f77c5a4SBram Moolenaar let w1_id = win_getid() 22838f77c5a4SBram Moolenaar let l = [1] 22848f77c5a4SBram Moolenaar call setloclist(0, [], 'a', {'context':l}) 22858f77c5a4SBram Moolenaar new 22868f77c5a4SBram Moolenaar let w2_id = win_getid() 22878f77c5a4SBram Moolenaar call add(l, 2) 22888f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w1_id, {'context':1}).context) 22898f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 22908f77c5a4SBram Moolenaar unlet! l 22918f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 22928f77c5a4SBram Moolenaar only 22938f77c5a4SBram Moolenaar call setloclist(0, [], 'f') 2294a6d4849cSBram Moolenaar call assert_equal('', getloclist(0, {'context':1}).context) 22958f77c5a4SBram Moolenaar endif 22966e62da3eSBram Moolenaar 22976e62da3eSBram Moolenaar " Test for changing the context of previous quickfix lists 22986e62da3eSBram Moolenaar call g:Xsetlist([], 'f') 22996e62da3eSBram Moolenaar Xexpr "One" 23006e62da3eSBram Moolenaar Xexpr "Two" 23016e62da3eSBram Moolenaar Xexpr "Three" 230255b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [1], 'nr' : 1}) 230355b69264SBram Moolenaar call g:Xsetlist([], 'a', {'context' : [2], 'nr' : 2}) 23046e62da3eSBram Moolenaar " Also, check for setting the context using quickfix list number zero. 230555b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [3], 'nr' : 0}) 23066e62da3eSBram Moolenaar call test_garbagecollect_now() 23076e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 1, 'context' : 1}) 23086e62da3eSBram Moolenaar call assert_equal([1], l.context) 23096e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 2, 'context' : 1}) 23106e62da3eSBram Moolenaar call assert_equal([2], l.context) 23116e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 3, 'context' : 1}) 23126e62da3eSBram Moolenaar call assert_equal([3], l.context) 23136e62da3eSBram Moolenaar 23146e62da3eSBram Moolenaar " Test for changing the context through reference and for garbage 23156e62da3eSBram Moolenaar " collection of quickfix context 23166e62da3eSBram Moolenaar let l = ["red"] 23176e62da3eSBram Moolenaar call g:Xsetlist([], ' ', {'context' : l}) 23186e62da3eSBram Moolenaar call add(l, "blue") 23196e62da3eSBram Moolenaar let x = g:Xgetlist({'context' : 1}) 23206e62da3eSBram Moolenaar call add(x.context, "green") 23216e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], l) 23226e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], x.context) 23236e62da3eSBram Moolenaar unlet l 23246e62da3eSBram Moolenaar call test_garbagecollect_now() 23256e62da3eSBram Moolenaar let m = g:Xgetlist({'context' : 1}) 23266e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], m.context) 23276a8958dbSBram Moolenaar 23286a8958dbSBram Moolenaar " Test for setting/getting items 23296a8958dbSBram Moolenaar Xexpr "" 23306a8958dbSBram Moolenaar let qfprev = g:Xgetlist({'nr':0}) 233186f100dcSBram Moolenaar let s = g:Xsetlist([], ' ', {'title':'Green', 23326a8958dbSBram Moolenaar \ 'items' : [{'filename':'F1', 'lnum':10}]}) 233386f100dcSBram Moolenaar call assert_equal(0, s) 23346a8958dbSBram Moolenaar let qfcur = g:Xgetlist({'nr':0}) 23356a8958dbSBram Moolenaar call assert_true(qfcur.nr == qfprev.nr + 1) 23366a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23376a8958dbSBram Moolenaar call assert_equal('F1', bufname(l.items[0].bufnr)) 23386a8958dbSBram Moolenaar call assert_equal(10, l.items[0].lnum) 23396a8958dbSBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F2', 'lnum':20}, 23406a8958dbSBram Moolenaar \ {'filename':'F2', 'lnum':30}]}) 23416a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23426a8958dbSBram Moolenaar call assert_equal('F2', bufname(l.items[2].bufnr)) 23436a8958dbSBram Moolenaar call assert_equal(30, l.items[2].lnum) 23446a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename':'F3', 'lnum':40}]}) 23456a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23466a8958dbSBram Moolenaar call assert_equal('F3', bufname(l.items[0].bufnr)) 23476a8958dbSBram Moolenaar call assert_equal(40, l.items[0].lnum) 23486a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 23496a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23506a8958dbSBram Moolenaar call assert_equal(0, len(l.items)) 23516a8958dbSBram Moolenaar 2352b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'TestTitle'}) 2353b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2354b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2355b4d5fbabSBram Moolenaar call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title) 2356b4d5fbabSBram Moolenaar 2357c9cc9c78SBram Moolenaar " Test for getting id of window associated with a location list window 2358c9cc9c78SBram Moolenaar if a:cchar == 'l' 2359c9cc9c78SBram Moolenaar only 2360c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'all' : 1}).filewinid) 2361c9cc9c78SBram Moolenaar let wid = win_getid() 2362c9cc9c78SBram Moolenaar Xopen 2363c9cc9c78SBram Moolenaar call assert_equal(wid, g:Xgetlist({'filewinid' : 1}).filewinid) 2364c9cc9c78SBram Moolenaar wincmd w 2365c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'filewinid' : 1}).filewinid) 2366c9cc9c78SBram Moolenaar only 2367c9cc9c78SBram Moolenaar endif 2368c9cc9c78SBram Moolenaar 2369ae338338SBram Moolenaar " The following used to crash Vim with address sanitizer 2370ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2371ae338338SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]}) 2372ae338338SBram Moolenaar call assert_equal(10, g:Xgetlist({'items':1}).items[0].lnum) 2373ae338338SBram Moolenaar 2374a2aa8a2bSBram Moolenaar " Try setting the items using a string 2375a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'items' : 'Test'})) 2376a2aa8a2bSBram Moolenaar 23776a8958dbSBram Moolenaar " Save and restore the quickfix stack 23786a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23796a8958dbSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 23806a8958dbSBram Moolenaar Xexpr "File1:10:Line1" 23816a8958dbSBram Moolenaar Xexpr "File2:20:Line2" 23826a8958dbSBram Moolenaar Xexpr "File3:30:Line3" 23836a8958dbSBram Moolenaar let last_qf = g:Xgetlist({'nr':'$'}).nr 23846a8958dbSBram Moolenaar call assert_equal(3, last_qf) 23856a8958dbSBram Moolenaar let qstack = [] 23866a8958dbSBram Moolenaar for i in range(1, last_qf) 23876a8958dbSBram Moolenaar let qstack = add(qstack, g:Xgetlist({'nr':i, 'all':1})) 23886a8958dbSBram Moolenaar endfor 23896a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23906a8958dbSBram Moolenaar for i in range(len(qstack)) 23916a8958dbSBram Moolenaar call g:Xsetlist([], ' ', qstack[i]) 23926a8958dbSBram Moolenaar endfor 23936a8958dbSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 23946a8958dbSBram Moolenaar call assert_equal(10, g:Xgetlist({'nr':1, 'items':1}).items[0].lnum) 23956a8958dbSBram Moolenaar call assert_equal(20, g:Xgetlist({'nr':2, 'items':1}).items[0].lnum) 23966a8958dbSBram Moolenaar call assert_equal(30, g:Xgetlist({'nr':3, 'items':1}).items[0].lnum) 23976a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23986a8958dbSBram Moolenaar 23996a8958dbSBram Moolenaar " Swap two quickfix lists 24006a8958dbSBram Moolenaar Xexpr "File1:10:Line10" 24016a8958dbSBram Moolenaar Xexpr "File2:20:Line20" 24026a8958dbSBram Moolenaar Xexpr "File3:30:Line30" 24036a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':1,'title':'Colors','context':['Colors']}) 24046a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':2,'title':'Fruits','context':['Fruits']}) 24056a8958dbSBram Moolenaar let l1=g:Xgetlist({'nr':1,'all':1}) 24066a8958dbSBram Moolenaar let l2=g:Xgetlist({'nr':2,'all':1}) 2407a539f4f1SBram Moolenaar let save_id = l1.id 2408a539f4f1SBram Moolenaar let l1.id=l2.id 2409a539f4f1SBram Moolenaar let l2.id=save_id 24106a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l1) 24116a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l2) 24126a8958dbSBram Moolenaar let newl1=g:Xgetlist({'nr':1,'all':1}) 24136a8958dbSBram Moolenaar let newl2=g:Xgetlist({'nr':2,'all':1}) 2414b4d5fbabSBram Moolenaar call assert_equal('Fruits', newl1.title) 24156a8958dbSBram Moolenaar call assert_equal(['Fruits'], newl1.context) 24166a8958dbSBram Moolenaar call assert_equal('Line20', newl1.items[0].text) 2417b4d5fbabSBram Moolenaar call assert_equal('Colors', newl2.title) 24186a8958dbSBram Moolenaar call assert_equal(['Colors'], newl2.context) 24196a8958dbSBram Moolenaar call assert_equal('Line10', newl2.items[0].text) 24206a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 2421be7a50c2SBram Moolenaar 2422be7a50c2SBram Moolenaar " Cannot specify both a non-empty list argument and a dict argument 2423be7a50c2SBram Moolenaar call assert_fails("call g:Xsetlist([{}], ' ', {})", 'E475:') 24242b946c9fSBram Moolenaarendfunc 2425d823fa91SBram Moolenaar 24262b946c9fSBram Moolenaarfunc Test_qf_property() 2427d823fa91SBram Moolenaar call Xproperty_tests('c') 2428d823fa91SBram Moolenaar call Xproperty_tests('l') 24292b946c9fSBram Moolenaarendfunc 243004c4ce65SBram Moolenaar 24315b69c22fSBram Moolenaar" Test for setting the current index in the location/quickfix list 24325b69c22fSBram Moolenaarfunc Xtest_setqfidx(cchar) 24335b69c22fSBram Moolenaar call s:setup_commands(a:cchar) 24345b69c22fSBram Moolenaar 24355b69c22fSBram Moolenaar Xgetexpr "F1:10:1:Line1\nF2:20:2:Line2\nF3:30:3:Line3" 24365b69c22fSBram Moolenaar Xgetexpr "F4:10:1:Line1\nF5:20:2:Line2\nF6:30:3:Line3" 24375b69c22fSBram Moolenaar Xgetexpr "F7:10:1:Line1\nF8:20:2:Line2\nF9:30:3:Line3" 24385b69c22fSBram Moolenaar 24395b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 2}) 24405b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'idx' : 2}) 24415b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 3}) 24425b69c22fSBram Moolenaar Xolder 2 24435b69c22fSBram Moolenaar Xopen 24445b69c22fSBram Moolenaar call assert_equal(3, line('.')) 24455b69c22fSBram Moolenaar Xnewer 24465b69c22fSBram Moolenaar call assert_equal(2, line('.')) 24475b69c22fSBram Moolenaar Xnewer 24485b69c22fSBram Moolenaar call assert_equal(2, line('.')) 24495b69c22fSBram Moolenaar " Update the current index with the quickfix window open 24505b69c22fSBram Moolenaar wincmd w 24515b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 3}) 24525b69c22fSBram Moolenaar Xopen 24535b69c22fSBram Moolenaar call assert_equal(3, line('.')) 24545b69c22fSBram Moolenaar Xclose 24555b69c22fSBram Moolenaar 24565b69c22fSBram Moolenaar " Set the current index to the last entry 24575b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : '$'}) 24585b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24595b69c22fSBram Moolenaar " A large value should set the index to the last index 24605b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 1}) 24615b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 999}) 24625b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24635b69c22fSBram Moolenaar " Invalid index values 24645b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : -1}) 24655b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24665b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 0}) 24675b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24685b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 'xx'}) 24695b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24705b69c22fSBram Moolenaar call assert_fails("call g:Xsetlist([], 'a', {'nr':1, 'idx':[]})", 'E745:') 24715b69c22fSBram Moolenaar 24725b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 24735b69c22fSBram Moolenaar new | only 24745b69c22fSBram Moolenaarendfunc 24755b69c22fSBram Moolenaar 24765b69c22fSBram Moolenaarfunc Test_setqfidx() 24775b69c22fSBram Moolenaar call Xtest_setqfidx('c') 24785b69c22fSBram Moolenaar call Xtest_setqfidx('l') 24795b69c22fSBram Moolenaarendfunc 24805b69c22fSBram Moolenaar 248104c4ce65SBram Moolenaar" Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands 24822b946c9fSBram Moolenaarfunc QfAutoCmdHandler(loc, cmd) 248304c4ce65SBram Moolenaar call add(g:acmds, a:loc . a:cmd) 24842b946c9fSBram Moolenaarendfunc 248504c4ce65SBram Moolenaar 24862b946c9fSBram Moolenaarfunc Test_Autocmd() 248704c4ce65SBram Moolenaar autocmd QuickFixCmdPre * call QfAutoCmdHandler('pre', expand('<amatch>')) 248804c4ce65SBram Moolenaar autocmd QuickFixCmdPost * call QfAutoCmdHandler('post', expand('<amatch>')) 248904c4ce65SBram Moolenaar 249004c4ce65SBram Moolenaar let g:acmds = [] 249104c4ce65SBram Moolenaar cexpr "F1:10:Line 10" 249204c4ce65SBram Moolenaar caddexpr "F1:20:Line 20" 249304c4ce65SBram Moolenaar cgetexpr "F1:30:Line 30" 24941ed2276fSBram Moolenaar cexpr "" 24951ed2276fSBram Moolenaar caddexpr "" 24961ed2276fSBram Moolenaar cgetexpr "" 24971ed2276fSBram Moolenaar silent! cexpr non_existing_func() 24981ed2276fSBram Moolenaar silent! caddexpr non_existing_func() 24991ed2276fSBram Moolenaar silent! cgetexpr non_existing_func() 250004c4ce65SBram Moolenaar let l = ['precexpr', 250104c4ce65SBram Moolenaar \ 'postcexpr', 250204c4ce65SBram Moolenaar \ 'precaddexpr', 250304c4ce65SBram Moolenaar \ 'postcaddexpr', 250404c4ce65SBram Moolenaar \ 'precgetexpr', 250504c4ce65SBram Moolenaar \ 'postcgetexpr', 25061ed2276fSBram Moolenaar \ 'precexpr', 25071ed2276fSBram Moolenaar \ 'postcexpr', 25081ed2276fSBram Moolenaar \ 'precaddexpr', 25091ed2276fSBram Moolenaar \ 'postcaddexpr', 25101ed2276fSBram Moolenaar \ 'precgetexpr', 25111ed2276fSBram Moolenaar \ 'postcgetexpr', 25121ed2276fSBram Moolenaar \ 'precexpr', 25131ed2276fSBram Moolenaar \ 'precaddexpr', 25141ed2276fSBram Moolenaar \ 'precgetexpr'] 25151ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25161ed2276fSBram Moolenaar 25171ed2276fSBram Moolenaar let g:acmds = [] 25181ed2276fSBram Moolenaar enew! | call append(0, "F2:10:Line 10") 25191ed2276fSBram Moolenaar cbuffer! 25201ed2276fSBram Moolenaar enew! | call append(0, "F2:20:Line 20") 25211ed2276fSBram Moolenaar cgetbuffer 25221ed2276fSBram Moolenaar enew! | call append(0, "F2:30:Line 30") 25231ed2276fSBram Moolenaar caddbuffer 25241ed2276fSBram Moolenaar new 25251ed2276fSBram Moolenaar let bnum = bufnr('%') 25261ed2276fSBram Moolenaar bunload 25271ed2276fSBram Moolenaar exe 'silent! cbuffer! ' . bnum 25281ed2276fSBram Moolenaar exe 'silent! cgetbuffer ' . bnum 25291ed2276fSBram Moolenaar exe 'silent! caddbuffer ' . bnum 25301ed2276fSBram Moolenaar enew! 25311ed2276fSBram Moolenaar let l = ['precbuffer', 253204c4ce65SBram Moolenaar \ 'postcbuffer', 253304c4ce65SBram Moolenaar \ 'precgetbuffer', 253404c4ce65SBram Moolenaar \ 'postcgetbuffer', 253504c4ce65SBram Moolenaar \ 'precaddbuffer', 25361ed2276fSBram Moolenaar \ 'postcaddbuffer', 25371ed2276fSBram Moolenaar \ 'precbuffer', 25381ed2276fSBram Moolenaar \ 'precgetbuffer', 25391ed2276fSBram Moolenaar \ 'precaddbuffer'] 254004c4ce65SBram Moolenaar call assert_equal(l, g:acmds) 25411ed2276fSBram Moolenaar 25421ed2276fSBram Moolenaar call writefile(['Xtest:1:Line1'], 'Xtest') 25431ed2276fSBram Moolenaar call writefile([], 'Xempty') 25441ed2276fSBram Moolenaar let g:acmds = [] 25451ed2276fSBram Moolenaar cfile Xtest 25461ed2276fSBram Moolenaar caddfile Xtest 25471ed2276fSBram Moolenaar cgetfile Xtest 25481ed2276fSBram Moolenaar cfile Xempty 25491ed2276fSBram Moolenaar caddfile Xempty 25501ed2276fSBram Moolenaar cgetfile Xempty 25511ed2276fSBram Moolenaar silent! cfile do_not_exist 25521ed2276fSBram Moolenaar silent! caddfile do_not_exist 25531ed2276fSBram Moolenaar silent! cgetfile do_not_exist 25541ed2276fSBram Moolenaar let l = ['precfile', 25551ed2276fSBram Moolenaar \ 'postcfile', 25561ed2276fSBram Moolenaar \ 'precaddfile', 25571ed2276fSBram Moolenaar \ 'postcaddfile', 25581ed2276fSBram Moolenaar \ 'precgetfile', 25591ed2276fSBram Moolenaar \ 'postcgetfile', 25601ed2276fSBram Moolenaar \ 'precfile', 25611ed2276fSBram Moolenaar \ 'postcfile', 25621ed2276fSBram Moolenaar \ 'precaddfile', 25631ed2276fSBram Moolenaar \ 'postcaddfile', 25641ed2276fSBram Moolenaar \ 'precgetfile', 25651ed2276fSBram Moolenaar \ 'postcgetfile', 25661ed2276fSBram Moolenaar \ 'precfile', 25671ed2276fSBram Moolenaar \ 'postcfile', 25681ed2276fSBram Moolenaar \ 'precaddfile', 25691ed2276fSBram Moolenaar \ 'postcaddfile', 25701ed2276fSBram Moolenaar \ 'precgetfile', 25711ed2276fSBram Moolenaar \ 'postcgetfile'] 25721ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25731ed2276fSBram Moolenaar 25741ed2276fSBram Moolenaar let g:acmds = [] 25751ed2276fSBram Moolenaar helpgrep quickfix 25761ed2276fSBram Moolenaar silent! helpgrep non_existing_help_topic 25771ed2276fSBram Moolenaar vimgrep test Xtest 25781ed2276fSBram Moolenaar vimgrepadd test Xtest 25791ed2276fSBram Moolenaar silent! vimgrep non_existing_test Xtest 25801ed2276fSBram Moolenaar silent! vimgrepadd non_existing_test Xtest 25811ed2276fSBram Moolenaar set makeprg= 25821ed2276fSBram Moolenaar silent! make 25831ed2276fSBram Moolenaar set makeprg& 25841ed2276fSBram Moolenaar let l = ['prehelpgrep', 25851ed2276fSBram Moolenaar \ 'posthelpgrep', 25861ed2276fSBram Moolenaar \ 'prehelpgrep', 25871ed2276fSBram Moolenaar \ 'posthelpgrep', 25881ed2276fSBram Moolenaar \ 'previmgrep', 25891ed2276fSBram Moolenaar \ 'postvimgrep', 25901ed2276fSBram Moolenaar \ 'previmgrepadd', 25911ed2276fSBram Moolenaar \ 'postvimgrepadd', 25921ed2276fSBram Moolenaar \ 'previmgrep', 25931ed2276fSBram Moolenaar \ 'postvimgrep', 25941ed2276fSBram Moolenaar \ 'previmgrepadd', 25951ed2276fSBram Moolenaar \ 'postvimgrepadd', 25961ed2276fSBram Moolenaar \ 'premake', 25971ed2276fSBram Moolenaar \ 'postmake'] 25981ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25991ed2276fSBram Moolenaar 26001ed2276fSBram Moolenaar if has('unix') 26011ed2276fSBram Moolenaar " Run this test only on Unix-like systems. The grepprg may not be set on 26021ed2276fSBram Moolenaar " non-Unix systems. 26031ed2276fSBram Moolenaar " The following lines are used for the grep test. Don't remove. 26041ed2276fSBram Moolenaar " Grep_Autocmd_Text: Match 1 26051ed2276fSBram Moolenaar " GrepAdd_Autocmd_Text: Match 2 26061ed2276fSBram Moolenaar let g:acmds = [] 26071ed2276fSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 26081ed2276fSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 26091ed2276fSBram Moolenaar silent grep abc123def Xtest 26101ed2276fSBram Moolenaar silent grepadd abc123def Xtest 261115a7bdcbSBram Moolenaar set grepprg=internal 261215a7bdcbSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 261315a7bdcbSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 261415a7bdcbSBram Moolenaar silent lgrep Grep_Autocmd_Text test_quickfix.vim 261515a7bdcbSBram Moolenaar silent lgrepadd GrepAdd_Autocmd_Text test_quickfix.vim 261615a7bdcbSBram Moolenaar set grepprg&vim 26171ed2276fSBram Moolenaar let l = ['pregrep', 26181ed2276fSBram Moolenaar \ 'postgrep', 26191ed2276fSBram Moolenaar \ 'pregrepadd', 26201ed2276fSBram Moolenaar \ 'postgrepadd', 26211ed2276fSBram Moolenaar \ 'pregrep', 26221ed2276fSBram Moolenaar \ 'postgrep', 26231ed2276fSBram Moolenaar \ 'pregrepadd', 262415a7bdcbSBram Moolenaar \ 'postgrepadd', 262515a7bdcbSBram Moolenaar \ 'pregrep', 262615a7bdcbSBram Moolenaar \ 'postgrep', 262715a7bdcbSBram Moolenaar \ 'pregrepadd', 262815a7bdcbSBram Moolenaar \ 'postgrepadd', 262915a7bdcbSBram Moolenaar \ 'prelgrep', 263015a7bdcbSBram Moolenaar \ 'postlgrep', 263115a7bdcbSBram Moolenaar \ 'prelgrepadd', 263215a7bdcbSBram Moolenaar \ 'postlgrepadd'] 26331ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 26341ed2276fSBram Moolenaar endif 26351ed2276fSBram Moolenaar 26361ed2276fSBram Moolenaar call delete('Xtest') 26371ed2276fSBram Moolenaar call delete('Xempty') 2638b254af31SBram Moolenaar au! QuickFixCmdPre 2639b254af31SBram Moolenaar au! QuickFixCmdPost 26402b946c9fSBram Moolenaarendfunc 264121662be2SBram Moolenaar 26422b946c9fSBram Moolenaarfunc Test_Autocmd_Exception() 264321662be2SBram Moolenaar set efm=%m 264421662be2SBram Moolenaar lgetexpr '?' 264521662be2SBram Moolenaar 264621662be2SBram Moolenaar try 264721662be2SBram Moolenaar call DoesNotExit() 264821662be2SBram Moolenaar catch 264921662be2SBram Moolenaar lgetexpr '1' 265021662be2SBram Moolenaar finally 265121662be2SBram Moolenaar lgetexpr '1' 265221662be2SBram Moolenaar endtry 265321662be2SBram Moolenaar 265421662be2SBram Moolenaar call assert_equal('1', getloclist(0)[0].text) 265521662be2SBram Moolenaar 265621662be2SBram Moolenaar set efm&vim 26572b946c9fSBram Moolenaarendfunc 265863bed3d3SBram Moolenaar 26592b946c9fSBram Moolenaarfunc Test_caddbuffer_wrong() 26602b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 266163bed3d3SBram Moolenaar let save_efm = &efm 266263bed3d3SBram Moolenaar set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.# 266363bed3d3SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 266463bed3d3SBram Moolenaar let &efm = save_efm 26652b946c9fSBram Moolenaar caddbuffer 266663bed3d3SBram Moolenaar bwipe! 266763bed3d3SBram Moolenaarendfunc 26682b946c9fSBram Moolenaar 26692b946c9fSBram Moolenaarfunc Test_caddexpr_wrong() 26702b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 26712b946c9fSBram Moolenaar cbuffer 26722b946c9fSBram Moolenaar cbuffer 26732b946c9fSBram Moolenaar copen 26742b946c9fSBram Moolenaar let save_efm = &efm 26752b946c9fSBram Moolenaar set efm=% 26762b946c9fSBram Moolenaar call assert_fails('caddexpr ""', 'E376:') 26772b946c9fSBram Moolenaar let &efm = save_efm 26782b946c9fSBram Moolenaarendfunc 26797618e00dSBram Moolenaar 26807618e00dSBram Moolenaarfunc Test_dirstack_cleanup() 26817618e00dSBram Moolenaar " This used to cause a memory access in freed memory. 26827618e00dSBram Moolenaar let save_efm = &efm 26837618e00dSBram Moolenaar lexpr '0' 26847618e00dSBram Moolenaar lopen 26857618e00dSBram Moolenaar fun X(c) 26867618e00dSBram Moolenaar let save_efm=&efm 26877618e00dSBram Moolenaar set efm=%D%f 26887618e00dSBram Moolenaar if a:c == 'c' 26897618e00dSBram Moolenaar caddexpr '::' 26907618e00dSBram Moolenaar else 26917618e00dSBram Moolenaar laddexpr ':0:0' 26927618e00dSBram Moolenaar endif 26937618e00dSBram Moolenaar let &efm=save_efm 26947618e00dSBram Moolenaar endfun 26957618e00dSBram Moolenaar call X('c') 26967618e00dSBram Moolenaar call X('l') 26977618e00dSBram Moolenaar call setqflist([], 'r') 26987618e00dSBram Moolenaar caddbuffer 26997618e00dSBram Moolenaar let &efm = save_efm 27007618e00dSBram Moolenaarendfunc 2701391b1dd0SBram Moolenaar 2702391b1dd0SBram Moolenaar" Tests for jumping to entries from the location list window and quickfix 2703391b1dd0SBram Moolenaar" window 2704391b1dd0SBram Moolenaarfunc Test_cwindow_jump() 2705391b1dd0SBram Moolenaar set efm=%f%%%l%%%m 2706391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2707391b1dd0SBram Moolenaar lopen | only 2708391b1dd0SBram Moolenaar lfirst 2709391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2710391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2711391b1dd0SBram Moolenaar " Location list for the new window should be set 2712391b1dd0SBram Moolenaar call assert_true(getloclist(0)[2].text == 'Line 30') 2713391b1dd0SBram Moolenaar 2714391b1dd0SBram Moolenaar " Open a scratch buffer 2715391b1dd0SBram Moolenaar " Open a new window and create a location list 2716391b1dd0SBram Moolenaar " Open the location list window and close the other window 2717391b1dd0SBram Moolenaar " Jump to an entry. 2718eeb1b9c7SBram Moolenaar " Should create a new window and jump to the entry. The scratch buffer 2719391b1dd0SBram Moolenaar " should not be used. 2720391b1dd0SBram Moolenaar enew | only 2721391b1dd0SBram Moolenaar set buftype=nofile 2722391b1dd0SBram Moolenaar below new 2723391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2724391b1dd0SBram Moolenaar lopen 2725391b1dd0SBram Moolenaar 2wincmd c 2726391b1dd0SBram Moolenaar lnext 2727391b1dd0SBram Moolenaar call assert_true(winnr('$') == 3) 2728391b1dd0SBram Moolenaar call assert_true(winnr() == 2) 2729391b1dd0SBram Moolenaar 2730391b1dd0SBram Moolenaar " Open two windows with two different location lists 2731391b1dd0SBram Moolenaar " Open the location list window and close the previous window 2732391b1dd0SBram Moolenaar " Jump to an entry in the location list window 2733391b1dd0SBram Moolenaar " Should open the file in the first window and not set the location list. 2734391b1dd0SBram Moolenaar enew | only 2735391b1dd0SBram Moolenaar lgetexpr ["F1%5%Line 5"] 2736391b1dd0SBram Moolenaar below new 2737391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2738391b1dd0SBram Moolenaar lopen 2739391b1dd0SBram Moolenaar 2wincmd c 2740391b1dd0SBram Moolenaar lnext 2741391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2742391b1dd0SBram Moolenaar call assert_true(getloclist(0)[0].text == 'Line 5') 2743391b1dd0SBram Moolenaar 2744391b1dd0SBram Moolenaar enew | only 2745391b1dd0SBram Moolenaar cgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2746391b1dd0SBram Moolenaar copen 2747391b1dd0SBram Moolenaar cnext 2748391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2749391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2750391b1dd0SBram Moolenaar 2751f9ae154cSBram Moolenaar " open the quickfix buffer in two windows and jump to an entry. Should open 2752f9ae154cSBram Moolenaar " the file in the first quickfix window. 2753f9ae154cSBram Moolenaar enew | only 2754f9ae154cSBram Moolenaar copen 2755f9ae154cSBram Moolenaar let bnum = bufnr('') 2756f9ae154cSBram Moolenaar exe 'sbuffer ' . bnum 2757f9ae154cSBram Moolenaar wincmd b 2758f9ae154cSBram Moolenaar cfirst 2759f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2760bdd2c290SBram Moolenaar call assert_equal('F1', @%) 2761f9ae154cSBram Moolenaar enew | only 2762f9ae154cSBram Moolenaar exe 'sb' bnum 2763f9ae154cSBram Moolenaar exe 'botright sb' bnum 2764f9ae154cSBram Moolenaar wincmd t 2765f9ae154cSBram Moolenaar clast 2766f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2767f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(1, '&buftype')) 2768f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(3, '&buftype')) 2769f9ae154cSBram Moolenaar 27704b96df5aSBram Moolenaar " Jumping to a file from the location list window should find a usable 277115a7bdcbSBram Moolenaar " window by wrapping around the window list. 277215a7bdcbSBram Moolenaar enew | only 277315a7bdcbSBram Moolenaar call setloclist(0, [], 'f') 277415a7bdcbSBram Moolenaar new | new 277515a7bdcbSBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 277615a7bdcbSBram Moolenaar lopen 277715a7bdcbSBram Moolenaar 1close 277815a7bdcbSBram Moolenaar call assert_equal(0, getloclist(3, {'id' : 0}).id) 277915a7bdcbSBram Moolenaar lnext 278015a7bdcbSBram Moolenaar call assert_equal(3, winnr()) 278115a7bdcbSBram Moolenaar call assert_equal(getloclist(1, {'id' : 0}).id, getloclist(3, {'id' : 0}).id) 278215a7bdcbSBram Moolenaar 2783391b1dd0SBram Moolenaar enew | only 2784391b1dd0SBram Moolenaar set efm&vim 2785391b1dd0SBram Moolenaarendfunc 2786ee85df37SBram Moolenaar 2787e00fdf35SBram Moolenaarfunc Test_cwindow_highlight() 2788e00fdf35SBram Moolenaar CheckScreendump 2789e00fdf35SBram Moolenaar 2790e00fdf35SBram Moolenaar let lines =<< trim END 2791e00fdf35SBram Moolenaar call setline(1, ['some', 'text', 'with', 'matches']) 2792e00fdf35SBram Moolenaar write XCwindow 2793e00fdf35SBram Moolenaar vimgrep e XCwindow 2794e00fdf35SBram Moolenaar redraw 2795e00fdf35SBram Moolenaar cwindow 4 2796e00fdf35SBram Moolenaar END 2797e00fdf35SBram Moolenaar call writefile(lines, 'XtestCwindow') 2798e00fdf35SBram Moolenaar let buf = RunVimInTerminal('-S XtestCwindow', #{rows: 12}) 2799e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_1', {}) 2800e00fdf35SBram Moolenaar 2801e00fdf35SBram Moolenaar call term_sendkeys(buf, ":cnext\<CR>") 2802e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_2', {}) 2803e00fdf35SBram Moolenaar 2804e00fdf35SBram Moolenaar " clean up 2805e00fdf35SBram Moolenaar call StopVimInTerminal(buf) 2806e00fdf35SBram Moolenaar call delete('XtestCwindow') 2807e00fdf35SBram Moolenaar call delete('XCwindow') 2808e00fdf35SBram Moolenaarendfunc 2809e00fdf35SBram Moolenaar 2810ee85df37SBram Moolenaarfunc XvimgrepTests(cchar) 2811ee85df37SBram Moolenaar call s:setup_commands(a:cchar) 2812ee85df37SBram Moolenaar 2813ee85df37SBram Moolenaar call writefile(['Editor:VIM vim', 2814ee85df37SBram Moolenaar \ 'Editor:Emacs EmAcS', 2815ee85df37SBram Moolenaar \ 'Editor:Notepad NOTEPAD'], 'Xtestfile1') 2816ee85df37SBram Moolenaar call writefile(['Linux', 'MacOS', 'MS-Windows'], 'Xtestfile2') 2817ee85df37SBram Moolenaar 2818ee85df37SBram Moolenaar " Error cases 2819ee85df37SBram Moolenaar call assert_fails('Xvimgrep /abc *', 'E682:') 2820ee85df37SBram Moolenaar 2821ee85df37SBram Moolenaar let @/='' 2822ee85df37SBram Moolenaar call assert_fails('Xvimgrep // *', 'E35:') 2823ee85df37SBram Moolenaar 2824ee85df37SBram Moolenaar call assert_fails('Xvimgrep abc', 'E683:') 2825ee85df37SBram Moolenaar call assert_fails('Xvimgrep a1b2c3 Xtestfile1', 'E480:') 2826ee85df37SBram Moolenaar call assert_fails('Xvimgrep pat Xa1b2c3', 'E480:') 2827ee85df37SBram Moolenaar 2828ee85df37SBram Moolenaar Xexpr "" 2829ee85df37SBram Moolenaar Xvimgrepadd Notepad Xtestfile1 2830ee85df37SBram Moolenaar Xvimgrepadd MacOS Xtestfile2 2831ee85df37SBram Moolenaar let l = g:Xgetlist() 2832ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2833ee85df37SBram Moolenaar call assert_equal('Editor:Notepad NOTEPAD', l[0].text) 2834ee85df37SBram Moolenaar 2835f9ae154cSBram Moolenaar 10Xvimgrep #\cvim#g Xtestfile? 2836ee85df37SBram Moolenaar let l = g:Xgetlist() 2837ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2838ee85df37SBram Moolenaar call assert_equal(8, l[0].col) 2839ee85df37SBram Moolenaar call assert_equal(12, l[1].col) 2840ee85df37SBram Moolenaar 2841ee85df37SBram Moolenaar 1Xvimgrep ?Editor? Xtestfile* 2842ee85df37SBram Moolenaar let l = g:Xgetlist() 2843ee85df37SBram Moolenaar call assert_equal(1, len(l)) 2844ee85df37SBram Moolenaar call assert_equal('Editor:VIM vim', l[0].text) 2845ee85df37SBram Moolenaar 2846ee85df37SBram Moolenaar edit +3 Xtestfile2 2847ee85df37SBram Moolenaar Xvimgrep +\cemacs+j Xtestfile1 2848ee85df37SBram Moolenaar let l = g:Xgetlist() 2849bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 2850ee85df37SBram Moolenaar call assert_equal('Editor:Emacs EmAcS', l[0].text) 2851ee85df37SBram Moolenaar 28522225ebb4SBram Moolenaar " Test for unloading a buffer after vimgrep searched the buffer 28532225ebb4SBram Moolenaar %bwipe 28542225ebb4SBram Moolenaar Xvimgrep /Editor/j Xtestfile* 28552225ebb4SBram Moolenaar call assert_equal(0, getbufinfo('Xtestfile1')[0].loaded) 28562225ebb4SBram Moolenaar call assert_equal([], getbufinfo('Xtestfile2')) 28572225ebb4SBram Moolenaar 2858ee85df37SBram Moolenaar call delete('Xtestfile1') 2859ee85df37SBram Moolenaar call delete('Xtestfile2') 2860ee85df37SBram Moolenaarendfunc 2861ee85df37SBram Moolenaar 2862ee85df37SBram Moolenaar" Tests for the :vimgrep command 2863ee85df37SBram Moolenaarfunc Test_vimgrep() 2864ee85df37SBram Moolenaar call XvimgrepTests('c') 2865ee85df37SBram Moolenaar call XvimgrepTests('l') 2866ee85df37SBram Moolenaarendfunc 286769f40be6SBram Moolenaar 2868f8c6a171SBram Moolenaarfunc Test_vimgrep_wildcards_expanded_once() 2869f8c6a171SBram Moolenaar new X[id-01] file.txt 2870f8c6a171SBram Moolenaar call setline(1, 'some text to search for') 2871f8c6a171SBram Moolenaar vimgrep text % 2872f8c6a171SBram Moolenaar bwipe! 2873f8c6a171SBram Moolenaarendfunc 2874f8c6a171SBram Moolenaar 28751c299434SBram Moolenaar" Test for incsearch highlighting of the :vimgrep pattern 28761c299434SBram Moolenaar" This test used to cause "E315: ml_get: invalid lnum" errors. 28771c299434SBram Moolenaarfunc Test_vimgrep_incsearch() 28781c299434SBram Moolenaar enew 28791c299434SBram Moolenaar set incsearch 28801c299434SBram Moolenaar call test_override("char_avail", 1) 28811c299434SBram Moolenaar 28821c299434SBram Moolenaar call feedkeys(":2vimgrep assert test_quickfix.vim test_cdo.vim\<CR>", "ntx") 28831c299434SBram Moolenaar let l = getqflist() 28841c299434SBram Moolenaar call assert_equal(2, len(l)) 28851c299434SBram Moolenaar 28861c299434SBram Moolenaar call test_override("ALL", 0) 28871c299434SBram Moolenaar set noincsearch 28881c299434SBram Moolenaarendfunc 28891c299434SBram Moolenaar 28909f6277bdSBram Moolenaar" Test vimgrep with the last search pattern not set 28919f6277bdSBram Moolenaarfunc Test_vimgrep_with_no_last_search_pat() 28929f6277bdSBram Moolenaar let lines =<< trim [SCRIPT] 28939f6277bdSBram Moolenaar call assert_fails('vimgrep // *', 'E35:') 28949f6277bdSBram Moolenaar call writefile(v:errors, 'Xresult') 28959f6277bdSBram Moolenaar qall! 28969f6277bdSBram Moolenaar [SCRIPT] 28979f6277bdSBram Moolenaar call writefile(lines, 'Xscript') 28989f6277bdSBram Moolenaar if RunVim([], [], '--clean -S Xscript') 28999f6277bdSBram Moolenaar call assert_equal([], readfile('Xresult')) 29009f6277bdSBram Moolenaar endif 29019f6277bdSBram Moolenaar call delete('Xscript') 29029f6277bdSBram Moolenaar call delete('Xresult') 29039f6277bdSBram Moolenaarendfunc 29049f6277bdSBram Moolenaar 2905997cd1a1SBram Moolenaar" Test vimgrep without swap file 2906997cd1a1SBram Moolenaarfunc Test_vimgrep_without_swap_file() 2907997cd1a1SBram Moolenaar let lines =<< trim [SCRIPT] 2908997cd1a1SBram Moolenaar vimgrep grep test_c* 2909997cd1a1SBram Moolenaar call writefile(['done'], 'Xresult') 2910997cd1a1SBram Moolenaar qall! 2911997cd1a1SBram Moolenaar [SCRIPT] 2912997cd1a1SBram Moolenaar call writefile(lines, 'Xscript') 2913997cd1a1SBram Moolenaar if RunVim([], [], '--clean -n -S Xscript Xscript') 2914997cd1a1SBram Moolenaar call assert_equal(['done'], readfile('Xresult')) 2915997cd1a1SBram Moolenaar endif 2916997cd1a1SBram Moolenaar call delete('Xscript') 2917997cd1a1SBram Moolenaar call delete('Xresult') 2918997cd1a1SBram Moolenaarendfunc 2919997cd1a1SBram Moolenaar 29208ce4b7edSBram Moolenaarfunc Test_vimgrep_existing_swapfile() 29218ce4b7edSBram Moolenaar call writefile(['match apple with apple'], 'Xapple') 29228ce4b7edSBram Moolenaar call writefile(['swapfile'], '.Xapple.swp') 29238ce4b7edSBram Moolenaar let g:foundSwap = 0 29248ce4b7edSBram Moolenaar let g:ignoreSwapExists = 1 29258ce4b7edSBram Moolenaar augroup grep 29268ce4b7edSBram Moolenaar au SwapExists * let foundSwap = 1 | let v:swapchoice = 'e' 29278ce4b7edSBram Moolenaar augroup END 29288ce4b7edSBram Moolenaar vimgrep apple Xapple 29298ce4b7edSBram Moolenaar call assert_equal(1, g:foundSwap) 29308ce4b7edSBram Moolenaar call assert_match('.Xapple.swo', swapname('')) 29318ce4b7edSBram Moolenaar 29328ce4b7edSBram Moolenaar call delete('Xapple') 29336d91bcb4SBram Moolenaar call delete('.Xapple.swp') 29348ce4b7edSBram Moolenaar augroup grep 29358ce4b7edSBram Moolenaar au! SwapExists 29368ce4b7edSBram Moolenaar augroup END 29378ce4b7edSBram Moolenaar unlet g:ignoreSwapExists 29388ce4b7edSBram Moolenaarendfunc 29398ce4b7edSBram Moolenaar 294069f40be6SBram Moolenaarfunc XfreeTests(cchar) 294169f40be6SBram Moolenaar call s:setup_commands(a:cchar) 294269f40be6SBram Moolenaar 294369f40be6SBram Moolenaar enew | only 294469f40be6SBram Moolenaar 294569f40be6SBram Moolenaar " Deleting the quickfix stack should work even When the current list is 294669f40be6SBram Moolenaar " somewhere in the middle of the stack 294769f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 294869f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 294969f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 295069f40be6SBram Moolenaar Xolder 295169f40be6SBram Moolenaar call g:Xsetlist([], 'f') 295269f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 295369f40be6SBram Moolenaar 295469f40be6SBram Moolenaar " After deleting the stack, adding a new list should create a stack with a 295569f40be6SBram Moolenaar " single list. 295669f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 295769f40be6SBram Moolenaar call assert_equal(1, g:Xgetlist({'all':1}).nr) 295869f40be6SBram Moolenaar 295969f40be6SBram Moolenaar " Deleting the stack from a quickfix window should update/clear the 296069f40be6SBram Moolenaar " quickfix/location list window. 296169f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 296269f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 296369f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 296469f40be6SBram Moolenaar Xolder 296569f40be6SBram Moolenaar Xwindow 296669f40be6SBram Moolenaar call g:Xsetlist([], 'f') 296769f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 296869f40be6SBram Moolenaar call assert_equal(1, line('$')) 296969f40be6SBram Moolenaar Xclose 297069f40be6SBram Moolenaar 297169f40be6SBram Moolenaar " Deleting the stack from a non-quickfix window should update/clear the 297269f40be6SBram Moolenaar " quickfix/location list window. 297369f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 297469f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 297569f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 297669f40be6SBram Moolenaar Xolder 297769f40be6SBram Moolenaar Xwindow 297869f40be6SBram Moolenaar wincmd p 297969f40be6SBram Moolenaar call g:Xsetlist([], 'f') 298069f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 298169f40be6SBram Moolenaar wincmd p 298269f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 298369f40be6SBram Moolenaar call assert_equal(1, line('$')) 298469f40be6SBram Moolenaar 298569f40be6SBram Moolenaar " After deleting the location list stack, if the location list window is 298669f40be6SBram Moolenaar " opened, then a new location list should be created. So opening the 298769f40be6SBram Moolenaar " location list window again should not create a new window. 298869f40be6SBram Moolenaar if a:cchar == 'l' 298969f40be6SBram Moolenaar lexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 299069f40be6SBram Moolenaar wincmd p 299169f40be6SBram Moolenaar lopen 299269f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 299369f40be6SBram Moolenaar endif 299469f40be6SBram Moolenaar Xclose 299569f40be6SBram Moolenaarendfunc 299669f40be6SBram Moolenaar 299774240d3fSBram Moolenaar" Tests for the quickfix free functionality 299869f40be6SBram Moolenaarfunc Test_qf_free() 299969f40be6SBram Moolenaar call XfreeTests('c') 300069f40be6SBram Moolenaar call XfreeTests('l') 300169f40be6SBram Moolenaarendfunc 30026e62da3eSBram Moolenaar 30036e62da3eSBram Moolenaar" Test for buffer overflow when parsing lines and adding new entries to 30046e62da3eSBram Moolenaar" the quickfix list. 30056e62da3eSBram Moolenaarfunc Test_bufoverflow() 30066e62da3eSBram Moolenaar set efm=%f:%l:%m 30076e62da3eSBram Moolenaar cgetexpr ['File1:100:' . repeat('x', 1025)] 30086e62da3eSBram Moolenaar 30096e62da3eSBram Moolenaar set efm=%+GCompiler:\ %.%#,%f:%l:%m 30106e62da3eSBram Moolenaar cgetexpr ['Compiler: ' . repeat('a', 1015), 'File1:10:Hello World'] 30116e62da3eSBram Moolenaar 30126e62da3eSBram Moolenaar set efm=%DEntering\ directory\ %f,%f:%l:%m 30136e62da3eSBram Moolenaar cgetexpr ['Entering directory ' . repeat('a', 1006), 30146e62da3eSBram Moolenaar \ 'File1:10:Hello World'] 30156e62da3eSBram Moolenaar set efm&vim 30166e62da3eSBram Moolenaarendfunc 30176e62da3eSBram Moolenaar 3018875feea6SBram Moolenaar" Tests for getting the quickfix stack size 3019875feea6SBram Moolenaarfunc XsizeTests(cchar) 3020875feea6SBram Moolenaar call s:setup_commands(a:cchar) 3021875feea6SBram Moolenaar 3022875feea6SBram Moolenaar call g:Xsetlist([], 'f') 3023875feea6SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 3024a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':'$', 'all':1}).title) 3025a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':0}).nr) 3026875feea6SBram Moolenaar 3027875feea6SBram Moolenaar Xexpr "File1:10:Line1" 3028875feea6SBram Moolenaar Xexpr "File2:20:Line2" 3029875feea6SBram Moolenaar Xexpr "File3:30:Line3" 3030875feea6SBram Moolenaar Xolder | Xolder 3031875feea6SBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 3032875feea6SBram Moolenaar call g:Xsetlist([], 'f') 3033875feea6SBram Moolenaar 3034875feea6SBram Moolenaar Xexpr "File1:10:Line1" 3035875feea6SBram Moolenaar Xexpr "File2:20:Line2" 3036875feea6SBram Moolenaar Xexpr "File3:30:Line3" 3037875feea6SBram Moolenaar Xolder | Xolder 3038875feea6SBram Moolenaar call g:Xsetlist([], 'a', {'nr':'$', 'title':'Compiler'}) 3039875feea6SBram Moolenaar call assert_equal('Compiler', g:Xgetlist({'nr':3, 'all':1}).title) 3040875feea6SBram Moolenaarendfunc 3041875feea6SBram Moolenaar 3042875feea6SBram Moolenaarfunc Test_Qf_Size() 3043875feea6SBram Moolenaar call XsizeTests('c') 3044875feea6SBram Moolenaar call XsizeTests('l') 3045875feea6SBram Moolenaarendfunc 30461814183bSBram Moolenaar 30479c4fefffSBram Moolenaarfunc Test_cclose_from_copen() 30489c4fefffSBram Moolenaar augroup QF_Test 30499c4fefffSBram Moolenaar au! 3050e2e4075fSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788:') 30519c4fefffSBram Moolenaar augroup END 30529c4fefffSBram Moolenaar copen 30539c4fefffSBram Moolenaar augroup QF_Test 30549c4fefffSBram Moolenaar au! 30559c4fefffSBram Moolenaar augroup END 30569c4fefffSBram Moolenaar augroup! QF_Test 30579c4fefffSBram Moolenaarendfunc 30589c4fefffSBram Moolenaar 30591814183bSBram Moolenaarfunc Test_cclose_in_autocmd() 30601814183bSBram Moolenaar " Problem is only triggered if "starting" is zero, so that the OptionsSet 30611814183bSBram Moolenaar " event will be triggered. 30621814183bSBram Moolenaar call test_override('starting', 1) 30631814183bSBram Moolenaar augroup QF_Test 30641814183bSBram Moolenaar au! 3065e2e4075fSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788:') 30661814183bSBram Moolenaar augroup END 30671814183bSBram Moolenaar copen 30681814183bSBram Moolenaar augroup QF_Test 30691814183bSBram Moolenaar au! 30701814183bSBram Moolenaar augroup END 30711814183bSBram Moolenaar augroup! QF_Test 30721814183bSBram Moolenaar call test_override('starting', 0) 30731814183bSBram Moolenaarendfunc 30749c4fefffSBram Moolenaar 3075379fb76bSBram Moolenaar" Check that ":file" without an argument is possible even when "curbuf_lock" 3076379fb76bSBram Moolenaar" is set. 3077379fb76bSBram Moolenaarfunc Test_file_from_copen() 3078379fb76bSBram Moolenaar " Works without argument. 3079379fb76bSBram Moolenaar augroup QF_Test 3080379fb76bSBram Moolenaar au! 3081379fb76bSBram Moolenaar au FileType qf file 3082379fb76bSBram Moolenaar augroup END 3083379fb76bSBram Moolenaar copen 3084379fb76bSBram Moolenaar 3085379fb76bSBram Moolenaar augroup QF_Test 3086379fb76bSBram Moolenaar au! 3087379fb76bSBram Moolenaar augroup END 3088379fb76bSBram Moolenaar cclose 3089379fb76bSBram Moolenaar 3090379fb76bSBram Moolenaar " Fails with argument. 3091379fb76bSBram Moolenaar augroup QF_Test 3092379fb76bSBram Moolenaar au! 3093e2e4075fSBram Moolenaar au FileType qf call assert_fails(':file foo', 'E788:') 3094379fb76bSBram Moolenaar augroup END 3095379fb76bSBram Moolenaar copen 3096379fb76bSBram Moolenaar augroup QF_Test 3097379fb76bSBram Moolenaar au! 3098379fb76bSBram Moolenaar augroup END 3099379fb76bSBram Moolenaar cclose 3100379fb76bSBram Moolenaar 3101379fb76bSBram Moolenaar augroup! QF_Test 31026a0cc916SBram Moolenaarendfunc 3103379fb76bSBram Moolenaar 31049c4fefffSBram Moolenaarfunc Test_resize_from_copen() 31059c4fefffSBram Moolenaar augroup QF_Test 31069c4fefffSBram Moolenaar au! 31079c4fefffSBram Moolenaar au FileType qf resize 5 31089c4fefffSBram Moolenaar augroup END 31099c4fefffSBram Moolenaar try 31109c4fefffSBram Moolenaar " This should succeed without any exception. No other buffers are 31119c4fefffSBram Moolenaar " involved in the autocmd. 31129c4fefffSBram Moolenaar copen 31139c4fefffSBram Moolenaar finally 31149c4fefffSBram Moolenaar augroup QF_Test 31159c4fefffSBram Moolenaar au! 31169c4fefffSBram Moolenaar augroup END 31179c4fefffSBram Moolenaar augroup! QF_Test 31189c4fefffSBram Moolenaar endtry 31199c4fefffSBram Moolenaarendfunc 3120a8788f4dSBram Moolenaar 312133aecb1fSBram Moolenaarfunc Test_vimgrep_with_textlock() 312233aecb1fSBram Moolenaar new 312333aecb1fSBram Moolenaar 312433aecb1fSBram Moolenaar " Simple way to execute something with "textwinlock" set. 312533aecb1fSBram Moolenaar " Check that vimgrep without jumping can be executed. 312633aecb1fSBram Moolenaar au InsertCharPre * vimgrep /RunTheTest/j runtest.vim 312733aecb1fSBram Moolenaar normal ax 312833aecb1fSBram Moolenaar let qflist = getqflist() 312933aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 313033aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 313133aecb1fSBram Moolenaar call setqflist([], 'r') 313233aecb1fSBram Moolenaar au! InsertCharPre 313333aecb1fSBram Moolenaar 313433aecb1fSBram Moolenaar " Check that vimgrepadd without jumping can be executed. 313533aecb1fSBram Moolenaar au InsertCharPre * vimgrepadd /RunTheTest/j runtest.vim 313633aecb1fSBram Moolenaar normal ax 313733aecb1fSBram Moolenaar let qflist = getqflist() 313833aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 313933aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 314033aecb1fSBram Moolenaar call setqflist([], 'r') 314133aecb1fSBram Moolenaar au! InsertCharPre 314233aecb1fSBram Moolenaar 314333aecb1fSBram Moolenaar " Check that lvimgrep without jumping can be executed. 314433aecb1fSBram Moolenaar au InsertCharPre * lvimgrep /RunTheTest/j runtest.vim 314533aecb1fSBram Moolenaar normal ax 314633aecb1fSBram Moolenaar let qflist = getloclist(0) 314733aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 314833aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 314933aecb1fSBram Moolenaar call setloclist(0, [], 'r') 315033aecb1fSBram Moolenaar au! InsertCharPre 315133aecb1fSBram Moolenaar 315233aecb1fSBram Moolenaar " Check that lvimgrepadd without jumping can be executed. 315333aecb1fSBram Moolenaar au InsertCharPre * lvimgrepadd /RunTheTest/j runtest.vim 315433aecb1fSBram Moolenaar normal ax 315533aecb1fSBram Moolenaar let qflist = getloclist(0) 315633aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 315733aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 315833aecb1fSBram Moolenaar call setloclist(0, [], 'r') 315933aecb1fSBram Moolenaar au! InsertCharPre 316033aecb1fSBram Moolenaar 316133aecb1fSBram Moolenaar " trying to jump will give an error 316233aecb1fSBram Moolenaar au InsertCharPre * vimgrep /RunTheTest/ runtest.vim 316333aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 316433aecb1fSBram Moolenaar au! InsertCharPre 316533aecb1fSBram Moolenaar 316633aecb1fSBram Moolenaar au InsertCharPre * vimgrepadd /RunTheTest/ runtest.vim 316733aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 316833aecb1fSBram Moolenaar au! InsertCharPre 316933aecb1fSBram Moolenaar 317033aecb1fSBram Moolenaar au InsertCharPre * lvimgrep /RunTheTest/ runtest.vim 317133aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 317233aecb1fSBram Moolenaar au! InsertCharPre 317333aecb1fSBram Moolenaar 317433aecb1fSBram Moolenaar au InsertCharPre * lvimgrepadd /RunTheTest/ runtest.vim 317533aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 317633aecb1fSBram Moolenaar au! InsertCharPre 317733aecb1fSBram Moolenaar 317833aecb1fSBram Moolenaar bwipe! 317933aecb1fSBram Moolenaarendfunc 318033aecb1fSBram Moolenaar 3181a8788f4dSBram Moolenaar" Tests for the quickfix buffer b:changedtick variable 3182a8788f4dSBram Moolenaarfunc Xchangedtick_tests(cchar) 3183a8788f4dSBram Moolenaar call s:setup_commands(a:cchar) 3184a8788f4dSBram Moolenaar 3185a8788f4dSBram Moolenaar new | only 3186a8788f4dSBram Moolenaar 3187a8788f4dSBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 3188a8788f4dSBram Moolenaar 3189a8788f4dSBram Moolenaar Xopen 3190a8788f4dSBram Moolenaar Xolder 3191a8788f4dSBram Moolenaar Xolder 3192a8788f4dSBram Moolenaar Xaddexpr "F1:10:Line10" 3193a8788f4dSBram Moolenaar Xaddexpr "F2:20:Line20" 3194a8788f4dSBram Moolenaar call g:Xsetlist([{"filename":"F3", "lnum":30, "text":"Line30"}], 'a') 3195a8788f4dSBram Moolenaar call g:Xsetlist([], 'f') 3196a8788f4dSBram Moolenaar call assert_equal(8, getbufvar('%', 'changedtick')) 3197a8788f4dSBram Moolenaar Xclose 3198a8788f4dSBram Moolenaarendfunc 3199a8788f4dSBram Moolenaar 3200a8788f4dSBram Moolenaarfunc Test_changedtick() 3201a8788f4dSBram Moolenaar call Xchangedtick_tests('c') 3202a8788f4dSBram Moolenaar call Xchangedtick_tests('l') 3203a8788f4dSBram Moolenaarendfunc 3204d28cc3f5SBram Moolenaar 3205ae338338SBram Moolenaar" Tests for parsing an expression using setqflist() 3206ae338338SBram Moolenaarfunc Xsetexpr_tests(cchar) 3207ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3208ae338338SBram Moolenaar 3209ae338338SBram Moolenaar let t = ["File1:10:Line10", "File1:20:Line20"] 32102c809b7cSBram Moolenaar call g:Xsetlist([], ' ', {'lines' : t}) 32112c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]}) 3212ae338338SBram Moolenaar 3213ae338338SBram Moolenaar let l = g:Xgetlist() 3214ae338338SBram Moolenaar call assert_equal(3, len(l)) 3215ae338338SBram Moolenaar call assert_equal(20, l[1].lnum) 3216ae338338SBram Moolenaar call assert_equal('Line30', l[2].text) 32172c809b7cSBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]}) 3218ae338338SBram Moolenaar let l = g:Xgetlist() 3219ae338338SBram Moolenaar call assert_equal(1, len(l)) 3220ae338338SBram Moolenaar call assert_equal('Line5', l[0].text) 32212c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10})) 32222c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"})) 3223ae338338SBram Moolenaar 3224ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3225ae338338SBram Moolenaar " Add entries to multiple lists 32262c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]}) 32272c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]}) 32282c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]}) 32292c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]}) 3230ae338338SBram Moolenaar call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text) 3231ae338338SBram Moolenaar call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text) 323236538225SBram Moolenaar 323336538225SBram Moolenaar " Adding entries using a custom efm 323436538225SBram Moolenaar set efm& 323536538225SBram Moolenaar call g:Xsetlist([], ' ', {'efm' : '%f#%l#%m', 323636538225SBram Moolenaar \ 'lines' : ["F1#10#L10", "F2#20#L20"]}) 323736538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 323836538225SBram Moolenaar call g:Xsetlist([], 'a', {'efm' : '%f#%l#%m', 'lines' : ["F3:30:L30"]}) 323936538225SBram Moolenaar call assert_equal('F3:30:L30', g:Xgetlist({'items':1}).items[2].text) 324036538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 324136538225SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'efm' : [], 324236538225SBram Moolenaar \ 'lines' : ['F1:10:L10']})) 3243ae338338SBram Moolenaarendfunc 3244ae338338SBram Moolenaar 3245ae338338SBram Moolenaarfunc Test_setexpr() 3246ae338338SBram Moolenaar call Xsetexpr_tests('c') 3247ae338338SBram Moolenaar call Xsetexpr_tests('l') 3248ae338338SBram Moolenaarendfunc 3249ae338338SBram Moolenaar 3250ae338338SBram Moolenaar" Tests for per quickfix/location list directory stack 3251ae338338SBram Moolenaarfunc Xmultidirstack_tests(cchar) 3252ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3253ae338338SBram Moolenaar 3254ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3255ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3256ae338338SBram Moolenaar 32572c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]}) 32582c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]}) 32592c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]}) 32602c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]}) 3261ae338338SBram Moolenaar 3262ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3263ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3264ae338338SBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(l1.items[1].bufnr)) 3265ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3266ae338338SBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(l2.items[1].bufnr)) 3267ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3268ae338338SBram Moolenaarendfunc 3269ae338338SBram Moolenaar 3270ae338338SBram Moolenaarfunc Test_multidirstack() 3271ae338338SBram Moolenaar call mkdir('Xone/a', 'p') 3272ae338338SBram Moolenaar call mkdir('Xtwo/a', 'p') 3273ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3274ae338338SBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 3275ae338338SBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 3276ae338338SBram Moolenaar let save_efm = &efm 3277ae338338SBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 3278ae338338SBram Moolenaar 3279ae338338SBram Moolenaar call Xmultidirstack_tests('c') 3280ae338338SBram Moolenaar call Xmultidirstack_tests('l') 3281ae338338SBram Moolenaar 3282ae338338SBram Moolenaar let &efm = save_efm 3283ae338338SBram Moolenaar call delete('Xone', 'rf') 3284ae338338SBram Moolenaar call delete('Xtwo', 'rf') 3285ae338338SBram Moolenaarendfunc 3286ae338338SBram Moolenaar 3287ae338338SBram Moolenaar" Tests for per quickfix/location list file stack 3288ae338338SBram Moolenaarfunc Xmultifilestack_tests(cchar) 3289ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3290ae338338SBram Moolenaar 3291ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3292ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3293ae338338SBram Moolenaar 32942c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]}) 32952c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]}) 32962c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]}) 32972c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]}) 3298ae338338SBram Moolenaar 3299ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3300ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3301ae338338SBram Moolenaar call assert_equal('one.txt', bufname(l1.items[1].bufnr)) 3302ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3303ae338338SBram Moolenaar call assert_equal('two.txt', bufname(l2.items[1].bufnr)) 3304ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3305e333e79fSBram Moolenaar 3306e333e79fSBram Moolenaar " Test for start of a new error line in the same line where a previous 3307e333e79fSBram Moolenaar " error line ends with a file stack. 3308e333e79fSBram Moolenaar let efm_val = 'Error\ l%l\ in\ %f,' 3309e333e79fSBram Moolenaar let efm_val .= '%-P%>(%f%r,Error\ l%l\ in\ %m,%-Q)%r' 3310e333e79fSBram Moolenaar let l = g:Xgetlist({'lines' : [ 3311e333e79fSBram Moolenaar \ '(one.txt', 3312e333e79fSBram Moolenaar \ 'Error l4 in one.txt', 3313e333e79fSBram Moolenaar \ ') (two.txt', 3314e333e79fSBram Moolenaar \ 'Error l6 in two.txt', 3315e333e79fSBram Moolenaar \ ')', 3316e333e79fSBram Moolenaar \ 'Error l8 in one.txt' 3317e333e79fSBram Moolenaar \ ], 'efm' : efm_val}) 3318e333e79fSBram Moolenaar call assert_equal(3, len(l.items)) 3319e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[0].bufnr)) 3320e333e79fSBram Moolenaar call assert_equal(4, l.items[0].lnum) 3321e333e79fSBram Moolenaar call assert_equal('one.txt', l.items[0].text) 3322e333e79fSBram Moolenaar call assert_equal('two.txt', bufname(l.items[1].bufnr)) 3323e333e79fSBram Moolenaar call assert_equal(6, l.items[1].lnum) 3324e333e79fSBram Moolenaar call assert_equal('two.txt', l.items[1].text) 3325e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[2].bufnr)) 3326e333e79fSBram Moolenaar call assert_equal(8, l.items[2].lnum) 3327e333e79fSBram Moolenaar call assert_equal('', l.items[2].text) 3328ae338338SBram Moolenaarendfunc 3329ae338338SBram Moolenaar 3330ae338338SBram Moolenaarfunc Test_multifilestack() 3331ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3332ae338338SBram Moolenaar call writefile(lines, 'one.txt') 3333ae338338SBram Moolenaar call writefile(lines, 'two.txt') 3334ae338338SBram Moolenaar let save_efm = &efm 3335ae338338SBram Moolenaar set efm=%+P[%f],(%l\\,%c)\ %m,%-Q 3336ae338338SBram Moolenaar 3337ae338338SBram Moolenaar call Xmultifilestack_tests('c') 3338ae338338SBram Moolenaar call Xmultifilestack_tests('l') 3339ae338338SBram Moolenaar 3340ae338338SBram Moolenaar let &efm = save_efm 3341ae338338SBram Moolenaar call delete('one.txt') 3342ae338338SBram Moolenaar call delete('two.txt') 3343ae338338SBram Moolenaarendfunc 3344ae338338SBram Moolenaar 3345ae338338SBram Moolenaar" Tests for per buffer 'efm' setting 3346ae338338SBram Moolenaarfunc Test_perbuf_efm() 3347ae338338SBram Moolenaar call writefile(["File1-10-Line10"], 'one.txt') 3348ae338338SBram Moolenaar call writefile(["File2#20#Line20"], 'two.txt') 3349ae338338SBram Moolenaar set efm=%f#%l#%m 3350ae338338SBram Moolenaar new | only 3351ae338338SBram Moolenaar new 3352ae338338SBram Moolenaar setlocal efm=%f-%l-%m 3353ae338338SBram Moolenaar cfile one.txt 3354ae338338SBram Moolenaar wincmd w 3355ae338338SBram Moolenaar caddfile two.txt 3356ae338338SBram Moolenaar 3357ae338338SBram Moolenaar let l = getqflist() 3358ae338338SBram Moolenaar call assert_equal(10, l[0].lnum) 3359ae338338SBram Moolenaar call assert_equal('Line20', l[1].text) 3360ae338338SBram Moolenaar 3361ae338338SBram Moolenaar set efm& 3362ae338338SBram Moolenaar new | only 3363ae338338SBram Moolenaar call delete('one.txt') 3364ae338338SBram Moolenaar call delete('two.txt') 3365ae338338SBram Moolenaarendfunc 3366ae338338SBram Moolenaar 3367d28cc3f5SBram Moolenaar" Open multiple help windows using ":lhelpgrep 3368d28cc3f5SBram Moolenaar" This test used to crash Vim 3369d28cc3f5SBram Moolenaarfunc Test_Multi_LL_Help() 3370d28cc3f5SBram Moolenaar new | only 3371d28cc3f5SBram Moolenaar lhelpgrep window 3372d28cc3f5SBram Moolenaar lopen 3373d28cc3f5SBram Moolenaar e# 3374d28cc3f5SBram Moolenaar lhelpgrep buffer 3375d28cc3f5SBram Moolenaar call assert_equal(3, winnr('$')) 3376d28cc3f5SBram Moolenaar call assert_true(len(getloclist(1)) != 0) 3377d28cc3f5SBram Moolenaar call assert_true(len(getloclist(2)) != 0) 3378d28cc3f5SBram Moolenaar new | only 3379d28cc3f5SBram Moolenaarendfunc 338055b69264SBram Moolenaar 338155b69264SBram Moolenaar" Tests for adding new quickfix lists using setqflist() 338255b69264SBram Moolenaarfunc XaddQf_tests(cchar) 338355b69264SBram Moolenaar call s:setup_commands(a:cchar) 338455b69264SBram Moolenaar 338555b69264SBram Moolenaar " Create a new list using ' ' for action 338655b69264SBram Moolenaar call g:Xsetlist([], 'f') 338755b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test1'}) 338855b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 338955b69264SBram Moolenaar call assert_equal(1, l.nr) 339055b69264SBram Moolenaar call assert_equal('Test1', l.title) 339155b69264SBram Moolenaar 339255b69264SBram Moolenaar " Create a new list using ' ' for action and '$' for 'nr' 339355b69264SBram Moolenaar call g:Xsetlist([], 'f') 339455b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test2', 'nr' : '$'}) 339555b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 339655b69264SBram Moolenaar call assert_equal(1, l.nr) 339755b69264SBram Moolenaar call assert_equal('Test2', l.title) 339855b69264SBram Moolenaar 339955b69264SBram Moolenaar " Create a new list using 'a' for action 340055b69264SBram Moolenaar call g:Xsetlist([], 'f') 340155b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3'}) 340255b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 340355b69264SBram Moolenaar call assert_equal(1, l.nr) 340455b69264SBram Moolenaar call assert_equal('Test3', l.title) 340555b69264SBram Moolenaar 340655b69264SBram Moolenaar " Create a new list using 'a' for action and '$' for 'nr' 340755b69264SBram Moolenaar call g:Xsetlist([], 'f') 340855b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3', 'nr' : '$'}) 340955b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test4'}) 341055b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 341155b69264SBram Moolenaar call assert_equal(1, l.nr) 341255b69264SBram Moolenaar call assert_equal('Test4', l.title) 341355b69264SBram Moolenaar 341455b69264SBram Moolenaar " Adding a quickfix list should remove all the lists following the current 341555b69264SBram Moolenaar " list. 341655b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 341755b69264SBram Moolenaar silent! 10Xolder 341855b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test5'}) 341955b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 342055b69264SBram Moolenaar call assert_equal(2, l.nr) 342155b69264SBram Moolenaar call assert_equal('Test5', l.title) 342255b69264SBram Moolenaar 342355b69264SBram Moolenaar " Add a quickfix list using '$' as the list number. 342455b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 342555b69264SBram Moolenaar silent! 99Xolder 342655b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test6'}) 342755b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 342855b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 342955b69264SBram Moolenaar call assert_equal('Test6', l.title) 343055b69264SBram Moolenaar 343155b69264SBram Moolenaar " Add a quickfix list using 'nr' set to one more than the quickfix 343255b69264SBram Moolenaar " list size. 343355b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 343455b69264SBram Moolenaar silent! 99Xolder 343555b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : lastqf + 1, 'title' : 'Test7'}) 343655b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 343755b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 343855b69264SBram Moolenaar call assert_equal('Test7', l.title) 343955b69264SBram Moolenaar 344055b69264SBram Moolenaar " Add a quickfix list to a stack with 10 lists using 'nr' set to '$' 344155b69264SBram Moolenaar exe repeat('Xexpr "" |', 9) . 'Xexpr ""' 344255b69264SBram Moolenaar silent! 99Xolder 344355b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test8'}) 344455b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 344555b69264SBram Moolenaar call assert_equal(10, l.nr) 344655b69264SBram Moolenaar call assert_equal('Test8', l.title) 344755b69264SBram Moolenaar 344855b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a value greater than 10 344955b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 12, 'title' : 'Test9'})) 345055b69264SBram Moolenaar 345155b69264SBram Moolenaar " Try adding a quickfix list with 'nr' set to a value greater than the 345255b69264SBram Moolenaar " quickfix list size but less than 10. 345355b69264SBram Moolenaar call g:Xsetlist([], 'f') 345455b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 345555b69264SBram Moolenaar silent! 99Xolder 345655b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 8, 'title' : 'Test10'})) 345755b69264SBram Moolenaar 345855b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a some string or list 345955b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : [1,2], 'title' : 'Test11'})) 346055b69264SBram Moolenaarendfunc 346155b69264SBram Moolenaar 346255b69264SBram Moolenaarfunc Test_add_qf() 346355b69264SBram Moolenaar call XaddQf_tests('c') 346455b69264SBram Moolenaar call XaddQf_tests('l') 346555b69264SBram Moolenaarendfunc 34667adf06f4SBram Moolenaar 34677adf06f4SBram Moolenaar" Test for getting the quickfix list items from some text without modifying 34687adf06f4SBram Moolenaar" the quickfix stack 34692c809b7cSBram Moolenaarfunc XgetListFromLines(cchar) 34707adf06f4SBram Moolenaar call s:setup_commands(a:cchar) 34717adf06f4SBram Moolenaar call g:Xsetlist([], 'f') 34727adf06f4SBram Moolenaar 34732c809b7cSBram Moolenaar let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items 34747adf06f4SBram Moolenaar call assert_equal(2, len(l)) 34757adf06f4SBram Moolenaar call assert_equal(30, l[1].lnum) 34767adf06f4SBram Moolenaar 34772c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 10})) 34782c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'})) 34792c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : []}).items) 34802c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items) 34817adf06f4SBram Moolenaar 348236538225SBram Moolenaar " Parse text using a custom efm 348336538225SBram Moolenaar set efm& 348436538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3#30#Line30'], 'efm' : '%f#%l#%m'}).items 348536538225SBram Moolenaar call assert_equal('Line30', l[0].text) 348636538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : '%f-%l-%m'}).items 348736538225SBram Moolenaar call assert_equal('File3:30:Line30', l[0].text) 348836538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : [1,2]}) 348936538225SBram Moolenaar call assert_equal({}, l) 349036538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':'%2'})", 'E376:') 349136538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':''})", 'E378:') 349236538225SBram Moolenaar 34937adf06f4SBram Moolenaar " Make sure that the quickfix stack is not modified 34947adf06f4SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 34957adf06f4SBram Moolenaarendfunc 34967adf06f4SBram Moolenaar 34972c809b7cSBram Moolenaarfunc Test_get_list_from_lines() 34982c809b7cSBram Moolenaar call XgetListFromLines('c') 34992c809b7cSBram Moolenaar call XgetListFromLines('l') 35007adf06f4SBram Moolenaarendfunc 3501a539f4f1SBram Moolenaar 3502a539f4f1SBram Moolenaar" Tests for the quickfix list id 3503a539f4f1SBram Moolenaarfunc Xqfid_tests(cchar) 3504a539f4f1SBram Moolenaar call s:setup_commands(a:cchar) 3505a539f4f1SBram Moolenaar 3506a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3507a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0}).id) 3508a539f4f1SBram Moolenaar Xexpr '' 3509a539f4f1SBram Moolenaar let start_id = g:Xgetlist({'id' : 0}).id 3510a539f4f1SBram Moolenaar Xexpr '' | Xexpr '' 3511a539f4f1SBram Moolenaar Xolder 3512a539f4f1SBram Moolenaar call assert_equal(start_id, g:Xgetlist({'id':0, 'nr':1}).id) 3513a539f4f1SBram Moolenaar call assert_equal(start_id + 1, g:Xgetlist({'id':0, 'nr':0}).id) 3514a539f4f1SBram Moolenaar call assert_equal(start_id + 2, g:Xgetlist({'id':0, 'nr':'$'}).id) 3515a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0, 'nr':99}).id) 3516a539f4f1SBram Moolenaar call assert_equal(2, g:Xgetlist({'id':start_id + 1, 'nr':0}).nr) 3517a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':99, 'nr':0}).id) 3518a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':"abc", 'nr':0}).id) 3519a539f4f1SBram Moolenaar 3520a539f4f1SBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]}) 3521a539f4f1SBram Moolenaar call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context) 35222c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']}) 3523a539f4f1SBram Moolenaar call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text) 3524a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'})) 3525a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'})) 3526a539f4f1SBram Moolenaar 3527a539f4f1SBram Moolenaar let qfid = g:Xgetlist({'id':0, 'nr':0}) 3528a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3529a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':qfid, 'nr':0}).id) 3530a539f4f1SBram Moolenaarendfunc 3531a539f4f1SBram Moolenaar 3532a539f4f1SBram Moolenaarfunc Test_qf_id() 3533a539f4f1SBram Moolenaar call Xqfid_tests('c') 3534a539f4f1SBram Moolenaar call Xqfid_tests('l') 3535a539f4f1SBram Moolenaarendfunc 353674240d3fSBram Moolenaar 353774240d3fSBram Moolenaarfunc Xqfjump_tests(cchar) 353874240d3fSBram Moolenaar call s:setup_commands(a:cchar) 353974240d3fSBram Moolenaar 354074240d3fSBram Moolenaar call writefile(["Line1\tFoo", "Line2"], 'F1') 354174240d3fSBram Moolenaar call writefile(["Line1\tBar", "Line2"], 'F2') 354274240d3fSBram Moolenaar call writefile(["Line1\tBaz", "Line2"], 'F3') 354374240d3fSBram Moolenaar 354474240d3fSBram Moolenaar call g:Xsetlist([], 'f') 354574240d3fSBram Moolenaar 354674240d3fSBram Moolenaar " Tests for 354774240d3fSBram Moolenaar " Jumping to a line using a pattern 354874240d3fSBram Moolenaar " Jumping to a column greater than the last column in a line 354974240d3fSBram Moolenaar " Jumping to a line greater than the last line in the file 355074240d3fSBram Moolenaar let l = [] 355174240d3fSBram Moolenaar for i in range(1, 7) 355274240d3fSBram Moolenaar call add(l, {}) 355374240d3fSBram Moolenaar endfor 355474240d3fSBram Moolenaar let l[0].filename='F1' 355574240d3fSBram Moolenaar let l[0].pattern='Line1' 355674240d3fSBram Moolenaar let l[1].filename='F2' 355774240d3fSBram Moolenaar let l[1].pattern='Line1' 355874240d3fSBram Moolenaar let l[2].filename='F3' 355974240d3fSBram Moolenaar let l[2].pattern='Line1' 356074240d3fSBram Moolenaar let l[3].filename='F3' 356174240d3fSBram Moolenaar let l[3].lnum=1 356274240d3fSBram Moolenaar let l[3].col=9 356374240d3fSBram Moolenaar let l[3].vcol=1 356474240d3fSBram Moolenaar let l[4].filename='F3' 356574240d3fSBram Moolenaar let l[4].lnum=99 356674240d3fSBram Moolenaar let l[5].filename='F3' 356774240d3fSBram Moolenaar let l[5].lnum=1 356874240d3fSBram Moolenaar let l[5].col=99 356974240d3fSBram Moolenaar let l[5].vcol=1 357074240d3fSBram Moolenaar let l[6].filename='F3' 357174240d3fSBram Moolenaar let l[6].pattern='abcxyz' 357274240d3fSBram Moolenaar 357374240d3fSBram Moolenaar call g:Xsetlist([], ' ', {'items' : l}) 357474240d3fSBram Moolenaar Xopen | only 357574240d3fSBram Moolenaar 2Xnext 357674240d3fSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 3577bdd2c290SBram Moolenaar call assert_equal('F3', @%) 357874240d3fSBram Moolenaar Xnext 357974240d3fSBram Moolenaar call assert_equal(7, col('.')) 358074240d3fSBram Moolenaar Xnext 358174240d3fSBram Moolenaar call assert_equal(2, line('.')) 358274240d3fSBram Moolenaar Xnext 358374240d3fSBram Moolenaar call assert_equal(9, col('.')) 358474240d3fSBram Moolenaar 2 358574240d3fSBram Moolenaar Xnext 358674240d3fSBram Moolenaar call assert_equal(2, line('.')) 358774240d3fSBram Moolenaar 358874240d3fSBram Moolenaar if a:cchar == 'l' 358974240d3fSBram Moolenaar " When jumping to a location list entry in the location list window and 359074240d3fSBram Moolenaar " no usable windows are available, then a new window should be opened. 359174240d3fSBram Moolenaar enew! | new | only 359274240d3fSBram Moolenaar call g:Xsetlist([], 'f') 359374240d3fSBram Moolenaar setlocal buftype=nofile 359474240d3fSBram Moolenaar new 359574240d3fSBram Moolenaar call g:Xsetlist([], ' ', {'lines' : ['F1:1:1:Line1', 'F1:2:2:Line2', 'F2:1:1:Line1', 'F2:2:2:Line2', 'F3:1:1:Line1', 'F3:2:2:Line2']}) 359674240d3fSBram Moolenaar Xopen 359774240d3fSBram Moolenaar let winid = win_getid() 359874240d3fSBram Moolenaar wincmd p 359974240d3fSBram Moolenaar close 360074240d3fSBram Moolenaar call win_gotoid(winid) 360174240d3fSBram Moolenaar Xnext 360274240d3fSBram Moolenaar call assert_equal(3, winnr('$')) 360374240d3fSBram Moolenaar call assert_equal(1, winnr()) 360474240d3fSBram Moolenaar call assert_equal(2, line('.')) 360574240d3fSBram Moolenaar 360674240d3fSBram Moolenaar " When jumping to an entry in the location list window and the window 360774240d3fSBram Moolenaar " associated with the location list is not present and a window containing 360874240d3fSBram Moolenaar " the file is already present, then that window should be used. 360974240d3fSBram Moolenaar close 361074240d3fSBram Moolenaar belowright new 361174240d3fSBram Moolenaar call g:Xsetlist([], 'f') 361274240d3fSBram Moolenaar edit F3 361374240d3fSBram Moolenaar call win_gotoid(winid) 361474240d3fSBram Moolenaar Xlast 361574240d3fSBram Moolenaar call assert_equal(3, winnr()) 361674240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'size' : 1}).size) 361774240d3fSBram Moolenaar call assert_equal(winid, g:Xgetlist({'winid' : 1}).winid) 361874240d3fSBram Moolenaar endif 361974240d3fSBram Moolenaar 362074240d3fSBram Moolenaar " Cleanup 362174240d3fSBram Moolenaar enew! 362274240d3fSBram Moolenaar new | only 362374240d3fSBram Moolenaar 362474240d3fSBram Moolenaar call delete('F1') 362574240d3fSBram Moolenaar call delete('F2') 362674240d3fSBram Moolenaar call delete('F3') 362774240d3fSBram Moolenaarendfunc 362874240d3fSBram Moolenaar 362974240d3fSBram Moolenaarfunc Test_qfjump() 363074240d3fSBram Moolenaar call Xqfjump_tests('c') 363174240d3fSBram Moolenaar call Xqfjump_tests('l') 363274240d3fSBram Moolenaarendfunc 3633a6d4849cSBram Moolenaar 3634a6d4849cSBram Moolenaar" Tests for the getqflist() and getloclist() functions when the list is not 3635a6d4849cSBram Moolenaar" present or is empty 3636a6d4849cSBram Moolenaarfunc Xgetlist_empty_tests(cchar) 3637a6d4849cSBram Moolenaar call s:setup_commands(a:cchar) 3638a6d4849cSBram Moolenaar 3639a6d4849cSBram Moolenaar " Empty quickfix stack 3640a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3641a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3642a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : 0}).id) 3643a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3644a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3645a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 0}).nr) 3646a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3647a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'title' : 0}).title) 3648a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3649b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) 3650c9cc9c78SBram Moolenaar if a:cchar == 'c' 3651c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3652647e24baSBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'qfbufnr' : 0, 3653d43906d2SBram Moolenaar \ 'title' : '', 'winid' : 0, 'changedtick': 0, 3654d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'all' : 0})) 3655c9cc9c78SBram Moolenaar else 3656c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3657c9cc9c78SBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 3658647e24baSBram Moolenaar \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0, 3659d43906d2SBram Moolenaar \ 'qfbufnr' : 0, 'quickfixtextfunc' : ''}, 3660c9cc9c78SBram Moolenaar \ g:Xgetlist({'all' : 0})) 3661c9cc9c78SBram Moolenaar endif 3662a6d4849cSBram Moolenaar 36632ec364e9SBram Moolenaar " Quickfix window with empty stack 36642ec364e9SBram Moolenaar silent! Xopen 36652ec364e9SBram Moolenaar let qfwinid = (a:cchar == 'c') ? win_getid() : 0 3666647e24baSBram Moolenaar let qfbufnr = (a:cchar == 'c') ? bufnr('') : 0 36672ec364e9SBram Moolenaar call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) 36682ec364e9SBram Moolenaar Xclose 36692ec364e9SBram Moolenaar 3670a6d4849cSBram Moolenaar " Empty quickfix list 3671a6d4849cSBram Moolenaar Xexpr "" 3672a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3673a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'id' : 0}).id) 3674a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3675a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3676a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : 0}).nr) 3677a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3678a6d4849cSBram Moolenaar call assert_notequal('', g:Xgetlist({'title' : 0}).title) 3679a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3680b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3681a6d4849cSBram Moolenaar 3682a6d4849cSBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3683a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3684a6d4849cSBram Moolenaar 3685a6d4849cSBram Moolenaar " Non-existing quickfix identifier 3686a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'context' : 0}).context) 3687a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid}).id) 3688a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'idx' : 0}).idx) 3689a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'id' : qfid, 'items' : 0}).items) 3690a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'nr' : 0}).nr) 3691a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'size' : 0}).size) 3692a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title) 3693a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid) 3694b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick) 3695c9cc9c78SBram Moolenaar if a:cchar == 'c' 3696c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3697c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3698d43906d2SBram Moolenaar \ 'qfbufnr' : qfbufnr, 'quickfixtextfunc' : '', 3699c9cc9c78SBram Moolenaar \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) 3700c9cc9c78SBram Moolenaar else 3701c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3702c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3703d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3704d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, 3705c9cc9c78SBram Moolenaar \ g:Xgetlist({'id' : qfid, 'all' : 0})) 3706c9cc9c78SBram Moolenaar endif 3707a6d4849cSBram Moolenaar 3708a6d4849cSBram Moolenaar " Non-existing quickfix list number 3709a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context) 3710a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5}).nr) 3711a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'idx' : 0}).idx) 3712a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'nr' : 5, 'items' : 0}).items) 3713a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'id' : 0}).id) 3714a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'size' : 0}).size) 3715a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title) 3716a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid) 3717b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick) 3718c9cc9c78SBram Moolenaar if a:cchar == 'c' 3719c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3720c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3721d43906d2SBram Moolenaar \ 'changedtick' : 0, 'qfbufnr' : qfbufnr, 3722d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3723c9cc9c78SBram Moolenaar else 3724c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3725c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3726d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3727d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3728c9cc9c78SBram Moolenaar endif 3729a6d4849cSBram Moolenaarendfunc 3730a6d4849cSBram Moolenaar 3731a6d4849cSBram Moolenaarfunc Test_getqflist() 3732a6d4849cSBram Moolenaar call Xgetlist_empty_tests('c') 3733a6d4849cSBram Moolenaar call Xgetlist_empty_tests('l') 3734a6d4849cSBram Moolenaarendfunc 3735b254af31SBram Moolenaar 3736a0ca7d00SBram Moolenaarfunc Test_getqflist_invalid_nr() 3737a0ca7d00SBram Moolenaar " The following commands used to crash Vim 3738a0ca7d00SBram Moolenaar cexpr "" 3739a0ca7d00SBram Moolenaar call getqflist({'nr' : $XXX_DOES_NOT_EXIST_XXX}) 3740a0ca7d00SBram Moolenaar 3741a0ca7d00SBram Moolenaar " Cleanup 3742a0ca7d00SBram Moolenaar call setqflist([], 'r') 3743a0ca7d00SBram Moolenaarendfunc 3744a0ca7d00SBram Moolenaar 3745b254af31SBram Moolenaar" Tests for the quickfix/location list changedtick 3746b254af31SBram Moolenaarfunc Xqftick_tests(cchar) 3747b254af31SBram Moolenaar call s:setup_commands(a:cchar) 3748b254af31SBram Moolenaar 3749b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3750b254af31SBram Moolenaar 3751b254af31SBram Moolenaar Xexpr "F1:10:Line10" 3752b254af31SBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3753b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3754b254af31SBram Moolenaar Xaddexpr "F2:20:Line20\nF2:21:Line21" 3755b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3756b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["F3:30:Line30", "F3:31:Line31"]}) 3757b254af31SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 3758b254af31SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["F4:40:Line40"]}) 3759b254af31SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 3760b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'New Title'}) 3761b254af31SBram Moolenaar call assert_equal(5, g:Xgetlist({'changedtick' : 0}).changedtick) 3762b254af31SBram Moolenaar 3763b254af31SBram Moolenaar enew! 3764b254af31SBram Moolenaar call append(0, ["F5:50:L50", "F6:60:L60"]) 3765b254af31SBram Moolenaar Xaddbuffer 3766b254af31SBram Moolenaar call assert_equal(6, g:Xgetlist({'changedtick' : 0}).changedtick) 3767b254af31SBram Moolenaar enew! 3768b254af31SBram Moolenaar 3769b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'context' : {'bus' : 'pci'}}) 3770b254af31SBram Moolenaar call assert_equal(7, g:Xgetlist({'changedtick' : 0}).changedtick) 3771b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3772b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'a') 3773b254af31SBram Moolenaar call assert_equal(8, g:Xgetlist({'changedtick' : 0}).changedtick) 3774b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3775b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], ' ') 3776b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3777b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3778b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'r') 3779b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3780b254af31SBram Moolenaar 3781b254af31SBram Moolenaar call writefile(["F8:80:L80", "F8:81:L81"], "Xone") 3782b254af31SBram Moolenaar Xfile Xone 3783b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3784b254af31SBram Moolenaar Xaddfile Xone 3785b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3786b254af31SBram Moolenaar 3787b254af31SBram Moolenaar " Test case for updating a non-current quickfix list 3788b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3789b254af31SBram Moolenaar Xexpr "F1:1:L1" 3790b254af31SBram Moolenaar Xexpr "F2:2:L2" 3791b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, "lines" : ["F10:10:L10"]}) 3792b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3793b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'nr' : 1, 'changedtick' : 0}).changedtick) 3794b254af31SBram Moolenaar 3795b254af31SBram Moolenaar call delete("Xone") 3796b254af31SBram Moolenaarendfunc 3797b254af31SBram Moolenaar 3798b254af31SBram Moolenaarfunc Test_qf_tick() 3799b254af31SBram Moolenaar call Xqftick_tests('c') 3800b254af31SBram Moolenaar call Xqftick_tests('l') 3801b254af31SBram Moolenaarendfunc 380212237448SBram Moolenaar 3803c631f2dfSBram Moolenaar" Test helpgrep with lang specifier 3804c631f2dfSBram Moolenaarfunc Xtest_helpgrep_with_lang_specifier(cchar) 3805c631f2dfSBram Moolenaar call s:setup_commands(a:cchar) 3806c631f2dfSBram Moolenaar Xhelpgrep Vim@en 3807c631f2dfSBram Moolenaar call assert_equal('help', &filetype) 3808c631f2dfSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : '$'}).nr) 3809c631f2dfSBram Moolenaar new | only 3810c631f2dfSBram Moolenaarendfunc 3811c631f2dfSBram Moolenaar 3812c631f2dfSBram Moolenaarfunc Test_helpgrep_with_lang_specifier() 3813c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('c') 3814c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('l') 3815c631f2dfSBram Moolenaarendfunc 3816c631f2dfSBram Moolenaar 381712237448SBram Moolenaar" The following test used to crash Vim. 381812237448SBram Moolenaar" Open the location list window and close the regular window associated with 381912237448SBram Moolenaar" the location list. When the garbage collection runs now, it incorrectly 382012237448SBram Moolenaar" marks the location list context as not in use and frees the context. 382112237448SBram Moolenaarfunc Test_ll_window_ctx() 382212237448SBram Moolenaar call setloclist(0, [], 'f') 382312237448SBram Moolenaar call setloclist(0, [], 'a', {'context' : []}) 382412237448SBram Moolenaar lopen | only 382512237448SBram Moolenaar call test_garbagecollect_now() 382612237448SBram Moolenaar echo getloclist(0, {'context' : 1}).context 382712237448SBram Moolenaar enew | only 382812237448SBram Moolenaarendfunc 382912237448SBram Moolenaar 383014a4deb0SBram Moolenaar" The following test used to crash vim 383114a4deb0SBram Moolenaarfunc Test_lfile_crash() 383214a4deb0SBram Moolenaar sp Xtest 383314a4deb0SBram Moolenaar au QuickFixCmdPre * bw 3834e2e4075fSBram Moolenaar call assert_fails('lfile', 'E40:') 383514a4deb0SBram Moolenaar au! QuickFixCmdPre 383614a4deb0SBram Moolenaarendfunc 38373c097226SBram Moolenaar 38383c097226SBram Moolenaar" The following test used to crash vim 38393c097226SBram Moolenaarfunc Test_lbuffer_crash() 38403c097226SBram Moolenaar sv Xtest 38413c097226SBram Moolenaar augroup QF_Test 38423c097226SBram Moolenaar au! 38439a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bw 38443c097226SBram Moolenaar augroup END 38453c097226SBram Moolenaar lbuffer 38463c097226SBram Moolenaar augroup QF_Test 38473c097226SBram Moolenaar au! 38483c097226SBram Moolenaar augroup END 38493c097226SBram Moolenaarendfunc 38503c097226SBram Moolenaar 38513c097226SBram Moolenaar" The following test used to crash vim 38523c097226SBram Moolenaarfunc Test_lexpr_crash() 38533c097226SBram Moolenaar augroup QF_Test 38543c097226SBram Moolenaar au! 38559a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f') 38563c097226SBram Moolenaar augroup END 38573c097226SBram Moolenaar lexpr "" 38583c097226SBram Moolenaar augroup QF_Test 38593c097226SBram Moolenaar au! 38603c097226SBram Moolenaar augroup END 38619f84ded3SBram Moolenaar 38623c097226SBram Moolenaar enew | only 38639f84ded3SBram Moolenaar augroup QF_Test 38649f84ded3SBram Moolenaar au! 38659f84ded3SBram Moolenaar au BufNew * call setloclist(0, [], 'f') 38669f84ded3SBram Moolenaar augroup END 38679f84ded3SBram Moolenaar lexpr 'x:1:x' 38689f84ded3SBram Moolenaar augroup QF_Test 38699f84ded3SBram Moolenaar au! 38709f84ded3SBram Moolenaar augroup END 38719f84ded3SBram Moolenaar 38729f84ded3SBram Moolenaar enew | only 38739f84ded3SBram Moolenaar lexpr '' 38749f84ded3SBram Moolenaar lopen 38759f84ded3SBram Moolenaar augroup QF_Test 38769f84ded3SBram Moolenaar au! 38779f84ded3SBram Moolenaar au FileType * call setloclist(0, [], 'f') 38789f84ded3SBram Moolenaar augroup END 38799f84ded3SBram Moolenaar lexpr '' 38809f84ded3SBram Moolenaar augroup QF_Test 38819f84ded3SBram Moolenaar au! 38829f84ded3SBram Moolenaar augroup END 38833c097226SBram Moolenaarendfunc 38843c097226SBram Moolenaar 38853c097226SBram Moolenaar" The following test used to crash Vim 38863c097226SBram Moolenaarfunc Test_lvimgrep_crash() 38873c097226SBram Moolenaar sv Xtest 38883c097226SBram Moolenaar augroup QF_Test 38893c097226SBram Moolenaar au! 38909a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f') 38913c097226SBram Moolenaar augroup END 38923c097226SBram Moolenaar lvimgrep quickfix test_quickfix.vim 38933c097226SBram Moolenaar augroup QF_Test 38943c097226SBram Moolenaar au! 38953c097226SBram Moolenaar augroup END 3896b6f1480aSBram Moolenaar 3897b6f1480aSBram Moolenaar new | only 3898b6f1480aSBram Moolenaar augroup QF_Test 3899b6f1480aSBram Moolenaar au! 3900b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 3901b6f1480aSBram Moolenaar augroup END 3902b6f1480aSBram Moolenaar call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:') 3903b6f1480aSBram Moolenaar augroup QF_Test 3904b6f1480aSBram Moolenaar au! 3905b6f1480aSBram Moolenaar augroup END 3906b6f1480aSBram Moolenaar 39073c097226SBram Moolenaar enew | only 39083c097226SBram Moolenaarendfunc 3909de04654dSBram Moolenaar 39102573af35SBram Moolenaarfunc Test_lvimgrep_crash2() 39112573af35SBram Moolenaar au BufNewFile x sfind 39129b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x', 'E471:') 39139b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x x', 'E471:') 39142573af35SBram Moolenaar 39152573af35SBram Moolenaar au! BufNewFile 39162573af35SBram Moolenaarendfunc 39172573af35SBram Moolenaar 3918de04654dSBram Moolenaar" Test for the position of the quickfix and location list window 3919de04654dSBram Moolenaarfunc Test_qfwin_pos() 3920de04654dSBram Moolenaar " Open two windows 3921de04654dSBram Moolenaar new | only 3922de04654dSBram Moolenaar new 3923de04654dSBram Moolenaar cexpr ['F1:10:L10'] 3924de04654dSBram Moolenaar copen 3925de04654dSBram Moolenaar " Quickfix window should be the bottom most window 3926de04654dSBram Moolenaar call assert_equal(3, winnr()) 3927de04654dSBram Moolenaar close 3928de04654dSBram Moolenaar " Open at the very top 3929de04654dSBram Moolenaar wincmd t 3930de04654dSBram Moolenaar topleft copen 3931de04654dSBram Moolenaar call assert_equal(1, winnr()) 3932de04654dSBram Moolenaar close 3933de04654dSBram Moolenaar " open left of the current window 3934de04654dSBram Moolenaar wincmd t 3935de04654dSBram Moolenaar below new 3936de04654dSBram Moolenaar leftabove copen 3937de04654dSBram Moolenaar call assert_equal(2, winnr()) 3938de04654dSBram Moolenaar close 3939de04654dSBram Moolenaar " open right of the current window 3940de04654dSBram Moolenaar rightbelow copen 3941de04654dSBram Moolenaar call assert_equal(3, winnr()) 3942de04654dSBram Moolenaar close 3943de04654dSBram Moolenaarendfunc 3944e1bb879fSBram Moolenaar 3945e1bb879fSBram Moolenaar" Tests for quickfix/location lists changed by autocommands when 3946e1bb879fSBram Moolenaar" :vimgrep/:lvimgrep commands are running. 3947e1bb879fSBram Moolenaarfunc Test_vimgrep_autocmd() 3948e1bb879fSBram Moolenaar call setqflist([], 'f') 3949e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest1.txt') 3950e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest2.txt') 3951e1bb879fSBram Moolenaar 3952e1bb879fSBram Moolenaar " Test 1: 3953e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3954e1bb879fSBram Moolenaar " changed by an autocmd, the results should be added to the correct quickfix 3955e1bb879fSBram Moolenaar " list. 3956e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt cexpr '' | cexpr '' 3957e1bb879fSBram Moolenaar silent vimgrep stars Xtest*.txt 3958e1bb879fSBram Moolenaar call assert_equal(1, getqflist({'nr' : 0}).nr) 3959e1bb879fSBram Moolenaar call assert_equal(3, getqflist({'nr' : '$'}).nr) 3960e1bb879fSBram Moolenaar call assert_equal('Xtest2.txt', bufname(getqflist()[1].bufnr)) 3961e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3962e1bb879fSBram Moolenaar 3963e1bb879fSBram Moolenaar " Test 2: 3964e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3965e1bb879fSBram Moolenaar " freed, then a error should be given. 3966e1bb879fSBram Moolenaar silent! %bwipe! 3967e1bb879fSBram Moolenaar call setqflist([], 'f') 3968e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt for i in range(10) | cexpr '' | endfor 3969e1bb879fSBram Moolenaar call assert_fails('vimgrep stars Xtest*.txt', 'E925:') 3970e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3971e1bb879fSBram Moolenaar 3972e1bb879fSBram Moolenaar " Test 3: 3973e1bb879fSBram Moolenaar " When searching for a pattern using :lvimgrep, if the location list is 3974e1bb879fSBram Moolenaar " freed, then the command should error out. 3975e1bb879fSBram Moolenaar silent! %bwipe! 3976e1bb879fSBram Moolenaar let g:save_winid = win_getid() 3977e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt call setloclist(g:save_winid, [], 'f') 3978e1bb879fSBram Moolenaar call assert_fails('lvimgrep stars Xtest*.txt', 'E926:') 3979e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3980e1bb879fSBram Moolenaar 3981e1bb879fSBram Moolenaar call delete('Xtest1.txt') 3982e1bb879fSBram Moolenaar call delete('Xtest2.txt') 3983e1bb879fSBram Moolenaar call setqflist([], 'f') 3984e1bb879fSBram Moolenaarendfunc 39853b9474b4SBram Moolenaar 3986f9ae154cSBram Moolenaar" Test for an autocmd changing the current directory when running vimgrep 3987f9ae154cSBram Moolenaarfunc Xvimgrep_autocmd_cd(cchar) 3988f9ae154cSBram Moolenaar call s:setup_commands(a:cchar) 3989f9ae154cSBram Moolenaar 3990f9ae154cSBram Moolenaar %bwipe 3991f9ae154cSBram Moolenaar let save_cwd = getcwd() 3992f9ae154cSBram Moolenaar 3993f9ae154cSBram Moolenaar augroup QF_Test 3994f9ae154cSBram Moolenaar au! 3995f9ae154cSBram Moolenaar autocmd BufRead * silent cd %:p:h 3996f9ae154cSBram Moolenaar augroup END 3997f9ae154cSBram Moolenaar 3998f9ae154cSBram Moolenaar 10Xvimgrep /vim/ Xdir/** 3999f9ae154cSBram Moolenaar let l = g:Xgetlist() 4000f9ae154cSBram Moolenaar call assert_equal('f1.txt', bufname(l[0].bufnr)) 4001f9ae154cSBram Moolenaar call assert_equal('f2.txt', fnamemodify(bufname(l[2].bufnr), ':t')) 4002f9ae154cSBram Moolenaar 4003f9ae154cSBram Moolenaar augroup QF_Test 4004f9ae154cSBram Moolenaar au! 4005f9ae154cSBram Moolenaar augroup END 4006f9ae154cSBram Moolenaar 4007f9ae154cSBram Moolenaar exe 'cd ' . save_cwd 4008f9ae154cSBram Moolenaarendfunc 4009f9ae154cSBram Moolenaar 4010f9ae154cSBram Moolenaarfunc Test_vimgrep_autocmd_cd() 4011f9ae154cSBram Moolenaar call mkdir('Xdir/a', 'p') 4012f9ae154cSBram Moolenaar call mkdir('Xdir/b', 'p') 4013f9ae154cSBram Moolenaar call writefile(['a_L1_vim', 'a_L2_vim'], 'Xdir/a/f1.txt') 4014f9ae154cSBram Moolenaar call writefile(['b_L1_vim', 'b_L2_vim'], 'Xdir/b/f2.txt') 4015f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('c') 4016f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('l') 4017f9ae154cSBram Moolenaar %bwipe 4018f9ae154cSBram Moolenaar call delete('Xdir', 'rf') 4019f9ae154cSBram Moolenaarendfunc 4020f9ae154cSBram Moolenaar 40213b9474b4SBram Moolenaar" The following test used to crash Vim 40223b9474b4SBram Moolenaarfunc Test_lhelpgrep_autocmd() 40233b9474b4SBram Moolenaar lhelpgrep quickfix 40243b9474b4SBram Moolenaar autocmd QuickFixCmdPost * call setloclist(0, [], 'f') 40253b9474b4SBram Moolenaar lhelpgrep buffer 40263b9474b4SBram Moolenaar call assert_equal('help', &filetype) 40273b9474b4SBram Moolenaar call assert_equal(0, getloclist(0, {'nr' : '$'}).nr) 40283b9474b4SBram Moolenaar lhelpgrep tabpage 40293b9474b4SBram Moolenaar call assert_equal('help', &filetype) 40303b9474b4SBram Moolenaar call assert_equal(1, getloclist(0, {'nr' : '$'}).nr) 40313b9474b4SBram Moolenaar au! QuickFixCmdPost 4032b6f1480aSBram Moolenaar 4033b6f1480aSBram Moolenaar new | only 4034b6f1480aSBram Moolenaar augroup QF_Test 4035b6f1480aSBram Moolenaar au! 4036b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'f') 4037b6f1480aSBram Moolenaar augroup END 4038b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4039dbfa795dSBram Moolenaar " run the test with a help window already open 4040dbfa795dSBram Moolenaar help 4041dbfa795dSBram Moolenaar wincmd w 4042dbfa795dSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4043b6f1480aSBram Moolenaar augroup QF_Test 4044b6f1480aSBram Moolenaar au! BufEnter 4045b6f1480aSBram Moolenaar augroup END 4046b6f1480aSBram Moolenaar 4047b6f1480aSBram Moolenaar new | only 4048b6f1480aSBram Moolenaar augroup QF_Test 4049b6f1480aSBram Moolenaar au! 4050b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'r') 4051b6f1480aSBram Moolenaar augroup END 4052b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4053b6f1480aSBram Moolenaar augroup QF_Test 4054b6f1480aSBram Moolenaar au! BufEnter 4055b6f1480aSBram Moolenaar augroup END 4056b6f1480aSBram Moolenaar 4057b6f1480aSBram Moolenaar new | only 4058b6f1480aSBram Moolenaar augroup QF_Test 4059b6f1480aSBram Moolenaar au! 4060b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 4061b6f1480aSBram Moolenaar augroup END 4062b6f1480aSBram Moolenaar call assert_fails('lhelpgrep quickfix', 'E926:') 4063b6f1480aSBram Moolenaar augroup QF_Test 4064b6f1480aSBram Moolenaar au! BufEnter 4065b6f1480aSBram Moolenaar augroup END 4066b6f1480aSBram Moolenaar 40673b9474b4SBram Moolenaar new | only 40683b9474b4SBram Moolenaarendfunc 4069a796d46fSBram Moolenaar 4070a796d46fSBram Moolenaar" Test for shortening/simplifying the file name when opening the 4071a796d46fSBram Moolenaar" quickfix window or when displaying the quickfix list 4072a796d46fSBram Moolenaarfunc Test_shorten_fname() 40736d91bcb4SBram Moolenaar CheckUnix 4074a796d46fSBram Moolenaar %bwipe 4075a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 4076a796d46fSBram Moolenaar let fname = getcwd() . '/test_quickfix.vim' 4077a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 4078a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 4079a796d46fSBram Moolenaar " Opening the quickfix window should simplify the file path 4080a796d46fSBram Moolenaar cwindow 4081a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 4082a796d46fSBram Moolenaar cclose 4083a796d46fSBram Moolenaar %bwipe 4084a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 4085a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 4086a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 4087a796d46fSBram Moolenaar " Displaying the quickfix list should simplify the file path 4088a796d46fSBram Moolenaar silent! clist 4089a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 40908ec92c97SBram Moolenaar " Add a few entries for the same file with different paths and check whether 40918ec92c97SBram Moolenaar " the buffer name is shortened 40928ec92c97SBram Moolenaar %bwipe 40938ec92c97SBram Moolenaar call setqflist([], 'f') 40948ec92c97SBram Moolenaar call setqflist([{'filename' : 'test_quickfix.vim', 'lnum' : 10}, 40958ec92c97SBram Moolenaar \ {'filename' : '../testdir/test_quickfix.vim', 'lnum' : 20}, 40968ec92c97SBram Moolenaar \ {'filename' : fname, 'lnum' : 30}], ' ') 40978ec92c97SBram Moolenaar copen 40988ec92c97SBram Moolenaar call assert_equal(['test_quickfix.vim|10| ', 40998ec92c97SBram Moolenaar \ 'test_quickfix.vim|20| ', 41008ec92c97SBram Moolenaar \ 'test_quickfix.vim|30| '], getline(1, '$')) 41018ec92c97SBram Moolenaar cclose 4102a796d46fSBram Moolenaarendfunc 41038b62e310SBram Moolenaar 41048b62e310SBram Moolenaar" Quickfix title tests 41058b62e310SBram Moolenaar" In the below tests, 'exe "cmd"' is used to invoke the quickfix commands. 41068b62e310SBram Moolenaar" Otherwise due to indentation, the title is set with spaces at the beginning 41078b62e310SBram Moolenaar" of the command. 41088b62e310SBram Moolenaarfunc Test_qftitle() 41098b62e310SBram Moolenaar call writefile(["F1:1:Line1"], 'Xerr') 41108b62e310SBram Moolenaar 41118b62e310SBram Moolenaar " :cexpr 41128b62e310SBram Moolenaar exe "cexpr readfile('Xerr')" 41138b62e310SBram Moolenaar call assert_equal(":cexpr readfile('Xerr')", getqflist({'title' : 1}).title) 41148b62e310SBram Moolenaar 41158b62e310SBram Moolenaar " :cgetexpr 41168b62e310SBram Moolenaar exe "cgetexpr readfile('Xerr')" 41178b62e310SBram Moolenaar call assert_equal(":cgetexpr readfile('Xerr')", 41188b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 41198b62e310SBram Moolenaar 41208b62e310SBram Moolenaar " :caddexpr 41218b62e310SBram Moolenaar call setqflist([], 'f') 41228b62e310SBram Moolenaar exe "caddexpr readfile('Xerr')" 41238b62e310SBram Moolenaar call assert_equal(":caddexpr readfile('Xerr')", 41248b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 41258b62e310SBram Moolenaar 41268b62e310SBram Moolenaar " :cbuffer 41278b62e310SBram Moolenaar new Xerr 41288b62e310SBram Moolenaar exe "cbuffer" 41298b62e310SBram Moolenaar call assert_equal(':cbuffer (Xerr)', getqflist({'title' : 1}).title) 41308b62e310SBram Moolenaar 41318b62e310SBram Moolenaar " :cgetbuffer 41328b62e310SBram Moolenaar edit Xerr 41338b62e310SBram Moolenaar exe "cgetbuffer" 41348b62e310SBram Moolenaar call assert_equal(':cgetbuffer (Xerr)', getqflist({'title' : 1}).title) 41358b62e310SBram Moolenaar 41368b62e310SBram Moolenaar " :caddbuffer 41378b62e310SBram Moolenaar call setqflist([], 'f') 41388b62e310SBram Moolenaar edit Xerr 41398b62e310SBram Moolenaar exe "caddbuffer" 41408b62e310SBram Moolenaar call assert_equal(':caddbuffer (Xerr)', getqflist({'title' : 1}).title) 41418b62e310SBram Moolenaar 41428b62e310SBram Moolenaar " :cfile 41438b62e310SBram Moolenaar exe "cfile Xerr" 41448b62e310SBram Moolenaar call assert_equal(':cfile Xerr', getqflist({'title' : 1}).title) 41458b62e310SBram Moolenaar 41468b62e310SBram Moolenaar " :cgetfile 41478b62e310SBram Moolenaar exe "cgetfile Xerr" 41488b62e310SBram Moolenaar call assert_equal(':cgetfile Xerr', getqflist({'title' : 1}).title) 41498b62e310SBram Moolenaar 41508b62e310SBram Moolenaar " :caddfile 41518b62e310SBram Moolenaar call setqflist([], 'f') 41528b62e310SBram Moolenaar exe "caddfile Xerr" 41538b62e310SBram Moolenaar call assert_equal(':caddfile Xerr', getqflist({'title' : 1}).title) 41548b62e310SBram Moolenaar 41558b62e310SBram Moolenaar " :grep 41568b62e310SBram Moolenaar set grepprg=internal 41578b62e310SBram Moolenaar exe "grep F1 Xerr" 41588b62e310SBram Moolenaar call assert_equal(':grep F1 Xerr', getqflist({'title' : 1}).title) 41598b62e310SBram Moolenaar 41608b62e310SBram Moolenaar " :grepadd 41618b62e310SBram Moolenaar call setqflist([], 'f') 41628b62e310SBram Moolenaar exe "grepadd F1 Xerr" 41638b62e310SBram Moolenaar call assert_equal(':grepadd F1 Xerr', getqflist({'title' : 1}).title) 41648b62e310SBram Moolenaar set grepprg&vim 41658b62e310SBram Moolenaar 41668b62e310SBram Moolenaar " :vimgrep 41678b62e310SBram Moolenaar exe "vimgrep F1 Xerr" 41688b62e310SBram Moolenaar call assert_equal(':vimgrep F1 Xerr', getqflist({'title' : 1}).title) 41698b62e310SBram Moolenaar 41708b62e310SBram Moolenaar " :vimgrepadd 41718b62e310SBram Moolenaar call setqflist([], 'f') 41728b62e310SBram Moolenaar exe "vimgrepadd F1 Xerr" 41738b62e310SBram Moolenaar call assert_equal(':vimgrepadd F1 Xerr', getqflist({'title' : 1}).title) 41748b62e310SBram Moolenaar 41758b62e310SBram Moolenaar call setqflist(['F1:10:L10'], ' ') 41768b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 41778b62e310SBram Moolenaar 41788b62e310SBram Moolenaar call setqflist([], 'f') 41798b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'a') 41808b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 41818b62e310SBram Moolenaar 41828b62e310SBram Moolenaar call setqflist([], 'f') 41838b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'r') 41848b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 41858b62e310SBram Moolenaar 41868b62e310SBram Moolenaar close 41878b62e310SBram Moolenaar call delete('Xerr') 41888b62e310SBram Moolenaar 41898b62e310SBram Moolenaar call setqflist([], ' ', {'title' : 'Errors'}) 41908b62e310SBram Moolenaar copen 41918b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 41928b62e310SBram Moolenaar call setqflist([], 'r', {'items' : [{'filename' : 'a.c', 'lnum' : 10}]}) 41938b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 41948b62e310SBram Moolenaar cclose 4195530bed99SBram Moolenaar 4196530bed99SBram Moolenaar " Switching to another quickfix list in one tab page should update the 4197530bed99SBram Moolenaar " quickfix window title and statusline in all the other tab pages also 4198530bed99SBram Moolenaar call setqflist([], 'f') 4199530bed99SBram Moolenaar %bw! 4200530bed99SBram Moolenaar cgetexpr ['file_one:1:1: error in the first quickfix list'] 4201530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'first quickfix list'}) 4202530bed99SBram Moolenaar cgetexpr ['file_two:2:1: error in the second quickfix list'] 4203530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'second quickfix list'}) 4204530bed99SBram Moolenaar copen 4205530bed99SBram Moolenaar wincmd t 4206530bed99SBram Moolenaar tabnew two 4207530bed99SBram Moolenaar copen 4208530bed99SBram Moolenaar wincmd t 4209530bed99SBram Moolenaar colder 4210530bed99SBram Moolenaar call assert_equal('first quickfix list', gettabwinvar(1, 2, 'quickfix_title')) 4211530bed99SBram Moolenaar call assert_equal('first quickfix list', gettabwinvar(2, 2, 'quickfix_title')) 4212530bed99SBram Moolenaar call assert_equal(1, tabpagewinnr(1)) 4213530bed99SBram Moolenaar call assert_equal(1, tabpagewinnr(2)) 4214530bed99SBram Moolenaar tabnew 4215530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'new quickfix title'}) 4216530bed99SBram Moolenaar call assert_equal('new quickfix title', gettabwinvar(1, 2, 'quickfix_title')) 4217530bed99SBram Moolenaar call assert_equal('new quickfix title', gettabwinvar(2, 2, 'quickfix_title')) 4218530bed99SBram Moolenaar %bw! 42198b62e310SBram Moolenaarendfunc 4220600323b4SBram Moolenaar 4221600323b4SBram Moolenaarfunc Test_lbuffer_with_bwipe() 4222600323b4SBram Moolenaar new 4223600323b4SBram Moolenaar new 4224600323b4SBram Moolenaar augroup nasty 42259a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bwipe 4226600323b4SBram Moolenaar augroup END 4227600323b4SBram Moolenaar lbuffer 4228600323b4SBram Moolenaar augroup nasty 4229600323b4SBram Moolenaar au! 4230600323b4SBram Moolenaar augroup END 4231600323b4SBram Moolenaarendfunc 42320366c016SBram Moolenaar 4233531b9a3aSBram Moolenaar" Test for an autocmd freeing the quickfix/location list when cexpr/lexpr is 4234531b9a3aSBram Moolenaar" running 4235531b9a3aSBram Moolenaarfunc Xexpr_acmd_freelist(cchar) 4236531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4237531b9a3aSBram Moolenaar 42389a046fd0SBram Moolenaar " This was using freed memory (but with what events?) 42390366c016SBram Moolenaar augroup nasty 42409a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call g:Xsetlist([], 'f') 42410366c016SBram Moolenaar augroup END 4242531b9a3aSBram Moolenaar Xexpr "x" 42430366c016SBram Moolenaar augroup nasty 42440366c016SBram Moolenaar au! 42450366c016SBram Moolenaar augroup END 42460366c016SBram Moolenaarendfunc 4247531b9a3aSBram Moolenaar 4248531b9a3aSBram Moolenaarfunc Test_cexpr_acmd_freelist() 4249531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('c') 4250531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('l') 4251531b9a3aSBram Moolenaarendfunc 4252531b9a3aSBram Moolenaar 4253531b9a3aSBram Moolenaar" Test for commands that create a new quickfix/location list and jump to the 4254531b9a3aSBram Moolenaar" first error automatically. 4255531b9a3aSBram Moolenaarfunc Xjumpto_first_error_test(cchar) 4256531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4257531b9a3aSBram Moolenaar 4258531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4259531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4260531b9a3aSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4261531b9a3aSBram Moolenaar 4262531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4263531b9a3aSBram Moolenaar enew 4264531b9a3aSBram Moolenaar Xexpr l 4265bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4266531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4267531b9a3aSBram Moolenaar 4268531b9a3aSBram Moolenaar " Test for cfile/lfile 4269531b9a3aSBram Moolenaar enew 4270531b9a3aSBram Moolenaar call writefile(l, 'Xerr') 4271531b9a3aSBram Moolenaar Xfile Xerr 4272bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4273531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4274531b9a3aSBram Moolenaar 4275531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4276531b9a3aSBram Moolenaar edit Xerr 4277531b9a3aSBram Moolenaar Xbuffer 4278bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4279531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4280531b9a3aSBram Moolenaar 4281531b9a3aSBram Moolenaar call delete('Xerr') 4282531b9a3aSBram Moolenaar call delete('Xtestfile1') 4283531b9a3aSBram Moolenaar call delete('Xtestfile2') 4284531b9a3aSBram Moolenaarendfunc 4285531b9a3aSBram Moolenaar 4286531b9a3aSBram Moolenaarfunc Test_jumpto_first_error() 4287531b9a3aSBram Moolenaar call Xjumpto_first_error_test('c') 4288531b9a3aSBram Moolenaar call Xjumpto_first_error_test('l') 4289531b9a3aSBram Moolenaarendfunc 4290531b9a3aSBram Moolenaar 4291531b9a3aSBram Moolenaar" Test for a quickfix autocmd changing the quickfix/location list before 4292531b9a3aSBram Moolenaar" jumping to the first error in the new list. 4293531b9a3aSBram Moolenaarfunc Xautocmd_changelist(cchar) 4294531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4295531b9a3aSBram Moolenaar 4296531b9a3aSBram Moolenaar " Test for cfile/lfile 4297531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4298531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4299531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4300531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4301531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4302531b9a3aSBram Moolenaar Xfile Xerr 4303bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4304531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4305531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4306531b9a3aSBram Moolenaar 4307531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4308531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4309531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4310531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4311531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4312531b9a3aSBram Moolenaar edit Xerr 4313531b9a3aSBram Moolenaar Xbuffer 4314bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4315531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4316531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4317531b9a3aSBram Moolenaar 4318531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4319531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4320531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4321531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4322531b9a3aSBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 4323bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4324531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4325531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4326531b9a3aSBram Moolenaar 4327851332eaSBram Moolenaar " The grepprg may not be set on non-Unix systems 4328851332eaSBram Moolenaar if has('unix') 4329531b9a3aSBram Moolenaar " Test for grep/lgrep 4330531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4331531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4332531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4333531b9a3aSBram Moolenaar silent Xgrep Line5 Xtestfile2 4334bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4335531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4336531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4337851332eaSBram Moolenaar endif 4338531b9a3aSBram Moolenaar 4339531b9a3aSBram Moolenaar " Test for vimgrep/lvimgrep 4340531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4341531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4342531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4343531b9a3aSBram Moolenaar silent Xvimgrep Line5 Xtestfile2 4344bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4345531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4346531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4347531b9a3aSBram Moolenaar 43483f347e47SBram Moolenaar " Test for autocommands clearing the quickfix list before jumping to the 43493f347e47SBram Moolenaar " first error. This should not result in an error 43503f347e47SBram Moolenaar autocmd QuickFixCmdPost * call g:Xsetlist([], 'r') 43513f347e47SBram Moolenaar let v:errmsg = '' 43523f347e47SBram Moolenaar " Test for cfile/lfile 43533f347e47SBram Moolenaar Xfile Xerr 43543f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 43553f347e47SBram Moolenaar " Test for cbuffer/lbuffer 43563f347e47SBram Moolenaar edit Xerr 43573f347e47SBram Moolenaar Xbuffer 43583f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 43593f347e47SBram Moolenaar " Test for cexpr/lexpr 43603f347e47SBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 43613f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 43623f347e47SBram Moolenaar " Test for grep/lgrep 43633f347e47SBram Moolenaar " The grepprg may not be set on non-Unix systems 43643f347e47SBram Moolenaar if has('unix') 43653f347e47SBram Moolenaar silent Xgrep Line5 Xtestfile2 43663f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 43673f347e47SBram Moolenaar endif 43683f347e47SBram Moolenaar " Test for vimgrep/lvimgrep 43693f347e47SBram Moolenaar call assert_fails('silent Xvimgrep Line5 Xtestfile2', 'E480:') 43703f347e47SBram Moolenaar autocmd! QuickFixCmdPost 43713f347e47SBram Moolenaar 4372531b9a3aSBram Moolenaar call delete('Xerr') 4373531b9a3aSBram Moolenaar call delete('Xtestfile1') 4374531b9a3aSBram Moolenaar call delete('Xtestfile2') 4375531b9a3aSBram Moolenaarendfunc 4376531b9a3aSBram Moolenaar 4377531b9a3aSBram Moolenaarfunc Test_autocmd_changelist() 4378531b9a3aSBram Moolenaar call Xautocmd_changelist('c') 4379531b9a3aSBram Moolenaar call Xautocmd_changelist('l') 4380531b9a3aSBram Moolenaarendfunc 43814cde86c2SBram Moolenaar 43824cde86c2SBram Moolenaar" Tests for the ':filter /pat/ clist' command 43834cde86c2SBram Moolenaarfunc Test_filter_clist() 43844cde86c2SBram Moolenaar cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15'] 43854cde86c2SBram Moolenaar call assert_equal([' 2 Xfile2:15 col 15: Line 15'], 43864cde86c2SBram Moolenaar \ split(execute('filter /Line 15/ clist'), "\n")) 43874cde86c2SBram Moolenaar call assert_equal([' 1 Xfile1:10 col 10: Line 10'], 43884cde86c2SBram Moolenaar \ split(execute('filter /Xfile1/ clist'), "\n")) 43894cde86c2SBram Moolenaar call assert_equal([], split(execute('filter /abc/ clist'), "\n")) 43904cde86c2SBram Moolenaar 43914cde86c2SBram Moolenaar call setqflist([{'module' : 'abc', 'pattern' : 'pat1'}, 43924cde86c2SBram Moolenaar \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ') 43934cde86c2SBram Moolenaar call assert_equal([' 2 pqr:pat2: '], 43944cde86c2SBram Moolenaar \ split(execute('filter /pqr/ clist'), "\n")) 43954cde86c2SBram Moolenaar call assert_equal([' 1 abc:pat1: '], 43964cde86c2SBram Moolenaar \ split(execute('filter /pat1/ clist'), "\n")) 43974cde86c2SBram Moolenaarendfunc 43980a08c63dSBram Moolenaar 43990a08c63dSBram Moolenaar" Tests for the "CTRL-W <CR>" command. 44000a08c63dSBram Moolenaarfunc Xview_result_split_tests(cchar) 44010a08c63dSBram Moolenaar call s:setup_commands(a:cchar) 44020a08c63dSBram Moolenaar 44030a08c63dSBram Moolenaar " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list. 44040a08c63dSBram Moolenaar call g:Xsetlist([]) 44050a08c63dSBram Moolenaar Xopen 44060a08c63dSBram Moolenaar let l:win_count = winnr('$') 4407e2e4075fSBram Moolenaar call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42:') 44080a08c63dSBram Moolenaar call assert_equal(l:win_count, winnr('$')) 44090a08c63dSBram Moolenaar Xclose 44100a08c63dSBram Moolenaarendfunc 44110a08c63dSBram Moolenaar 44120a08c63dSBram Moolenaarfunc Test_view_result_split() 44130a08c63dSBram Moolenaar call Xview_result_split_tests('c') 44140a08c63dSBram Moolenaar call Xview_result_split_tests('l') 44150a08c63dSBram Moolenaarendfunc 44162dfcef4cSBram Moolenaar 44172dfcef4cSBram Moolenaar" Test that :cc sets curswant 44182dfcef4cSBram Moolenaarfunc Test_curswant() 44192dfcef4cSBram Moolenaar helpgrep quickfix 44202dfcef4cSBram Moolenaar normal! llll 44212dfcef4cSBram Moolenaar 1cc 44222dfcef4cSBram Moolenaar call assert_equal(getcurpos()[4], virtcol('.')) 44232dfcef4cSBram Moolenaar cclose | helpclose 44242dfcef4cSBram Moolenaarendfunc 4425b244373bSBram Moolenaar 4426b244373bSBram Moolenaar" Test for opening a file from the quickfix window using CTRL-W <Enter> 4427b244373bSBram Moolenaar" doesn't leave an empty buffer around. 4428b244373bSBram Moolenaarfunc Test_splitview() 4429b244373bSBram Moolenaar call s:create_test_file('Xtestfile1') 4430b244373bSBram Moolenaar call s:create_test_file('Xtestfile2') 4431b244373bSBram Moolenaar new | only 4432b244373bSBram Moolenaar let last_bufnr = bufnr('Test_sv_1', 1) 4433b244373bSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4434b244373bSBram Moolenaar cgetexpr l 4435b244373bSBram Moolenaar copen 4436b244373bSBram Moolenaar let numbufs = len(getbufinfo()) 4437b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4438b244373bSBram Moolenaar copen 4439b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4440b244373bSBram Moolenaar " Make sure new empty buffers are not created 4441b244373bSBram Moolenaar call assert_equal(numbufs, len(getbufinfo())) 4442b244373bSBram Moolenaar " Creating a new buffer should use the next available buffer number 4443b244373bSBram Moolenaar call assert_equal(last_bufnr + 4, bufnr("Test_sv_2", 1)) 4444b244373bSBram Moolenaar bwipe Test_sv_1 4445b244373bSBram Moolenaar bwipe Test_sv_2 4446b244373bSBram Moolenaar new | only 4447b244373bSBram Moolenaar 4448b244373bSBram Moolenaar " When split opening files from location list window, make sure that two 4449b244373bSBram Moolenaar " windows doesn't refer to the same location list 4450b244373bSBram Moolenaar lgetexpr l 4451b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4452b244373bSBram Moolenaar lopen 4453b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4454b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4455b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4456b244373bSBram Moolenaar new | only 4457b244373bSBram Moolenaar 4458b244373bSBram Moolenaar " When split opening files from a helpgrep location list window, a new help 4459eeb1b9c7SBram Moolenaar " window should be opened with a copy of the location list. 4460b244373bSBram Moolenaar lhelpgrep window 4461b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4462b244373bSBram Moolenaar lwindow 4463b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4464b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4465b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4466b244373bSBram Moolenaar new | only 4467b244373bSBram Moolenaar 4468406cd90fSBram Moolenaar " Using :split or :vsplit from a quickfix window should behave like a :new 4469406cd90fSBram Moolenaar " or a :vnew command 4470406cd90fSBram Moolenaar copen 4471406cd90fSBram Moolenaar split 4472406cd90fSBram Moolenaar call assert_equal(3, winnr('$')) 4473406cd90fSBram Moolenaar let l = getwininfo() 4474406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4475406cd90fSBram Moolenaar close 4476406cd90fSBram Moolenaar copen 4477406cd90fSBram Moolenaar vsplit 4478406cd90fSBram Moolenaar let l = getwininfo() 4479406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4480406cd90fSBram Moolenaar new | only 4481406cd90fSBram Moolenaar 4482b244373bSBram Moolenaar call delete('Xtestfile1') 4483b244373bSBram Moolenaar call delete('Xtestfile2') 4484b244373bSBram Moolenaarendfunc 4485c45eb770SBram Moolenaar 4486c45eb770SBram Moolenaar" Test for parsing entries using visual screen column 4487c45eb770SBram Moolenaarfunc Test_viscol() 4488c45eb770SBram Moolenaar enew 4489c45eb770SBram Moolenaar call writefile(["Col1\tCol2\tCol3"], 'Xfile1') 4490c45eb770SBram Moolenaar edit Xfile1 4491c45eb770SBram Moolenaar 4492c45eb770SBram Moolenaar " Use byte offset for column number 4493c45eb770SBram Moolenaar set efm& 4494c45eb770SBram Moolenaar cexpr "Xfile1:1:5:XX\nXfile1:1:9:YY\nXfile1:1:20:ZZ" 4495c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4496c45eb770SBram Moolenaar cnext 4497c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4498c45eb770SBram Moolenaar cnext 4499c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4500c45eb770SBram Moolenaar 4501c45eb770SBram Moolenaar " Use screen column offset for column number 4502c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4503c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:12:YY\nXfile1:1:20:ZZ" 4504c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4505c45eb770SBram Moolenaar cnext 4506c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4507c45eb770SBram Moolenaar cnext 4508c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4509c45eb770SBram Moolenaar cexpr "Xfile1:1:6:XX\nXfile1:1:15:YY\nXfile1:1:24:ZZ" 4510c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4511c45eb770SBram Moolenaar cnext 4512c45eb770SBram Moolenaar call assert_equal([10, 16], [col('.'), virtcol('.')]) 4513c45eb770SBram Moolenaar cnext 4514c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4515c45eb770SBram Moolenaar 4516c45eb770SBram Moolenaar enew 4517c45eb770SBram Moolenaar call writefile(["Col1\täü\töß\tCol4"], 'Xfile1') 4518c45eb770SBram Moolenaar 4519c45eb770SBram Moolenaar " Use byte offset for column number 4520c45eb770SBram Moolenaar set efm& 4521c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:11:YY\nXfile1:1:16:ZZ" 4522c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4523c45eb770SBram Moolenaar cnext 4524c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4525c45eb770SBram Moolenaar cnext 4526c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4527c45eb770SBram Moolenaar 4528c45eb770SBram Moolenaar " Use screen column offset for column number 4529c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4530c45eb770SBram Moolenaar cexpr "Xfile1:1:10:XX\nXfile1:1:17:YY\nXfile1:1:25:ZZ" 4531c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4532c45eb770SBram Moolenaar cnext 4533c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4534c45eb770SBram Moolenaar cnext 4535c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4536c45eb770SBram Moolenaar 4537c95940c0SBram Moolenaar " Use screen column number with a multi-line error message 4538c95940c0SBram Moolenaar enew 4539c95940c0SBram Moolenaar call writefile(["à test"], 'Xfile1') 4540c95940c0SBram Moolenaar set efm=%E===\ %f\ ===,%C%l:%v,%Z%m 4541c95940c0SBram Moolenaar cexpr ["=== Xfile1 ===", "1:3", "errormsg"] 4542c95940c0SBram Moolenaar call assert_equal('Xfile1', @%) 4543c95940c0SBram Moolenaar call assert_equal([0, 1, 4, 0], getpos('.')) 4544c95940c0SBram Moolenaar 4545c95940c0SBram Moolenaar " Repeat previous test with byte offset %c: ensure that fix to issue #7145 4546c95940c0SBram Moolenaar " does not break this 4547c95940c0SBram Moolenaar set efm=%E===\ %f\ ===,%C%l:%c,%Z%m 4548c95940c0SBram Moolenaar cexpr ["=== Xfile1 ===", "1:3", "errormsg"] 4549c95940c0SBram Moolenaar call assert_equal('Xfile1', @%) 4550c95940c0SBram Moolenaar call assert_equal([0, 1, 3, 0], getpos('.')) 4551c95940c0SBram Moolenaar 4552c45eb770SBram Moolenaar enew | only 4553c45eb770SBram Moolenaar set efm& 4554c45eb770SBram Moolenaar call delete('Xfile1') 4555c45eb770SBram Moolenaarendfunc 4556ee8188fcSBram Moolenaar 4557ee8188fcSBram Moolenaar" Test for the quickfix window buffer 4558ee8188fcSBram Moolenaarfunc Xqfbuf_test(cchar) 4559ee8188fcSBram Moolenaar call s:setup_commands(a:cchar) 4560ee8188fcSBram Moolenaar 4561ee8188fcSBram Moolenaar " Quickfix buffer should be reused across closing and opening a quickfix 4562ee8188fcSBram Moolenaar " window 4563ee8188fcSBram Moolenaar Xexpr "F1:10:Line10" 4564ee8188fcSBram Moolenaar Xopen 4565ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4566ee8188fcSBram Moolenaar Xclose 4567ee8188fcSBram Moolenaar " Even after the quickfix window is closed, the buffer should be loaded 4568ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4569647e24baSBram Moolenaar call assert_true(qfbnum, g:Xgetlist({'qfbufnr' : 0}).qfbufnr) 4570ee8188fcSBram Moolenaar Xopen 4571ee8188fcSBram Moolenaar " Buffer should be reused when opening the window again 4572ee8188fcSBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4573ee8188fcSBram Moolenaar Xclose 4574ee8188fcSBram Moolenaar 4575ee8188fcSBram Moolenaar if a:cchar == 'l' 4576ee8188fcSBram Moolenaar %bwipe 4577ee8188fcSBram Moolenaar " For a location list, when both the file window and the location list 4578ee8188fcSBram Moolenaar " window for the list are closed, then the buffer should be freed. 4579ee8188fcSBram Moolenaar new | only 4580ee8188fcSBram Moolenaar lexpr "F1:10:Line10" 4581ee8188fcSBram Moolenaar let wid = win_getid() 4582ee8188fcSBram Moolenaar lopen 4583ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4584ee8188fcSBram Moolenaar call assert_match(qfbnum . ' %a- "\[Location List]"', execute('ls')) 4585ee8188fcSBram Moolenaar close 4586ee8188fcSBram Moolenaar " When the location list window is closed, the buffer name should not 4587ee8188fcSBram Moolenaar " change to 'Quickfix List' 4588647e24baSBram Moolenaar call assert_match(qfbnum . 'u h- "\[Location List]"', execute('ls!')) 4589ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4590ee8188fcSBram Moolenaar 4591d82a81caSBram Moolenaar " After deleting a location list buffer using ":bdelete", opening the 4592d82a81caSBram Moolenaar " location list window should mark the buffer as a location list buffer. 4593d82a81caSBram Moolenaar exe "bdelete " . qfbnum 4594d82a81caSBram Moolenaar lopen 4595d82a81caSBram Moolenaar call assert_equal("quickfix", &buftype) 4596d82a81caSBram Moolenaar call assert_equal(1, getwininfo(win_getid(winnr()))[0].loclist) 4597d82a81caSBram Moolenaar call assert_equal(wid, getloclist(0, {'filewinid' : 0}).filewinid) 4598d82a81caSBram Moolenaar call assert_false(&swapfile) 4599d82a81caSBram Moolenaar lclose 4600d82a81caSBram Moolenaar 4601eeb1b9c7SBram Moolenaar " When the location list is cleared for the window, the buffer should be 4602eeb1b9c7SBram Moolenaar " removed 4603eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4604eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4605647e24baSBram Moolenaar call assert_equal(0, getloclist(0, {'qfbufnr' : 0}).qfbufnr) 4606eeb1b9c7SBram Moolenaar 4607eeb1b9c7SBram Moolenaar " When the location list is freed with the location list window open, the 4608eeb1b9c7SBram Moolenaar " location list buffer should not be lost. It should be reused when the 4609eeb1b9c7SBram Moolenaar " location list is again populated. 4610eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4611eeb1b9c7SBram Moolenaar lopen 4612eeb1b9c7SBram Moolenaar let wid = win_getid() 4613eeb1b9c7SBram Moolenaar let qfbnum = bufnr('') 4614eeb1b9c7SBram Moolenaar wincmd p 4615eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4616eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4617eeb1b9c7SBram Moolenaar lopen 4618eeb1b9c7SBram Moolenaar call assert_equal(wid, win_getid()) 4619eeb1b9c7SBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4620eeb1b9c7SBram Moolenaar lclose 4621eeb1b9c7SBram Moolenaar 4622eeb1b9c7SBram Moolenaar " When the window with the location list is closed, the buffer should be 4623eeb1b9c7SBram Moolenaar " removed 4624ee8188fcSBram Moolenaar new | only 4625eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4626ee8188fcSBram Moolenaar endif 4627ee8188fcSBram Moolenaarendfunc 4628ee8188fcSBram Moolenaar 4629ee8188fcSBram Moolenaarfunc Test_qfbuf() 4630ee8188fcSBram Moolenaar call Xqfbuf_test('c') 4631ee8188fcSBram Moolenaar call Xqfbuf_test('l') 4632ee8188fcSBram Moolenaarendfunc 4633eeb1b9c7SBram Moolenaar 4634eeb1b9c7SBram Moolenaar" If there is an autocmd to use only one window, then opening the location 4635eeb1b9c7SBram Moolenaar" list window used to crash Vim. 4636eeb1b9c7SBram Moolenaarfunc Test_winonly_autocmd() 4637eeb1b9c7SBram Moolenaar call s:create_test_file('Xtest1') 4638eeb1b9c7SBram Moolenaar " Autocmd to show only one Vim window at a time 4639eeb1b9c7SBram Moolenaar autocmd WinEnter * only 4640eeb1b9c7SBram Moolenaar new 4641eeb1b9c7SBram Moolenaar " Load the location list 4642eeb1b9c7SBram Moolenaar lexpr "Xtest1:5:Line5\nXtest1:10:Line10\nXtest1:15:Line15" 4643eeb1b9c7SBram Moolenaar let loclistid = getloclist(0, {'id' : 0}).id 4644eeb1b9c7SBram Moolenaar " Open the location list window. Only this window will be shown and the file 4645eeb1b9c7SBram Moolenaar " window is closed. 4646eeb1b9c7SBram Moolenaar lopen 4647eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4648eeb1b9c7SBram Moolenaar " Jump to an entry in the location list and make sure that the cursor is 4649eeb1b9c7SBram Moolenaar " positioned correctly. 4650eeb1b9c7SBram Moolenaar ll 3 4651eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4652bdd2c290SBram Moolenaar call assert_equal('Xtest1', @%) 4653eeb1b9c7SBram Moolenaar call assert_equal(15, line('.')) 4654eeb1b9c7SBram Moolenaar " Cleanup 4655eeb1b9c7SBram Moolenaar autocmd! WinEnter 4656eeb1b9c7SBram Moolenaar new | only 4657eeb1b9c7SBram Moolenaar call delete('Xtest1') 4658eeb1b9c7SBram Moolenaarendfunc 465939803d82SBram Moolenaar 466039803d82SBram Moolenaar" Test to make sure that an empty quickfix buffer is not reused for loading 466139803d82SBram Moolenaar" a normal buffer. 466239803d82SBram Moolenaarfunc Test_empty_qfbuf() 466339803d82SBram Moolenaar enew | only 466439803d82SBram Moolenaar call writefile(["Test"], 'Xfile1') 466539803d82SBram Moolenaar call setqflist([], 'f') 466639803d82SBram Moolenaar copen | only 466739803d82SBram Moolenaar let qfbuf = bufnr('') 466839803d82SBram Moolenaar edit Xfile1 466939803d82SBram Moolenaar call assert_notequal(qfbuf, bufnr('')) 467039803d82SBram Moolenaar enew 467139803d82SBram Moolenaar call delete('Xfile1') 467239803d82SBram Moolenaarendfunc 46733ff33114SBram Moolenaar 46743ff33114SBram Moolenaar" Test for the :cbelow, :cabove, :lbelow and :labove commands. 4675cf6a55c4SBram Moolenaar" And for the :cafter, :cbefore, :lafter and :lbefore commands. 46763ff33114SBram Moolenaarfunc Xtest_below(cchar) 46773ff33114SBram Moolenaar call s:setup_commands(a:cchar) 46783ff33114SBram Moolenaar 46793ff33114SBram Moolenaar " No quickfix/location list 46803ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 46813ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4682cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4683cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 46843ff33114SBram Moolenaar 46853ff33114SBram Moolenaar " Empty quickfix/location list 46863ff33114SBram Moolenaar call g:Xsetlist([]) 46873ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 46883ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4689cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4690cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 46913ff33114SBram Moolenaar 46923ff33114SBram Moolenaar call s:create_test_file('X1') 46933ff33114SBram Moolenaar call s:create_test_file('X2') 46943ff33114SBram Moolenaar call s:create_test_file('X3') 46953ff33114SBram Moolenaar call s:create_test_file('X4') 46963ff33114SBram Moolenaar 46973ff33114SBram Moolenaar " Invalid entries 46983ff33114SBram Moolenaar edit X1 46993ff33114SBram Moolenaar call g:Xsetlist(["E1", "E2"]) 47003ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 47013ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 47023ff33114SBram Moolenaar call assert_fails('3Xbelow', 'E42:') 47033ff33114SBram Moolenaar call assert_fails('4Xabove', 'E42:') 4704cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4705cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 4706cf6a55c4SBram Moolenaar call assert_fails('3Xbefore', 'E42:') 4707cf6a55c4SBram Moolenaar call assert_fails('4Xafter', 'E42:') 47083ff33114SBram Moolenaar 47093ff33114SBram Moolenaar " Test the commands with various arguments 4710cf6a55c4SBram Moolenaar Xexpr ["X1:5:3:L5", "X2:5:2:L5", "X2:10:3:L10", "X2:15:4:L15", "X3:3:5:L3"] 47113ff33114SBram Moolenaar edit +7 X2 47123ff33114SBram Moolenaar Xabove 4713bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 47143ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4715cf6a55c4SBram Moolenaar normal 7G 4716cf6a55c4SBram Moolenaar Xbefore 4717bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4718cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4719cf6a55c4SBram Moolenaar 47203ff33114SBram Moolenaar normal 2j 47213ff33114SBram Moolenaar Xbelow 4722bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4723cf6a55c4SBram Moolenaar normal 7G 4724cf6a55c4SBram Moolenaar Xafter 4725bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4726cf6a55c4SBram Moolenaar 47273ff33114SBram Moolenaar " Last error in this file 47283ff33114SBram Moolenaar Xbelow 99 4729bdd2c290SBram Moolenaar call assert_equal(['X2', 15], [@%, line('.')]) 47303ff33114SBram Moolenaar call assert_fails('Xbelow', 'E553:') 4731cf6a55c4SBram Moolenaar normal gg 4732cf6a55c4SBram Moolenaar Xafter 99 4733bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 4], [@%, line('.'), col('.')]) 4734cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E553:') 4735cf6a55c4SBram Moolenaar 47363ff33114SBram Moolenaar " First error in this file 47373ff33114SBram Moolenaar Xabove 99 4738bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 47393ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4740cf6a55c4SBram Moolenaar normal G 4741cf6a55c4SBram Moolenaar Xbefore 99 4742bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4743cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4744cf6a55c4SBram Moolenaar 47453ff33114SBram Moolenaar normal gg 47463ff33114SBram Moolenaar Xbelow 2 4747bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4748cf6a55c4SBram Moolenaar normal gg 4749cf6a55c4SBram Moolenaar Xafter 2 4750bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4751cf6a55c4SBram Moolenaar 47523ff33114SBram Moolenaar normal G 47533ff33114SBram Moolenaar Xabove 2 4754bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4755cf6a55c4SBram Moolenaar normal G 4756cf6a55c4SBram Moolenaar Xbefore 2 4757bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4758cf6a55c4SBram Moolenaar 47593ff33114SBram Moolenaar edit X4 47603ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 47613ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 4762cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4763cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 47643ff33114SBram Moolenaar if a:cchar == 'l' 47653ff33114SBram Moolenaar " If a buffer has location list entries from some other window but not 47663ff33114SBram Moolenaar " from the current window, then the commands should fail. 47673ff33114SBram Moolenaar edit X1 | split | call setloclist(0, [], 'f') 47683ff33114SBram Moolenaar call assert_fails('Xabove', 'E776:') 47693ff33114SBram Moolenaar call assert_fails('Xbelow', 'E776:') 4770cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E776:') 4771cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E776:') 47723ff33114SBram Moolenaar close 47733ff33114SBram Moolenaar endif 47743ff33114SBram Moolenaar 47753ff33114SBram Moolenaar " Test for lines with multiple quickfix entries 47763ff33114SBram Moolenaar Xexpr ["X1:5:L5", "X2:5:1:L5_1", "X2:5:2:L5_2", "X2:5:3:L5_3", 47773ff33114SBram Moolenaar \ "X2:10:1:L10_1", "X2:10:2:L10_2", "X2:10:3:L10_3", 47783ff33114SBram Moolenaar \ "X2:15:1:L15_1", "X2:15:2:L15_2", "X2:15:3:L15_3", "X3:3:L3"] 47793ff33114SBram Moolenaar edit +1 X2 47803ff33114SBram Moolenaar Xbelow 2 4781bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 4782cf6a55c4SBram Moolenaar normal 1G 4783cf6a55c4SBram Moolenaar Xafter 2 4784bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4785cf6a55c4SBram Moolenaar 47863ff33114SBram Moolenaar normal gg 47873ff33114SBram Moolenaar Xbelow 99 4788bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4789cf6a55c4SBram Moolenaar normal gg 4790cf6a55c4SBram Moolenaar Xafter 99 4791bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 3], [@%, line('.'), col('.')]) 4792cf6a55c4SBram Moolenaar 47933ff33114SBram Moolenaar normal G 47943ff33114SBram Moolenaar Xabove 2 4795bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 47963ff33114SBram Moolenaar normal G 4797cf6a55c4SBram Moolenaar Xbefore 2 4798bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 4799cf6a55c4SBram Moolenaar 4800cf6a55c4SBram Moolenaar normal G 48013ff33114SBram Moolenaar Xabove 99 4802bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4803cf6a55c4SBram Moolenaar normal G 4804cf6a55c4SBram Moolenaar Xbefore 99 4805bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4806cf6a55c4SBram Moolenaar 48073ff33114SBram Moolenaar normal 10G 48083ff33114SBram Moolenaar Xabove 4809bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4810cf6a55c4SBram Moolenaar normal 10G$ 4811cf6a55c4SBram Moolenaar 2Xbefore 4812bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 2], [@%, line('.'), col('.')]) 4813cf6a55c4SBram Moolenaar 48143ff33114SBram Moolenaar normal 10G 48153ff33114SBram Moolenaar Xbelow 4816bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4817cf6a55c4SBram Moolenaar normal 9G 4818cf6a55c4SBram Moolenaar 5Xafter 4819bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 48203ff33114SBram Moolenaar 48213ff33114SBram Moolenaar " Invalid range 48223ff33114SBram Moolenaar if a:cchar == 'c' 482325190db2SBram Moolenaar call assert_fails('-2cbelow', 'E16:') 4824cf6a55c4SBram Moolenaar call assert_fails('-2cafter', 'E16:') 48253ff33114SBram Moolenaar else 482625190db2SBram Moolenaar call assert_fails('-2lbelow', 'E16:') 4827cf6a55c4SBram Moolenaar call assert_fails('-2lafter', 'E16:') 48283ff33114SBram Moolenaar endif 48293ff33114SBram Moolenaar 48303ff33114SBram Moolenaar call delete('X1') 48313ff33114SBram Moolenaar call delete('X2') 48323ff33114SBram Moolenaar call delete('X3') 48333ff33114SBram Moolenaar call delete('X4') 48343ff33114SBram Moolenaarendfunc 48353ff33114SBram Moolenaar 48363ff33114SBram Moolenaarfunc Test_cbelow() 48373ff33114SBram Moolenaar call Xtest_below('c') 48383ff33114SBram Moolenaar call Xtest_below('l') 48393ff33114SBram Moolenaarendfunc 484025190db2SBram Moolenaar 484125190db2SBram Moolenaarfunc Test_quickfix_count() 484225190db2SBram Moolenaar let commands = [ 484325190db2SBram Moolenaar \ 'cNext', 484425190db2SBram Moolenaar \ 'cNfile', 484525190db2SBram Moolenaar \ 'cabove', 484625190db2SBram Moolenaar \ 'cbelow', 484725190db2SBram Moolenaar \ 'cfirst', 484825190db2SBram Moolenaar \ 'clast', 484925190db2SBram Moolenaar \ 'cnewer', 485025190db2SBram Moolenaar \ 'cnext', 485125190db2SBram Moolenaar \ 'cnfile', 485225190db2SBram Moolenaar \ 'colder', 485325190db2SBram Moolenaar \ 'cprevious', 485425190db2SBram Moolenaar \ 'crewind', 485525190db2SBram Moolenaar \ 485625190db2SBram Moolenaar \ 'lNext', 485725190db2SBram Moolenaar \ 'lNfile', 485825190db2SBram Moolenaar \ 'labove', 485925190db2SBram Moolenaar \ 'lbelow', 486025190db2SBram Moolenaar \ 'lfirst', 486125190db2SBram Moolenaar \ 'llast', 486225190db2SBram Moolenaar \ 'lnewer', 486325190db2SBram Moolenaar \ 'lnext', 486425190db2SBram Moolenaar \ 'lnfile', 486525190db2SBram Moolenaar \ 'lolder', 486625190db2SBram Moolenaar \ 'lprevious', 486725190db2SBram Moolenaar \ 'lrewind', 486825190db2SBram Moolenaar \ ] 486925190db2SBram Moolenaar for cmd in commands 487025190db2SBram Moolenaar call assert_fails('-1' .. cmd, 'E16:') 487125190db2SBram Moolenaar call assert_fails('.' .. cmd, 'E16:') 487225190db2SBram Moolenaar call assert_fails('%' .. cmd, 'E16:') 487325190db2SBram Moolenaar call assert_fails('$' .. cmd, 'E16:') 487425190db2SBram Moolenaar endfor 487525190db2SBram Moolenaarendfunc 48766a0cc916SBram Moolenaar 48776a0cc916SBram Moolenaar" Test for aborting quickfix commands using QuickFixCmdPre 48786a0cc916SBram Moolenaarfunc Xtest_qfcmd_abort(cchar) 48796a0cc916SBram Moolenaar call s:setup_commands(a:cchar) 48806a0cc916SBram Moolenaar 48816a0cc916SBram Moolenaar call g:Xsetlist([], 'f') 48826a0cc916SBram Moolenaar 48836a0cc916SBram Moolenaar " cexpr/lexpr 48846a0cc916SBram Moolenaar let e = '' 48856a0cc916SBram Moolenaar try 48866a0cc916SBram Moolenaar Xexpr ["F1:10:Line10", "F2:20:Line20"] 48876a0cc916SBram Moolenaar catch /.*/ 48886a0cc916SBram Moolenaar let e = v:exception 48896a0cc916SBram Moolenaar endtry 48906a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 48916a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 48926a0cc916SBram Moolenaar 48936a0cc916SBram Moolenaar " cfile/lfile 48946a0cc916SBram Moolenaar call writefile(["F1:10:Line10", "F2:20:Line20"], 'Xfile1') 48956a0cc916SBram Moolenaar let e = '' 48966a0cc916SBram Moolenaar try 48976a0cc916SBram Moolenaar Xfile Xfile1 48986a0cc916SBram Moolenaar catch /.*/ 48996a0cc916SBram Moolenaar let e = v:exception 49006a0cc916SBram Moolenaar endtry 49016a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49026a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49036a0cc916SBram Moolenaar call delete('Xfile1') 49046a0cc916SBram Moolenaar 49056a0cc916SBram Moolenaar " cgetbuffer/lgetbuffer 49066a0cc916SBram Moolenaar enew! 49076a0cc916SBram Moolenaar call append(0, ["F1:10:Line10", "F2:20:Line20"]) 49086a0cc916SBram Moolenaar let e = '' 49096a0cc916SBram Moolenaar try 49106a0cc916SBram Moolenaar Xgetbuffer 49116a0cc916SBram Moolenaar catch /.*/ 49126a0cc916SBram Moolenaar let e = v:exception 49136a0cc916SBram Moolenaar endtry 49146a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49156a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49166a0cc916SBram Moolenaar enew! 49176a0cc916SBram Moolenaar 49186a0cc916SBram Moolenaar " vimgrep/lvimgrep 49196a0cc916SBram Moolenaar let e = '' 49206a0cc916SBram Moolenaar try 49216a0cc916SBram Moolenaar Xvimgrep /func/ test_quickfix.vim 49226a0cc916SBram Moolenaar catch /.*/ 49236a0cc916SBram Moolenaar let e = v:exception 49246a0cc916SBram Moolenaar endtry 49256a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49266a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49276a0cc916SBram Moolenaar 49286a0cc916SBram Moolenaar " helpgrep/lhelpgrep 49296a0cc916SBram Moolenaar let e = '' 49306a0cc916SBram Moolenaar try 49316a0cc916SBram Moolenaar Xhelpgrep quickfix 49326a0cc916SBram Moolenaar catch /.*/ 49336a0cc916SBram Moolenaar let e = v:exception 49346a0cc916SBram Moolenaar endtry 49356a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49366a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49376a0cc916SBram Moolenaar 49386a0cc916SBram Moolenaar " grep/lgrep 49396a0cc916SBram Moolenaar if has('unix') 49406a0cc916SBram Moolenaar let e = '' 49416a0cc916SBram Moolenaar try 49426a0cc916SBram Moolenaar silent Xgrep func test_quickfix.vim 49436a0cc916SBram Moolenaar catch /.*/ 49446a0cc916SBram Moolenaar let e = v:exception 49456a0cc916SBram Moolenaar endtry 49466a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49476a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49486a0cc916SBram Moolenaar endif 49496a0cc916SBram Moolenaarendfunc 49506a0cc916SBram Moolenaar 49516a0cc916SBram Moolenaarfunc Test_qfcmd_abort() 49526a0cc916SBram Moolenaar augroup QF_Test 49536a0cc916SBram Moolenaar au! 49546a0cc916SBram Moolenaar autocmd QuickFixCmdPre * throw "AbortCmd" 49556a0cc916SBram Moolenaar augroup END 49566a0cc916SBram Moolenaar 49576a0cc916SBram Moolenaar call Xtest_qfcmd_abort('c') 49586a0cc916SBram Moolenaar call Xtest_qfcmd_abort('l') 49596a0cc916SBram Moolenaar 49606a0cc916SBram Moolenaar augroup QF_Test 49616a0cc916SBram Moolenaar au! 49626a0cc916SBram Moolenaar augroup END 49636a0cc916SBram Moolenaarendfunc 49646a0cc916SBram Moolenaar 4965d8a8c4caSBram Moolenaar" Test for using a file in one of the parent directories. 4966d8a8c4caSBram Moolenaarfunc Test_search_in_dirstack() 4967d8a8c4caSBram Moolenaar call mkdir('Xtestdir/a/b/c', 'p') 4968d8a8c4caSBram Moolenaar let save_cwd = getcwd() 4969d8a8c4caSBram Moolenaar call writefile(["X1_L1", "X1_L2"], 'Xtestdir/Xfile1') 4970d8a8c4caSBram Moolenaar call writefile(["X2_L1", "X2_L2"], 'Xtestdir/a/Xfile2') 4971d8a8c4caSBram Moolenaar call writefile(["X3_L1", "X3_L2"], 'Xtestdir/a/b/Xfile3') 4972d8a8c4caSBram Moolenaar call writefile(["X4_L1", "X4_L2"], 'Xtestdir/a/b/c/Xfile4') 4973d8a8c4caSBram Moolenaar 4974d8a8c4caSBram Moolenaar let lines = "Entering dir Xtestdir\n" . 4975d8a8c4caSBram Moolenaar \ "Entering dir a\n" . 4976d8a8c4caSBram Moolenaar \ "Entering dir b\n" . 4977d8a8c4caSBram Moolenaar \ "Xfile2:2:X2_L2\n" . 4978d8a8c4caSBram Moolenaar \ "Leaving dir a\n" . 4979d8a8c4caSBram Moolenaar \ "Xfile1:2:X1_L2\n" . 4980d8a8c4caSBram Moolenaar \ "Xfile3:1:X3_L1\n" . 4981d8a8c4caSBram Moolenaar \ "Entering dir c\n" . 4982d8a8c4caSBram Moolenaar \ "Xfile4:2:X4_L2\n" . 498388a3e2b2SBram Moolenaar \ "Leaving dir c\n" 4984d8a8c4caSBram Moolenaar set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m 498588a3e2b2SBram Moolenaar cexpr lines .. "Leaving dir Xtestdir|\n" | let next = 1 4986d8a8c4caSBram Moolenaar call assert_equal(11, getqflist({'size' : 0}).size) 4987d8a8c4caSBram Moolenaar call assert_equal(4, getqflist({'idx' : 0}).idx) 4988d8a8c4caSBram Moolenaar call assert_equal('X2_L2', getline('.')) 498988a3e2b2SBram Moolenaar call assert_equal(1, next) 4990d8a8c4caSBram Moolenaar cnext 4991d8a8c4caSBram Moolenaar call assert_equal(6, getqflist({'idx' : 0}).idx) 4992d8a8c4caSBram Moolenaar call assert_equal('X1_L2', getline('.')) 4993d8a8c4caSBram Moolenaar cnext 4994d8a8c4caSBram Moolenaar call assert_equal(7, getqflist({'idx' : 0}).idx) 4995d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 4996d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 4997d8a8c4caSBram Moolenaar cnext 4998d8a8c4caSBram Moolenaar call assert_equal(9, getqflist({'idx' : 0}).idx) 4999d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 5000d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 5001d8a8c4caSBram Moolenaar 5002d8a8c4caSBram Moolenaar set efm& 5003d8a8c4caSBram Moolenaar exe 'cd ' . save_cwd 5004d8a8c4caSBram Moolenaar call delete('Xtestdir', 'rf') 5005d8a8c4caSBram Moolenaarendfunc 5006d8a8c4caSBram Moolenaar 50071860bde9SBram Moolenaar" Test for :cquit 50081860bde9SBram Moolenaarfunc Test_cquit() 50091860bde9SBram Moolenaar " Exit Vim with a non-zero value 50101860bde9SBram Moolenaar if RunVim([], ["cquit 7"], '') 50111860bde9SBram Moolenaar call assert_equal(7, v:shell_error) 50121860bde9SBram Moolenaar endif 50131860bde9SBram Moolenaar 50141860bde9SBram Moolenaar if RunVim([], ["50cquit"], '') 50151860bde9SBram Moolenaar call assert_equal(50, v:shell_error) 50161860bde9SBram Moolenaar endif 50171860bde9SBram Moolenaar 50181860bde9SBram Moolenaar " Exit Vim with default value 50191860bde9SBram Moolenaar if RunVim([], ["cquit"], '') 50201860bde9SBram Moolenaar call assert_equal(1, v:shell_error) 50211860bde9SBram Moolenaar endif 50221860bde9SBram Moolenaar 50231860bde9SBram Moolenaar " Exit Vim with zero value 50241860bde9SBram Moolenaar if RunVim([], ["cquit 0"], '') 50251860bde9SBram Moolenaar call assert_equal(0, v:shell_error) 50261860bde9SBram Moolenaar endif 50271860bde9SBram Moolenaar 50281860bde9SBram Moolenaar " Exit Vim with negative value 50291860bde9SBram Moolenaar call assert_fails('-3cquit', 'E16:') 50301860bde9SBram Moolenaarendfunc 50311860bde9SBram Moolenaar 5032858ba06dSBram Moolenaar" Test for getting a specific item from a quickfix list 5033858ba06dSBram Moolenaarfunc Xtest_getqflist_by_idx(cchar) 5034858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 5035858ba06dSBram Moolenaar " Empty list 5036858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 1, 'items' : 0}).items) 5037858ba06dSBram Moolenaar Xexpr ['F1:10:L10', 'F1:20:L20'] 5038858ba06dSBram Moolenaar let l = g:Xgetlist({'idx' : 2, 'items' : 0}).items 5039858ba06dSBram Moolenaar call assert_equal(bufnr('F1'), l[0].bufnr) 5040858ba06dSBram Moolenaar call assert_equal(20, l[0].lnum) 5041858ba06dSBram Moolenaar call assert_equal('L20', l[0].text) 5042858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : -1, 'items' : 0}).items) 5043858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 3, 'items' : 0}).items) 5044858ba06dSBram Moolenaar %bwipe! 5045858ba06dSBram Moolenaarendfunc 5046858ba06dSBram Moolenaar 5047858ba06dSBram Moolenaarfunc Test_getqflist_by_idx() 5048858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('c') 5049858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('l') 5050858ba06dSBram Moolenaarendfunc 5051858ba06dSBram Moolenaar 5052858ba06dSBram Moolenaar" Test for the 'quickfixtextfunc' setting 5053858ba06dSBram Moolenaarfunc Tqfexpr(info) 5054858ba06dSBram Moolenaar if a:info.quickfix 505500e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 5056858ba06dSBram Moolenaar else 505700e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 5058858ba06dSBram Moolenaar endif 5059858ba06dSBram Moolenaar 506000e260bbSBram Moolenaar let l = [] 506100e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 506200e260bbSBram Moolenaar let e = qfl[idx] 5063858ba06dSBram Moolenaar let s = '' 5064858ba06dSBram Moolenaar if e.bufnr != 0 5065858ba06dSBram Moolenaar let bname = bufname(e.bufnr) 5066858ba06dSBram Moolenaar let s ..= fnamemodify(bname, ':.') 5067858ba06dSBram Moolenaar endif 5068858ba06dSBram Moolenaar let s ..= '-' 5069858ba06dSBram Moolenaar let s ..= 'L' .. string(e.lnum) .. 'C' .. string(e.col) .. '-' 5070858ba06dSBram Moolenaar let s ..= e.text 507100e260bbSBram Moolenaar call add(l, s) 507200e260bbSBram Moolenaar endfor 5073858ba06dSBram Moolenaar 507400e260bbSBram Moolenaar return l 5075858ba06dSBram Moolenaarendfunc 5076858ba06dSBram Moolenaar 5077858ba06dSBram Moolenaarfunc Xtest_qftextfunc(cchar) 5078858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 5079858ba06dSBram Moolenaar 5080858ba06dSBram Moolenaar set efm=%f:%l:%c:%m 5081858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 5082d43906d2SBram Moolenaar call assert_equal('Tqfexpr', &quickfixtextfunc) 5083d43906d2SBram Moolenaar call assert_equal('', 5084d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 5085858ba06dSBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5086858ba06dSBram Moolenaar Xwindow 5087858ba06dSBram Moolenaar call assert_equal('F1-L10C2-green', getline(1)) 5088858ba06dSBram Moolenaar call assert_equal('F1-L20C4-blue', getline(2)) 5089858ba06dSBram Moolenaar Xclose 5090858ba06dSBram Moolenaar set quickfixtextfunc&vim 5091858ba06dSBram Moolenaar Xwindow 5092858ba06dSBram Moolenaar call assert_equal('F1|10 col 2| green', getline(1)) 5093858ba06dSBram Moolenaar call assert_equal('F1|20 col 4| blue', getline(2)) 5094858ba06dSBram Moolenaar Xclose 5095858ba06dSBram Moolenaar set efm& 5096858ba06dSBram Moolenaar set quickfixtextfunc& 5097858ba06dSBram Moolenaar 5098858ba06dSBram Moolenaar " Test for per list 'quickfixtextfunc' setting 5099858ba06dSBram Moolenaar func PerQfText(info) 5100858ba06dSBram Moolenaar if a:info.quickfix 510100e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 5102858ba06dSBram Moolenaar else 510300e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 5104858ba06dSBram Moolenaar endif 5105858ba06dSBram Moolenaar if empty(qfl) 510600e260bbSBram Moolenaar return [] 5107858ba06dSBram Moolenaar endif 510800e260bbSBram Moolenaar let l = [] 510900e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 511000e260bbSBram Moolenaar call add(l, 'Line ' .. qfl[idx].lnum .. ', Col ' .. qfl[idx].col) 511100e260bbSBram Moolenaar endfor 511200e260bbSBram Moolenaar return l 5113858ba06dSBram Moolenaar endfunc 5114858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 5115858ba06dSBram Moolenaar call g:Xsetlist([], ' ', {'quickfixtextfunc' : "PerQfText"}) 5116858ba06dSBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 5117858ba06dSBram Moolenaar Xwindow 5118858ba06dSBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 5119858ba06dSBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 5120858ba06dSBram Moolenaar Xclose 5121d43906d2SBram Moolenaar call assert_equal(function('PerQfText'), 5122d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 51237ba5a7efSBram Moolenaar " Add entries to the list when the quickfix buffer is hidden 51247ba5a7efSBram Moolenaar Xaddexpr ['F1:30:6:red'] 51257ba5a7efSBram Moolenaar Xwindow 51267ba5a7efSBram Moolenaar call assert_equal('Line 30, Col 6', getline(3)) 51277ba5a7efSBram Moolenaar Xclose 5128858ba06dSBram Moolenaar call g:Xsetlist([], 'r', {'quickfixtextfunc' : ''}) 5129d43906d2SBram Moolenaar call assert_equal('', g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 5130858ba06dSBram Moolenaar set quickfixtextfunc& 5131858ba06dSBram Moolenaar delfunc PerQfText 5132858ba06dSBram Moolenaar 5133858ba06dSBram Moolenaar " Non-existing function 5134858ba06dSBram Moolenaar set quickfixtextfunc=Tabc 5135858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 5136858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 5137858ba06dSBram Moolenaar Xclose 5138858ba06dSBram Moolenaar set quickfixtextfunc& 5139858ba06dSBram Moolenaar 5140858ba06dSBram Moolenaar " set option to a non-function 5141858ba06dSBram Moolenaar set quickfixtextfunc=[10,\ 20] 5142858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 5143858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 5144858ba06dSBram Moolenaar Xclose 5145858ba06dSBram Moolenaar set quickfixtextfunc& 5146858ba06dSBram Moolenaar 5147858ba06dSBram Moolenaar " set option to a function with different set of arguments 5148858ba06dSBram Moolenaar func Xqftext(a, b, c) 5149858ba06dSBram Moolenaar return a:a .. a:b .. a:c 5150858ba06dSBram Moolenaar endfunc 5151858ba06dSBram Moolenaar set quickfixtextfunc=Xqftext 5152858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E119:') 5153858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E119:') 5154858ba06dSBram Moolenaar Xclose 515500e260bbSBram Moolenaar 515600e260bbSBram Moolenaar " set option to a function that returns a list with non-strings 515700e260bbSBram Moolenaar func Xqftext2(d) 515800e260bbSBram Moolenaar return ['one', [], 'two'] 515900e260bbSBram Moolenaar endfunc 516000e260bbSBram Moolenaar set quickfixtextfunc=Xqftext2 516100e260bbSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue', 'F1:30:6:red']", 516200e260bbSBram Moolenaar \ 'E730:') 516300e260bbSBram Moolenaar call assert_fails('Xwindow', 'E730:') 5164d43906d2SBram Moolenaar call assert_equal(['one', 'F1|20 col 4| blue', 'F1|30 col 6| red'], 5165d43906d2SBram Moolenaar \ getline(1, '$')) 516600e260bbSBram Moolenaar Xclose 516700e260bbSBram Moolenaar 5168858ba06dSBram Moolenaar set quickfixtextfunc& 5169858ba06dSBram Moolenaar delfunc Xqftext 517000e260bbSBram Moolenaar delfunc Xqftext2 5171d43906d2SBram Moolenaar 5172d43906d2SBram Moolenaar " set the global option to a lambda function 5173d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ map(g:Xgetlist({'id'\ :\ d.id,\ 'items'\ :\ 1}).items[d.start_idx-1:d.end_idx-1],\ 'v:val.text')} 5174d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5175d43906d2SBram Moolenaar Xwindow 5176d43906d2SBram Moolenaar call assert_equal(['green', 'blue'], getline(1, '$')) 5177d43906d2SBram Moolenaar Xclose 5178d43906d2SBram Moolenaar call assert_equal("{d -> map(g:Xgetlist({'id' : d.id, 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 'v:val.text')}", &quickfixtextfunc) 5179d43906d2SBram Moolenaar set quickfixtextfunc& 5180d43906d2SBram Moolenaar 5181d43906d2SBram Moolenaar " use a lambda function that returns an empty list 5182d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ []} 5183d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5184d43906d2SBram Moolenaar Xwindow 5185d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 5186d43906d2SBram Moolenaar \ getline(1, '$')) 5187d43906d2SBram Moolenaar Xclose 5188d43906d2SBram Moolenaar set quickfixtextfunc& 5189d43906d2SBram Moolenaar 5190d43906d2SBram Moolenaar " use a lambda function that returns a list with empty strings 5191d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ ['',\ '']} 5192d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5193d43906d2SBram Moolenaar Xwindow 5194d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 5195d43906d2SBram Moolenaar \ getline(1, '$')) 5196d43906d2SBram Moolenaar Xclose 5197d43906d2SBram Moolenaar set quickfixtextfunc& 5198d43906d2SBram Moolenaar 5199d43906d2SBram Moolenaar " set the per-quickfix list text function to a lambda function 5200d43906d2SBram Moolenaar call g:Xsetlist([], ' ', 5201d43906d2SBram Moolenaar \ {'quickfixtextfunc' : 5202d43906d2SBram Moolenaar \ {d -> map(g:Xgetlist({'id' : d.id, 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 5203d43906d2SBram Moolenaar \ "'Line ' .. v:val.lnum .. ', Col ' .. v:val.col")}}) 5204d43906d2SBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 5205d43906d2SBram Moolenaar Xwindow 5206d43906d2SBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 5207d43906d2SBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 5208d43906d2SBram Moolenaar Xclose 5209d43906d2SBram Moolenaar call assert_match("function('<lambda>\\d\\+')", string(g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc)) 5210d43906d2SBram Moolenaar call g:Xsetlist([], 'f') 5211858ba06dSBram Moolenaarendfunc 5212858ba06dSBram Moolenaar 5213858ba06dSBram Moolenaarfunc Test_qftextfunc() 5214858ba06dSBram Moolenaar call Xtest_qftextfunc('c') 5215858ba06dSBram Moolenaar call Xtest_qftextfunc('l') 5216858ba06dSBram Moolenaarendfunc 5217858ba06dSBram Moolenaar 5218ec98e93aSBram Moolenaar" Running :lhelpgrep command more than once in a help window, doesn't jump to 5219ec98e93aSBram Moolenaar" the help topic 5220ec98e93aSBram Moolenaarfunc Test_lhelpgrep_from_help_window() 5221ec98e93aSBram Moolenaar call mkdir('Xtestdir/doc', 'p') 5222ec98e93aSBram Moolenaar call writefile(['window'], 'Xtestdir/doc/a.txt') 5223ec98e93aSBram Moolenaar call writefile(['buffer'], 'Xtestdir/doc/b.txt') 5224ec98e93aSBram Moolenaar let save_rtp = &rtp 5225ec98e93aSBram Moolenaar let &rtp = 'Xtestdir' 5226ec98e93aSBram Moolenaar lhelpgrep window 5227ec98e93aSBram Moolenaar lhelpgrep buffer 5228ec98e93aSBram Moolenaar call assert_equal('b.txt', fnamemodify(@%, ":p:t")) 5229ec98e93aSBram Moolenaar lhelpgrep window 5230ec98e93aSBram Moolenaar call assert_equal('a.txt', fnamemodify(@%, ":p:t")) 5231ec98e93aSBram Moolenaar let &rtp = save_rtp 5232ec98e93aSBram Moolenaar call delete('Xtestdir', 'rf') 5233ec98e93aSBram Moolenaar new | only! 5234ec98e93aSBram Moolenaarendfunc 5235ec98e93aSBram Moolenaar 5236f7c4d836SBram Moolenaar" Test for the crash fixed by 7.3.715 5237f7c4d836SBram Moolenaarfunc Test_setloclist_crash() 5238f7c4d836SBram Moolenaar %bw! 5239f7c4d836SBram Moolenaar let g:BufNum = bufnr() 5240f7c4d836SBram Moolenaar augroup QF_Test 5241f7c4d836SBram Moolenaar au! 5242f7c4d836SBram Moolenaar au BufUnload * call setloclist(0, [{'bufnr':g:BufNum, 'lnum':1, 'col':1, 'text': 'tango down'}]) 5243f7c4d836SBram Moolenaar augroup END 5244f7c4d836SBram Moolenaar 5245f7c4d836SBram Moolenaar try 5246f7c4d836SBram Moolenaar lvimgrep /.*/ *.mak 5247f7c4d836SBram Moolenaar catch /E926:/ 5248f7c4d836SBram Moolenaar endtry 5249f7c4d836SBram Moolenaar call assert_equal('tango down', getloclist(0, {'items' : 0}).items[0].text) 5250f7c4d836SBram Moolenaar call assert_equal(1, getloclist(0, {'size' : 0}).size) 5251f7c4d836SBram Moolenaar 5252f7c4d836SBram Moolenaar augroup QF_Test 5253f7c4d836SBram Moolenaar au! 5254f7c4d836SBram Moolenaar augroup END 5255f7c4d836SBram Moolenaar unlet g:BufNum 5256f7c4d836SBram Moolenaar %bw! 5257f7c4d836SBram Moolenaarendfunc 5258f7c4d836SBram Moolenaar 52592ce77903SBram Moolenaar" Test for adding an invalid entry with the quickfix window open and making 52602ce77903SBram Moolenaar" sure that the window contents are not changed 52612ce77903SBram Moolenaarfunc Test_add_invalid_entry_with_qf_window() 52622ce77903SBram Moolenaar call setqflist([], 'f') 52632ce77903SBram Moolenaar cexpr "Xfile1:10:aa" 52642ce77903SBram Moolenaar copen 52652ce77903SBram Moolenaar call setqflist(['bb'], 'a') 52662ce77903SBram Moolenaar call assert_equal(1, line('$')) 52672ce77903SBram Moolenaar call assert_equal(['Xfile1|10| aa'], getline(1, '$')) 52682ce77903SBram Moolenaar call assert_equal([{'lnum': 10, 'bufnr': bufnr('Xfile1'), 'col': 0, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': -1, 'type': '', 'module': '', 'text': 'aa'}], getqflist()) 52692ce77903SBram Moolenaar cclose 52702ce77903SBram Moolenaarendfunc 52712ce77903SBram Moolenaar 52729e40c4b1SBram Moolenaar" Test for very weird problem: autocommand causes a failure, resulting opening 52739e40c4b1SBram Moolenaar" the quickfix window to fail. This still splits the window, but otherwise 52749e40c4b1SBram Moolenaar" should not mess up buffers. 52759e40c4b1SBram Moolenaarfunc Test_quickfix_window_fails_to_open() 52769e40c4b1SBram Moolenaar CheckScreendump 52779e40c4b1SBram Moolenaar 52789e40c4b1SBram Moolenaar let lines =<< trim END 52799e40c4b1SBram Moolenaar anything 52809e40c4b1SBram Moolenaar try 52819e40c4b1SBram Moolenaar anything 52829e40c4b1SBram Moolenaar endtry 52839e40c4b1SBram Moolenaar END 52849e40c4b1SBram Moolenaar call writefile(lines, 'XquickfixFails') 52859e40c4b1SBram Moolenaar 52869e40c4b1SBram Moolenaar let lines =<< trim END 52879e40c4b1SBram Moolenaar split XquickfixFails 52889e40c4b1SBram Moolenaar silent vimgrep anything % 52899e40c4b1SBram Moolenaar normal o 52909e40c4b1SBram Moolenaar au BufLeave * ++once source XquickfixFails 52919e40c4b1SBram Moolenaar " This will trigger the autocommand, which causes an error, what follows 52929e40c4b1SBram Moolenaar " is aborted but the window was already split. 52939e40c4b1SBram Moolenaar silent! cwindow 52949e40c4b1SBram Moolenaar END 52959e40c4b1SBram Moolenaar call writefile(lines, 'XtestWinFails') 52969e40c4b1SBram Moolenaar let buf = RunVimInTerminal('-S XtestWinFails', #{rows: 13}) 52979e40c4b1SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_window_fails', {}) 52989e40c4b1SBram Moolenaar 52999e40c4b1SBram Moolenaar " clean up 53009e40c4b1SBram Moolenaar call term_sendkeys(buf, ":bwipe!\<CR>") 53019e40c4b1SBram Moolenaar call term_wait(buf) 53029e40c4b1SBram Moolenaar call StopVimInTerminal(buf) 53039e40c4b1SBram Moolenaar call delete('XtestWinFails') 53049e40c4b1SBram Moolenaar call delete('XquickfixFails') 53059e40c4b1SBram Moolenaarendfunc 53069e40c4b1SBram Moolenaar 53072d870f8dSBram Moolenaar" Test for updating the quickfix buffer whenever the associated quickfix list 5308287153c5SBram Moolenaar" is changed. 5309287153c5SBram Moolenaarfunc Xqfbuf_update(cchar) 5310287153c5SBram Moolenaar call s:setup_commands(a:cchar) 5311287153c5SBram Moolenaar 5312287153c5SBram Moolenaar Xexpr "F1:1:line1" 5313287153c5SBram Moolenaar Xopen 5314287153c5SBram Moolenaar call assert_equal(['F1|1| line1'], getline(1, '$')) 5315287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5316287153c5SBram Moolenaar 5317287153c5SBram Moolenaar " Test setqflist() using the 'lines' key in 'what' 5318287153c5SBram Moolenaar " add a new entry 5319287153c5SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ['F2:2: line2']}) 5320287153c5SBram Moolenaar call assert_equal(['F1|1| line1', 'F2|2| line2'], getline(1, '$')) 5321287153c5SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 5322287153c5SBram Moolenaar " replace all the entries with a single entry 5323287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ['F3:3: line3']}) 5324287153c5SBram Moolenaar call assert_equal(['F3|3| line3'], getline(1, '$')) 5325287153c5SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 5326287153c5SBram Moolenaar " remove all the entries 5327287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : []}) 5328287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5329287153c5SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 5330287153c5SBram Moolenaar " add a new list 5331287153c5SBram Moolenaar call g:Xsetlist([], ' ', {'lines' : ['F4:4: line4']}) 5332287153c5SBram Moolenaar call assert_equal(['F4|4| line4'], getline(1, '$')) 5333287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5334287153c5SBram Moolenaar 5335287153c5SBram Moolenaar " Test setqflist() using the 'items' key in 'what' 5336287153c5SBram Moolenaar " add a new entry 5337287153c5SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename' : 'F5', 'lnum' : 5, 'text' : 'line5'}]}) 5338287153c5SBram Moolenaar call assert_equal(['F4|4| line4', 'F5|5| line5'], getline(1, '$')) 5339287153c5SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 5340287153c5SBram Moolenaar " replace all the entries with a single entry 5341287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F6', 'lnum' : 6, 'text' : 'line6'}]}) 5342287153c5SBram Moolenaar call assert_equal(['F6|6| line6'], getline(1, '$')) 5343287153c5SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 5344287153c5SBram Moolenaar " remove all the entries 5345287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 5346287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5347287153c5SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 5348287153c5SBram Moolenaar " add a new list 5349287153c5SBram Moolenaar call g:Xsetlist([], ' ', {'items' : [{'filename' : 'F7', 'lnum' : 7, 'text' : 'line7'}]}) 5350287153c5SBram Moolenaar call assert_equal(['F7|7| line7'], getline(1, '$')) 5351287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5352287153c5SBram Moolenaar 5353287153c5SBram Moolenaar call g:Xsetlist([], ' ', {}) 5354287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5355287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5356287153c5SBram Moolenaar 5357287153c5SBram Moolenaar Xclose 5358287153c5SBram Moolenaarendfunc 5359287153c5SBram Moolenaar 5360287153c5SBram Moolenaarfunc Test_qfbuf_update() 5361287153c5SBram Moolenaar call Xqfbuf_update('c') 5362287153c5SBram Moolenaar call Xqfbuf_update('l') 5363287153c5SBram Moolenaarendfunc 5364287153c5SBram Moolenaar 53658c801b37SBram Moolenaarfunc Test_vimgrep_noswapfile() 53668c801b37SBram Moolenaar set noswapfile 53678c801b37SBram Moolenaar call writefile(['one', 'two', 'three'], 'Xgreppie') 53688c801b37SBram Moolenaar vimgrep two Xgreppie 53698c801b37SBram Moolenaar call assert_equal('two', getline('.')) 53708c801b37SBram Moolenaar 53718c801b37SBram Moolenaar call delete('Xgreppie') 53728c801b37SBram Moolenaar set swapfile 53738c801b37SBram Moolenaarendfunc 53748c801b37SBram Moolenaar 5375*bb01a1efSYegappan Lakshmanan" Test for the :vimgrep 'f' flag (fuzzy match) 5376*bb01a1efSYegappan Lakshmananfunc Xvimgrep_fuzzy_match(cchar) 5377*bb01a1efSYegappan Lakshmanan call s:setup_commands(a:cchar) 5378*bb01a1efSYegappan Lakshmanan 5379*bb01a1efSYegappan Lakshmanan Xvimgrep /three one/f Xfile* 5380*bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5381*bb01a1efSYegappan Lakshmanan call assert_equal(2, len(l)) 5382*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 1, 9, 'one two three'], 5383*bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5384*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 2, 1, 'three one two'], 5385*bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5386*bb01a1efSYegappan Lakshmanan 5387*bb01a1efSYegappan Lakshmanan Xvimgrep /the/f Xfile* 5388*bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5389*bb01a1efSYegappan Lakshmanan call assert_equal(3, len(l)) 5390*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 1, 9, 'one two three'], 5391*bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5392*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 2, 1, 'three one two'], 5393*bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5394*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 4, 'aaathreeaaa'], 5395*bb01a1efSYegappan Lakshmanan \ [bufname(l[2].bufnr), l[2].lnum, l[2].col, l[2].text]) 5396*bb01a1efSYegappan Lakshmanan 5397*bb01a1efSYegappan Lakshmanan Xvimgrep /aaa/fg Xfile* 5398*bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5399*bb01a1efSYegappan Lakshmanan call assert_equal(4, len(l)) 5400*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 2, 1, 'aaaaaa'], 5401*bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5402*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 2, 4, 'aaaaaa'], 5403*bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5404*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 1, 'aaathreeaaa'], 5405*bb01a1efSYegappan Lakshmanan \ [bufname(l[2].bufnr), l[2].lnum, l[2].col, l[2].text]) 5406*bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 9, 'aaathreeaaa'], 5407*bb01a1efSYegappan Lakshmanan \ [bufname(l[3].bufnr), l[3].lnum, l[3].col, l[3].text]) 5408*bb01a1efSYegappan Lakshmanan 5409*bb01a1efSYegappan Lakshmanan call assert_fails('Xvimgrep /xyz/fg Xfile*', 'E480:') 5410*bb01a1efSYegappan Lakshmananendfunc 5411*bb01a1efSYegappan Lakshmanan 5412*bb01a1efSYegappan Lakshmananfunc Test_vimgrep_fuzzy_match() 5413*bb01a1efSYegappan Lakshmanan call writefile(['one two three', 'aaaaaa'], 'Xfile1') 5414*bb01a1efSYegappan Lakshmanan call writefile(['one', 'three one two', 'two', 'aaathreeaaa'], 'Xfile2') 5415*bb01a1efSYegappan Lakshmanan call Xvimgrep_fuzzy_match('c') 5416*bb01a1efSYegappan Lakshmanan call Xvimgrep_fuzzy_match('l') 5417*bb01a1efSYegappan Lakshmanan call delete('Xfile1') 5418*bb01a1efSYegappan Lakshmanan call delete('Xfile2') 5419*bb01a1efSYegappan Lakshmananendfunc 5420*bb01a1efSYegappan Lakshmanan 54216a0cc916SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 5422