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> 35f9ae154cSBram Moolenaar command! -count -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> 72f9ae154cSBram Moolenaar command! -count -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' 264da59dd5dSBram Moolenaar \ && winheight('.') == 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 && 270da59dd5dSBram Moolenaar \ winheight('.') == 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 362049cba9eSBram 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:') 5050fcc7c6dSBram Moolenaar call assert_fails('Xprev', 'E553') 5060fcc7c6dSBram 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('.')) 5290fcc7c6dSBram Moolenaar call assert_fails('Xnext', 'E553') 5300fcc7c6dSBram 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 7056920c72dSBram Moolenaarfunc Test_errortitle() 7066920c72dSBram Moolenaar augroup QfBufWinEnter 7076920c72dSBram Moolenaar au! 7086920c72dSBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7096920c72dSBram Moolenaar augroup END 7106920c72dSBram Moolenaar copen 7116920c72dSBram 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'')'}] 7126920c72dSBram Moolenaar call setqflist(a) 7136920c72dSBram Moolenaar call assert_equal(':setqflist()', g:a) 7146920c72dSBram Moolenaar augroup QfBufWinEnter 7156920c72dSBram Moolenaar au! 7166920c72dSBram Moolenaar augroup END 7176920c72dSBram Moolenaar augroup! QfBufWinEnter 7186920c72dSBram Moolenaarendfunc 719e27dba49SBram Moolenaar 7205584df65SBram Moolenaarfunc Test_vimgreptitle() 7215584df65SBram Moolenaar augroup QfBufWinEnter 7225584df65SBram Moolenaar au! 7235584df65SBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7245584df65SBram Moolenaar augroup END 7255584df65SBram Moolenaar try 7265584df65SBram Moolenaar vimgrep /pattern/j file 7275584df65SBram Moolenaar catch /E480/ 7285584df65SBram Moolenaar endtry 7295584df65SBram Moolenaar copen 7305584df65SBram Moolenaar call assert_equal(': vimgrep /pattern/j file', g:a) 7315584df65SBram Moolenaar augroup QfBufWinEnter 7325584df65SBram Moolenaar au! 7335584df65SBram Moolenaar augroup END 7345584df65SBram Moolenaar augroup! QfBufWinEnter 7355584df65SBram Moolenaarendfunc 7365584df65SBram Moolenaar 7372b946c9fSBram Moolenaarfunc XqfTitleTests(cchar) 7383ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 739e27dba49SBram Moolenaar 7403ef5bf7dSBram Moolenaar Xgetexpr ['file:1:1:message'] 7413ef5bf7dSBram Moolenaar let l = g:Xgetlist() 742e27dba49SBram Moolenaar if a:cchar == 'c' 743e27dba49SBram Moolenaar call setqflist(l, 'r') 744e27dba49SBram Moolenaar else 745e27dba49SBram Moolenaar call setloclist(0, l, 'r') 746e27dba49SBram Moolenaar endif 747e27dba49SBram Moolenaar 7483ef5bf7dSBram Moolenaar Xopen 749e27dba49SBram Moolenaar if a:cchar == 'c' 750e27dba49SBram Moolenaar let title = ':setqflist()' 751e27dba49SBram Moolenaar else 752e27dba49SBram Moolenaar let title = ':setloclist()' 753e27dba49SBram Moolenaar endif 754e27dba49SBram Moolenaar call assert_equal(title, w:quickfix_title) 7553ef5bf7dSBram Moolenaar Xclose 7562b946c9fSBram Moolenaarendfunc 757e27dba49SBram Moolenaar 758e27dba49SBram Moolenaar" Tests for quickfix window's title 7592b946c9fSBram Moolenaarfunc Test_qf_title() 760e27dba49SBram Moolenaar call XqfTitleTests('c') 761e27dba49SBram Moolenaar call XqfTitleTests('l') 7622b946c9fSBram Moolenaarendfunc 763e27dba49SBram Moolenaar 764e27dba49SBram Moolenaar" Tests for 'errorformat' 7652b946c9fSBram Moolenaarfunc Test_efm() 766e27dba49SBram Moolenaar let save_efm = &efm 767e27dba49SBram Moolenaar set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%# 768e27dba49SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 769e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 770e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 771e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC'] 772e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 773e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 774e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY'] 775e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 776e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l) 777e27dba49SBram Moolenaar let &efm = save_efm 7782b946c9fSBram Moolenaarendfunc 7791ff2b64bSBram Moolenaar 7801ff2b64bSBram Moolenaar" This will test for problems in quickfix: 7811ff2b64bSBram Moolenaar" A. incorrectly copying location lists which caused the location list to show 7821ff2b64bSBram Moolenaar" a different name than the file that was actually being displayed. 7831ff2b64bSBram Moolenaar" B. not reusing the window for which the location list window is opened but 7841ff2b64bSBram Moolenaar" instead creating new windows. 7851ff2b64bSBram Moolenaar" C. make sure that the location list window is not reused instead of the 7861ff2b64bSBram Moolenaar" window it belongs to. 7871ff2b64bSBram Moolenaar" 7881ff2b64bSBram Moolenaar" Set up the test environment: 7892b946c9fSBram Moolenaarfunc ReadTestProtocol(name) 7901ff2b64bSBram Moolenaar let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '') 7911ff2b64bSBram Moolenaar let word = substitute(base, '\v(.*)\..*', '\1', '') 7921ff2b64bSBram Moolenaar 7931ff2b64bSBram Moolenaar setl modifiable 7941ff2b64bSBram Moolenaar setl noreadonly 7951ff2b64bSBram Moolenaar setl noswapfile 7961ff2b64bSBram Moolenaar setl bufhidden=delete 7971ff2b64bSBram Moolenaar %del _ 7981ff2b64bSBram Moolenaar " For problem 2: 7991ff2b64bSBram Moolenaar " 'buftype' has to be set to reproduce the constant opening of new windows 8001ff2b64bSBram Moolenaar setl buftype=nofile 8011ff2b64bSBram Moolenaar 8021ff2b64bSBram Moolenaar call setline(1, word) 8031ff2b64bSBram Moolenaar 8041ff2b64bSBram Moolenaar setl nomodified 8051ff2b64bSBram Moolenaar setl nomodifiable 8061ff2b64bSBram Moolenaar setl readonly 8071ff2b64bSBram Moolenaar exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '') 8082b946c9fSBram Moolenaarendfunc 8091ff2b64bSBram Moolenaar 8102b946c9fSBram Moolenaarfunc Test_locationlist() 8111ff2b64bSBram Moolenaar enew 8121ff2b64bSBram Moolenaar 8131ff2b64bSBram Moolenaar augroup testgroup 8141ff2b64bSBram Moolenaar au! 8151ff2b64bSBram Moolenaar autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>")) 8161ff2b64bSBram Moolenaar augroup END 8171ff2b64bSBram Moolenaar 8181ff2b64bSBram Moolenaar let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ] 8191ff2b64bSBram Moolenaar 8201ff2b64bSBram Moolenaar let qflist = [] 8211ff2b64bSBram Moolenaar for word in words 8221ff2b64bSBram Moolenaar call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', }) 8231ff2b64bSBram Moolenaar " NOTE: problem 1: 8241ff2b64bSBram Moolenaar " intentionally not setting 'lnum' so that the quickfix entries are not 8251ff2b64bSBram Moolenaar " valid 826aad222c9SBram Moolenaar eval qflist->setloclist(0, ' ') 8271ff2b64bSBram Moolenaar endfor 8281ff2b64bSBram Moolenaar 8291ff2b64bSBram Moolenaar " Test A 8301ff2b64bSBram Moolenaar lrewind 8311ff2b64bSBram Moolenaar enew 8321ff2b64bSBram Moolenaar lopen 83399895eacSBram Moolenaar 4lnext 8341ff2b64bSBram Moolenaar vert split 8351ff2b64bSBram Moolenaar wincmd L 8361ff2b64bSBram Moolenaar lopen 8371ff2b64bSBram Moolenaar wincmd p 8381ff2b64bSBram Moolenaar lnext 8391ff2b64bSBram Moolenaar let fileName = expand("%") 8401ff2b64bSBram Moolenaar wincmd p 8411ff2b64bSBram Moolenaar let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '') 8421ff2b64bSBram Moolenaar let fileName = substitute(fileName, '\\', '/', 'g') 8431ff2b64bSBram Moolenaar let locationListFileName = substitute(locationListFileName, '\\', '/', 'g') 8441ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", fileName) 8451ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", locationListFileName) 8461ff2b64bSBram Moolenaar 8471ff2b64bSBram Moolenaar wincmd n | only 8481ff2b64bSBram Moolenaar 8491ff2b64bSBram Moolenaar " Test B: 8501ff2b64bSBram Moolenaar lrewind 8511ff2b64bSBram Moolenaar lopen 8521ff2b64bSBram Moolenaar 2 8531ff2b64bSBram Moolenaar exe "normal \<CR>" 8541ff2b64bSBram Moolenaar wincmd p 8551ff2b64bSBram Moolenaar 3 8561ff2b64bSBram Moolenaar exe "normal \<CR>" 8571ff2b64bSBram Moolenaar wincmd p 8581ff2b64bSBram Moolenaar 4 8591ff2b64bSBram Moolenaar exe "normal \<CR>" 8601ff2b64bSBram Moolenaar call assert_equal(2, winnr('$')) 8611ff2b64bSBram Moolenaar wincmd n | only 8621ff2b64bSBram Moolenaar 8631ff2b64bSBram Moolenaar " Test C: 8641ff2b64bSBram Moolenaar lrewind 8651ff2b64bSBram Moolenaar lopen 8661ff2b64bSBram Moolenaar " Let's move the location list window to the top to check whether it (the 8671ff2b64bSBram Moolenaar " first window found) will be reused when we try to open new windows: 8681ff2b64bSBram Moolenaar wincmd K 8691ff2b64bSBram Moolenaar 2 8701ff2b64bSBram Moolenaar exe "normal \<CR>" 8711ff2b64bSBram Moolenaar wincmd p 8721ff2b64bSBram Moolenaar 3 8731ff2b64bSBram Moolenaar exe "normal \<CR>" 8741ff2b64bSBram Moolenaar wincmd p 8751ff2b64bSBram Moolenaar 4 8761ff2b64bSBram Moolenaar exe "normal \<CR>" 8771ff2b64bSBram Moolenaar 1wincmd w 8781ff2b64bSBram Moolenaar call assert_equal('quickfix', &buftype) 8791ff2b64bSBram Moolenaar 2wincmd w 8801ff2b64bSBram Moolenaar let bufferName = expand("%") 8811ff2b64bSBram Moolenaar let bufferName = substitute(bufferName, '\\', '/', 'g') 8821ff2b64bSBram Moolenaar call assert_equal('test://quux.txt', bufferName) 8831ff2b64bSBram Moolenaar 8841ff2b64bSBram Moolenaar wincmd n | only 8851ff2b64bSBram Moolenaar 8861ff2b64bSBram Moolenaar augroup! testgroup 8872b946c9fSBram Moolenaarendfunc 8880899d698SBram Moolenaar 8892b946c9fSBram Moolenaarfunc Test_locationlist_curwin_was_closed() 8900899d698SBram Moolenaar augroup testgroup 8910899d698SBram Moolenaar au! 892d106e5baSBram Moolenaar autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>")) 8930899d698SBram Moolenaar augroup END 8940899d698SBram Moolenaar 8952b946c9fSBram Moolenaar func! R(n) 8960899d698SBram Moolenaar quit 8970899d698SBram Moolenaar endfunc 8980899d698SBram Moolenaar 8990899d698SBram Moolenaar new 9000899d698SBram Moolenaar let q = [] 901d106e5baSBram Moolenaar call add(q, {'filename': 'test_curwin.txt' }) 9020899d698SBram Moolenaar call setloclist(0, q) 9030899d698SBram Moolenaar call assert_fails('lrewind', 'E924:') 9040899d698SBram Moolenaar 9050899d698SBram Moolenaar augroup! testgroup 9062b946c9fSBram Moolenaarendfunc 9077eba3d2cSBram Moolenaar 9082b946c9fSBram Moolenaarfunc Test_locationlist_cross_tab_jump() 9090a9046fbSBram Moolenaar call writefile(['loclistfoo'], 'loclistfoo') 9100a9046fbSBram Moolenaar call writefile(['loclistbar'], 'loclistbar') 9110a9046fbSBram Moolenaar set switchbuf=usetab 9120a9046fbSBram Moolenaar 9130a9046fbSBram Moolenaar edit loclistfoo 9140a9046fbSBram Moolenaar tabedit loclistbar 9150a9046fbSBram Moolenaar silent lgrep loclistfoo loclist* 9160a9046fbSBram Moolenaar call assert_equal(1, tabpagenr()) 9170a9046fbSBram Moolenaar 9180a9046fbSBram Moolenaar enew | only | tabonly 9190a9046fbSBram Moolenaar set switchbuf&vim 9200a9046fbSBram Moolenaar call delete('loclistfoo') 9210a9046fbSBram Moolenaar call delete('loclistbar') 9222b946c9fSBram Moolenaarendfunc 9230a9046fbSBram Moolenaar 9247eba3d2cSBram Moolenaar" More tests for 'errorformat' 9252b946c9fSBram Moolenaarfunc Test_efm1() 9267eba3d2cSBram Moolenaar if !has('unix') 9277eba3d2cSBram Moolenaar " The 'errorformat' setting is different on non-Unix systems. 9287eba3d2cSBram Moolenaar " This test works only on Unix-like systems. 9297eba3d2cSBram Moolenaar return 9307eba3d2cSBram Moolenaar endif 9317eba3d2cSBram Moolenaar 932c79745a8SBram Moolenaar let l =<< trim [DATA] 933c79745a8SBram Moolenaar "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set. 934c79745a8SBram Moolenaar "Xtestfile", line 6 col 19; this is an error 935c79745a8SBram Moolenaar gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c 936c79745a8SBram Moolenaar Xtestfile:9: parse error before `asd' 937c79745a8SBram Moolenaar make: *** [vim] Error 1 938c79745a8SBram Moolenaar in file "Xtestfile" linenr 10: there is an error 939c79745a8SBram Moolenaar 940c79745a8SBram Moolenaar 2 returned 941c79745a8SBram Moolenaar "Xtestfile", line 11 col 1; this is an error 942c79745a8SBram Moolenaar "Xtestfile", line 12 col 2; this is another error 943c79745a8SBram Moolenaar "Xtestfile", line 14:10; this is an error in column 10 944c79745a8SBram Moolenaar =Xtestfile=, line 15:10; this is another error, but in vcol 10 this time 945c79745a8SBram Moolenaar "Xtestfile", linenr 16: yet another problem 946c79745a8SBram Moolenaar Error in "Xtestfile" at line 17: 947c79745a8SBram Moolenaar x should be a dot 948c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 949c79745a8SBram Moolenaar ^ 950c79745a8SBram Moolenaar Error in "Xtestfile" at line 18: 951c79745a8SBram Moolenaar x should be a dot 952c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 953c79745a8SBram Moolenaar .............^ 954c79745a8SBram Moolenaar Error in "Xtestfile" at line 19: 955c79745a8SBram Moolenaar x should be a dot 956c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 957c79745a8SBram Moolenaar --------------^ 958c79745a8SBram Moolenaar Error in "Xtestfile" at line 20: 959c79745a8SBram Moolenaar x should be a dot 960c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 961c79745a8SBram Moolenaar ^ 962c79745a8SBram Moolenaar 963c79745a8SBram Moolenaar Does anyone know what is the problem and how to correction it? 964c79745a8SBram Moolenaar "Xtestfile", line 21 col 9: What is the title of the quickfix window? 965c79745a8SBram Moolenaar "Xtestfile", line 22 col 9: What is the title of the quickfix window? 966c79745a8SBram Moolenaar [DATA] 9677eba3d2cSBram Moolenaar 9687eba3d2cSBram Moolenaar call writefile(l, 'Xerrorfile1') 9697eba3d2cSBram Moolenaar call writefile(l[:-2], 'Xerrorfile2') 9707eba3d2cSBram Moolenaar 971e7eb9270SBram Moolenaar let m =<< [DATA] 972c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2 973c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3 974c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4 975c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5 976c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6 977c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7 978c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8 979c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9 980c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10 981c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11 982c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12 983c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13 984c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14 985c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15 986c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16 987c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 988c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 989c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 990c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 991c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21 992c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22 993c79745a8SBram Moolenaar[DATA] 9947eba3d2cSBram Moolenaar call writefile(m, 'Xtestfile') 9957eba3d2cSBram Moolenaar 9967eba3d2cSBram Moolenaar let save_efm = &efm 9977eba3d2cSBram Moolenaar set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m 9987eba3d2cSBram Moolenaar set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m 9997eba3d2cSBram Moolenaar 10007eba3d2cSBram Moolenaar exe 'cf Xerrorfile2' 10017eba3d2cSBram Moolenaar clast 10027eba3d2cSBram Moolenaar copen 10037eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile2', w:quickfix_title) 10047eba3d2cSBram Moolenaar wincmd p 10057eba3d2cSBram Moolenaar 10067eba3d2cSBram Moolenaar exe 'cf Xerrorfile1' 10077eba3d2cSBram Moolenaar call assert_equal([4, 12], [line('.'), col('.')]) 10087eba3d2cSBram Moolenaar cn 10097eba3d2cSBram Moolenaar call assert_equal([6, 19], [line('.'), col('.')]) 10107eba3d2cSBram Moolenaar cn 10117eba3d2cSBram Moolenaar call assert_equal([9, 2], [line('.'), col('.')]) 10127eba3d2cSBram Moolenaar cn 10137eba3d2cSBram Moolenaar call assert_equal([10, 2], [line('.'), col('.')]) 10147eba3d2cSBram Moolenaar cn 10157eba3d2cSBram Moolenaar call assert_equal([11, 1], [line('.'), col('.')]) 10167eba3d2cSBram Moolenaar cn 10177eba3d2cSBram Moolenaar call assert_equal([12, 2], [line('.'), col('.')]) 10187eba3d2cSBram Moolenaar cn 10197eba3d2cSBram Moolenaar call assert_equal([14, 10], [line('.'), col('.')]) 10207eba3d2cSBram Moolenaar cn 10217eba3d2cSBram Moolenaar call assert_equal([15, 3, 10], [line('.'), col('.'), virtcol('.')]) 10227eba3d2cSBram Moolenaar cn 10237eba3d2cSBram Moolenaar call assert_equal([16, 2], [line('.'), col('.')]) 10247eba3d2cSBram Moolenaar cn 10257eba3d2cSBram Moolenaar call assert_equal([17, 6], [line('.'), col('.')]) 10267eba3d2cSBram Moolenaar cn 10277eba3d2cSBram Moolenaar call assert_equal([18, 7], [line('.'), col('.')]) 10287eba3d2cSBram Moolenaar cn 10297eba3d2cSBram Moolenaar call assert_equal([19, 8], [line('.'), col('.')]) 10307eba3d2cSBram Moolenaar cn 10317eba3d2cSBram Moolenaar call assert_equal([20, 9], [line('.'), col('.')]) 10327eba3d2cSBram Moolenaar clast 10337eba3d2cSBram Moolenaar cprev 10347eba3d2cSBram Moolenaar cprev 10357eba3d2cSBram Moolenaar wincmd w 10367eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile1', w:quickfix_title) 10377eba3d2cSBram Moolenaar wincmd p 10387eba3d2cSBram Moolenaar 10397eba3d2cSBram Moolenaar let &efm = save_efm 10407eba3d2cSBram Moolenaar call delete('Xerrorfile1') 10417eba3d2cSBram Moolenaar call delete('Xerrorfile2') 10427eba3d2cSBram Moolenaar call delete('Xtestfile') 10432b946c9fSBram Moolenaarendfunc 1044ffec3c53SBram Moolenaar 1045ab47c61fSBram Moolenaar" Test for quickfix directory stack support 10462b946c9fSBram Moolenaarfunc s:dir_stack_tests(cchar) 104738df43bdSBram Moolenaar call s:setup_commands(a:cchar) 104838df43bdSBram Moolenaar 1049ab47c61fSBram Moolenaar let save_efm=&efm 1050ab47c61fSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 1051ab47c61fSBram Moolenaar 1052361c8f0eSBram Moolenaar let lines = ["Entering dir 'dir1/a'", 1053361c8f0eSBram Moolenaar \ 'habits2.txt:1:Nine Healthy Habits', 1054361c8f0eSBram Moolenaar \ "Entering dir 'b'", 1055361c8f0eSBram Moolenaar \ 'habits3.txt:2:0 Hours of television', 1056361c8f0eSBram Moolenaar \ 'habits2.txt:7:5 Small meals', 1057361c8f0eSBram Moolenaar \ "Entering dir 'dir1/c'", 1058361c8f0eSBram Moolenaar \ 'habits4.txt:3:1 Hour of exercise', 1059361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/c'", 1060361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/a'", 1061361c8f0eSBram Moolenaar \ 'habits1.txt:4:2 Liters of water', 1062361c8f0eSBram Moolenaar \ "Entering dir 'dir2'", 1063361c8f0eSBram Moolenaar \ 'habits5.txt:5:3 Cups of hot green tea', 1064361c8f0eSBram Moolenaar \ "Leaving dir 'dir2'" 1065361c8f0eSBram Moolenaar \] 1066ab47c61fSBram Moolenaar 1067361c8f0eSBram Moolenaar Xexpr "" 1068361c8f0eSBram Moolenaar for l in lines 1069361c8f0eSBram Moolenaar Xaddexpr l 1070361c8f0eSBram Moolenaar endfor 1071ab47c61fSBram Moolenaar 10723ef5bf7dSBram Moolenaar let qf = g:Xgetlist() 1073ab47c61fSBram Moolenaar 1074ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr)) 1075ab47c61fSBram Moolenaar call assert_equal(1, qf[1].lnum) 1076ab47c61fSBram Moolenaar call assert_equal('dir1/a/b/habits3.txt', bufname(qf[3].bufnr)) 1077ab47c61fSBram Moolenaar call assert_equal(2, qf[3].lnum) 1078ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[4].bufnr)) 1079ab47c61fSBram Moolenaar call assert_equal(7, qf[4].lnum) 1080ab47c61fSBram Moolenaar call assert_equal('dir1/c/habits4.txt', bufname(qf[6].bufnr)) 1081ab47c61fSBram Moolenaar call assert_equal(3, qf[6].lnum) 1082ab47c61fSBram Moolenaar call assert_equal('habits1.txt', bufname(qf[9].bufnr)) 1083ab47c61fSBram Moolenaar call assert_equal(4, qf[9].lnum) 1084ab47c61fSBram Moolenaar call assert_equal('dir2/habits5.txt', bufname(qf[11].bufnr)) 1085ab47c61fSBram Moolenaar call assert_equal(5, qf[11].lnum) 1086ab47c61fSBram Moolenaar 1087ab47c61fSBram Moolenaar let &efm=save_efm 10882b946c9fSBram Moolenaarendfunc 1089ab47c61fSBram Moolenaar 1090ab47c61fSBram Moolenaar" Tests for %D and %X errorformat options 10912b946c9fSBram Moolenaarfunc Test_efm_dirstack() 1092ab47c61fSBram Moolenaar " Create the directory stack and files 1093ab47c61fSBram Moolenaar call mkdir('dir1') 1094ab47c61fSBram Moolenaar call mkdir('dir1/a') 1095ab47c61fSBram Moolenaar call mkdir('dir1/a/b') 1096ab47c61fSBram Moolenaar call mkdir('dir1/c') 1097ab47c61fSBram Moolenaar call mkdir('dir2') 1098ab47c61fSBram Moolenaar 1099ab47c61fSBram Moolenaar let lines = ["Nine Healthy Habits", 1100ab47c61fSBram Moolenaar \ "0 Hours of television", 1101ab47c61fSBram Moolenaar \ "1 Hour of exercise", 1102ab47c61fSBram Moolenaar \ "2 Liters of water", 1103ab47c61fSBram Moolenaar \ "3 Cups of hot green tea", 1104ab47c61fSBram Moolenaar \ "4 Short mental breaks", 1105ab47c61fSBram Moolenaar \ "5 Small meals", 1106ab47c61fSBram Moolenaar \ "6 AM wake up time", 1107ab47c61fSBram Moolenaar \ "7 Minutes of laughter", 1108ab47c61fSBram Moolenaar \ "8 Hours of sleep (at least)", 1109ab47c61fSBram Moolenaar \ "9 PM end of the day and off to bed" 1110ab47c61fSBram Moolenaar \ ] 1111ab47c61fSBram Moolenaar call writefile(lines, 'habits1.txt') 1112ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/habits2.txt') 1113ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/b/habits3.txt') 1114ab47c61fSBram Moolenaar call writefile(lines, 'dir1/c/habits4.txt') 1115ab47c61fSBram Moolenaar call writefile(lines, 'dir2/habits5.txt') 1116ab47c61fSBram Moolenaar 1117ab47c61fSBram Moolenaar call s:dir_stack_tests('c') 1118ab47c61fSBram Moolenaar call s:dir_stack_tests('l') 1119ab47c61fSBram Moolenaar 1120ab47c61fSBram Moolenaar call delete('dir1', 'rf') 1121ab47c61fSBram Moolenaar call delete('dir2', 'rf') 1122ab47c61fSBram Moolenaar call delete('habits1.txt') 11232b946c9fSBram Moolenaarendfunc 1124ab47c61fSBram Moolenaar 11259b457948SBram Moolenaar" Test for resync after continuing an ignored message 11262b946c9fSBram Moolenaarfunc Xefm_ignore_continuations(cchar) 11279b457948SBram Moolenaar call s:setup_commands(a:cchar) 11289b457948SBram Moolenaar 11299b457948SBram Moolenaar let save_efm = &efm 11309b457948SBram Moolenaar 11319b457948SBram Moolenaar let &efm = 11329b457948SBram Moolenaar \ '%Eerror %m %l,' . 11339b457948SBram Moolenaar \ '%-Wignored %m %l,' . 11349b457948SBram Moolenaar \ '%+Cmore ignored %m %l,' . 11359b457948SBram Moolenaar \ '%Zignored end' 11369b457948SBram Moolenaar Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4'] 11379b457948SBram Moolenaar let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]') 11389b457948SBram Moolenaar call assert_equal([['resync', 1, 4, 'E']], l) 11399b457948SBram Moolenaar 11409b457948SBram Moolenaar let &efm = save_efm 11412b946c9fSBram Moolenaarendfunc 11429b457948SBram Moolenaar 11432b946c9fSBram Moolenaarfunc Test_efm_ignore_continuations() 11449b457948SBram Moolenaar call Xefm_ignore_continuations('c') 11459b457948SBram Moolenaar call Xefm_ignore_continuations('l') 11462b946c9fSBram Moolenaarendfunc 11479b457948SBram Moolenaar 11480fcc7c6dSBram Moolenaar" Tests for invalid error format specifies 11492b946c9fSBram Moolenaarfunc Xinvalid_efm_Tests(cchar) 11500fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 11510fcc7c6dSBram Moolenaar 1152049cba9eSBram Moolenaar let save_efm = &efm 1153049cba9eSBram Moolenaar 11540fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%f:%l:%m 11550fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:') 11560fcc7c6dSBram Moolenaar 11570fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%r:%m 11580fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 11590fcc7c6dSBram Moolenaar 11600fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%O:%f:%l:%m 11610fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 11620fcc7c6dSBram Moolenaar 11630fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*[^a-z 11640fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:') 11650fcc7c6dSBram Moolenaar 11660fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*c 11670fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:') 11680fcc7c6dSBram Moolenaar 11690fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%L%M%N 11700fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:') 11710fcc7c6dSBram Moolenaar 11720fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%m:%R 11730fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') 11740fcc7c6dSBram Moolenaar 117570077dd1SBram Moolenaar " Invalid regular expression 117670077dd1SBram Moolenaar set efm=%\\%%k 117770077dd1SBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E867:') 117870077dd1SBram Moolenaar 11790fcc7c6dSBram Moolenaar set efm= 11800fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') 11810fcc7c6dSBram Moolenaar 11820fcc7c6dSBram Moolenaar set efm=%DEntering\ dir\ abc,%f:%l:%m 11830fcc7c6dSBram Moolenaar call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:') 11840fcc7c6dSBram Moolenaar 11850fcc7c6dSBram Moolenaar let &efm = save_efm 11862b946c9fSBram Moolenaarendfunc 11870fcc7c6dSBram Moolenaar 11882b946c9fSBram Moolenaarfunc Test_invalid_efm() 11890fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('c') 11900fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('l') 11912b946c9fSBram Moolenaarendfunc 11920fcc7c6dSBram Moolenaar 11930fcc7c6dSBram Moolenaar" TODO: 11940fcc7c6dSBram Moolenaar" Add tests for the following formats in 'errorformat' 11950fcc7c6dSBram Moolenaar" %r %O 11962b946c9fSBram Moolenaarfunc Test_efm2() 11970fcc7c6dSBram Moolenaar let save_efm = &efm 1198049cba9eSBram Moolenaar 1199049cba9eSBram Moolenaar " Test for %s format in efm 1200049cba9eSBram Moolenaar set efm=%f:%s 1201049cba9eSBram Moolenaar cexpr 'Xtestfile:Line search text' 1202049cba9eSBram Moolenaar let l = getqflist() 120370077dd1SBram Moolenaar call assert_equal('^\VLine search text\$', l[0].pattern) 120470077dd1SBram Moolenaar call assert_equal(0, l[0].lnum) 1205049cba9eSBram Moolenaar 1206ee85df37SBram Moolenaar let l = split(execute('clist', ''), "\n") 1207ee85df37SBram Moolenaar call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l) 1208ee85df37SBram Moolenaar 120970077dd1SBram Moolenaar " Test for a long line 121070077dd1SBram Moolenaar cexpr 'Xtestfile:' . repeat('a', 1026) 121170077dd1SBram Moolenaar let l = getqflist() 121270077dd1SBram Moolenaar call assert_equal('^\V' . repeat('a', 1019) . '\$', l[0].pattern) 121370077dd1SBram Moolenaar 12140fcc7c6dSBram Moolenaar " Test for %P, %Q and %t format specifiers 1215c79745a8SBram Moolenaar let lines =<< trim [DATA] 1216c79745a8SBram Moolenaar [Xtestfile1] 1217c79745a8SBram Moolenaar (1,17) error: ';' missing 1218c79745a8SBram Moolenaar (21,2) warning: variable 'z' not defined 1219c79745a8SBram Moolenaar (67,3) error: end of file found before string ended 1220c79745a8SBram Moolenaar -- 1221c79745a8SBram Moolenaar 1222c79745a8SBram Moolenaar [Xtestfile2] 1223c79745a8SBram Moolenaar -- 1224c79745a8SBram Moolenaar 1225c79745a8SBram Moolenaar [Xtestfile3] 1226c79745a8SBram Moolenaar NEW compiler v1.1 1227c79745a8SBram Moolenaar (2,2) warning: variable 'x' not defined 1228c79745a8SBram Moolenaar (67,3) warning: 's' already defined 1229c79745a8SBram Moolenaar -- 1230c79745a8SBram Moolenaar [DATA] 1231c79745a8SBram Moolenaar 1232ee85df37SBram Moolenaar set efm=%+P[%f]%r,(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%+Q--%r 1233391b1dd0SBram Moolenaar " To exercise the push/pop file functionality in quickfix, the test files 1234391b1dd0SBram Moolenaar " need to be created. 1235391b1dd0SBram Moolenaar call writefile(['Line1'], 'Xtestfile1') 1236391b1dd0SBram Moolenaar call writefile(['Line2'], 'Xtestfile2') 1237391b1dd0SBram Moolenaar call writefile(['Line3'], 'Xtestfile3') 1238361c8f0eSBram Moolenaar cexpr "" 1239361c8f0eSBram Moolenaar for l in lines 1240361c8f0eSBram Moolenaar caddexpr l 1241361c8f0eSBram Moolenaar endfor 1242049cba9eSBram Moolenaar let l = getqflist() 1243ee85df37SBram Moolenaar call assert_equal(12, len(l)) 1244049cba9eSBram Moolenaar call assert_equal(21, l[2].lnum) 1245049cba9eSBram Moolenaar call assert_equal(2, l[2].col) 12460fcc7c6dSBram Moolenaar call assert_equal('w', l[2].type) 12470fcc7c6dSBram Moolenaar call assert_equal('e', l[3].type) 1248391b1dd0SBram Moolenaar call delete('Xtestfile1') 1249391b1dd0SBram Moolenaar call delete('Xtestfile2') 1250391b1dd0SBram Moolenaar call delete('Xtestfile3') 12510fcc7c6dSBram Moolenaar 125270077dd1SBram Moolenaar " Test for %P, %Q with non-existing files 125370077dd1SBram Moolenaar cexpr lines 125470077dd1SBram Moolenaar let l = getqflist() 125570077dd1SBram Moolenaar call assert_equal(14, len(l)) 125670077dd1SBram Moolenaar call assert_equal('[Xtestfile1]', l[0].text) 125770077dd1SBram Moolenaar call assert_equal('[Xtestfile2]', l[6].text) 125870077dd1SBram Moolenaar call assert_equal('[Xtestfile3]', l[9].text) 125970077dd1SBram Moolenaar 12600fcc7c6dSBram Moolenaar " Tests for %E, %C and %Z format specifiers 1261c79745a8SBram Moolenaar let lines =<< trim [DATA] 1262c79745a8SBram Moolenaar Error 275 1263c79745a8SBram Moolenaar line 42 1264c79745a8SBram Moolenaar column 3 1265c79745a8SBram Moolenaar ' ' expected after '--' 1266c79745a8SBram Moolenaar [DATA] 1267c79745a8SBram Moolenaar 12680fcc7c6dSBram Moolenaar set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m 12690fcc7c6dSBram Moolenaar cgetexpr lines 12700fcc7c6dSBram Moolenaar let l = getqflist() 12710fcc7c6dSBram Moolenaar call assert_equal(275, l[0].nr) 12720fcc7c6dSBram Moolenaar call assert_equal(42, l[0].lnum) 12730fcc7c6dSBram Moolenaar call assert_equal(3, l[0].col) 12740fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 12750fcc7c6dSBram Moolenaar call assert_equal("\n' ' expected after '--'", l[0].text) 12760fcc7c6dSBram Moolenaar 12770fcc7c6dSBram Moolenaar " Test for %> 1278c79745a8SBram Moolenaar let lines =<< trim [DATA] 1279c79745a8SBram Moolenaar Error in line 147 of foo.c: 1280c79745a8SBram Moolenaar unknown variable 'i' 1281c79745a8SBram Moolenaar [DATA] 1282c79745a8SBram Moolenaar 12830fcc7c6dSBram Moolenaar set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m 12840fcc7c6dSBram Moolenaar cgetexpr lines 12850fcc7c6dSBram Moolenaar let l = getqflist() 12860fcc7c6dSBram Moolenaar call assert_equal(147, l[0].lnum) 12870fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 12880fcc7c6dSBram Moolenaar call assert_equal("\nunknown variable 'i'", l[0].text) 1289049cba9eSBram Moolenaar 1290e87e6dddSBram Moolenaar " Test for %A, %C and other formats 1291c79745a8SBram Moolenaar let lines =<< trim [DATA] 1292c79745a8SBram Moolenaar ============================================================== 1293c79745a8SBram Moolenaar FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest) 1294c79745a8SBram Moolenaar -------------------------------------------------------------- 1295c79745a8SBram Moolenaar Traceback (most recent call last): 1296c79745a8SBram Moolenaar File "unittests/dbfacadeTest.py", line 89, in testFoo 1297c79745a8SBram Moolenaar self.assertEquals(34, dtid) 1298c79745a8SBram Moolenaar File "/usr/lib/python2.2/unittest.py", line 286, in 1299c79745a8SBram Moolenaar failUnlessEqual 1300c79745a8SBram Moolenaar raise self.failureException, \\ 130170077dd1SBram Moolenaar W:AssertionError: 34 != 33 1302c79745a8SBram Moolenaar 1303c79745a8SBram Moolenaar -------------------------------------------------------------- 1304c79745a8SBram Moolenaar Ran 27 tests in 0.063s 1305c79745a8SBram Moolenaar [DATA] 1306c79745a8SBram Moolenaar 130770077dd1SBram Moolenaar set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%t:%m 1308e87e6dddSBram Moolenaar cgetexpr lines 1309e87e6dddSBram Moolenaar let l = getqflist() 1310e87e6dddSBram Moolenaar call assert_equal(8, len(l)) 1311e87e6dddSBram Moolenaar call assert_equal(89, l[4].lnum) 1312e87e6dddSBram Moolenaar call assert_equal(1, l[4].valid) 1313e87e6dddSBram Moolenaar call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr)) 131470077dd1SBram Moolenaar call assert_equal('W', l[4].type) 1315e87e6dddSBram Moolenaar 1316d76ce852SBram Moolenaar " Test for %o 1317d76ce852SBram Moolenaar set efm=%f(%o):%l\ %m 1318bc7845daSBram Moolenaar cgetexpr ['Xotestfile(Language.PureScript.Types):20 Error'] 1319bc7845daSBram Moolenaar call writefile(['Line1'], 'Xotestfile') 1320d76ce852SBram Moolenaar let l = getqflist() 1321d76ce852SBram Moolenaar call assert_equal(1, len(l), string(l)) 1322d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types', l[0].module) 1323d76ce852SBram Moolenaar copen 1324d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types|20| Error', getline(1)) 1325d76ce852SBram Moolenaar call feedkeys("\<CR>", 'xn') 1326bc7845daSBram Moolenaar call assert_equal('Xotestfile', expand('%:t')) 1327d76ce852SBram Moolenaar cclose 1328d76ce852SBram Moolenaar bd 1329bc7845daSBram Moolenaar call delete("Xotestfile") 1330d76ce852SBram Moolenaar 133170077dd1SBram Moolenaar " Test for a long module name 133270077dd1SBram Moolenaar cexpr 'Xtest(' . repeat('m', 1026) . '):15 message' 133370077dd1SBram Moolenaar let l = getqflist() 133470077dd1SBram Moolenaar call assert_equal(repeat('m', 1024), l[0].module) 133570077dd1SBram Moolenaar call assert_equal(15, l[0].lnum) 133670077dd1SBram Moolenaar call assert_equal('message', l[0].text) 133770077dd1SBram Moolenaar 133899895eacSBram Moolenaar " The following sequence of commands used to crash Vim 133999895eacSBram Moolenaar set efm=%W%m 134099895eacSBram Moolenaar cgetexpr ['msg1'] 134199895eacSBram Moolenaar let l = getqflist() 134299895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 134399895eacSBram Moolenaar call assert_equal('msg1', l[0].text) 134499895eacSBram Moolenaar set efm=%C%m 134599895eacSBram Moolenaar lexpr 'msg2' 134699895eacSBram Moolenaar let l = getloclist(0) 134799895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 134899895eacSBram Moolenaar call assert_equal('msg2', l[0].text) 134999895eacSBram Moolenaar lopen 135099895eacSBram Moolenaar call setqflist([], 'r') 135199895eacSBram Moolenaar caddbuf 135299895eacSBram Moolenaar let l = getqflist() 135399895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 135499895eacSBram Moolenaar call assert_equal('|| msg2', l[0].text) 135599895eacSBram Moolenaar 135678ddc06bSBram Moolenaar " When matching error lines, case should be ignored. Test for this. 135778ddc06bSBram Moolenaar set noignorecase 135878ddc06bSBram Moolenaar let l=getqflist({'lines' : ['Xtest:FOO10:Line 20'], 'efm':'%f:foo%l:%m'}) 135978ddc06bSBram Moolenaar call assert_equal(10, l.items[0].lnum) 136078ddc06bSBram Moolenaar call assert_equal('Line 20', l.items[0].text) 136178ddc06bSBram Moolenaar set ignorecase& 136278ddc06bSBram Moolenaar 136399895eacSBram Moolenaar new | only 1364049cba9eSBram Moolenaar let &efm = save_efm 13652b946c9fSBram Moolenaarendfunc 1366049cba9eSBram Moolenaar 1367e928366dSBram Moolenaar" Test for '%t' (error type) field in 'efm' 1368e928366dSBram Moolenaarfunc Test_efm_error_type() 1369e928366dSBram Moolenaar let save_efm = &efm 1370e928366dSBram Moolenaar 1371e928366dSBram Moolenaar " error type 1372e928366dSBram Moolenaar set efm=%f:%l:%t:%m 1373e928366dSBram Moolenaar cexpr ["Xfile1:10:E:msg1", "Xfile1:20:W:msg2", "Xfile1:30:I:msg3", 1374e928366dSBram Moolenaar \ "Xfile1:40:N:msg4", "Xfile1:50:R:msg5"] 1375e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1376e928366dSBram Moolenaar call assert_equal([ 1377e928366dSBram Moolenaar \ ' 1 Xfile1:10 error: msg1', 1378e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning: msg2', 1379e928366dSBram Moolenaar \ ' 3 Xfile1:30 info: msg3', 1380e928366dSBram Moolenaar \ ' 4 Xfile1:40 note: msg4', 1381e928366dSBram Moolenaar \ ' 5 Xfile1:50 R: msg5'], output) 1382e928366dSBram Moolenaar 1383e928366dSBram Moolenaar " error type and a error number 1384e928366dSBram Moolenaar set efm=%f:%l:%t:%n:%m 1385e928366dSBram Moolenaar cexpr ["Xfile1:10:E:2:msg1", "Xfile1:20:W:4:msg2", "Xfile1:30:I:6:msg3", 1386e928366dSBram Moolenaar \ "Xfile1:40:N:8:msg4", "Xfile1:50:R:3:msg5"] 1387e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1388e928366dSBram Moolenaar call assert_equal([ 1389e928366dSBram Moolenaar \ ' 1 Xfile1:10 error 2: msg1', 1390e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning 4: msg2', 1391e928366dSBram Moolenaar \ ' 3 Xfile1:30 info 6: msg3', 1392e928366dSBram Moolenaar \ ' 4 Xfile1:40 note 8: msg4', 1393e928366dSBram Moolenaar \ ' 5 Xfile1:50 R 3: msg5'], output) 1394e928366dSBram Moolenaar let &efm = save_efm 1395e928366dSBram Moolenaarendfunc 1396e928366dSBram Moolenaar 13972b946c9fSBram Moolenaarfunc XquickfixChangedByAutocmd(cchar) 13983ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1399ffec3c53SBram Moolenaar if a:cchar == 'c' 1400ffec3c53SBram Moolenaar let ErrorNr = 'E925' 14012b946c9fSBram Moolenaar func! ReadFunc() 1402ffec3c53SBram Moolenaar colder 1403ffec3c53SBram Moolenaar cgetexpr [] 1404ffec3c53SBram Moolenaar endfunc 1405ffec3c53SBram Moolenaar else 1406ffec3c53SBram Moolenaar let ErrorNr = 'E926' 14072b946c9fSBram Moolenaar func! ReadFunc() 1408ffec3c53SBram Moolenaar lolder 1409ffec3c53SBram Moolenaar lgetexpr [] 1410ffec3c53SBram Moolenaar endfunc 1411ffec3c53SBram Moolenaar endif 1412ffec3c53SBram Moolenaar 1413ffec3c53SBram Moolenaar augroup testgroup 1414ffec3c53SBram Moolenaar au! 1415d106e5baSBram Moolenaar autocmd BufReadCmd test_changed.txt call ReadFunc() 1416ffec3c53SBram Moolenaar augroup END 1417ffec3c53SBram Moolenaar 1418d106e5baSBram Moolenaar new | only 1419ffec3c53SBram Moolenaar let words = [ "a", "b" ] 1420ffec3c53SBram Moolenaar let qflist = [] 1421ffec3c53SBram Moolenaar for word in words 1422d106e5baSBram Moolenaar call add(qflist, {'filename': 'test_changed.txt'}) 14233ef5bf7dSBram Moolenaar call g:Xsetlist(qflist, ' ') 1424ffec3c53SBram Moolenaar endfor 14253ef5bf7dSBram Moolenaar call assert_fails('Xrewind', ErrorNr . ':') 1426ffec3c53SBram Moolenaar 1427ffec3c53SBram Moolenaar augroup! testgroup 1428ffec3c53SBram Moolenaarendfunc 1429ffec3c53SBram Moolenaar 14302b946c9fSBram Moolenaarfunc Test_quickfix_was_changed_by_autocmd() 1431ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('c') 1432ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('l') 14332b946c9fSBram Moolenaarendfunc 14348b20179cSBram Moolenaar 14358b20179cSBram Moolenaarfunc Test_caddbuffer_to_empty() 14368b20179cSBram Moolenaar helpgr quickfix 14378b20179cSBram Moolenaar call setqflist([], 'r') 14388b20179cSBram Moolenaar cad 1439f68f1d70SBram Moolenaar try 1440f68f1d70SBram Moolenaar cn 1441f68f1d70SBram Moolenaar catch 1442f68f1d70SBram Moolenaar " number of matches is unknown 1443f68f1d70SBram Moolenaar call assert_true(v:exception =~ 'E553:') 1444f68f1d70SBram Moolenaar endtry 14458b20179cSBram Moolenaar quit! 14468b20179cSBram Moolenaarendfunc 144789c64d55SBram Moolenaar 144889c64d55SBram Moolenaarfunc Test_cgetexpr_works() 144989c64d55SBram Moolenaar " this must not crash Vim 145089c64d55SBram Moolenaar cgetexpr [$x] 14513ef5bf7dSBram Moolenaar lgetexpr [$x] 145289c64d55SBram Moolenaarendfunc 1453c1808d58SBram Moolenaar 1454c1808d58SBram Moolenaar" Tests for the setqflist() and setloclist() functions 14552b946c9fSBram Moolenaarfunc SetXlistTests(cchar, bnum) 14563ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1457c1808d58SBram Moolenaar 14583ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1}, 1459c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 2}]) 14603ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1461c1808d58SBram Moolenaar call assert_equal(2, len(l)) 1462c1808d58SBram Moolenaar call assert_equal(2, l[1].lnum) 1463c1808d58SBram Moolenaar 14643ef5bf7dSBram Moolenaar Xnext 14653ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a') 14663ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1467c1808d58SBram Moolenaar call assert_equal(3, len(l)) 14683ef5bf7dSBram Moolenaar Xnext 1469c1808d58SBram Moolenaar call assert_equal(3, line('.')) 1470c1808d58SBram Moolenaar 14712b2b8ae5SBram Moolenaar " Appending entries to the list should not change the cursor position 14722b2b8ae5SBram Moolenaar " in the quickfix window 14733ef5bf7dSBram Moolenaar Xwindow 14742b2b8ae5SBram Moolenaar 1 14753ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4}, 14762b2b8ae5SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'a') 14772b2b8ae5SBram Moolenaar call assert_equal(1, line('.')) 14782b2b8ae5SBram Moolenaar close 14792b2b8ae5SBram Moolenaar 14803ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}, 1481c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 4}, 1482c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'r') 14833ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1484c1808d58SBram Moolenaar call assert_equal(3, len(l)) 1485c1808d58SBram Moolenaar call assert_equal(5, l[2].lnum) 1486c1808d58SBram Moolenaar 14873ef5bf7dSBram Moolenaar call g:Xsetlist([]) 14883ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1489c1808d58SBram Moolenaar call assert_equal(0, len(l)) 1490ee85df37SBram Moolenaar 1491f1d21c8cSBram Moolenaar " Tests for setting the 'valid' flag 1492f1d21c8cSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':4, 'valid':0}]) 1493f1d21c8cSBram Moolenaar Xwindow 1494f1d21c8cSBram Moolenaar call assert_equal(1, winnr('$')) 1495f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1496f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1497f1d21c8cSBram Moolenaar call assert_equal(0, g:Xgetlist()[0].valid) 14989752c72fSBram Moolenaar " Adding a non-valid entry should not mark the list as having valid entries 14999752c72fSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':5, 'valid':0}], 'a') 15009752c72fSBram Moolenaar Xwindow 15019752c72fSBram Moolenaar call assert_equal(1, winnr('$')) 15029752c72fSBram Moolenaar 15039752c72fSBram Moolenaar " :cnext/:cprev should still work even with invalid entries in the list 15049752c72fSBram Moolenaar let l = [{'bufnr' : a:bnum, 'lnum' : 1, 'text' : '1', 'valid' : 0}, 15059752c72fSBram Moolenaar \ {'bufnr' : a:bnum, 'lnum' : 2, 'text' : '2', 'valid' : 0}] 15069752c72fSBram Moolenaar call g:Xsetlist(l) 15079752c72fSBram Moolenaar Xnext 15089752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 15099752c72fSBram Moolenaar Xprev 15109752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 15119752c72fSBram Moolenaar " :cnext/:cprev should still work after appending invalid entries to an 15129752c72fSBram Moolenaar " empty list 15139752c72fSBram Moolenaar call g:Xsetlist([]) 15149752c72fSBram Moolenaar call g:Xsetlist(l, 'a') 15159752c72fSBram Moolenaar Xnext 15169752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 15179752c72fSBram Moolenaar Xprev 15189752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 15199752c72fSBram Moolenaar 1520f1d21c8cSBram Moolenaar call g:Xsetlist([{'text':'Text1', 'valid':1}]) 1521f1d21c8cSBram Moolenaar Xwindow 1522f1d21c8cSBram Moolenaar call assert_equal(2, winnr('$')) 1523f1d21c8cSBram Moolenaar Xclose 1524f1d21c8cSBram Moolenaar let save_efm = &efm 1525f1d21c8cSBram Moolenaar set efm=%m 1526f1d21c8cSBram Moolenaar Xgetexpr 'TestMessage' 1527f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1528f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1529f1d21c8cSBram Moolenaar call assert_equal(1, g:Xgetlist()[0].valid) 1530f1d21c8cSBram Moolenaar let &efm = save_efm 1531f1d21c8cSBram Moolenaar 1532ee85df37SBram Moolenaar " Error cases: 1533ee85df37SBram Moolenaar " Refer to a non-existing buffer and pass a non-dictionary type 1534ee85df37SBram Moolenaar call assert_fails("call g:Xsetlist([{'bufnr':998, 'lnum':4}," . 1535ee85df37SBram Moolenaar \ " {'bufnr':999, 'lnum':5}])", 'E92:') 1536ee85df37SBram Moolenaar call g:Xsetlist([[1, 2,3]]) 1537ee85df37SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 153899fa7219SBram Moolenaar call assert_fails('call g:Xsetlist([], [])', 'E928:') 15392b946c9fSBram Moolenaarendfunc 1540c1808d58SBram Moolenaar 15412b946c9fSBram Moolenaarfunc Test_setqflist() 1542c1808d58SBram Moolenaar new Xtestfile | only 1543c1808d58SBram Moolenaar let bnum = bufnr('%') 1544c1808d58SBram Moolenaar call setline(1, range(1,5)) 1545c1808d58SBram Moolenaar 1546c1808d58SBram Moolenaar call SetXlistTests('c', bnum) 1547c1808d58SBram Moolenaar call SetXlistTests('l', bnum) 1548c1808d58SBram Moolenaar 15491cee693bSBram Moolenaar enew! 1550c1808d58SBram Moolenaar call delete('Xtestfile') 15512b946c9fSBram Moolenaarendfunc 1552d106e5baSBram Moolenaar 15532b946c9fSBram Moolenaarfunc Xlist_empty_middle(cchar) 15543ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 15553ef5bf7dSBram Moolenaar 15561cee693bSBram Moolenaar " create three quickfix lists 1557ee85df37SBram Moolenaar let @/ = 'Test_' 1558ee85df37SBram Moolenaar Xvimgrep // test_quickfix.vim 15593ef5bf7dSBram Moolenaar let testlen = len(g:Xgetlist()) 15601cee693bSBram Moolenaar call assert_true(testlen > 0) 15613ef5bf7dSBram Moolenaar Xvimgrep empty test_quickfix.vim 15623ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) > 0) 15633ef5bf7dSBram Moolenaar Xvimgrep matches test_quickfix.vim 15643ef5bf7dSBram Moolenaar let matchlen = len(g:Xgetlist()) 15651cee693bSBram Moolenaar call assert_true(matchlen > 0) 15663ef5bf7dSBram Moolenaar Xolder 15671cee693bSBram Moolenaar " make the middle list empty 15683ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 15693ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 15703ef5bf7dSBram Moolenaar Xolder 15713ef5bf7dSBram Moolenaar call assert_equal(testlen, len(g:Xgetlist())) 15723ef5bf7dSBram Moolenaar Xnewer 15733ef5bf7dSBram Moolenaar Xnewer 15743ef5bf7dSBram Moolenaar call assert_equal(matchlen, len(g:Xgetlist())) 15751cee693bSBram Moolenaarendfunc 15761cee693bSBram Moolenaar 15772b946c9fSBram Moolenaarfunc Test_setqflist_empty_middle() 15783ef5bf7dSBram Moolenaar call Xlist_empty_middle('c') 15793ef5bf7dSBram Moolenaar call Xlist_empty_middle('l') 15802b946c9fSBram Moolenaarendfunc 15813ef5bf7dSBram Moolenaar 15822b946c9fSBram Moolenaarfunc Xlist_empty_older(cchar) 15833ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 15843ef5bf7dSBram Moolenaar 15851cee693bSBram Moolenaar " create three quickfix lists 15863ef5bf7dSBram Moolenaar Xvimgrep one test_quickfix.vim 15873ef5bf7dSBram Moolenaar let onelen = len(g:Xgetlist()) 15881cee693bSBram Moolenaar call assert_true(onelen > 0) 15893ef5bf7dSBram Moolenaar Xvimgrep two test_quickfix.vim 15903ef5bf7dSBram Moolenaar let twolen = len(g:Xgetlist()) 15911cee693bSBram Moolenaar call assert_true(twolen > 0) 15923ef5bf7dSBram Moolenaar Xvimgrep three test_quickfix.vim 15933ef5bf7dSBram Moolenaar let threelen = len(g:Xgetlist()) 15941cee693bSBram Moolenaar call assert_true(threelen > 0) 15953ef5bf7dSBram Moolenaar Xolder 2 15961cee693bSBram Moolenaar " make the first list empty, check the others didn't change 15973ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 15983ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 15993ef5bf7dSBram Moolenaar Xnewer 16003ef5bf7dSBram Moolenaar call assert_equal(twolen, len(g:Xgetlist())) 16013ef5bf7dSBram Moolenaar Xnewer 16023ef5bf7dSBram Moolenaar call assert_equal(threelen, len(g:Xgetlist())) 16032b946c9fSBram Moolenaarendfunc 16043ef5bf7dSBram Moolenaar 16052b946c9fSBram Moolenaarfunc Test_setqflist_empty_older() 16063ef5bf7dSBram Moolenaar call Xlist_empty_older('c') 16073ef5bf7dSBram Moolenaar call Xlist_empty_older('l') 16082b946c9fSBram Moolenaarendfunc 16091cee693bSBram Moolenaar 16102b946c9fSBram Moolenaarfunc XquickfixSetListWithAct(cchar) 16113ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 16123ef5bf7dSBram Moolenaar 1613d106e5baSBram Moolenaar let list1 = [{'filename': 'fnameA', 'text': 'A'}, 1614d106e5baSBram Moolenaar \ {'filename': 'fnameB', 'text': 'B'}] 1615d106e5baSBram Moolenaar let list2 = [{'filename': 'fnameC', 'text': 'C'}, 1616d106e5baSBram Moolenaar \ {'filename': 'fnameD', 'text': 'D'}, 1617d106e5baSBram Moolenaar \ {'filename': 'fnameE', 'text': 'E'}] 1618d106e5baSBram Moolenaar 1619eeb1b9c7SBram Moolenaar " {action} is unspecified. Same as specifying ' '. 1620d106e5baSBram Moolenaar new | only 16213ef5bf7dSBram Moolenaar silent! Xnewer 99 16223ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16233ef5bf7dSBram Moolenaar call g:Xsetlist(list2) 16243ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1625d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1626d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1627d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1628d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 16293ef5bf7dSBram Moolenaar silent! Xolder 16303ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1631d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1632d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1633d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1634d106e5baSBram Moolenaar 1635d106e5baSBram Moolenaar " {action} is specified ' '. 1636d106e5baSBram Moolenaar new | only 16373ef5bf7dSBram Moolenaar silent! Xnewer 99 16383ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16393ef5bf7dSBram Moolenaar call g:Xsetlist(list2, ' ') 16403ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1641d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1642d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1643d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1644d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 16453ef5bf7dSBram Moolenaar silent! Xolder 16463ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1647d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1648d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1649d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1650d106e5baSBram Moolenaar 1651d106e5baSBram Moolenaar " {action} is specified 'a'. 1652d106e5baSBram Moolenaar new | only 16533ef5bf7dSBram Moolenaar silent! Xnewer 99 16543ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16553ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'a') 16563ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1657d106e5baSBram Moolenaar call assert_equal(5, len(li)) 1658d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1659d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1660d106e5baSBram Moolenaar call assert_equal('C', li[2]['text']) 1661d106e5baSBram Moolenaar call assert_equal('D', li[3]['text']) 1662d106e5baSBram Moolenaar call assert_equal('E', li[4]['text']) 1663d106e5baSBram Moolenaar 1664d106e5baSBram Moolenaar " {action} is specified 'r'. 1665d106e5baSBram Moolenaar new | only 16663ef5bf7dSBram Moolenaar silent! Xnewer 99 16673ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 16683ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'r') 16693ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1670d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1671d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1672d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1673d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 1674d106e5baSBram Moolenaar 1675d106e5baSBram Moolenaar " Test for wrong value. 1676d106e5baSBram Moolenaar new | only 16773ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(0)", 'E714:') 16783ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, '')", 'E927:') 16793ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:') 16803ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:') 16813ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 0)", 'E928:') 1682d106e5baSBram Moolenaarendfunc 1683d106e5baSBram Moolenaar 1684a0ca7d00SBram Moolenaarfunc Test_setqflist_invalid_nr() 1685a0ca7d00SBram Moolenaar " The following command used to crash Vim 1686aad222c9SBram Moolenaar eval []->setqflist(' ', {'nr' : $XXX_DOES_NOT_EXIST}) 1687a0ca7d00SBram Moolenaarendfunc 1688a0ca7d00SBram Moolenaar 168999234f29SBram Moolenaarfunc Test_setqflist_user_sets_buftype() 169099234f29SBram Moolenaar call setqflist([{'text': 'foo'}, {'text': 'bar'}]) 169199234f29SBram Moolenaar set buftype=quickfix 169299234f29SBram Moolenaar call setqflist([], 'a') 169399234f29SBram Moolenaar enew 169499234f29SBram Moolenaarendfunc 169599234f29SBram Moolenaar 16962b946c9fSBram Moolenaarfunc Test_quickfix_set_list_with_act() 1697d106e5baSBram Moolenaar call XquickfixSetListWithAct('c') 1698d106e5baSBram Moolenaar call XquickfixSetListWithAct('l') 16992b946c9fSBram Moolenaarendfunc 17006be8c8e1SBram Moolenaar 17012b946c9fSBram Moolenaarfunc XLongLinesTests(cchar) 17023ef5bf7dSBram Moolenaar let l = g:Xgetlist() 17036be8c8e1SBram Moolenaar 1704049cba9eSBram Moolenaar call assert_equal(4, len(l)) 17056be8c8e1SBram Moolenaar call assert_equal(1, l[0].lnum) 17066be8c8e1SBram Moolenaar call assert_equal(1, l[0].col) 1707049cba9eSBram Moolenaar call assert_equal(1975, len(l[0].text)) 17086be8c8e1SBram Moolenaar call assert_equal(2, l[1].lnum) 17096be8c8e1SBram Moolenaar call assert_equal(1, l[1].col) 17106be8c8e1SBram Moolenaar call assert_equal(4070, len(l[1].text)) 17116be8c8e1SBram Moolenaar call assert_equal(3, l[2].lnum) 17126be8c8e1SBram Moolenaar call assert_equal(1, l[2].col) 1713049cba9eSBram Moolenaar call assert_equal(4070, len(l[2].text)) 1714049cba9eSBram Moolenaar call assert_equal(4, l[3].lnum) 1715049cba9eSBram Moolenaar call assert_equal(1, l[3].col) 1716049cba9eSBram Moolenaar call assert_equal(10, len(l[3].text)) 17176be8c8e1SBram Moolenaar 17183ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 17192b946c9fSBram Moolenaarendfunc 17206be8c8e1SBram Moolenaar 17212b946c9fSBram Moolenaarfunc s:long_lines_tests(cchar) 17223ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 17233ef5bf7dSBram Moolenaar 17246be8c8e1SBram Moolenaar let testfile = 'samples/quickfix.txt' 17256be8c8e1SBram Moolenaar 17266be8c8e1SBram Moolenaar " file 17273ef5bf7dSBram Moolenaar exe 'Xgetfile' testfile 17283ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17296be8c8e1SBram Moolenaar 17306be8c8e1SBram Moolenaar " list 17313ef5bf7dSBram Moolenaar Xexpr readfile(testfile) 17323ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17336be8c8e1SBram Moolenaar 17346be8c8e1SBram Moolenaar " string 17353ef5bf7dSBram Moolenaar Xexpr join(readfile(testfile), "\n") 17363ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 17376be8c8e1SBram Moolenaar 17386be8c8e1SBram Moolenaar " buffer 17393ef5bf7dSBram Moolenaar exe 'edit' testfile 17403ef5bf7dSBram Moolenaar exe 'Xbuffer' bufnr('%') 1741f50df392SBram Moolenaar call XLongLinesTests(a:cchar) 17422b946c9fSBram Moolenaarendfunc 17433ef5bf7dSBram Moolenaar 17442b946c9fSBram Moolenaarfunc Test_long_lines() 17453ef5bf7dSBram Moolenaar call s:long_lines_tests('c') 17463ef5bf7dSBram Moolenaar call s:long_lines_tests('l') 17472b946c9fSBram Moolenaarendfunc 1748049cba9eSBram Moolenaar 17492b946c9fSBram Moolenaarfunc s:create_test_file(filename) 1750049cba9eSBram Moolenaar let l = [] 1751049cba9eSBram Moolenaar for i in range(1, 20) 1752049cba9eSBram Moolenaar call add(l, 'Line' . i) 1753049cba9eSBram Moolenaar endfor 1754049cba9eSBram Moolenaar call writefile(l, a:filename) 17552b946c9fSBram Moolenaarendfunc 1756049cba9eSBram Moolenaar 17572b946c9fSBram Moolenaarfunc Test_switchbuf() 1758049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile1') 1759049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile2') 1760049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile3') 1761049cba9eSBram Moolenaar 1762049cba9eSBram Moolenaar new | only 1763049cba9eSBram Moolenaar edit Xqftestfile1 1764049cba9eSBram Moolenaar let file1_winid = win_getid() 1765049cba9eSBram Moolenaar new Xqftestfile2 1766049cba9eSBram Moolenaar let file2_winid = win_getid() 1767049cba9eSBram Moolenaar cgetexpr ['Xqftestfile1:5:Line5', 1768049cba9eSBram Moolenaar \ 'Xqftestfile1:6:Line6', 1769049cba9eSBram Moolenaar \ 'Xqftestfile2:10:Line10', 1770049cba9eSBram Moolenaar \ 'Xqftestfile2:11:Line11', 1771049cba9eSBram Moolenaar \ 'Xqftestfile3:15:Line15', 1772049cba9eSBram Moolenaar \ 'Xqftestfile3:16:Line16'] 1773049cba9eSBram Moolenaar 1774049cba9eSBram Moolenaar new 1775049cba9eSBram Moolenaar let winid = win_getid() 1776049cba9eSBram Moolenaar cfirst | cnext 1777049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 177899895eacSBram Moolenaar 2cnext 1779049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 178099895eacSBram Moolenaar 2cnext 1781049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 1782049cba9eSBram Moolenaar 1783f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in windows in the current 1784f9ae154cSBram Moolenaar " tabpage and jump to an existing window (if present) 1785049cba9eSBram Moolenaar set switchbuf=useopen 1786f9ae154cSBram Moolenaar enew 1787049cba9eSBram Moolenaar cfirst | cnext 1788049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 178999895eacSBram Moolenaar 2cnext 1790049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 179199895eacSBram Moolenaar 2cnext 1792049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1793049cba9eSBram Moolenaar 1794f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in tabpages and jump to an 1795f9ae154cSBram Moolenaar " existing tabpage (if present) 1796049cba9eSBram Moolenaar enew | only 1797049cba9eSBram Moolenaar set switchbuf=usetab 1798049cba9eSBram Moolenaar tabedit Xqftestfile1 1799049cba9eSBram Moolenaar tabedit Xqftestfile2 180074240d3fSBram Moolenaar tabedit Xqftestfile3 1801049cba9eSBram Moolenaar tabfirst 1802049cba9eSBram Moolenaar cfirst | cnext 1803049cba9eSBram Moolenaar call assert_equal(2, tabpagenr()) 180499895eacSBram Moolenaar 2cnext 1805049cba9eSBram Moolenaar call assert_equal(3, tabpagenr()) 180674240d3fSBram Moolenaar 6cnext 180774240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 180874240d3fSBram Moolenaar 2cpfile 180974240d3fSBram Moolenaar call assert_equal(2, tabpagenr()) 181074240d3fSBram Moolenaar 2cnfile 181174240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 1812049cba9eSBram Moolenaar tabfirst | tabonly | enew 1813049cba9eSBram Moolenaar 1814f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new window for every file 1815049cba9eSBram Moolenaar set switchbuf=split 1816049cba9eSBram Moolenaar cfirst | cnext 1817049cba9eSBram Moolenaar call assert_equal(1, winnr('$')) 1818049cba9eSBram Moolenaar cnext | cnext 1819049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1820049cba9eSBram Moolenaar cnext | cnext 1821049cba9eSBram Moolenaar call assert_equal(3, winnr('$')) 1822049cba9eSBram Moolenaar 1823f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new tabpage for every file 1824049cba9eSBram Moolenaar set switchbuf=newtab 1825f9ae154cSBram Moolenaar enew | only 1826049cba9eSBram Moolenaar cfirst | cnext 1827049cba9eSBram Moolenaar call assert_equal(1, tabpagenr('$')) 1828049cba9eSBram Moolenaar cnext | cnext 1829049cba9eSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1830049cba9eSBram Moolenaar cnext | cnext 1831049cba9eSBram Moolenaar call assert_equal(3, tabpagenr('$')) 1832049cba9eSBram Moolenaar tabfirst | enew | tabonly | only 1833049cba9eSBram Moolenaar 1834539aa6b2SBram Moolenaar set switchbuf=uselast 1835539aa6b2SBram Moolenaar split 1836539aa6b2SBram Moolenaar let last_winid = win_getid() 1837539aa6b2SBram Moolenaar copen 1838539aa6b2SBram Moolenaar exe "normal 1G\<CR>" 1839539aa6b2SBram Moolenaar call assert_equal(last_winid, win_getid()) 1840539aa6b2SBram Moolenaar enew | only 1841539aa6b2SBram Moolenaar 1842f9ae154cSBram Moolenaar " With an empty 'switchbuf', jumping to a quickfix entry should open the 1843f9ae154cSBram Moolenaar " file in an existing window (if present) 1844049cba9eSBram Moolenaar set switchbuf= 1845049cba9eSBram Moolenaar edit Xqftestfile1 1846049cba9eSBram Moolenaar let file1_winid = win_getid() 1847049cba9eSBram Moolenaar new Xqftestfile2 1848049cba9eSBram Moolenaar let file2_winid = win_getid() 1849049cba9eSBram Moolenaar copen 1850049cba9eSBram Moolenaar exe "normal 1G\<CR>" 1851049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 1852049cba9eSBram Moolenaar copen 1853049cba9eSBram Moolenaar exe "normal 3G\<CR>" 1854049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1855049cba9eSBram Moolenaar copen | only 1856049cba9eSBram Moolenaar exe "normal 5G\<CR>" 1857049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1858049cba9eSBram Moolenaar call assert_equal(1, bufwinnr('Xqftestfile3')) 1859049cba9eSBram Moolenaar 1860391b1dd0SBram Moolenaar " If only quickfix window is open in the current tabpage, jumping to an 18611bc353b6SBram Moolenaar " entry with 'switchbuf' set to 'usetab' should search in other tabpages. 1862049cba9eSBram Moolenaar enew | only 1863391b1dd0SBram Moolenaar set switchbuf=usetab 1864391b1dd0SBram Moolenaar tabedit Xqftestfile1 1865391b1dd0SBram Moolenaar tabedit Xqftestfile2 1866391b1dd0SBram Moolenaar tabedit Xqftestfile3 1867391b1dd0SBram Moolenaar tabfirst 1868391b1dd0SBram Moolenaar copen | only 1869391b1dd0SBram Moolenaar clast 1870391b1dd0SBram Moolenaar call assert_equal(4, tabpagenr()) 1871391b1dd0SBram Moolenaar tabfirst | tabonly | enew | only 1872049cba9eSBram Moolenaar 1873f9ae154cSBram Moolenaar " Jumping to a file that is not present in any of the tabpages and the 1874f9ae154cSBram Moolenaar " current tabpage doesn't have any usable windows, should open it in a new 1875f9ae154cSBram Moolenaar " window in the current tabpage. 1876f9ae154cSBram Moolenaar copen | only 1877f9ae154cSBram Moolenaar cfirst 1878f9ae154cSBram Moolenaar call assert_equal(1, tabpagenr()) 1879bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 1880f9ae154cSBram Moolenaar 1881f9ae154cSBram Moolenaar " If opening a file changes 'switchbuf', then the new value should be 1882f9ae154cSBram Moolenaar " retained. 188341d4299fSBram Moolenaar set modeline&vim 1884f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=split"], 'Xqftestfile1') 1885f9ae154cSBram Moolenaar enew | only 1886f9ae154cSBram Moolenaar set switchbuf&vim 1887f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1888f9ae154cSBram Moolenaar call assert_equal('split', &switchbuf) 1889f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=usetab"], 'Xqftestfile1') 1890f9ae154cSBram Moolenaar enew | only 1891f9ae154cSBram Moolenaar set switchbuf=useopen 1892f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1893f9ae154cSBram Moolenaar call assert_equal('usetab', &switchbuf) 1894f9ae154cSBram Moolenaar call writefile(["vim: switchbuf&vim"], 'Xqftestfile1') 1895f9ae154cSBram Moolenaar enew | only 1896f9ae154cSBram Moolenaar set switchbuf=useopen 1897f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 1898f9ae154cSBram Moolenaar call assert_equal('', &switchbuf) 1899f9ae154cSBram Moolenaar 1900049cba9eSBram Moolenaar call delete('Xqftestfile1') 1901049cba9eSBram Moolenaar call delete('Xqftestfile2') 1902049cba9eSBram Moolenaar call delete('Xqftestfile3') 1903391b1dd0SBram Moolenaar set switchbuf&vim 1904391b1dd0SBram Moolenaar 1905391b1dd0SBram Moolenaar enew | only 19062b946c9fSBram Moolenaarendfunc 1907049cba9eSBram Moolenaar 19082b946c9fSBram Moolenaarfunc Xadjust_qflnum(cchar) 1909049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 1910049cba9eSBram Moolenaar 1911049cba9eSBram Moolenaar enew | only 1912049cba9eSBram Moolenaar 1913c1542744SBram Moolenaar let fname = 'Xqftestfile' . a:cchar 1914c1542744SBram Moolenaar call s:create_test_file(fname) 1915c1542744SBram Moolenaar exe 'edit ' . fname 1916049cba9eSBram Moolenaar 1917c1542744SBram Moolenaar Xgetexpr [fname . ':5:Line5', 1918c1542744SBram Moolenaar \ fname . ':10:Line10', 1919c1542744SBram Moolenaar \ fname . ':15:Line15', 1920c1542744SBram Moolenaar \ fname . ':20:Line20'] 1921049cba9eSBram Moolenaar 1922049cba9eSBram Moolenaar 6,14delete 1923049cba9eSBram Moolenaar call append(6, ['Buffer', 'Window']) 1924049cba9eSBram Moolenaar 1925049cba9eSBram Moolenaar let l = g:Xgetlist() 1926049cba9eSBram Moolenaar call assert_equal(5, l[0].lnum) 1927049cba9eSBram Moolenaar call assert_equal(6, l[2].lnum) 1928049cba9eSBram Moolenaar call assert_equal(13, l[3].lnum) 1929049cba9eSBram Moolenaar 1930f9ae154cSBram Moolenaar " If a file doesn't have any quickfix entries, then deleting lines in the 1931f9ae154cSBram Moolenaar " file should not update the quickfix list 1932f9ae154cSBram Moolenaar call g:Xsetlist([], 'f') 1933f9ae154cSBram Moolenaar 1,2delete 1934f9ae154cSBram Moolenaar call assert_equal([], g:Xgetlist()) 1935f9ae154cSBram Moolenaar 1936049cba9eSBram Moolenaar enew! 1937c1542744SBram Moolenaar call delete(fname) 19382b946c9fSBram Moolenaarendfunc 1939049cba9eSBram Moolenaar 19402b946c9fSBram Moolenaarfunc Test_adjust_lnum() 1941c1542744SBram Moolenaar call setloclist(0, []) 1942049cba9eSBram Moolenaar call Xadjust_qflnum('c') 1943c1542744SBram Moolenaar call setqflist([]) 1944049cba9eSBram Moolenaar call Xadjust_qflnum('l') 19452b946c9fSBram Moolenaarendfunc 1946049cba9eSBram Moolenaar 1947049cba9eSBram Moolenaar" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands 19482b946c9fSBram Moolenaarfunc s:test_xgrep(cchar) 1949049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 1950049cba9eSBram Moolenaar 1951049cba9eSBram Moolenaar " The following lines are used for the grep test. Don't remove. 1952049cba9eSBram Moolenaar " Grep_Test_Text: Match 1 1953049cba9eSBram Moolenaar " Grep_Test_Text: Match 2 1954049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 1 1955049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 2 1956049cba9eSBram Moolenaar enew! | only 1957049cba9eSBram Moolenaar set makeef&vim 1958049cba9eSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 195915a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 5) 1960049cba9eSBram Moolenaar Xopen 1961049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ '^:grep') 1962049cba9eSBram Moolenaar Xclose 1963049cba9eSBram Moolenaar enew 1964049cba9eSBram Moolenaar set makeef=Temp_File_## 1965049cba9eSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 196615a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 196715a7bdcbSBram Moolenaar 196815a7bdcbSBram Moolenaar " Try with 'grepprg' set to 'internal' 196915a7bdcbSBram Moolenaar set grepprg=internal 197015a7bdcbSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 197115a7bdcbSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 197215a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 197315a7bdcbSBram Moolenaar set grepprg&vim 1974f9ae154cSBram Moolenaar 1975f9ae154cSBram Moolenaar call writefile(['Vim'], 'XtestTempFile') 1976f9ae154cSBram Moolenaar set makeef=XtestTempFile 1977f9ae154cSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 197815a7bdcbSBram Moolenaar call assert_equal(5, len(g:Xgetlist())) 1979f9ae154cSBram Moolenaar call assert_false(filereadable('XtestTempFile')) 1980f9ae154cSBram Moolenaar set makeef&vim 19812b946c9fSBram Moolenaarendfunc 1982049cba9eSBram Moolenaar 19832b946c9fSBram Moolenaarfunc Test_grep() 1984049cba9eSBram Moolenaar if !has('unix') 1985049cba9eSBram Moolenaar " The grepprg may not be set on non-Unix systems 1986049cba9eSBram Moolenaar return 1987049cba9eSBram Moolenaar endif 1988049cba9eSBram Moolenaar 1989049cba9eSBram Moolenaar call s:test_xgrep('c') 1990049cba9eSBram Moolenaar call s:test_xgrep('l') 19912b946c9fSBram Moolenaarendfunc 1992361c8f0eSBram Moolenaar 19932b946c9fSBram Moolenaarfunc Test_two_windows() 1994361c8f0eSBram Moolenaar " Use one 'errorformat' for two windows. Add an expression to each of them, 1995361c8f0eSBram Moolenaar " make sure they each keep their own state. 1996361c8f0eSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 1997361c8f0eSBram Moolenaar call mkdir('Xone/a', 'p') 1998361c8f0eSBram Moolenaar call mkdir('Xtwo/a', 'p') 1999361c8f0eSBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 2000361c8f0eSBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 2001361c8f0eSBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 2002361c8f0eSBram Moolenaar 2003361c8f0eSBram Moolenaar new one 2004361c8f0eSBram Moolenaar let one_id = win_getid() 2005361c8f0eSBram Moolenaar lexpr "" 2006361c8f0eSBram Moolenaar new two 2007361c8f0eSBram Moolenaar let two_id = win_getid() 2008361c8f0eSBram Moolenaar lexpr "" 2009361c8f0eSBram Moolenaar 2010361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xtwo/a'" 2011361c8f0eSBram Moolenaar call win_gotoid(one_id) 2012361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xone/a'" 2013361c8f0eSBram Moolenaar call win_gotoid(two_id) 2014361c8f0eSBram Moolenaar laddexpr 'two.txt:5:two two two' 2015361c8f0eSBram Moolenaar call win_gotoid(one_id) 2016361c8f0eSBram Moolenaar laddexpr 'one.txt:3:one one one' 2017361c8f0eSBram Moolenaar 2018361c8f0eSBram Moolenaar let loc_one = getloclist(one_id) 2019361c8f0eSBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr)) 2020361c8f0eSBram Moolenaar call assert_equal(3, loc_one[1].lnum) 2021361c8f0eSBram Moolenaar 2022361c8f0eSBram Moolenaar let loc_two = getloclist(two_id) 2023361c8f0eSBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr)) 2024361c8f0eSBram Moolenaar call assert_equal(5, loc_two[1].lnum) 2025361c8f0eSBram Moolenaar 2026361c8f0eSBram Moolenaar call win_gotoid(one_id) 2027361c8f0eSBram Moolenaar bwipe! 2028361c8f0eSBram Moolenaar call win_gotoid(two_id) 2029361c8f0eSBram Moolenaar bwipe! 2030361c8f0eSBram Moolenaar call delete('Xone', 'rf') 2031361c8f0eSBram Moolenaar call delete('Xtwo', 'rf') 2032361c8f0eSBram Moolenaarendfunc 2033dcb17001SBram Moolenaar 20342b946c9fSBram Moolenaarfunc XbottomTests(cchar) 2035537ef084SBram Moolenaar call s:setup_commands(a:cchar) 2036537ef084SBram Moolenaar 2037b6fa30ccSBram Moolenaar " Calling lbottom without any errors should fail 2038b6fa30ccSBram Moolenaar if a:cchar == 'l' 2039b6fa30ccSBram Moolenaar call assert_fails('lbottom', 'E776:') 2040b6fa30ccSBram Moolenaar endif 2041b6fa30ccSBram Moolenaar 2042537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'foo', 'lnum': 42}]) 2043537ef084SBram Moolenaar Xopen 2044dcb17001SBram Moolenaar let wid = win_getid() 2045dcb17001SBram Moolenaar call assert_equal(1, line('.')) 2046dcb17001SBram Moolenaar wincmd w 2047537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'var', 'lnum': 24}], 'a') 2048537ef084SBram Moolenaar Xbottom 2049dcb17001SBram Moolenaar call win_gotoid(wid) 2050dcb17001SBram Moolenaar call assert_equal(2, line('.')) 2051537ef084SBram Moolenaar Xclose 2052dcb17001SBram Moolenaarendfunc 2053537ef084SBram Moolenaar 2054537ef084SBram Moolenaar" Tests for the :cbottom and :lbottom commands 20552b946c9fSBram Moolenaarfunc Test_cbottom() 2056537ef084SBram Moolenaar call XbottomTests('c') 2057537ef084SBram Moolenaar call XbottomTests('l') 20582b946c9fSBram Moolenaarendfunc 2059f6acffbeSBram Moolenaar 20602b946c9fSBram Moolenaarfunc HistoryTest(cchar) 2061f6acffbeSBram Moolenaar call s:setup_commands(a:cchar) 2062f6acffbeSBram Moolenaar 2063f6acffbeSBram Moolenaar " clear all lists after the first one, then replace the first one. 2064f6acffbeSBram Moolenaar call g:Xsetlist([]) 2065b6fa30ccSBram Moolenaar call assert_fails('Xolder 99', 'E380:') 2066f6acffbeSBram Moolenaar let entry = {'filename': 'foo', 'lnum': 42} 2067f6acffbeSBram Moolenaar call g:Xsetlist([entry], 'r') 2068f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry]) 2069f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry, entry]) 2070f6acffbeSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 2071f6acffbeSBram Moolenaar call assert_equal(3, len(res)) 2072f6acffbeSBram Moolenaar let common = 'errors :set' . (a:cchar == 'c' ? 'qf' : 'loc') . 'list()' 2073f6acffbeSBram Moolenaar call assert_equal(' error list 1 of 3; 1 ' . common, res[0]) 2074f6acffbeSBram Moolenaar call assert_equal(' error list 2 of 3; 2 ' . common, res[1]) 2075f6acffbeSBram Moolenaar call assert_equal('> error list 3 of 3; 3 ' . common, res[2]) 2076b4d5fbabSBram Moolenaar 20778ffc7c8bSBram Moolenaar " Test for changing the quickfix lists 20788ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 20798ffc7c8bSBram Moolenaar exe '1' . a:cchar . 'hist' 20808ffc7c8bSBram Moolenaar call assert_equal(1, g:Xgetlist({'nr' : 0}).nr) 20818ffc7c8bSBram Moolenaar exe '3' . a:cchar . 'hist' 20828ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 20838ffc7c8bSBram Moolenaar call assert_fails('-2' . a:cchar . 'hist', 'E16:') 20848ffc7c8bSBram Moolenaar call assert_fails('4' . a:cchar . 'hist', 'E16:') 20858ffc7c8bSBram Moolenaar 2086b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 2087b4d5fbabSBram Moolenaar let l = split(execute(a:cchar . 'hist'), "\n") 2088b4d5fbabSBram Moolenaar call assert_equal('No entries', l[0]) 20898ffc7c8bSBram Moolenaar if a:cchar == 'c' 20908ffc7c8bSBram Moolenaar call assert_fails('4chist', 'E16:') 20918ffc7c8bSBram Moolenaar else 20928ffc7c8bSBram Moolenaar call assert_fails('4lhist', 'E776:') 20938ffc7c8bSBram Moolenaar endif 20945b69c22fSBram Moolenaar 20955b69c22fSBram Moolenaar " An empty list should still show the stack history 20965b69c22fSBram Moolenaar call g:Xsetlist([]) 20975b69c22fSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 20985b69c22fSBram Moolenaar call assert_equal('> error list 1 of 1; 0 ' . common, res[0]) 20995b69c22fSBram Moolenaar 21005b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 2101f6acffbeSBram Moolenaarendfunc 2102f6acffbeSBram Moolenaar 2103f6acffbeSBram Moolenaarfunc Test_history() 2104f6acffbeSBram Moolenaar call HistoryTest('c') 2105f6acffbeSBram Moolenaar call HistoryTest('l') 2106f6acffbeSBram Moolenaarendfunc 2107015102e9SBram Moolenaar 2108015102e9SBram Moolenaarfunc Test_duplicate_buf() 2109015102e9SBram Moolenaar " make sure we can get the highest buffer number 2110015102e9SBram Moolenaar edit DoesNotExist 2111015102e9SBram Moolenaar edit DoesNotExist2 2112015102e9SBram Moolenaar let last_buffer = bufnr("$") 2113015102e9SBram Moolenaar 2114015102e9SBram Moolenaar " make sure only one buffer is created 2115015102e9SBram Moolenaar call writefile(['this one', 'that one'], 'Xgrepthis') 2116015102e9SBram Moolenaar vimgrep one Xgrepthis 2117015102e9SBram Moolenaar vimgrep one Xgrepthis 2118015102e9SBram Moolenaar call assert_equal(last_buffer + 1, bufnr("$")) 2119015102e9SBram Moolenaar 2120015102e9SBram Moolenaar call delete('Xgrepthis') 2121015102e9SBram Moolenaarendfunc 2122d823fa91SBram Moolenaar 2123d823fa91SBram Moolenaar" Quickfix/Location list set/get properties tests 21242b946c9fSBram Moolenaarfunc Xproperty_tests(cchar) 2125d823fa91SBram Moolenaar call s:setup_commands(a:cchar) 2126d823fa91SBram Moolenaar 2127d823fa91SBram Moolenaar " Error cases 2128d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist(99)', 'E715:') 2129d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist(99)', 'E714:') 2130d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 2131d823fa91SBram Moolenaar 2132d823fa91SBram Moolenaar " Set and get the title 2133b6fa30ccSBram Moolenaar call g:Xsetlist([]) 2134d823fa91SBram Moolenaar Xopen 2135d823fa91SBram Moolenaar wincmd p 2136d823fa91SBram Moolenaar call g:Xsetlist([{'filename':'foo', 'lnum':27}]) 213786f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'title' : 'Sample'}) 213886f100dcSBram Moolenaar call assert_equal(0, s) 2139d823fa91SBram Moolenaar let d = g:Xgetlist({"title":1}) 2140d823fa91SBram Moolenaar call assert_equal('Sample', d.title) 2141a2aa8a2bSBram Moolenaar " Try setting title to a non-string value 2142a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'title' : ['Test']})) 2143a2aa8a2bSBram Moolenaar call assert_equal('Sample', g:Xgetlist({"title":1}).title) 2144d823fa91SBram Moolenaar 2145d823fa91SBram Moolenaar Xopen 2146d823fa91SBram Moolenaar call assert_equal('Sample', w:quickfix_title) 2147d823fa91SBram Moolenaar Xclose 2148d823fa91SBram Moolenaar 21492b529bb6SBram Moolenaar " Tests for action argument 21502b529bb6SBram Moolenaar silent! Xolder 999 21512b529bb6SBram Moolenaar let qfnr = g:Xgetlist({'all':1}).nr 21522b529bb6SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'N1'}) 21532b529bb6SBram Moolenaar call assert_equal('N1', g:Xgetlist({'all':1}).title) 21542b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N2'}) 21552b529bb6SBram Moolenaar call assert_equal(qfnr + 1, g:Xgetlist({'all':1}).nr) 2156890680caSBram Moolenaar 2157890680caSBram Moolenaar let res = g:Xgetlist({'nr': 0}) 2158890680caSBram Moolenaar call assert_equal(qfnr + 1, res.nr) 2159890680caSBram Moolenaar call assert_equal(['nr'], keys(res)) 2160890680caSBram Moolenaar 21612b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N3'}) 21622b529bb6SBram Moolenaar call assert_equal('N2', g:Xgetlist({'nr':2, 'title':1}).title) 21632b529bb6SBram Moolenaar 2164ee85df37SBram Moolenaar " Changing the title of an earlier quickfix list 216555b69264SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'NewTitle', 'nr' : 2}) 2166ee85df37SBram Moolenaar call assert_equal('NewTitle', g:Xgetlist({'nr':2, 'title':1}).title) 2167ee85df37SBram Moolenaar 2168ee85df37SBram Moolenaar " Changing the title of an invalid quickfix list 2169ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2170ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 99})) 2171ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2172ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 'abc'})) 2173ee85df37SBram Moolenaar 2174ee85df37SBram Moolenaar if a:cchar == 'c' 2175ee85df37SBram Moolenaar copen 2176ee85df37SBram Moolenaar call assert_equal({'winid':win_getid()}, getqflist({'winid':1})) 2177ee85df37SBram Moolenaar cclose 2178ee85df37SBram Moolenaar endif 2179ee85df37SBram Moolenaar 2180d823fa91SBram Moolenaar " Invalid arguments 2181d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist([])', 'E715') 2182d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715') 2183d823fa91SBram Moolenaar let s = g:Xsetlist([], 'a', {'abc':1}) 2184d823fa91SBram Moolenaar call assert_equal(-1, s) 2185d823fa91SBram Moolenaar 2186d823fa91SBram Moolenaar call assert_equal({}, g:Xgetlist({'abc':1})) 2187a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':99, 'title':1}).title) 2188a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':[], 'title':1}).title) 2189d823fa91SBram Moolenaar 2190d823fa91SBram Moolenaar if a:cchar == 'l' 2191890680caSBram Moolenaar call assert_equal({}, getloclist(99, {'title': 1})) 2192d823fa91SBram Moolenaar endif 21938f77c5a4SBram Moolenaar 21948f77c5a4SBram Moolenaar " Context related tests 219586f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'context':[1,2,3]}) 219686f100dcSBram Moolenaar call assert_equal(0, s) 21978f77c5a4SBram Moolenaar call test_garbagecollect_now() 21988f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 21998f77c5a4SBram Moolenaar call assert_equal([1,2,3], d.context) 22008f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':{'color':'green'}}) 22018f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22028f77c5a4SBram Moolenaar call assert_equal({'color':'green'}, d.context) 22038f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':"Context info"}) 22048f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22058f77c5a4SBram Moolenaar call assert_equal("Context info", d.context) 22068f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':246}) 22078f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 22088f77c5a4SBram Moolenaar call assert_equal(246, d.context) 220992b83ccfSBram Moolenaar " set other Vim data types as context 221092b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_blob()}) 221192b83ccfSBram Moolenaar if has('channel') 221292b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_channel()}) 221392b83ccfSBram Moolenaar endif 221492b83ccfSBram Moolenaar if has('job') 221592b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_job()}) 221692b83ccfSBram Moolenaar endif 221792b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_function()}) 221892b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_partial()}) 221992b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : ''}) 222092b83ccfSBram Moolenaar call test_garbagecollect_now() 22218f77c5a4SBram Moolenaar if a:cchar == 'l' 22228f77c5a4SBram Moolenaar " Test for copying context across two different location lists 22238f77c5a4SBram Moolenaar new | only 22248f77c5a4SBram Moolenaar let w1_id = win_getid() 22258f77c5a4SBram Moolenaar let l = [1] 22268f77c5a4SBram Moolenaar call setloclist(0, [], 'a', {'context':l}) 22278f77c5a4SBram Moolenaar new 22288f77c5a4SBram Moolenaar let w2_id = win_getid() 22298f77c5a4SBram Moolenaar call add(l, 2) 22308f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w1_id, {'context':1}).context) 22318f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 22328f77c5a4SBram Moolenaar unlet! l 22338f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 22348f77c5a4SBram Moolenaar only 22358f77c5a4SBram Moolenaar call setloclist(0, [], 'f') 2236a6d4849cSBram Moolenaar call assert_equal('', getloclist(0, {'context':1}).context) 22378f77c5a4SBram Moolenaar endif 22386e62da3eSBram Moolenaar 22396e62da3eSBram Moolenaar " Test for changing the context of previous quickfix lists 22406e62da3eSBram Moolenaar call g:Xsetlist([], 'f') 22416e62da3eSBram Moolenaar Xexpr "One" 22426e62da3eSBram Moolenaar Xexpr "Two" 22436e62da3eSBram Moolenaar Xexpr "Three" 224455b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [1], 'nr' : 1}) 224555b69264SBram Moolenaar call g:Xsetlist([], 'a', {'context' : [2], 'nr' : 2}) 22466e62da3eSBram Moolenaar " Also, check for setting the context using quickfix list number zero. 224755b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [3], 'nr' : 0}) 22486e62da3eSBram Moolenaar call test_garbagecollect_now() 22496e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 1, 'context' : 1}) 22506e62da3eSBram Moolenaar call assert_equal([1], l.context) 22516e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 2, 'context' : 1}) 22526e62da3eSBram Moolenaar call assert_equal([2], l.context) 22536e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 3, 'context' : 1}) 22546e62da3eSBram Moolenaar call assert_equal([3], l.context) 22556e62da3eSBram Moolenaar 22566e62da3eSBram Moolenaar " Test for changing the context through reference and for garbage 22576e62da3eSBram Moolenaar " collection of quickfix context 22586e62da3eSBram Moolenaar let l = ["red"] 22596e62da3eSBram Moolenaar call g:Xsetlist([], ' ', {'context' : l}) 22606e62da3eSBram Moolenaar call add(l, "blue") 22616e62da3eSBram Moolenaar let x = g:Xgetlist({'context' : 1}) 22626e62da3eSBram Moolenaar call add(x.context, "green") 22636e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], l) 22646e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], x.context) 22656e62da3eSBram Moolenaar unlet l 22666e62da3eSBram Moolenaar call test_garbagecollect_now() 22676e62da3eSBram Moolenaar let m = g:Xgetlist({'context' : 1}) 22686e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], m.context) 22696a8958dbSBram Moolenaar 22706a8958dbSBram Moolenaar " Test for setting/getting items 22716a8958dbSBram Moolenaar Xexpr "" 22726a8958dbSBram Moolenaar let qfprev = g:Xgetlist({'nr':0}) 227386f100dcSBram Moolenaar let s = g:Xsetlist([], ' ', {'title':'Green', 22746a8958dbSBram Moolenaar \ 'items' : [{'filename':'F1', 'lnum':10}]}) 227586f100dcSBram Moolenaar call assert_equal(0, s) 22766a8958dbSBram Moolenaar let qfcur = g:Xgetlist({'nr':0}) 22776a8958dbSBram Moolenaar call assert_true(qfcur.nr == qfprev.nr + 1) 22786a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 22796a8958dbSBram Moolenaar call assert_equal('F1', bufname(l.items[0].bufnr)) 22806a8958dbSBram Moolenaar call assert_equal(10, l.items[0].lnum) 22816a8958dbSBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F2', 'lnum':20}, 22826a8958dbSBram Moolenaar \ {'filename':'F2', 'lnum':30}]}) 22836a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 22846a8958dbSBram Moolenaar call assert_equal('F2', bufname(l.items[2].bufnr)) 22856a8958dbSBram Moolenaar call assert_equal(30, l.items[2].lnum) 22866a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename':'F3', 'lnum':40}]}) 22876a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 22886a8958dbSBram Moolenaar call assert_equal('F3', bufname(l.items[0].bufnr)) 22896a8958dbSBram Moolenaar call assert_equal(40, l.items[0].lnum) 22906a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 22916a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 22926a8958dbSBram Moolenaar call assert_equal(0, len(l.items)) 22936a8958dbSBram Moolenaar 2294b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'TestTitle'}) 2295b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2296b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2297b4d5fbabSBram Moolenaar call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title) 2298b4d5fbabSBram Moolenaar 2299c9cc9c78SBram Moolenaar " Test for getting id of window associated with a location list window 2300c9cc9c78SBram Moolenaar if a:cchar == 'l' 2301c9cc9c78SBram Moolenaar only 2302c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'all' : 1}).filewinid) 2303c9cc9c78SBram Moolenaar let wid = win_getid() 2304c9cc9c78SBram Moolenaar Xopen 2305c9cc9c78SBram Moolenaar call assert_equal(wid, g:Xgetlist({'filewinid' : 1}).filewinid) 2306c9cc9c78SBram Moolenaar wincmd w 2307c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'filewinid' : 1}).filewinid) 2308c9cc9c78SBram Moolenaar only 2309c9cc9c78SBram Moolenaar endif 2310c9cc9c78SBram Moolenaar 2311ae338338SBram Moolenaar " The following used to crash Vim with address sanitizer 2312ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2313ae338338SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]}) 2314ae338338SBram Moolenaar call assert_equal(10, g:Xgetlist({'items':1}).items[0].lnum) 2315ae338338SBram Moolenaar 2316a2aa8a2bSBram Moolenaar " Try setting the items using a string 2317a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'items' : 'Test'})) 2318a2aa8a2bSBram Moolenaar 23196a8958dbSBram Moolenaar " Save and restore the quickfix stack 23206a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23216a8958dbSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 23226a8958dbSBram Moolenaar Xexpr "File1:10:Line1" 23236a8958dbSBram Moolenaar Xexpr "File2:20:Line2" 23246a8958dbSBram Moolenaar Xexpr "File3:30:Line3" 23256a8958dbSBram Moolenaar let last_qf = g:Xgetlist({'nr':'$'}).nr 23266a8958dbSBram Moolenaar call assert_equal(3, last_qf) 23276a8958dbSBram Moolenaar let qstack = [] 23286a8958dbSBram Moolenaar for i in range(1, last_qf) 23296a8958dbSBram Moolenaar let qstack = add(qstack, g:Xgetlist({'nr':i, 'all':1})) 23306a8958dbSBram Moolenaar endfor 23316a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23326a8958dbSBram Moolenaar for i in range(len(qstack)) 23336a8958dbSBram Moolenaar call g:Xsetlist([], ' ', qstack[i]) 23346a8958dbSBram Moolenaar endfor 23356a8958dbSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 23366a8958dbSBram Moolenaar call assert_equal(10, g:Xgetlist({'nr':1, 'items':1}).items[0].lnum) 23376a8958dbSBram Moolenaar call assert_equal(20, g:Xgetlist({'nr':2, 'items':1}).items[0].lnum) 23386a8958dbSBram Moolenaar call assert_equal(30, g:Xgetlist({'nr':3, 'items':1}).items[0].lnum) 23396a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 23406a8958dbSBram Moolenaar 23416a8958dbSBram Moolenaar " Swap two quickfix lists 23426a8958dbSBram Moolenaar Xexpr "File1:10:Line10" 23436a8958dbSBram Moolenaar Xexpr "File2:20:Line20" 23446a8958dbSBram Moolenaar Xexpr "File3:30:Line30" 23456a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':1,'title':'Colors','context':['Colors']}) 23466a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':2,'title':'Fruits','context':['Fruits']}) 23476a8958dbSBram Moolenaar let l1=g:Xgetlist({'nr':1,'all':1}) 23486a8958dbSBram Moolenaar let l2=g:Xgetlist({'nr':2,'all':1}) 2349a539f4f1SBram Moolenaar let save_id = l1.id 2350a539f4f1SBram Moolenaar let l1.id=l2.id 2351a539f4f1SBram Moolenaar let l2.id=save_id 23526a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l1) 23536a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l2) 23546a8958dbSBram Moolenaar let newl1=g:Xgetlist({'nr':1,'all':1}) 23556a8958dbSBram Moolenaar let newl2=g:Xgetlist({'nr':2,'all':1}) 2356b4d5fbabSBram Moolenaar call assert_equal('Fruits', newl1.title) 23576a8958dbSBram Moolenaar call assert_equal(['Fruits'], newl1.context) 23586a8958dbSBram Moolenaar call assert_equal('Line20', newl1.items[0].text) 2359b4d5fbabSBram Moolenaar call assert_equal('Colors', newl2.title) 23606a8958dbSBram Moolenaar call assert_equal(['Colors'], newl2.context) 23616a8958dbSBram Moolenaar call assert_equal('Line10', newl2.items[0].text) 23626a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 2363be7a50c2SBram Moolenaar 2364be7a50c2SBram Moolenaar " Cannot specify both a non-empty list argument and a dict argument 2365be7a50c2SBram Moolenaar call assert_fails("call g:Xsetlist([{}], ' ', {})", 'E475:') 23662b946c9fSBram Moolenaarendfunc 2367d823fa91SBram Moolenaar 23682b946c9fSBram Moolenaarfunc Test_qf_property() 2369d823fa91SBram Moolenaar call Xproperty_tests('c') 2370d823fa91SBram Moolenaar call Xproperty_tests('l') 23712b946c9fSBram Moolenaarendfunc 237204c4ce65SBram Moolenaar 23735b69c22fSBram Moolenaar" Test for setting the current index in the location/quickfix list 23745b69c22fSBram Moolenaarfunc Xtest_setqfidx(cchar) 23755b69c22fSBram Moolenaar call s:setup_commands(a:cchar) 23765b69c22fSBram Moolenaar 23775b69c22fSBram Moolenaar Xgetexpr "F1:10:1:Line1\nF2:20:2:Line2\nF3:30:3:Line3" 23785b69c22fSBram Moolenaar Xgetexpr "F4:10:1:Line1\nF5:20:2:Line2\nF6:30:3:Line3" 23795b69c22fSBram Moolenaar Xgetexpr "F7:10:1:Line1\nF8:20:2:Line2\nF9:30:3:Line3" 23805b69c22fSBram Moolenaar 23815b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 2}) 23825b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'idx' : 2}) 23835b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 3}) 23845b69c22fSBram Moolenaar Xolder 2 23855b69c22fSBram Moolenaar Xopen 23865b69c22fSBram Moolenaar call assert_equal(3, line('.')) 23875b69c22fSBram Moolenaar Xnewer 23885b69c22fSBram Moolenaar call assert_equal(2, line('.')) 23895b69c22fSBram Moolenaar Xnewer 23905b69c22fSBram Moolenaar call assert_equal(2, line('.')) 23915b69c22fSBram Moolenaar " Update the current index with the quickfix window open 23925b69c22fSBram Moolenaar wincmd w 23935b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 3}) 23945b69c22fSBram Moolenaar Xopen 23955b69c22fSBram Moolenaar call assert_equal(3, line('.')) 23965b69c22fSBram Moolenaar Xclose 23975b69c22fSBram Moolenaar 23985b69c22fSBram Moolenaar " Set the current index to the last entry 23995b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : '$'}) 24005b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24015b69c22fSBram Moolenaar " A large value should set the index to the last index 24025b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 1}) 24035b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 999}) 24045b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24055b69c22fSBram Moolenaar " Invalid index values 24065b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : -1}) 24075b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24085b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 0}) 24095b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24105b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 'xx'}) 24115b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 24125b69c22fSBram Moolenaar call assert_fails("call g:Xsetlist([], 'a', {'nr':1, 'idx':[]})", 'E745:') 24135b69c22fSBram Moolenaar 24145b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 24155b69c22fSBram Moolenaar new | only 24165b69c22fSBram Moolenaarendfunc 24175b69c22fSBram Moolenaar 24185b69c22fSBram Moolenaarfunc Test_setqfidx() 24195b69c22fSBram Moolenaar call Xtest_setqfidx('c') 24205b69c22fSBram Moolenaar call Xtest_setqfidx('l') 24215b69c22fSBram Moolenaarendfunc 24225b69c22fSBram Moolenaar 242304c4ce65SBram Moolenaar" Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands 24242b946c9fSBram Moolenaarfunc QfAutoCmdHandler(loc, cmd) 242504c4ce65SBram Moolenaar call add(g:acmds, a:loc . a:cmd) 24262b946c9fSBram Moolenaarendfunc 242704c4ce65SBram Moolenaar 24282b946c9fSBram Moolenaarfunc Test_Autocmd() 242904c4ce65SBram Moolenaar autocmd QuickFixCmdPre * call QfAutoCmdHandler('pre', expand('<amatch>')) 243004c4ce65SBram Moolenaar autocmd QuickFixCmdPost * call QfAutoCmdHandler('post', expand('<amatch>')) 243104c4ce65SBram Moolenaar 243204c4ce65SBram Moolenaar let g:acmds = [] 243304c4ce65SBram Moolenaar cexpr "F1:10:Line 10" 243404c4ce65SBram Moolenaar caddexpr "F1:20:Line 20" 243504c4ce65SBram Moolenaar cgetexpr "F1:30:Line 30" 24361ed2276fSBram Moolenaar cexpr "" 24371ed2276fSBram Moolenaar caddexpr "" 24381ed2276fSBram Moolenaar cgetexpr "" 24391ed2276fSBram Moolenaar silent! cexpr non_existing_func() 24401ed2276fSBram Moolenaar silent! caddexpr non_existing_func() 24411ed2276fSBram Moolenaar silent! cgetexpr non_existing_func() 244204c4ce65SBram Moolenaar let l = ['precexpr', 244304c4ce65SBram Moolenaar \ 'postcexpr', 244404c4ce65SBram Moolenaar \ 'precaddexpr', 244504c4ce65SBram Moolenaar \ 'postcaddexpr', 244604c4ce65SBram Moolenaar \ 'precgetexpr', 244704c4ce65SBram Moolenaar \ 'postcgetexpr', 24481ed2276fSBram Moolenaar \ 'precexpr', 24491ed2276fSBram Moolenaar \ 'postcexpr', 24501ed2276fSBram Moolenaar \ 'precaddexpr', 24511ed2276fSBram Moolenaar \ 'postcaddexpr', 24521ed2276fSBram Moolenaar \ 'precgetexpr', 24531ed2276fSBram Moolenaar \ 'postcgetexpr', 24541ed2276fSBram Moolenaar \ 'precexpr', 24551ed2276fSBram Moolenaar \ 'precaddexpr', 24561ed2276fSBram Moolenaar \ 'precgetexpr'] 24571ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 24581ed2276fSBram Moolenaar 24591ed2276fSBram Moolenaar let g:acmds = [] 24601ed2276fSBram Moolenaar enew! | call append(0, "F2:10:Line 10") 24611ed2276fSBram Moolenaar cbuffer! 24621ed2276fSBram Moolenaar enew! | call append(0, "F2:20:Line 20") 24631ed2276fSBram Moolenaar cgetbuffer 24641ed2276fSBram Moolenaar enew! | call append(0, "F2:30:Line 30") 24651ed2276fSBram Moolenaar caddbuffer 24661ed2276fSBram Moolenaar new 24671ed2276fSBram Moolenaar let bnum = bufnr('%') 24681ed2276fSBram Moolenaar bunload 24691ed2276fSBram Moolenaar exe 'silent! cbuffer! ' . bnum 24701ed2276fSBram Moolenaar exe 'silent! cgetbuffer ' . bnum 24711ed2276fSBram Moolenaar exe 'silent! caddbuffer ' . bnum 24721ed2276fSBram Moolenaar enew! 24731ed2276fSBram Moolenaar let l = ['precbuffer', 247404c4ce65SBram Moolenaar \ 'postcbuffer', 247504c4ce65SBram Moolenaar \ 'precgetbuffer', 247604c4ce65SBram Moolenaar \ 'postcgetbuffer', 247704c4ce65SBram Moolenaar \ 'precaddbuffer', 24781ed2276fSBram Moolenaar \ 'postcaddbuffer', 24791ed2276fSBram Moolenaar \ 'precbuffer', 24801ed2276fSBram Moolenaar \ 'precgetbuffer', 24811ed2276fSBram Moolenaar \ 'precaddbuffer'] 248204c4ce65SBram Moolenaar call assert_equal(l, g:acmds) 24831ed2276fSBram Moolenaar 24841ed2276fSBram Moolenaar call writefile(['Xtest:1:Line1'], 'Xtest') 24851ed2276fSBram Moolenaar call writefile([], 'Xempty') 24861ed2276fSBram Moolenaar let g:acmds = [] 24871ed2276fSBram Moolenaar cfile Xtest 24881ed2276fSBram Moolenaar caddfile Xtest 24891ed2276fSBram Moolenaar cgetfile Xtest 24901ed2276fSBram Moolenaar cfile Xempty 24911ed2276fSBram Moolenaar caddfile Xempty 24921ed2276fSBram Moolenaar cgetfile Xempty 24931ed2276fSBram Moolenaar silent! cfile do_not_exist 24941ed2276fSBram Moolenaar silent! caddfile do_not_exist 24951ed2276fSBram Moolenaar silent! cgetfile do_not_exist 24961ed2276fSBram Moolenaar let l = ['precfile', 24971ed2276fSBram Moolenaar \ 'postcfile', 24981ed2276fSBram Moolenaar \ 'precaddfile', 24991ed2276fSBram Moolenaar \ 'postcaddfile', 25001ed2276fSBram Moolenaar \ 'precgetfile', 25011ed2276fSBram Moolenaar \ 'postcgetfile', 25021ed2276fSBram Moolenaar \ 'precfile', 25031ed2276fSBram Moolenaar \ 'postcfile', 25041ed2276fSBram Moolenaar \ 'precaddfile', 25051ed2276fSBram Moolenaar \ 'postcaddfile', 25061ed2276fSBram Moolenaar \ 'precgetfile', 25071ed2276fSBram Moolenaar \ 'postcgetfile', 25081ed2276fSBram Moolenaar \ 'precfile', 25091ed2276fSBram Moolenaar \ 'postcfile', 25101ed2276fSBram Moolenaar \ 'precaddfile', 25111ed2276fSBram Moolenaar \ 'postcaddfile', 25121ed2276fSBram Moolenaar \ 'precgetfile', 25131ed2276fSBram Moolenaar \ 'postcgetfile'] 25141ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25151ed2276fSBram Moolenaar 25161ed2276fSBram Moolenaar let g:acmds = [] 25171ed2276fSBram Moolenaar helpgrep quickfix 25181ed2276fSBram Moolenaar silent! helpgrep non_existing_help_topic 25191ed2276fSBram Moolenaar vimgrep test Xtest 25201ed2276fSBram Moolenaar vimgrepadd test Xtest 25211ed2276fSBram Moolenaar silent! vimgrep non_existing_test Xtest 25221ed2276fSBram Moolenaar silent! vimgrepadd non_existing_test Xtest 25231ed2276fSBram Moolenaar set makeprg= 25241ed2276fSBram Moolenaar silent! make 25251ed2276fSBram Moolenaar set makeprg& 25261ed2276fSBram Moolenaar let l = ['prehelpgrep', 25271ed2276fSBram Moolenaar \ 'posthelpgrep', 25281ed2276fSBram Moolenaar \ 'prehelpgrep', 25291ed2276fSBram Moolenaar \ 'posthelpgrep', 25301ed2276fSBram Moolenaar \ 'previmgrep', 25311ed2276fSBram Moolenaar \ 'postvimgrep', 25321ed2276fSBram Moolenaar \ 'previmgrepadd', 25331ed2276fSBram Moolenaar \ 'postvimgrepadd', 25341ed2276fSBram Moolenaar \ 'previmgrep', 25351ed2276fSBram Moolenaar \ 'postvimgrep', 25361ed2276fSBram Moolenaar \ 'previmgrepadd', 25371ed2276fSBram Moolenaar \ 'postvimgrepadd', 25381ed2276fSBram Moolenaar \ 'premake', 25391ed2276fSBram Moolenaar \ 'postmake'] 25401ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25411ed2276fSBram Moolenaar 25421ed2276fSBram Moolenaar if has('unix') 25431ed2276fSBram Moolenaar " Run this test only on Unix-like systems. The grepprg may not be set on 25441ed2276fSBram Moolenaar " non-Unix systems. 25451ed2276fSBram Moolenaar " The following lines are used for the grep test. Don't remove. 25461ed2276fSBram Moolenaar " Grep_Autocmd_Text: Match 1 25471ed2276fSBram Moolenaar " GrepAdd_Autocmd_Text: Match 2 25481ed2276fSBram Moolenaar let g:acmds = [] 25491ed2276fSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 25501ed2276fSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 25511ed2276fSBram Moolenaar silent grep abc123def Xtest 25521ed2276fSBram Moolenaar silent grepadd abc123def Xtest 255315a7bdcbSBram Moolenaar set grepprg=internal 255415a7bdcbSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 255515a7bdcbSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 255615a7bdcbSBram Moolenaar silent lgrep Grep_Autocmd_Text test_quickfix.vim 255715a7bdcbSBram Moolenaar silent lgrepadd GrepAdd_Autocmd_Text test_quickfix.vim 255815a7bdcbSBram Moolenaar set grepprg&vim 25591ed2276fSBram Moolenaar let l = ['pregrep', 25601ed2276fSBram Moolenaar \ 'postgrep', 25611ed2276fSBram Moolenaar \ 'pregrepadd', 25621ed2276fSBram Moolenaar \ 'postgrepadd', 25631ed2276fSBram Moolenaar \ 'pregrep', 25641ed2276fSBram Moolenaar \ 'postgrep', 25651ed2276fSBram Moolenaar \ 'pregrepadd', 256615a7bdcbSBram Moolenaar \ 'postgrepadd', 256715a7bdcbSBram Moolenaar \ 'pregrep', 256815a7bdcbSBram Moolenaar \ 'postgrep', 256915a7bdcbSBram Moolenaar \ 'pregrepadd', 257015a7bdcbSBram Moolenaar \ 'postgrepadd', 257115a7bdcbSBram Moolenaar \ 'prelgrep', 257215a7bdcbSBram Moolenaar \ 'postlgrep', 257315a7bdcbSBram Moolenaar \ 'prelgrepadd', 257415a7bdcbSBram Moolenaar \ 'postlgrepadd'] 25751ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25761ed2276fSBram Moolenaar endif 25771ed2276fSBram Moolenaar 25781ed2276fSBram Moolenaar call delete('Xtest') 25791ed2276fSBram Moolenaar call delete('Xempty') 2580b254af31SBram Moolenaar au! QuickFixCmdPre 2581b254af31SBram Moolenaar au! QuickFixCmdPost 25822b946c9fSBram Moolenaarendfunc 258321662be2SBram Moolenaar 25842b946c9fSBram Moolenaarfunc Test_Autocmd_Exception() 258521662be2SBram Moolenaar set efm=%m 258621662be2SBram Moolenaar lgetexpr '?' 258721662be2SBram Moolenaar 258821662be2SBram Moolenaar try 258921662be2SBram Moolenaar call DoesNotExit() 259021662be2SBram Moolenaar catch 259121662be2SBram Moolenaar lgetexpr '1' 259221662be2SBram Moolenaar finally 259321662be2SBram Moolenaar lgetexpr '1' 259421662be2SBram Moolenaar endtry 259521662be2SBram Moolenaar 259621662be2SBram Moolenaar call assert_equal('1', getloclist(0)[0].text) 259721662be2SBram Moolenaar 259821662be2SBram Moolenaar set efm&vim 25992b946c9fSBram Moolenaarendfunc 260063bed3d3SBram Moolenaar 26012b946c9fSBram Moolenaarfunc Test_caddbuffer_wrong() 26022b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 260363bed3d3SBram Moolenaar let save_efm = &efm 260463bed3d3SBram Moolenaar set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.# 260563bed3d3SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 260663bed3d3SBram Moolenaar let &efm = save_efm 26072b946c9fSBram Moolenaar caddbuffer 260863bed3d3SBram Moolenaar bwipe! 260963bed3d3SBram Moolenaarendfunc 26102b946c9fSBram Moolenaar 26112b946c9fSBram Moolenaarfunc Test_caddexpr_wrong() 26122b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 26132b946c9fSBram Moolenaar cbuffer 26142b946c9fSBram Moolenaar cbuffer 26152b946c9fSBram Moolenaar copen 26162b946c9fSBram Moolenaar let save_efm = &efm 26172b946c9fSBram Moolenaar set efm=% 26182b946c9fSBram Moolenaar call assert_fails('caddexpr ""', 'E376:') 26192b946c9fSBram Moolenaar let &efm = save_efm 26202b946c9fSBram Moolenaarendfunc 26217618e00dSBram Moolenaar 26227618e00dSBram Moolenaarfunc Test_dirstack_cleanup() 26237618e00dSBram Moolenaar " This used to cause a memory access in freed memory. 26247618e00dSBram Moolenaar let save_efm = &efm 26257618e00dSBram Moolenaar lexpr '0' 26267618e00dSBram Moolenaar lopen 26277618e00dSBram Moolenaar fun X(c) 26287618e00dSBram Moolenaar let save_efm=&efm 26297618e00dSBram Moolenaar set efm=%D%f 26307618e00dSBram Moolenaar if a:c == 'c' 26317618e00dSBram Moolenaar caddexpr '::' 26327618e00dSBram Moolenaar else 26337618e00dSBram Moolenaar laddexpr ':0:0' 26347618e00dSBram Moolenaar endif 26357618e00dSBram Moolenaar let &efm=save_efm 26367618e00dSBram Moolenaar endfun 26377618e00dSBram Moolenaar call X('c') 26387618e00dSBram Moolenaar call X('l') 26397618e00dSBram Moolenaar call setqflist([], 'r') 26407618e00dSBram Moolenaar caddbuffer 26417618e00dSBram Moolenaar let &efm = save_efm 26427618e00dSBram Moolenaarendfunc 2643391b1dd0SBram Moolenaar 2644391b1dd0SBram Moolenaar" Tests for jumping to entries from the location list window and quickfix 2645391b1dd0SBram Moolenaar" window 2646391b1dd0SBram Moolenaarfunc Test_cwindow_jump() 2647391b1dd0SBram Moolenaar set efm=%f%%%l%%%m 2648391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2649391b1dd0SBram Moolenaar lopen | only 2650391b1dd0SBram Moolenaar lfirst 2651391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2652391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2653391b1dd0SBram Moolenaar " Location list for the new window should be set 2654391b1dd0SBram Moolenaar call assert_true(getloclist(0)[2].text == 'Line 30') 2655391b1dd0SBram Moolenaar 2656391b1dd0SBram Moolenaar " Open a scratch buffer 2657391b1dd0SBram Moolenaar " Open a new window and create a location list 2658391b1dd0SBram Moolenaar " Open the location list window and close the other window 2659391b1dd0SBram Moolenaar " Jump to an entry. 2660eeb1b9c7SBram Moolenaar " Should create a new window and jump to the entry. The scratch buffer 2661391b1dd0SBram Moolenaar " should not be used. 2662391b1dd0SBram Moolenaar enew | only 2663391b1dd0SBram Moolenaar set buftype=nofile 2664391b1dd0SBram Moolenaar below new 2665391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2666391b1dd0SBram Moolenaar lopen 2667391b1dd0SBram Moolenaar 2wincmd c 2668391b1dd0SBram Moolenaar lnext 2669391b1dd0SBram Moolenaar call assert_true(winnr('$') == 3) 2670391b1dd0SBram Moolenaar call assert_true(winnr() == 2) 2671391b1dd0SBram Moolenaar 2672391b1dd0SBram Moolenaar " Open two windows with two different location lists 2673391b1dd0SBram Moolenaar " Open the location list window and close the previous window 2674391b1dd0SBram Moolenaar " Jump to an entry in the location list window 2675391b1dd0SBram Moolenaar " Should open the file in the first window and not set the location list. 2676391b1dd0SBram Moolenaar enew | only 2677391b1dd0SBram Moolenaar lgetexpr ["F1%5%Line 5"] 2678391b1dd0SBram Moolenaar below new 2679391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2680391b1dd0SBram Moolenaar lopen 2681391b1dd0SBram Moolenaar 2wincmd c 2682391b1dd0SBram Moolenaar lnext 2683391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2684391b1dd0SBram Moolenaar call assert_true(getloclist(0)[0].text == 'Line 5') 2685391b1dd0SBram Moolenaar 2686391b1dd0SBram Moolenaar enew | only 2687391b1dd0SBram Moolenaar cgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2688391b1dd0SBram Moolenaar copen 2689391b1dd0SBram Moolenaar cnext 2690391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2691391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2692391b1dd0SBram Moolenaar 2693f9ae154cSBram Moolenaar " open the quickfix buffer in two windows and jump to an entry. Should open 2694f9ae154cSBram Moolenaar " the file in the first quickfix window. 2695f9ae154cSBram Moolenaar enew | only 2696f9ae154cSBram Moolenaar copen 2697f9ae154cSBram Moolenaar let bnum = bufnr('') 2698f9ae154cSBram Moolenaar exe 'sbuffer ' . bnum 2699f9ae154cSBram Moolenaar wincmd b 2700f9ae154cSBram Moolenaar cfirst 2701f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2702bdd2c290SBram Moolenaar call assert_equal('F1', @%) 2703f9ae154cSBram Moolenaar enew | only 2704f9ae154cSBram Moolenaar exe 'sb' bnum 2705f9ae154cSBram Moolenaar exe 'botright sb' bnum 2706f9ae154cSBram Moolenaar wincmd t 2707f9ae154cSBram Moolenaar clast 2708f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2709f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(1, '&buftype')) 2710f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(3, '&buftype')) 2711f9ae154cSBram Moolenaar 27124b96df5aSBram Moolenaar " Jumping to a file from the location list window should find a usable 271315a7bdcbSBram Moolenaar " window by wrapping around the window list. 271415a7bdcbSBram Moolenaar enew | only 271515a7bdcbSBram Moolenaar call setloclist(0, [], 'f') 271615a7bdcbSBram Moolenaar new | new 271715a7bdcbSBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 271815a7bdcbSBram Moolenaar lopen 271915a7bdcbSBram Moolenaar 1close 272015a7bdcbSBram Moolenaar call assert_equal(0, getloclist(3, {'id' : 0}).id) 272115a7bdcbSBram Moolenaar lnext 272215a7bdcbSBram Moolenaar call assert_equal(3, winnr()) 272315a7bdcbSBram Moolenaar call assert_equal(getloclist(1, {'id' : 0}).id, getloclist(3, {'id' : 0}).id) 272415a7bdcbSBram Moolenaar 2725391b1dd0SBram Moolenaar enew | only 2726391b1dd0SBram Moolenaar set efm&vim 2727391b1dd0SBram Moolenaarendfunc 2728ee85df37SBram Moolenaar 2729e00fdf35SBram Moolenaarfunc Test_cwindow_highlight() 2730e00fdf35SBram Moolenaar CheckScreendump 2731e00fdf35SBram Moolenaar 2732e00fdf35SBram Moolenaar let lines =<< trim END 2733e00fdf35SBram Moolenaar call setline(1, ['some', 'text', 'with', 'matches']) 2734e00fdf35SBram Moolenaar write XCwindow 2735e00fdf35SBram Moolenaar vimgrep e XCwindow 2736e00fdf35SBram Moolenaar redraw 2737e00fdf35SBram Moolenaar cwindow 4 2738e00fdf35SBram Moolenaar END 2739e00fdf35SBram Moolenaar call writefile(lines, 'XtestCwindow') 2740e00fdf35SBram Moolenaar let buf = RunVimInTerminal('-S XtestCwindow', #{rows: 12}) 2741e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_1', {}) 2742e00fdf35SBram Moolenaar 2743e00fdf35SBram Moolenaar call term_sendkeys(buf, ":cnext\<CR>") 2744e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_2', {}) 2745e00fdf35SBram Moolenaar 2746e00fdf35SBram Moolenaar " clean up 2747e00fdf35SBram Moolenaar call StopVimInTerminal(buf) 2748e00fdf35SBram Moolenaar call delete('XtestCwindow') 2749e00fdf35SBram Moolenaar call delete('XCwindow') 2750e00fdf35SBram Moolenaarendfunc 2751e00fdf35SBram Moolenaar 2752ee85df37SBram Moolenaarfunc XvimgrepTests(cchar) 2753ee85df37SBram Moolenaar call s:setup_commands(a:cchar) 2754ee85df37SBram Moolenaar 2755ee85df37SBram Moolenaar call writefile(['Editor:VIM vim', 2756ee85df37SBram Moolenaar \ 'Editor:Emacs EmAcS', 2757ee85df37SBram Moolenaar \ 'Editor:Notepad NOTEPAD'], 'Xtestfile1') 2758ee85df37SBram Moolenaar call writefile(['Linux', 'MacOS', 'MS-Windows'], 'Xtestfile2') 2759ee85df37SBram Moolenaar 2760ee85df37SBram Moolenaar " Error cases 2761ee85df37SBram Moolenaar call assert_fails('Xvimgrep /abc *', 'E682:') 2762ee85df37SBram Moolenaar 2763ee85df37SBram Moolenaar let @/='' 2764ee85df37SBram Moolenaar call assert_fails('Xvimgrep // *', 'E35:') 2765ee85df37SBram Moolenaar 2766ee85df37SBram Moolenaar call assert_fails('Xvimgrep abc', 'E683:') 2767ee85df37SBram Moolenaar call assert_fails('Xvimgrep a1b2c3 Xtestfile1', 'E480:') 2768ee85df37SBram Moolenaar call assert_fails('Xvimgrep pat Xa1b2c3', 'E480:') 2769ee85df37SBram Moolenaar 2770ee85df37SBram Moolenaar Xexpr "" 2771ee85df37SBram Moolenaar Xvimgrepadd Notepad Xtestfile1 2772ee85df37SBram Moolenaar Xvimgrepadd MacOS Xtestfile2 2773ee85df37SBram Moolenaar let l = g:Xgetlist() 2774ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2775ee85df37SBram Moolenaar call assert_equal('Editor:Notepad NOTEPAD', l[0].text) 2776ee85df37SBram Moolenaar 2777f9ae154cSBram Moolenaar 10Xvimgrep #\cvim#g Xtestfile? 2778ee85df37SBram Moolenaar let l = g:Xgetlist() 2779ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2780ee85df37SBram Moolenaar call assert_equal(8, l[0].col) 2781ee85df37SBram Moolenaar call assert_equal(12, l[1].col) 2782ee85df37SBram Moolenaar 2783ee85df37SBram Moolenaar 1Xvimgrep ?Editor? Xtestfile* 2784ee85df37SBram Moolenaar let l = g:Xgetlist() 2785ee85df37SBram Moolenaar call assert_equal(1, len(l)) 2786ee85df37SBram Moolenaar call assert_equal('Editor:VIM vim', l[0].text) 2787ee85df37SBram Moolenaar 2788ee85df37SBram Moolenaar edit +3 Xtestfile2 2789ee85df37SBram Moolenaar Xvimgrep +\cemacs+j Xtestfile1 2790ee85df37SBram Moolenaar let l = g:Xgetlist() 2791bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 2792ee85df37SBram Moolenaar call assert_equal('Editor:Emacs EmAcS', l[0].text) 2793ee85df37SBram Moolenaar 27942225ebb4SBram Moolenaar " Test for unloading a buffer after vimgrep searched the buffer 27952225ebb4SBram Moolenaar %bwipe 27962225ebb4SBram Moolenaar Xvimgrep /Editor/j Xtestfile* 27972225ebb4SBram Moolenaar call assert_equal(0, getbufinfo('Xtestfile1')[0].loaded) 27982225ebb4SBram Moolenaar call assert_equal([], getbufinfo('Xtestfile2')) 27992225ebb4SBram Moolenaar 2800ee85df37SBram Moolenaar call delete('Xtestfile1') 2801ee85df37SBram Moolenaar call delete('Xtestfile2') 2802ee85df37SBram Moolenaarendfunc 2803ee85df37SBram Moolenaar 2804ee85df37SBram Moolenaar" Tests for the :vimgrep command 2805ee85df37SBram Moolenaarfunc Test_vimgrep() 2806ee85df37SBram Moolenaar call XvimgrepTests('c') 2807ee85df37SBram Moolenaar call XvimgrepTests('l') 2808ee85df37SBram Moolenaarendfunc 280969f40be6SBram Moolenaar 28101c299434SBram Moolenaar" Test for incsearch highlighting of the :vimgrep pattern 28111c299434SBram Moolenaar" This test used to cause "E315: ml_get: invalid lnum" errors. 28121c299434SBram Moolenaarfunc Test_vimgrep_incsearch() 28131c299434SBram Moolenaar enew 28141c299434SBram Moolenaar set incsearch 28151c299434SBram Moolenaar call test_override("char_avail", 1) 28161c299434SBram Moolenaar 28171c299434SBram Moolenaar call feedkeys(":2vimgrep assert test_quickfix.vim test_cdo.vim\<CR>", "ntx") 28181c299434SBram Moolenaar let l = getqflist() 28191c299434SBram Moolenaar call assert_equal(2, len(l)) 28201c299434SBram Moolenaar 28211c299434SBram Moolenaar call test_override("ALL", 0) 28221c299434SBram Moolenaar set noincsearch 28231c299434SBram Moolenaarendfunc 28241c299434SBram Moolenaar 28259f6277bdSBram Moolenaar" Test vimgrep with the last search pattern not set 28269f6277bdSBram Moolenaarfunc Test_vimgrep_with_no_last_search_pat() 28279f6277bdSBram Moolenaar let lines =<< trim [SCRIPT] 28289f6277bdSBram Moolenaar call assert_fails('vimgrep // *', 'E35:') 28299f6277bdSBram Moolenaar call writefile(v:errors, 'Xresult') 28309f6277bdSBram Moolenaar qall! 28319f6277bdSBram Moolenaar [SCRIPT] 28329f6277bdSBram Moolenaar call writefile(lines, 'Xscript') 28339f6277bdSBram Moolenaar if RunVim([], [], '--clean -S Xscript') 28349f6277bdSBram Moolenaar call assert_equal([], readfile('Xresult')) 28359f6277bdSBram Moolenaar endif 28369f6277bdSBram Moolenaar call delete('Xscript') 28379f6277bdSBram Moolenaar call delete('Xresult') 28389f6277bdSBram Moolenaarendfunc 28399f6277bdSBram Moolenaar 284069f40be6SBram Moolenaarfunc XfreeTests(cchar) 284169f40be6SBram Moolenaar call s:setup_commands(a:cchar) 284269f40be6SBram Moolenaar 284369f40be6SBram Moolenaar enew | only 284469f40be6SBram Moolenaar 284569f40be6SBram Moolenaar " Deleting the quickfix stack should work even When the current list is 284669f40be6SBram Moolenaar " somewhere in the middle of the stack 284769f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 284869f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 284969f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 285069f40be6SBram Moolenaar Xolder 285169f40be6SBram Moolenaar call g:Xsetlist([], 'f') 285269f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 285369f40be6SBram Moolenaar 285469f40be6SBram Moolenaar " After deleting the stack, adding a new list should create a stack with a 285569f40be6SBram Moolenaar " single list. 285669f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 285769f40be6SBram Moolenaar call assert_equal(1, g:Xgetlist({'all':1}).nr) 285869f40be6SBram Moolenaar 285969f40be6SBram Moolenaar " Deleting the stack from a quickfix window should update/clear the 286069f40be6SBram Moolenaar " quickfix/location list window. 286169f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 286269f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 286369f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 286469f40be6SBram Moolenaar Xolder 286569f40be6SBram Moolenaar Xwindow 286669f40be6SBram Moolenaar call g:Xsetlist([], 'f') 286769f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 286869f40be6SBram Moolenaar call assert_equal(1, line('$')) 286969f40be6SBram Moolenaar Xclose 287069f40be6SBram Moolenaar 287169f40be6SBram Moolenaar " Deleting the stack from a non-quickfix window should update/clear the 287269f40be6SBram Moolenaar " quickfix/location list window. 287369f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 287469f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 287569f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 287669f40be6SBram Moolenaar Xolder 287769f40be6SBram Moolenaar Xwindow 287869f40be6SBram Moolenaar wincmd p 287969f40be6SBram Moolenaar call g:Xsetlist([], 'f') 288069f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 288169f40be6SBram Moolenaar wincmd p 288269f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 288369f40be6SBram Moolenaar call assert_equal(1, line('$')) 288469f40be6SBram Moolenaar 288569f40be6SBram Moolenaar " After deleting the location list stack, if the location list window is 288669f40be6SBram Moolenaar " opened, then a new location list should be created. So opening the 288769f40be6SBram Moolenaar " location list window again should not create a new window. 288869f40be6SBram Moolenaar if a:cchar == 'l' 288969f40be6SBram Moolenaar lexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 289069f40be6SBram Moolenaar wincmd p 289169f40be6SBram Moolenaar lopen 289269f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 289369f40be6SBram Moolenaar endif 289469f40be6SBram Moolenaar Xclose 289569f40be6SBram Moolenaarendfunc 289669f40be6SBram Moolenaar 289774240d3fSBram Moolenaar" Tests for the quickfix free functionality 289869f40be6SBram Moolenaarfunc Test_qf_free() 289969f40be6SBram Moolenaar call XfreeTests('c') 290069f40be6SBram Moolenaar call XfreeTests('l') 290169f40be6SBram Moolenaarendfunc 29026e62da3eSBram Moolenaar 29036e62da3eSBram Moolenaar" Test for buffer overflow when parsing lines and adding new entries to 29046e62da3eSBram Moolenaar" the quickfix list. 29056e62da3eSBram Moolenaarfunc Test_bufoverflow() 29066e62da3eSBram Moolenaar set efm=%f:%l:%m 29076e62da3eSBram Moolenaar cgetexpr ['File1:100:' . repeat('x', 1025)] 29086e62da3eSBram Moolenaar 29096e62da3eSBram Moolenaar set efm=%+GCompiler:\ %.%#,%f:%l:%m 29106e62da3eSBram Moolenaar cgetexpr ['Compiler: ' . repeat('a', 1015), 'File1:10:Hello World'] 29116e62da3eSBram Moolenaar 29126e62da3eSBram Moolenaar set efm=%DEntering\ directory\ %f,%f:%l:%m 29136e62da3eSBram Moolenaar cgetexpr ['Entering directory ' . repeat('a', 1006), 29146e62da3eSBram Moolenaar \ 'File1:10:Hello World'] 29156e62da3eSBram Moolenaar set efm&vim 29166e62da3eSBram Moolenaarendfunc 29176e62da3eSBram Moolenaar 2918875feea6SBram Moolenaar" Tests for getting the quickfix stack size 2919875feea6SBram Moolenaarfunc XsizeTests(cchar) 2920875feea6SBram Moolenaar call s:setup_commands(a:cchar) 2921875feea6SBram Moolenaar 2922875feea6SBram Moolenaar call g:Xsetlist([], 'f') 2923875feea6SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 2924a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':'$', 'all':1}).title) 2925a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':0}).nr) 2926875feea6SBram Moolenaar 2927875feea6SBram Moolenaar Xexpr "File1:10:Line1" 2928875feea6SBram Moolenaar Xexpr "File2:20:Line2" 2929875feea6SBram Moolenaar Xexpr "File3:30:Line3" 2930875feea6SBram Moolenaar Xolder | Xolder 2931875feea6SBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 2932875feea6SBram Moolenaar call g:Xsetlist([], 'f') 2933875feea6SBram Moolenaar 2934875feea6SBram Moolenaar Xexpr "File1:10:Line1" 2935875feea6SBram Moolenaar Xexpr "File2:20:Line2" 2936875feea6SBram Moolenaar Xexpr "File3:30:Line3" 2937875feea6SBram Moolenaar Xolder | Xolder 2938875feea6SBram Moolenaar call g:Xsetlist([], 'a', {'nr':'$', 'title':'Compiler'}) 2939875feea6SBram Moolenaar call assert_equal('Compiler', g:Xgetlist({'nr':3, 'all':1}).title) 2940875feea6SBram Moolenaarendfunc 2941875feea6SBram Moolenaar 2942875feea6SBram Moolenaarfunc Test_Qf_Size() 2943875feea6SBram Moolenaar call XsizeTests('c') 2944875feea6SBram Moolenaar call XsizeTests('l') 2945875feea6SBram Moolenaarendfunc 29461814183bSBram Moolenaar 29479c4fefffSBram Moolenaarfunc Test_cclose_from_copen() 29489c4fefffSBram Moolenaar augroup QF_Test 29499c4fefffSBram Moolenaar au! 29509c4fefffSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788') 29519c4fefffSBram Moolenaar augroup END 29529c4fefffSBram Moolenaar copen 29539c4fefffSBram Moolenaar augroup QF_Test 29549c4fefffSBram Moolenaar au! 29559c4fefffSBram Moolenaar augroup END 29569c4fefffSBram Moolenaar augroup! QF_Test 29579c4fefffSBram Moolenaarendfunc 29589c4fefffSBram Moolenaar 29591814183bSBram Moolenaarfunc Test_cclose_in_autocmd() 29601814183bSBram Moolenaar " Problem is only triggered if "starting" is zero, so that the OptionsSet 29611814183bSBram Moolenaar " event will be triggered. 29621814183bSBram Moolenaar call test_override('starting', 1) 29631814183bSBram Moolenaar augroup QF_Test 29641814183bSBram Moolenaar au! 29651814183bSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788') 29661814183bSBram Moolenaar augroup END 29671814183bSBram Moolenaar copen 29681814183bSBram Moolenaar augroup QF_Test 29691814183bSBram Moolenaar au! 29701814183bSBram Moolenaar augroup END 29711814183bSBram Moolenaar augroup! QF_Test 29721814183bSBram Moolenaar call test_override('starting', 0) 29731814183bSBram Moolenaarendfunc 29749c4fefffSBram Moolenaar 2975379fb76bSBram Moolenaar" Check that ":file" without an argument is possible even when "curbuf_lock" 2976379fb76bSBram Moolenaar" is set. 2977379fb76bSBram Moolenaarfunc Test_file_from_copen() 2978379fb76bSBram Moolenaar " Works without argument. 2979379fb76bSBram Moolenaar augroup QF_Test 2980379fb76bSBram Moolenaar au! 2981379fb76bSBram Moolenaar au FileType qf file 2982379fb76bSBram Moolenaar augroup END 2983379fb76bSBram Moolenaar copen 2984379fb76bSBram Moolenaar 2985379fb76bSBram Moolenaar augroup QF_Test 2986379fb76bSBram Moolenaar au! 2987379fb76bSBram Moolenaar augroup END 2988379fb76bSBram Moolenaar cclose 2989379fb76bSBram Moolenaar 2990379fb76bSBram Moolenaar " Fails with argument. 2991379fb76bSBram Moolenaar augroup QF_Test 2992379fb76bSBram Moolenaar au! 2993379fb76bSBram Moolenaar au FileType qf call assert_fails(':file foo', 'E788') 2994379fb76bSBram Moolenaar augroup END 2995379fb76bSBram Moolenaar copen 2996379fb76bSBram Moolenaar augroup QF_Test 2997379fb76bSBram Moolenaar au! 2998379fb76bSBram Moolenaar augroup END 2999379fb76bSBram Moolenaar cclose 3000379fb76bSBram Moolenaar 3001379fb76bSBram Moolenaar augroup! QF_Test 30026a0cc916SBram Moolenaarendfunc 3003379fb76bSBram Moolenaar 30049c4fefffSBram Moolenaarfunc Test_resize_from_copen() 30059c4fefffSBram Moolenaar augroup QF_Test 30069c4fefffSBram Moolenaar au! 30079c4fefffSBram Moolenaar au FileType qf resize 5 30089c4fefffSBram Moolenaar augroup END 30099c4fefffSBram Moolenaar try 30109c4fefffSBram Moolenaar " This should succeed without any exception. No other buffers are 30119c4fefffSBram Moolenaar " involved in the autocmd. 30129c4fefffSBram Moolenaar copen 30139c4fefffSBram Moolenaar finally 30149c4fefffSBram Moolenaar augroup QF_Test 30159c4fefffSBram Moolenaar au! 30169c4fefffSBram Moolenaar augroup END 30179c4fefffSBram Moolenaar augroup! QF_Test 30189c4fefffSBram Moolenaar endtry 30199c4fefffSBram Moolenaarendfunc 3020a8788f4dSBram Moolenaar 3021a8788f4dSBram Moolenaar" Tests for the quickfix buffer b:changedtick variable 3022a8788f4dSBram Moolenaarfunc Xchangedtick_tests(cchar) 3023a8788f4dSBram Moolenaar call s:setup_commands(a:cchar) 3024a8788f4dSBram Moolenaar 3025a8788f4dSBram Moolenaar new | only 3026a8788f4dSBram Moolenaar 3027a8788f4dSBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 3028a8788f4dSBram Moolenaar 3029a8788f4dSBram Moolenaar Xopen 3030a8788f4dSBram Moolenaar Xolder 3031a8788f4dSBram Moolenaar Xolder 3032a8788f4dSBram Moolenaar Xaddexpr "F1:10:Line10" 3033a8788f4dSBram Moolenaar Xaddexpr "F2:20:Line20" 3034a8788f4dSBram Moolenaar call g:Xsetlist([{"filename":"F3", "lnum":30, "text":"Line30"}], 'a') 3035a8788f4dSBram Moolenaar call g:Xsetlist([], 'f') 3036a8788f4dSBram Moolenaar call assert_equal(8, getbufvar('%', 'changedtick')) 3037a8788f4dSBram Moolenaar Xclose 3038a8788f4dSBram Moolenaarendfunc 3039a8788f4dSBram Moolenaar 3040a8788f4dSBram Moolenaarfunc Test_changedtick() 3041a8788f4dSBram Moolenaar call Xchangedtick_tests('c') 3042a8788f4dSBram Moolenaar call Xchangedtick_tests('l') 3043a8788f4dSBram Moolenaarendfunc 3044d28cc3f5SBram Moolenaar 3045ae338338SBram Moolenaar" Tests for parsing an expression using setqflist() 3046ae338338SBram Moolenaarfunc Xsetexpr_tests(cchar) 3047ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3048ae338338SBram Moolenaar 3049ae338338SBram Moolenaar let t = ["File1:10:Line10", "File1:20:Line20"] 30502c809b7cSBram Moolenaar call g:Xsetlist([], ' ', {'lines' : t}) 30512c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]}) 3052ae338338SBram Moolenaar 3053ae338338SBram Moolenaar let l = g:Xgetlist() 3054ae338338SBram Moolenaar call assert_equal(3, len(l)) 3055ae338338SBram Moolenaar call assert_equal(20, l[1].lnum) 3056ae338338SBram Moolenaar call assert_equal('Line30', l[2].text) 30572c809b7cSBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]}) 3058ae338338SBram Moolenaar let l = g:Xgetlist() 3059ae338338SBram Moolenaar call assert_equal(1, len(l)) 3060ae338338SBram Moolenaar call assert_equal('Line5', l[0].text) 30612c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10})) 30622c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"})) 3063ae338338SBram Moolenaar 3064ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3065ae338338SBram Moolenaar " Add entries to multiple lists 30662c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]}) 30672c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]}) 30682c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]}) 30692c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]}) 3070ae338338SBram Moolenaar call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text) 3071ae338338SBram Moolenaar call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text) 307236538225SBram Moolenaar 307336538225SBram Moolenaar " Adding entries using a custom efm 307436538225SBram Moolenaar set efm& 307536538225SBram Moolenaar call g:Xsetlist([], ' ', {'efm' : '%f#%l#%m', 307636538225SBram Moolenaar \ 'lines' : ["F1#10#L10", "F2#20#L20"]}) 307736538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 307836538225SBram Moolenaar call g:Xsetlist([], 'a', {'efm' : '%f#%l#%m', 'lines' : ["F3:30:L30"]}) 307936538225SBram Moolenaar call assert_equal('F3:30:L30', g:Xgetlist({'items':1}).items[2].text) 308036538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 308136538225SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'efm' : [], 308236538225SBram Moolenaar \ 'lines' : ['F1:10:L10']})) 3083ae338338SBram Moolenaarendfunc 3084ae338338SBram Moolenaar 3085ae338338SBram Moolenaarfunc Test_setexpr() 3086ae338338SBram Moolenaar call Xsetexpr_tests('c') 3087ae338338SBram Moolenaar call Xsetexpr_tests('l') 3088ae338338SBram Moolenaarendfunc 3089ae338338SBram Moolenaar 3090ae338338SBram Moolenaar" Tests for per quickfix/location list directory stack 3091ae338338SBram Moolenaarfunc Xmultidirstack_tests(cchar) 3092ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3093ae338338SBram Moolenaar 3094ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3095ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3096ae338338SBram Moolenaar 30972c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]}) 30982c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]}) 30992c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]}) 31002c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]}) 3101ae338338SBram Moolenaar 3102ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3103ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3104ae338338SBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(l1.items[1].bufnr)) 3105ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3106ae338338SBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(l2.items[1].bufnr)) 3107ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3108ae338338SBram Moolenaarendfunc 3109ae338338SBram Moolenaar 3110ae338338SBram Moolenaarfunc Test_multidirstack() 3111ae338338SBram Moolenaar call mkdir('Xone/a', 'p') 3112ae338338SBram Moolenaar call mkdir('Xtwo/a', 'p') 3113ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3114ae338338SBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 3115ae338338SBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 3116ae338338SBram Moolenaar let save_efm = &efm 3117ae338338SBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 3118ae338338SBram Moolenaar 3119ae338338SBram Moolenaar call Xmultidirstack_tests('c') 3120ae338338SBram Moolenaar call Xmultidirstack_tests('l') 3121ae338338SBram Moolenaar 3122ae338338SBram Moolenaar let &efm = save_efm 3123ae338338SBram Moolenaar call delete('Xone', 'rf') 3124ae338338SBram Moolenaar call delete('Xtwo', 'rf') 3125ae338338SBram Moolenaarendfunc 3126ae338338SBram Moolenaar 3127ae338338SBram Moolenaar" Tests for per quickfix/location list file stack 3128ae338338SBram Moolenaarfunc Xmultifilestack_tests(cchar) 3129ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3130ae338338SBram Moolenaar 3131ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3132ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3133ae338338SBram Moolenaar 31342c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]}) 31352c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]}) 31362c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]}) 31372c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]}) 3138ae338338SBram Moolenaar 3139ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3140ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3141ae338338SBram Moolenaar call assert_equal('one.txt', bufname(l1.items[1].bufnr)) 3142ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3143ae338338SBram Moolenaar call assert_equal('two.txt', bufname(l2.items[1].bufnr)) 3144ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3145e333e79fSBram Moolenaar 3146e333e79fSBram Moolenaar " Test for start of a new error line in the same line where a previous 3147e333e79fSBram Moolenaar " error line ends with a file stack. 3148e333e79fSBram Moolenaar let efm_val = 'Error\ l%l\ in\ %f,' 3149e333e79fSBram Moolenaar let efm_val .= '%-P%>(%f%r,Error\ l%l\ in\ %m,%-Q)%r' 3150e333e79fSBram Moolenaar let l = g:Xgetlist({'lines' : [ 3151e333e79fSBram Moolenaar \ '(one.txt', 3152e333e79fSBram Moolenaar \ 'Error l4 in one.txt', 3153e333e79fSBram Moolenaar \ ') (two.txt', 3154e333e79fSBram Moolenaar \ 'Error l6 in two.txt', 3155e333e79fSBram Moolenaar \ ')', 3156e333e79fSBram Moolenaar \ 'Error l8 in one.txt' 3157e333e79fSBram Moolenaar \ ], 'efm' : efm_val}) 3158e333e79fSBram Moolenaar call assert_equal(3, len(l.items)) 3159e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[0].bufnr)) 3160e333e79fSBram Moolenaar call assert_equal(4, l.items[0].lnum) 3161e333e79fSBram Moolenaar call assert_equal('one.txt', l.items[0].text) 3162e333e79fSBram Moolenaar call assert_equal('two.txt', bufname(l.items[1].bufnr)) 3163e333e79fSBram Moolenaar call assert_equal(6, l.items[1].lnum) 3164e333e79fSBram Moolenaar call assert_equal('two.txt', l.items[1].text) 3165e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[2].bufnr)) 3166e333e79fSBram Moolenaar call assert_equal(8, l.items[2].lnum) 3167e333e79fSBram Moolenaar call assert_equal('', l.items[2].text) 3168ae338338SBram Moolenaarendfunc 3169ae338338SBram Moolenaar 3170ae338338SBram Moolenaarfunc Test_multifilestack() 3171ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3172ae338338SBram Moolenaar call writefile(lines, 'one.txt') 3173ae338338SBram Moolenaar call writefile(lines, 'two.txt') 3174ae338338SBram Moolenaar let save_efm = &efm 3175ae338338SBram Moolenaar set efm=%+P[%f],(%l\\,%c)\ %m,%-Q 3176ae338338SBram Moolenaar 3177ae338338SBram Moolenaar call Xmultifilestack_tests('c') 3178ae338338SBram Moolenaar call Xmultifilestack_tests('l') 3179ae338338SBram Moolenaar 3180ae338338SBram Moolenaar let &efm = save_efm 3181ae338338SBram Moolenaar call delete('one.txt') 3182ae338338SBram Moolenaar call delete('two.txt') 3183ae338338SBram Moolenaarendfunc 3184ae338338SBram Moolenaar 3185ae338338SBram Moolenaar" Tests for per buffer 'efm' setting 3186ae338338SBram Moolenaarfunc Test_perbuf_efm() 3187ae338338SBram Moolenaar call writefile(["File1-10-Line10"], 'one.txt') 3188ae338338SBram Moolenaar call writefile(["File2#20#Line20"], 'two.txt') 3189ae338338SBram Moolenaar set efm=%f#%l#%m 3190ae338338SBram Moolenaar new | only 3191ae338338SBram Moolenaar new 3192ae338338SBram Moolenaar setlocal efm=%f-%l-%m 3193ae338338SBram Moolenaar cfile one.txt 3194ae338338SBram Moolenaar wincmd w 3195ae338338SBram Moolenaar caddfile two.txt 3196ae338338SBram Moolenaar 3197ae338338SBram Moolenaar let l = getqflist() 3198ae338338SBram Moolenaar call assert_equal(10, l[0].lnum) 3199ae338338SBram Moolenaar call assert_equal('Line20', l[1].text) 3200ae338338SBram Moolenaar 3201ae338338SBram Moolenaar set efm& 3202ae338338SBram Moolenaar new | only 3203ae338338SBram Moolenaar call delete('one.txt') 3204ae338338SBram Moolenaar call delete('two.txt') 3205ae338338SBram Moolenaarendfunc 3206ae338338SBram Moolenaar 3207d28cc3f5SBram Moolenaar" Open multiple help windows using ":lhelpgrep 3208d28cc3f5SBram Moolenaar" This test used to crash Vim 3209d28cc3f5SBram Moolenaarfunc Test_Multi_LL_Help() 3210d28cc3f5SBram Moolenaar new | only 3211d28cc3f5SBram Moolenaar lhelpgrep window 3212d28cc3f5SBram Moolenaar lopen 3213d28cc3f5SBram Moolenaar e# 3214d28cc3f5SBram Moolenaar lhelpgrep buffer 3215d28cc3f5SBram Moolenaar call assert_equal(3, winnr('$')) 3216d28cc3f5SBram Moolenaar call assert_true(len(getloclist(1)) != 0) 3217d28cc3f5SBram Moolenaar call assert_true(len(getloclist(2)) != 0) 3218d28cc3f5SBram Moolenaar new | only 3219d28cc3f5SBram Moolenaarendfunc 322055b69264SBram Moolenaar 322155b69264SBram Moolenaar" Tests for adding new quickfix lists using setqflist() 322255b69264SBram Moolenaarfunc XaddQf_tests(cchar) 322355b69264SBram Moolenaar call s:setup_commands(a:cchar) 322455b69264SBram Moolenaar 322555b69264SBram Moolenaar " Create a new list using ' ' for action 322655b69264SBram Moolenaar call g:Xsetlist([], 'f') 322755b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test1'}) 322855b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 322955b69264SBram Moolenaar call assert_equal(1, l.nr) 323055b69264SBram Moolenaar call assert_equal('Test1', l.title) 323155b69264SBram Moolenaar 323255b69264SBram Moolenaar " Create a new list using ' ' for action and '$' for 'nr' 323355b69264SBram Moolenaar call g:Xsetlist([], 'f') 323455b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test2', 'nr' : '$'}) 323555b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 323655b69264SBram Moolenaar call assert_equal(1, l.nr) 323755b69264SBram Moolenaar call assert_equal('Test2', l.title) 323855b69264SBram Moolenaar 323955b69264SBram Moolenaar " Create a new list using 'a' for action 324055b69264SBram Moolenaar call g:Xsetlist([], 'f') 324155b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3'}) 324255b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 324355b69264SBram Moolenaar call assert_equal(1, l.nr) 324455b69264SBram Moolenaar call assert_equal('Test3', l.title) 324555b69264SBram Moolenaar 324655b69264SBram Moolenaar " Create a new list using 'a' for action and '$' for 'nr' 324755b69264SBram Moolenaar call g:Xsetlist([], 'f') 324855b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3', 'nr' : '$'}) 324955b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test4'}) 325055b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 325155b69264SBram Moolenaar call assert_equal(1, l.nr) 325255b69264SBram Moolenaar call assert_equal('Test4', l.title) 325355b69264SBram Moolenaar 325455b69264SBram Moolenaar " Adding a quickfix list should remove all the lists following the current 325555b69264SBram Moolenaar " list. 325655b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 325755b69264SBram Moolenaar silent! 10Xolder 325855b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test5'}) 325955b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 326055b69264SBram Moolenaar call assert_equal(2, l.nr) 326155b69264SBram Moolenaar call assert_equal('Test5', l.title) 326255b69264SBram Moolenaar 326355b69264SBram Moolenaar " Add a quickfix list using '$' as the list number. 326455b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 326555b69264SBram Moolenaar silent! 99Xolder 326655b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test6'}) 326755b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 326855b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 326955b69264SBram Moolenaar call assert_equal('Test6', l.title) 327055b69264SBram Moolenaar 327155b69264SBram Moolenaar " Add a quickfix list using 'nr' set to one more than the quickfix 327255b69264SBram Moolenaar " list size. 327355b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 327455b69264SBram Moolenaar silent! 99Xolder 327555b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : lastqf + 1, 'title' : 'Test7'}) 327655b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 327755b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 327855b69264SBram Moolenaar call assert_equal('Test7', l.title) 327955b69264SBram Moolenaar 328055b69264SBram Moolenaar " Add a quickfix list to a stack with 10 lists using 'nr' set to '$' 328155b69264SBram Moolenaar exe repeat('Xexpr "" |', 9) . 'Xexpr ""' 328255b69264SBram Moolenaar silent! 99Xolder 328355b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test8'}) 328455b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 328555b69264SBram Moolenaar call assert_equal(10, l.nr) 328655b69264SBram Moolenaar call assert_equal('Test8', l.title) 328755b69264SBram Moolenaar 328855b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a value greater than 10 328955b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 12, 'title' : 'Test9'})) 329055b69264SBram Moolenaar 329155b69264SBram Moolenaar " Try adding a quickfix list with 'nr' set to a value greater than the 329255b69264SBram Moolenaar " quickfix list size but less than 10. 329355b69264SBram Moolenaar call g:Xsetlist([], 'f') 329455b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 329555b69264SBram Moolenaar silent! 99Xolder 329655b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 8, 'title' : 'Test10'})) 329755b69264SBram Moolenaar 329855b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a some string or list 329955b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : [1,2], 'title' : 'Test11'})) 330055b69264SBram Moolenaarendfunc 330155b69264SBram Moolenaar 330255b69264SBram Moolenaarfunc Test_add_qf() 330355b69264SBram Moolenaar call XaddQf_tests('c') 330455b69264SBram Moolenaar call XaddQf_tests('l') 330555b69264SBram Moolenaarendfunc 33067adf06f4SBram Moolenaar 33077adf06f4SBram Moolenaar" Test for getting the quickfix list items from some text without modifying 33087adf06f4SBram Moolenaar" the quickfix stack 33092c809b7cSBram Moolenaarfunc XgetListFromLines(cchar) 33107adf06f4SBram Moolenaar call s:setup_commands(a:cchar) 33117adf06f4SBram Moolenaar call g:Xsetlist([], 'f') 33127adf06f4SBram Moolenaar 33132c809b7cSBram Moolenaar let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items 33147adf06f4SBram Moolenaar call assert_equal(2, len(l)) 33157adf06f4SBram Moolenaar call assert_equal(30, l[1].lnum) 33167adf06f4SBram Moolenaar 33172c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 10})) 33182c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'})) 33192c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : []}).items) 33202c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items) 33217adf06f4SBram Moolenaar 332236538225SBram Moolenaar " Parse text using a custom efm 332336538225SBram Moolenaar set efm& 332436538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3#30#Line30'], 'efm' : '%f#%l#%m'}).items 332536538225SBram Moolenaar call assert_equal('Line30', l[0].text) 332636538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : '%f-%l-%m'}).items 332736538225SBram Moolenaar call assert_equal('File3:30:Line30', l[0].text) 332836538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : [1,2]}) 332936538225SBram Moolenaar call assert_equal({}, l) 333036538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':'%2'})", 'E376:') 333136538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':''})", 'E378:') 333236538225SBram Moolenaar 33337adf06f4SBram Moolenaar " Make sure that the quickfix stack is not modified 33347adf06f4SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 33357adf06f4SBram Moolenaarendfunc 33367adf06f4SBram Moolenaar 33372c809b7cSBram Moolenaarfunc Test_get_list_from_lines() 33382c809b7cSBram Moolenaar call XgetListFromLines('c') 33392c809b7cSBram Moolenaar call XgetListFromLines('l') 33407adf06f4SBram Moolenaarendfunc 3341a539f4f1SBram Moolenaar 3342a539f4f1SBram Moolenaar" Tests for the quickfix list id 3343a539f4f1SBram Moolenaarfunc Xqfid_tests(cchar) 3344a539f4f1SBram Moolenaar call s:setup_commands(a:cchar) 3345a539f4f1SBram Moolenaar 3346a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3347a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0}).id) 3348a539f4f1SBram Moolenaar Xexpr '' 3349a539f4f1SBram Moolenaar let start_id = g:Xgetlist({'id' : 0}).id 3350a539f4f1SBram Moolenaar Xexpr '' | Xexpr '' 3351a539f4f1SBram Moolenaar Xolder 3352a539f4f1SBram Moolenaar call assert_equal(start_id, g:Xgetlist({'id':0, 'nr':1}).id) 3353a539f4f1SBram Moolenaar call assert_equal(start_id + 1, g:Xgetlist({'id':0, 'nr':0}).id) 3354a539f4f1SBram Moolenaar call assert_equal(start_id + 2, g:Xgetlist({'id':0, 'nr':'$'}).id) 3355a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0, 'nr':99}).id) 3356a539f4f1SBram Moolenaar call assert_equal(2, g:Xgetlist({'id':start_id + 1, 'nr':0}).nr) 3357a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':99, 'nr':0}).id) 3358a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':"abc", 'nr':0}).id) 3359a539f4f1SBram Moolenaar 3360a539f4f1SBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]}) 3361a539f4f1SBram Moolenaar call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context) 33622c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']}) 3363a539f4f1SBram Moolenaar call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text) 3364a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'})) 3365a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'})) 3366a539f4f1SBram Moolenaar 3367a539f4f1SBram Moolenaar let qfid = g:Xgetlist({'id':0, 'nr':0}) 3368a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3369a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':qfid, 'nr':0}).id) 3370a539f4f1SBram Moolenaarendfunc 3371a539f4f1SBram Moolenaar 3372a539f4f1SBram Moolenaarfunc Test_qf_id() 3373a539f4f1SBram Moolenaar call Xqfid_tests('c') 3374a539f4f1SBram Moolenaar call Xqfid_tests('l') 3375a539f4f1SBram Moolenaarendfunc 337674240d3fSBram Moolenaar 337774240d3fSBram Moolenaarfunc Xqfjump_tests(cchar) 337874240d3fSBram Moolenaar call s:setup_commands(a:cchar) 337974240d3fSBram Moolenaar 338074240d3fSBram Moolenaar call writefile(["Line1\tFoo", "Line2"], 'F1') 338174240d3fSBram Moolenaar call writefile(["Line1\tBar", "Line2"], 'F2') 338274240d3fSBram Moolenaar call writefile(["Line1\tBaz", "Line2"], 'F3') 338374240d3fSBram Moolenaar 338474240d3fSBram Moolenaar call g:Xsetlist([], 'f') 338574240d3fSBram Moolenaar 338674240d3fSBram Moolenaar " Tests for 338774240d3fSBram Moolenaar " Jumping to a line using a pattern 338874240d3fSBram Moolenaar " Jumping to a column greater than the last column in a line 338974240d3fSBram Moolenaar " Jumping to a line greater than the last line in the file 339074240d3fSBram Moolenaar let l = [] 339174240d3fSBram Moolenaar for i in range(1, 7) 339274240d3fSBram Moolenaar call add(l, {}) 339374240d3fSBram Moolenaar endfor 339474240d3fSBram Moolenaar let l[0].filename='F1' 339574240d3fSBram Moolenaar let l[0].pattern='Line1' 339674240d3fSBram Moolenaar let l[1].filename='F2' 339774240d3fSBram Moolenaar let l[1].pattern='Line1' 339874240d3fSBram Moolenaar let l[2].filename='F3' 339974240d3fSBram Moolenaar let l[2].pattern='Line1' 340074240d3fSBram Moolenaar let l[3].filename='F3' 340174240d3fSBram Moolenaar let l[3].lnum=1 340274240d3fSBram Moolenaar let l[3].col=9 340374240d3fSBram Moolenaar let l[3].vcol=1 340474240d3fSBram Moolenaar let l[4].filename='F3' 340574240d3fSBram Moolenaar let l[4].lnum=99 340674240d3fSBram Moolenaar let l[5].filename='F3' 340774240d3fSBram Moolenaar let l[5].lnum=1 340874240d3fSBram Moolenaar let l[5].col=99 340974240d3fSBram Moolenaar let l[5].vcol=1 341074240d3fSBram Moolenaar let l[6].filename='F3' 341174240d3fSBram Moolenaar let l[6].pattern='abcxyz' 341274240d3fSBram Moolenaar 341374240d3fSBram Moolenaar call g:Xsetlist([], ' ', {'items' : l}) 341474240d3fSBram Moolenaar Xopen | only 341574240d3fSBram Moolenaar 2Xnext 341674240d3fSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 3417bdd2c290SBram Moolenaar call assert_equal('F3', @%) 341874240d3fSBram Moolenaar Xnext 341974240d3fSBram Moolenaar call assert_equal(7, col('.')) 342074240d3fSBram Moolenaar Xnext 342174240d3fSBram Moolenaar call assert_equal(2, line('.')) 342274240d3fSBram Moolenaar Xnext 342374240d3fSBram Moolenaar call assert_equal(9, col('.')) 342474240d3fSBram Moolenaar 2 342574240d3fSBram Moolenaar Xnext 342674240d3fSBram Moolenaar call assert_equal(2, line('.')) 342774240d3fSBram Moolenaar 342874240d3fSBram Moolenaar if a:cchar == 'l' 342974240d3fSBram Moolenaar " When jumping to a location list entry in the location list window and 343074240d3fSBram Moolenaar " no usable windows are available, then a new window should be opened. 343174240d3fSBram Moolenaar enew! | new | only 343274240d3fSBram Moolenaar call g:Xsetlist([], 'f') 343374240d3fSBram Moolenaar setlocal buftype=nofile 343474240d3fSBram Moolenaar new 343574240d3fSBram 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']}) 343674240d3fSBram Moolenaar Xopen 343774240d3fSBram Moolenaar let winid = win_getid() 343874240d3fSBram Moolenaar wincmd p 343974240d3fSBram Moolenaar close 344074240d3fSBram Moolenaar call win_gotoid(winid) 344174240d3fSBram Moolenaar Xnext 344274240d3fSBram Moolenaar call assert_equal(3, winnr('$')) 344374240d3fSBram Moolenaar call assert_equal(1, winnr()) 344474240d3fSBram Moolenaar call assert_equal(2, line('.')) 344574240d3fSBram Moolenaar 344674240d3fSBram Moolenaar " When jumping to an entry in the location list window and the window 344774240d3fSBram Moolenaar " associated with the location list is not present and a window containing 344874240d3fSBram Moolenaar " the file is already present, then that window should be used. 344974240d3fSBram Moolenaar close 345074240d3fSBram Moolenaar belowright new 345174240d3fSBram Moolenaar call g:Xsetlist([], 'f') 345274240d3fSBram Moolenaar edit F3 345374240d3fSBram Moolenaar call win_gotoid(winid) 345474240d3fSBram Moolenaar Xlast 345574240d3fSBram Moolenaar call assert_equal(3, winnr()) 345674240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'size' : 1}).size) 345774240d3fSBram Moolenaar call assert_equal(winid, g:Xgetlist({'winid' : 1}).winid) 345874240d3fSBram Moolenaar endif 345974240d3fSBram Moolenaar 346074240d3fSBram Moolenaar " Cleanup 346174240d3fSBram Moolenaar enew! 346274240d3fSBram Moolenaar new | only 346374240d3fSBram Moolenaar 346474240d3fSBram Moolenaar call delete('F1') 346574240d3fSBram Moolenaar call delete('F2') 346674240d3fSBram Moolenaar call delete('F3') 346774240d3fSBram Moolenaarendfunc 346874240d3fSBram Moolenaar 346974240d3fSBram Moolenaarfunc Test_qfjump() 347074240d3fSBram Moolenaar call Xqfjump_tests('c') 347174240d3fSBram Moolenaar call Xqfjump_tests('l') 347274240d3fSBram Moolenaarendfunc 3473a6d4849cSBram Moolenaar 3474a6d4849cSBram Moolenaar" Tests for the getqflist() and getloclist() functions when the list is not 3475a6d4849cSBram Moolenaar" present or is empty 3476a6d4849cSBram Moolenaarfunc Xgetlist_empty_tests(cchar) 3477a6d4849cSBram Moolenaar call s:setup_commands(a:cchar) 3478a6d4849cSBram Moolenaar 3479a6d4849cSBram Moolenaar " Empty quickfix stack 3480a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3481a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3482a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : 0}).id) 3483a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3484a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3485a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 0}).nr) 3486a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3487a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'title' : 0}).title) 3488a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3489b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) 3490c9cc9c78SBram Moolenaar if a:cchar == 'c' 3491c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3492647e24baSBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'qfbufnr' : 0, 3493*d43906d2SBram Moolenaar \ 'title' : '', 'winid' : 0, 'changedtick': 0, 3494*d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'all' : 0})) 3495c9cc9c78SBram Moolenaar else 3496c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3497c9cc9c78SBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 3498647e24baSBram Moolenaar \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0, 3499*d43906d2SBram Moolenaar \ 'qfbufnr' : 0, 'quickfixtextfunc' : ''}, 3500c9cc9c78SBram Moolenaar \ g:Xgetlist({'all' : 0})) 3501c9cc9c78SBram Moolenaar endif 3502a6d4849cSBram Moolenaar 35032ec364e9SBram Moolenaar " Quickfix window with empty stack 35042ec364e9SBram Moolenaar silent! Xopen 35052ec364e9SBram Moolenaar let qfwinid = (a:cchar == 'c') ? win_getid() : 0 3506647e24baSBram Moolenaar let qfbufnr = (a:cchar == 'c') ? bufnr('') : 0 35072ec364e9SBram Moolenaar call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) 35082ec364e9SBram Moolenaar Xclose 35092ec364e9SBram Moolenaar 3510a6d4849cSBram Moolenaar " Empty quickfix list 3511a6d4849cSBram Moolenaar Xexpr "" 3512a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3513a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'id' : 0}).id) 3514a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3515a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3516a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : 0}).nr) 3517a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3518a6d4849cSBram Moolenaar call assert_notequal('', g:Xgetlist({'title' : 0}).title) 3519a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3520b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3521a6d4849cSBram Moolenaar 3522a6d4849cSBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3523a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3524a6d4849cSBram Moolenaar 3525a6d4849cSBram Moolenaar " Non-existing quickfix identifier 3526a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'context' : 0}).context) 3527a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid}).id) 3528a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'idx' : 0}).idx) 3529a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'id' : qfid, 'items' : 0}).items) 3530a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'nr' : 0}).nr) 3531a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'size' : 0}).size) 3532a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title) 3533a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid) 3534b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick) 3535c9cc9c78SBram Moolenaar if a:cchar == 'c' 3536c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3537c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3538*d43906d2SBram Moolenaar \ 'qfbufnr' : qfbufnr, 'quickfixtextfunc' : '', 3539c9cc9c78SBram Moolenaar \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) 3540c9cc9c78SBram Moolenaar else 3541c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3542c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3543*d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3544*d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, 3545c9cc9c78SBram Moolenaar \ g:Xgetlist({'id' : qfid, 'all' : 0})) 3546c9cc9c78SBram Moolenaar endif 3547a6d4849cSBram Moolenaar 3548a6d4849cSBram Moolenaar " Non-existing quickfix list number 3549a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context) 3550a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5}).nr) 3551a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'idx' : 0}).idx) 3552a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'nr' : 5, 'items' : 0}).items) 3553a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'id' : 0}).id) 3554a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'size' : 0}).size) 3555a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title) 3556a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid) 3557b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick) 3558c9cc9c78SBram Moolenaar if a:cchar == 'c' 3559c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3560c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3561*d43906d2SBram Moolenaar \ 'changedtick' : 0, 'qfbufnr' : qfbufnr, 3562*d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3563c9cc9c78SBram Moolenaar else 3564c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3565c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3566*d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3567*d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3568c9cc9c78SBram Moolenaar endif 3569a6d4849cSBram Moolenaarendfunc 3570a6d4849cSBram Moolenaar 3571a6d4849cSBram Moolenaarfunc Test_getqflist() 3572a6d4849cSBram Moolenaar call Xgetlist_empty_tests('c') 3573a6d4849cSBram Moolenaar call Xgetlist_empty_tests('l') 3574a6d4849cSBram Moolenaarendfunc 3575b254af31SBram Moolenaar 3576a0ca7d00SBram Moolenaarfunc Test_getqflist_invalid_nr() 3577a0ca7d00SBram Moolenaar " The following commands used to crash Vim 3578a0ca7d00SBram Moolenaar cexpr "" 3579a0ca7d00SBram Moolenaar call getqflist({'nr' : $XXX_DOES_NOT_EXIST_XXX}) 3580a0ca7d00SBram Moolenaar 3581a0ca7d00SBram Moolenaar " Cleanup 3582a0ca7d00SBram Moolenaar call setqflist([], 'r') 3583a0ca7d00SBram Moolenaarendfunc 3584a0ca7d00SBram Moolenaar 3585b254af31SBram Moolenaar" Tests for the quickfix/location list changedtick 3586b254af31SBram Moolenaarfunc Xqftick_tests(cchar) 3587b254af31SBram Moolenaar call s:setup_commands(a:cchar) 3588b254af31SBram Moolenaar 3589b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3590b254af31SBram Moolenaar 3591b254af31SBram Moolenaar Xexpr "F1:10:Line10" 3592b254af31SBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3593b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3594b254af31SBram Moolenaar Xaddexpr "F2:20:Line20\nF2:21:Line21" 3595b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3596b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["F3:30:Line30", "F3:31:Line31"]}) 3597b254af31SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 3598b254af31SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["F4:40:Line40"]}) 3599b254af31SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 3600b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'New Title'}) 3601b254af31SBram Moolenaar call assert_equal(5, g:Xgetlist({'changedtick' : 0}).changedtick) 3602b254af31SBram Moolenaar 3603b254af31SBram Moolenaar enew! 3604b254af31SBram Moolenaar call append(0, ["F5:50:L50", "F6:60:L60"]) 3605b254af31SBram Moolenaar Xaddbuffer 3606b254af31SBram Moolenaar call assert_equal(6, g:Xgetlist({'changedtick' : 0}).changedtick) 3607b254af31SBram Moolenaar enew! 3608b254af31SBram Moolenaar 3609b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'context' : {'bus' : 'pci'}}) 3610b254af31SBram Moolenaar call assert_equal(7, g:Xgetlist({'changedtick' : 0}).changedtick) 3611b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3612b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'a') 3613b254af31SBram Moolenaar call assert_equal(8, g:Xgetlist({'changedtick' : 0}).changedtick) 3614b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3615b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], ' ') 3616b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3617b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3618b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'r') 3619b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3620b254af31SBram Moolenaar 3621b254af31SBram Moolenaar call writefile(["F8:80:L80", "F8:81:L81"], "Xone") 3622b254af31SBram Moolenaar Xfile Xone 3623b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3624b254af31SBram Moolenaar Xaddfile Xone 3625b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3626b254af31SBram Moolenaar 3627b254af31SBram Moolenaar " Test case for updating a non-current quickfix list 3628b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3629b254af31SBram Moolenaar Xexpr "F1:1:L1" 3630b254af31SBram Moolenaar Xexpr "F2:2:L2" 3631b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, "lines" : ["F10:10:L10"]}) 3632b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3633b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'nr' : 1, 'changedtick' : 0}).changedtick) 3634b254af31SBram Moolenaar 3635b254af31SBram Moolenaar call delete("Xone") 3636b254af31SBram Moolenaarendfunc 3637b254af31SBram Moolenaar 3638b254af31SBram Moolenaarfunc Test_qf_tick() 3639b254af31SBram Moolenaar call Xqftick_tests('c') 3640b254af31SBram Moolenaar call Xqftick_tests('l') 3641b254af31SBram Moolenaarendfunc 364212237448SBram Moolenaar 3643c631f2dfSBram Moolenaar" Test helpgrep with lang specifier 3644c631f2dfSBram Moolenaarfunc Xtest_helpgrep_with_lang_specifier(cchar) 3645c631f2dfSBram Moolenaar call s:setup_commands(a:cchar) 3646c631f2dfSBram Moolenaar Xhelpgrep Vim@en 3647c631f2dfSBram Moolenaar call assert_equal('help', &filetype) 3648c631f2dfSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : '$'}).nr) 3649c631f2dfSBram Moolenaar new | only 3650c631f2dfSBram Moolenaarendfunc 3651c631f2dfSBram Moolenaar 3652c631f2dfSBram Moolenaarfunc Test_helpgrep_with_lang_specifier() 3653c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('c') 3654c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('l') 3655c631f2dfSBram Moolenaarendfunc 3656c631f2dfSBram Moolenaar 365712237448SBram Moolenaar" The following test used to crash Vim. 365812237448SBram Moolenaar" Open the location list window and close the regular window associated with 365912237448SBram Moolenaar" the location list. When the garbage collection runs now, it incorrectly 366012237448SBram Moolenaar" marks the location list context as not in use and frees the context. 366112237448SBram Moolenaarfunc Test_ll_window_ctx() 366212237448SBram Moolenaar call setloclist(0, [], 'f') 366312237448SBram Moolenaar call setloclist(0, [], 'a', {'context' : []}) 366412237448SBram Moolenaar lopen | only 366512237448SBram Moolenaar call test_garbagecollect_now() 366612237448SBram Moolenaar echo getloclist(0, {'context' : 1}).context 366712237448SBram Moolenaar enew | only 366812237448SBram Moolenaarendfunc 366912237448SBram Moolenaar 367014a4deb0SBram Moolenaar" The following test used to crash vim 367114a4deb0SBram Moolenaarfunc Test_lfile_crash() 367214a4deb0SBram Moolenaar sp Xtest 367314a4deb0SBram Moolenaar au QuickFixCmdPre * bw 367414a4deb0SBram Moolenaar call assert_fails('lfile', 'E40') 367514a4deb0SBram Moolenaar au! QuickFixCmdPre 367614a4deb0SBram Moolenaarendfunc 36773c097226SBram Moolenaar 36783c097226SBram Moolenaar" The following test used to crash vim 36793c097226SBram Moolenaarfunc Test_lbuffer_crash() 36803c097226SBram Moolenaar sv Xtest 36813c097226SBram Moolenaar augroup QF_Test 36823c097226SBram Moolenaar au! 36833c097226SBram Moolenaar au * * bw 36843c097226SBram Moolenaar augroup END 36853c097226SBram Moolenaar lbuffer 36863c097226SBram Moolenaar augroup QF_Test 36873c097226SBram Moolenaar au! 36883c097226SBram Moolenaar augroup END 36893c097226SBram Moolenaarendfunc 36903c097226SBram Moolenaar 36913c097226SBram Moolenaar" The following test used to crash vim 36923c097226SBram Moolenaarfunc Test_lexpr_crash() 36933c097226SBram Moolenaar augroup QF_Test 36943c097226SBram Moolenaar au! 36953c097226SBram Moolenaar au * * call setloclist(0, [], 'f') 36963c097226SBram Moolenaar augroup END 36973c097226SBram Moolenaar lexpr "" 36983c097226SBram Moolenaar augroup QF_Test 36993c097226SBram Moolenaar au! 37003c097226SBram Moolenaar augroup END 37019f84ded3SBram Moolenaar 37023c097226SBram Moolenaar enew | only 37039f84ded3SBram Moolenaar augroup QF_Test 37049f84ded3SBram Moolenaar au! 37059f84ded3SBram Moolenaar au BufNew * call setloclist(0, [], 'f') 37069f84ded3SBram Moolenaar augroup END 37079f84ded3SBram Moolenaar lexpr 'x:1:x' 37089f84ded3SBram Moolenaar augroup QF_Test 37099f84ded3SBram Moolenaar au! 37109f84ded3SBram Moolenaar augroup END 37119f84ded3SBram Moolenaar 37129f84ded3SBram Moolenaar enew | only 37139f84ded3SBram Moolenaar lexpr '' 37149f84ded3SBram Moolenaar lopen 37159f84ded3SBram Moolenaar augroup QF_Test 37169f84ded3SBram Moolenaar au! 37179f84ded3SBram Moolenaar au FileType * call setloclist(0, [], 'f') 37189f84ded3SBram Moolenaar augroup END 37199f84ded3SBram Moolenaar lexpr '' 37209f84ded3SBram Moolenaar augroup QF_Test 37219f84ded3SBram Moolenaar au! 37229f84ded3SBram Moolenaar augroup END 37233c097226SBram Moolenaarendfunc 37243c097226SBram Moolenaar 37253c097226SBram Moolenaar" The following test used to crash Vim 37263c097226SBram Moolenaarfunc Test_lvimgrep_crash() 37273c097226SBram Moolenaar sv Xtest 37283c097226SBram Moolenaar augroup QF_Test 37293c097226SBram Moolenaar au! 37303c097226SBram Moolenaar au * * call setloclist(0, [], 'f') 37313c097226SBram Moolenaar augroup END 37323c097226SBram Moolenaar lvimgrep quickfix test_quickfix.vim 37333c097226SBram Moolenaar augroup QF_Test 37343c097226SBram Moolenaar au! 37353c097226SBram Moolenaar augroup END 3736b6f1480aSBram Moolenaar 3737b6f1480aSBram Moolenaar new | only 3738b6f1480aSBram Moolenaar augroup QF_Test 3739b6f1480aSBram Moolenaar au! 3740b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 3741b6f1480aSBram Moolenaar augroup END 3742b6f1480aSBram Moolenaar call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:') 3743b6f1480aSBram Moolenaar augroup QF_Test 3744b6f1480aSBram Moolenaar au! 3745b6f1480aSBram Moolenaar augroup END 3746b6f1480aSBram Moolenaar 37473c097226SBram Moolenaar enew | only 37483c097226SBram Moolenaarendfunc 3749de04654dSBram Moolenaar 37502573af35SBram Moolenaarfunc Test_lvimgrep_crash2() 37512573af35SBram Moolenaar au BufNewFile x sfind 37529b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x', 'E471:') 37539b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x x', 'E471:') 37542573af35SBram Moolenaar 37552573af35SBram Moolenaar au! BufNewFile 37562573af35SBram Moolenaarendfunc 37572573af35SBram Moolenaar 3758de04654dSBram Moolenaar" Test for the position of the quickfix and location list window 3759de04654dSBram Moolenaarfunc Test_qfwin_pos() 3760de04654dSBram Moolenaar " Open two windows 3761de04654dSBram Moolenaar new | only 3762de04654dSBram Moolenaar new 3763de04654dSBram Moolenaar cexpr ['F1:10:L10'] 3764de04654dSBram Moolenaar copen 3765de04654dSBram Moolenaar " Quickfix window should be the bottom most window 3766de04654dSBram Moolenaar call assert_equal(3, winnr()) 3767de04654dSBram Moolenaar close 3768de04654dSBram Moolenaar " Open at the very top 3769de04654dSBram Moolenaar wincmd t 3770de04654dSBram Moolenaar topleft copen 3771de04654dSBram Moolenaar call assert_equal(1, winnr()) 3772de04654dSBram Moolenaar close 3773de04654dSBram Moolenaar " open left of the current window 3774de04654dSBram Moolenaar wincmd t 3775de04654dSBram Moolenaar below new 3776de04654dSBram Moolenaar leftabove copen 3777de04654dSBram Moolenaar call assert_equal(2, winnr()) 3778de04654dSBram Moolenaar close 3779de04654dSBram Moolenaar " open right of the current window 3780de04654dSBram Moolenaar rightbelow copen 3781de04654dSBram Moolenaar call assert_equal(3, winnr()) 3782de04654dSBram Moolenaar close 3783de04654dSBram Moolenaarendfunc 3784e1bb879fSBram Moolenaar 3785e1bb879fSBram Moolenaar" Tests for quickfix/location lists changed by autocommands when 3786e1bb879fSBram Moolenaar" :vimgrep/:lvimgrep commands are running. 3787e1bb879fSBram Moolenaarfunc Test_vimgrep_autocmd() 3788e1bb879fSBram Moolenaar call setqflist([], 'f') 3789e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest1.txt') 3790e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest2.txt') 3791e1bb879fSBram Moolenaar 3792e1bb879fSBram Moolenaar " Test 1: 3793e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3794e1bb879fSBram Moolenaar " changed by an autocmd, the results should be added to the correct quickfix 3795e1bb879fSBram Moolenaar " list. 3796e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt cexpr '' | cexpr '' 3797e1bb879fSBram Moolenaar silent vimgrep stars Xtest*.txt 3798e1bb879fSBram Moolenaar call assert_equal(1, getqflist({'nr' : 0}).nr) 3799e1bb879fSBram Moolenaar call assert_equal(3, getqflist({'nr' : '$'}).nr) 3800e1bb879fSBram Moolenaar call assert_equal('Xtest2.txt', bufname(getqflist()[1].bufnr)) 3801e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3802e1bb879fSBram Moolenaar 3803e1bb879fSBram Moolenaar " Test 2: 3804e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3805e1bb879fSBram Moolenaar " freed, then a error should be given. 3806e1bb879fSBram Moolenaar silent! %bwipe! 3807e1bb879fSBram Moolenaar call setqflist([], 'f') 3808e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt for i in range(10) | cexpr '' | endfor 3809e1bb879fSBram Moolenaar call assert_fails('vimgrep stars Xtest*.txt', 'E925:') 3810e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3811e1bb879fSBram Moolenaar 3812e1bb879fSBram Moolenaar " Test 3: 3813e1bb879fSBram Moolenaar " When searching for a pattern using :lvimgrep, if the location list is 3814e1bb879fSBram Moolenaar " freed, then the command should error out. 3815e1bb879fSBram Moolenaar silent! %bwipe! 3816e1bb879fSBram Moolenaar let g:save_winid = win_getid() 3817e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt call setloclist(g:save_winid, [], 'f') 3818e1bb879fSBram Moolenaar call assert_fails('lvimgrep stars Xtest*.txt', 'E926:') 3819e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3820e1bb879fSBram Moolenaar 3821e1bb879fSBram Moolenaar call delete('Xtest1.txt') 3822e1bb879fSBram Moolenaar call delete('Xtest2.txt') 3823e1bb879fSBram Moolenaar call setqflist([], 'f') 3824e1bb879fSBram Moolenaarendfunc 38253b9474b4SBram Moolenaar 3826f9ae154cSBram Moolenaar" Test for an autocmd changing the current directory when running vimgrep 3827f9ae154cSBram Moolenaarfunc Xvimgrep_autocmd_cd(cchar) 3828f9ae154cSBram Moolenaar call s:setup_commands(a:cchar) 3829f9ae154cSBram Moolenaar 3830f9ae154cSBram Moolenaar %bwipe 3831f9ae154cSBram Moolenaar let save_cwd = getcwd() 3832f9ae154cSBram Moolenaar 3833f9ae154cSBram Moolenaar augroup QF_Test 3834f9ae154cSBram Moolenaar au! 3835f9ae154cSBram Moolenaar autocmd BufRead * silent cd %:p:h 3836f9ae154cSBram Moolenaar augroup END 3837f9ae154cSBram Moolenaar 3838f9ae154cSBram Moolenaar 10Xvimgrep /vim/ Xdir/** 3839f9ae154cSBram Moolenaar let l = g:Xgetlist() 3840f9ae154cSBram Moolenaar call assert_equal('f1.txt', bufname(l[0].bufnr)) 3841f9ae154cSBram Moolenaar call assert_equal('f2.txt', fnamemodify(bufname(l[2].bufnr), ':t')) 3842f9ae154cSBram Moolenaar 3843f9ae154cSBram Moolenaar augroup QF_Test 3844f9ae154cSBram Moolenaar au! 3845f9ae154cSBram Moolenaar augroup END 3846f9ae154cSBram Moolenaar 3847f9ae154cSBram Moolenaar exe 'cd ' . save_cwd 3848f9ae154cSBram Moolenaarendfunc 3849f9ae154cSBram Moolenaar 3850f9ae154cSBram Moolenaarfunc Test_vimgrep_autocmd_cd() 3851f9ae154cSBram Moolenaar call mkdir('Xdir/a', 'p') 3852f9ae154cSBram Moolenaar call mkdir('Xdir/b', 'p') 3853f9ae154cSBram Moolenaar call writefile(['a_L1_vim', 'a_L2_vim'], 'Xdir/a/f1.txt') 3854f9ae154cSBram Moolenaar call writefile(['b_L1_vim', 'b_L2_vim'], 'Xdir/b/f2.txt') 3855f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('c') 3856f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('l') 3857f9ae154cSBram Moolenaar %bwipe 3858f9ae154cSBram Moolenaar call delete('Xdir', 'rf') 3859f9ae154cSBram Moolenaarendfunc 3860f9ae154cSBram Moolenaar 38613b9474b4SBram Moolenaar" The following test used to crash Vim 38623b9474b4SBram Moolenaarfunc Test_lhelpgrep_autocmd() 38633b9474b4SBram Moolenaar lhelpgrep quickfix 38643b9474b4SBram Moolenaar autocmd QuickFixCmdPost * call setloclist(0, [], 'f') 38653b9474b4SBram Moolenaar lhelpgrep buffer 38663b9474b4SBram Moolenaar call assert_equal('help', &filetype) 38673b9474b4SBram Moolenaar call assert_equal(0, getloclist(0, {'nr' : '$'}).nr) 38683b9474b4SBram Moolenaar lhelpgrep tabpage 38693b9474b4SBram Moolenaar call assert_equal('help', &filetype) 38703b9474b4SBram Moolenaar call assert_equal(1, getloclist(0, {'nr' : '$'}).nr) 38713b9474b4SBram Moolenaar au! QuickFixCmdPost 3872b6f1480aSBram Moolenaar 3873b6f1480aSBram Moolenaar new | only 3874b6f1480aSBram Moolenaar augroup QF_Test 3875b6f1480aSBram Moolenaar au! 3876b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'f') 3877b6f1480aSBram Moolenaar augroup END 3878b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 3879b6f1480aSBram Moolenaar augroup QF_Test 3880b6f1480aSBram Moolenaar au! BufEnter 3881b6f1480aSBram Moolenaar augroup END 3882b6f1480aSBram Moolenaar 3883b6f1480aSBram Moolenaar new | only 3884b6f1480aSBram Moolenaar augroup QF_Test 3885b6f1480aSBram Moolenaar au! 3886b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'r') 3887b6f1480aSBram Moolenaar augroup END 3888b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 3889b6f1480aSBram Moolenaar augroup QF_Test 3890b6f1480aSBram Moolenaar au! BufEnter 3891b6f1480aSBram Moolenaar augroup END 3892b6f1480aSBram Moolenaar 3893b6f1480aSBram Moolenaar new | only 3894b6f1480aSBram Moolenaar augroup QF_Test 3895b6f1480aSBram Moolenaar au! 3896b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 3897b6f1480aSBram Moolenaar augroup END 3898b6f1480aSBram Moolenaar call assert_fails('lhelpgrep quickfix', 'E926:') 3899b6f1480aSBram Moolenaar augroup QF_Test 3900b6f1480aSBram Moolenaar au! BufEnter 3901b6f1480aSBram Moolenaar augroup END 3902b6f1480aSBram Moolenaar 39033b9474b4SBram Moolenaar new | only 39043b9474b4SBram Moolenaarendfunc 3905a796d46fSBram Moolenaar 3906a796d46fSBram Moolenaar" Test for shortening/simplifying the file name when opening the 3907a796d46fSBram Moolenaar" quickfix window or when displaying the quickfix list 3908a796d46fSBram Moolenaarfunc Test_shorten_fname() 3909a796d46fSBram Moolenaar if !has('unix') 3910a796d46fSBram Moolenaar return 3911a796d46fSBram Moolenaar endif 3912a796d46fSBram Moolenaar %bwipe 3913a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 3914a796d46fSBram Moolenaar let fname = getcwd() . '/test_quickfix.vim' 3915a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 3916a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 3917a796d46fSBram Moolenaar " Opening the quickfix window should simplify the file path 3918a796d46fSBram Moolenaar cwindow 3919a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 3920a796d46fSBram Moolenaar cclose 3921a796d46fSBram Moolenaar %bwipe 3922a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 3923a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 3924a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 3925a796d46fSBram Moolenaar " Displaying the quickfix list should simplify the file path 3926a796d46fSBram Moolenaar silent! clist 3927a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 3928a796d46fSBram Moolenaarendfunc 39298b62e310SBram Moolenaar 39308b62e310SBram Moolenaar" Quickfix title tests 39318b62e310SBram Moolenaar" In the below tests, 'exe "cmd"' is used to invoke the quickfix commands. 39328b62e310SBram Moolenaar" Otherwise due to indentation, the title is set with spaces at the beginning 39338b62e310SBram Moolenaar" of the command. 39348b62e310SBram Moolenaarfunc Test_qftitle() 39358b62e310SBram Moolenaar call writefile(["F1:1:Line1"], 'Xerr') 39368b62e310SBram Moolenaar 39378b62e310SBram Moolenaar " :cexpr 39388b62e310SBram Moolenaar exe "cexpr readfile('Xerr')" 39398b62e310SBram Moolenaar call assert_equal(":cexpr readfile('Xerr')", getqflist({'title' : 1}).title) 39408b62e310SBram Moolenaar 39418b62e310SBram Moolenaar " :cgetexpr 39428b62e310SBram Moolenaar exe "cgetexpr readfile('Xerr')" 39438b62e310SBram Moolenaar call assert_equal(":cgetexpr readfile('Xerr')", 39448b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 39458b62e310SBram Moolenaar 39468b62e310SBram Moolenaar " :caddexpr 39478b62e310SBram Moolenaar call setqflist([], 'f') 39488b62e310SBram Moolenaar exe "caddexpr readfile('Xerr')" 39498b62e310SBram Moolenaar call assert_equal(":caddexpr readfile('Xerr')", 39508b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 39518b62e310SBram Moolenaar 39528b62e310SBram Moolenaar " :cbuffer 39538b62e310SBram Moolenaar new Xerr 39548b62e310SBram Moolenaar exe "cbuffer" 39558b62e310SBram Moolenaar call assert_equal(':cbuffer (Xerr)', getqflist({'title' : 1}).title) 39568b62e310SBram Moolenaar 39578b62e310SBram Moolenaar " :cgetbuffer 39588b62e310SBram Moolenaar edit Xerr 39598b62e310SBram Moolenaar exe "cgetbuffer" 39608b62e310SBram Moolenaar call assert_equal(':cgetbuffer (Xerr)', getqflist({'title' : 1}).title) 39618b62e310SBram Moolenaar 39628b62e310SBram Moolenaar " :caddbuffer 39638b62e310SBram Moolenaar call setqflist([], 'f') 39648b62e310SBram Moolenaar edit Xerr 39658b62e310SBram Moolenaar exe "caddbuffer" 39668b62e310SBram Moolenaar call assert_equal(':caddbuffer (Xerr)', getqflist({'title' : 1}).title) 39678b62e310SBram Moolenaar 39688b62e310SBram Moolenaar " :cfile 39698b62e310SBram Moolenaar exe "cfile Xerr" 39708b62e310SBram Moolenaar call assert_equal(':cfile Xerr', getqflist({'title' : 1}).title) 39718b62e310SBram Moolenaar 39728b62e310SBram Moolenaar " :cgetfile 39738b62e310SBram Moolenaar exe "cgetfile Xerr" 39748b62e310SBram Moolenaar call assert_equal(':cgetfile Xerr', getqflist({'title' : 1}).title) 39758b62e310SBram Moolenaar 39768b62e310SBram Moolenaar " :caddfile 39778b62e310SBram Moolenaar call setqflist([], 'f') 39788b62e310SBram Moolenaar exe "caddfile Xerr" 39798b62e310SBram Moolenaar call assert_equal(':caddfile Xerr', getqflist({'title' : 1}).title) 39808b62e310SBram Moolenaar 39818b62e310SBram Moolenaar " :grep 39828b62e310SBram Moolenaar set grepprg=internal 39838b62e310SBram Moolenaar exe "grep F1 Xerr" 39848b62e310SBram Moolenaar call assert_equal(':grep F1 Xerr', getqflist({'title' : 1}).title) 39858b62e310SBram Moolenaar 39868b62e310SBram Moolenaar " :grepadd 39878b62e310SBram Moolenaar call setqflist([], 'f') 39888b62e310SBram Moolenaar exe "grepadd F1 Xerr" 39898b62e310SBram Moolenaar call assert_equal(':grepadd F1 Xerr', getqflist({'title' : 1}).title) 39908b62e310SBram Moolenaar set grepprg&vim 39918b62e310SBram Moolenaar 39928b62e310SBram Moolenaar " :vimgrep 39938b62e310SBram Moolenaar exe "vimgrep F1 Xerr" 39948b62e310SBram Moolenaar call assert_equal(':vimgrep F1 Xerr', getqflist({'title' : 1}).title) 39958b62e310SBram Moolenaar 39968b62e310SBram Moolenaar " :vimgrepadd 39978b62e310SBram Moolenaar call setqflist([], 'f') 39988b62e310SBram Moolenaar exe "vimgrepadd F1 Xerr" 39998b62e310SBram Moolenaar call assert_equal(':vimgrepadd F1 Xerr', getqflist({'title' : 1}).title) 40008b62e310SBram Moolenaar 40018b62e310SBram Moolenaar call setqflist(['F1:10:L10'], ' ') 40028b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 40038b62e310SBram Moolenaar 40048b62e310SBram Moolenaar call setqflist([], 'f') 40058b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'a') 40068b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 40078b62e310SBram Moolenaar 40088b62e310SBram Moolenaar call setqflist([], 'f') 40098b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'r') 40108b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 40118b62e310SBram Moolenaar 40128b62e310SBram Moolenaar close 40138b62e310SBram Moolenaar call delete('Xerr') 40148b62e310SBram Moolenaar 40158b62e310SBram Moolenaar call setqflist([], ' ', {'title' : 'Errors'}) 40168b62e310SBram Moolenaar copen 40178b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 40188b62e310SBram Moolenaar call setqflist([], 'r', {'items' : [{'filename' : 'a.c', 'lnum' : 10}]}) 40198b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 40208b62e310SBram Moolenaar cclose 40218b62e310SBram Moolenaarendfunc 4022600323b4SBram Moolenaar 4023600323b4SBram Moolenaarfunc Test_lbuffer_with_bwipe() 4024600323b4SBram Moolenaar new 4025600323b4SBram Moolenaar new 4026600323b4SBram Moolenaar augroup nasty 4027600323b4SBram Moolenaar au * * bwipe 4028600323b4SBram Moolenaar augroup END 4029600323b4SBram Moolenaar lbuffer 4030600323b4SBram Moolenaar augroup nasty 4031600323b4SBram Moolenaar au! 4032600323b4SBram Moolenaar augroup END 4033600323b4SBram Moolenaarendfunc 40340366c016SBram Moolenaar 4035531b9a3aSBram Moolenaar" Test for an autocmd freeing the quickfix/location list when cexpr/lexpr is 4036531b9a3aSBram Moolenaar" running 4037531b9a3aSBram Moolenaarfunc Xexpr_acmd_freelist(cchar) 4038531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4039531b9a3aSBram Moolenaar 40400366c016SBram Moolenaar " This was using freed memory. 40410366c016SBram Moolenaar augroup nasty 4042531b9a3aSBram Moolenaar au * * call g:Xsetlist([], 'f') 40430366c016SBram Moolenaar augroup END 4044531b9a3aSBram Moolenaar Xexpr "x" 40450366c016SBram Moolenaar augroup nasty 40460366c016SBram Moolenaar au! 40470366c016SBram Moolenaar augroup END 40480366c016SBram Moolenaarendfunc 4049531b9a3aSBram Moolenaar 4050531b9a3aSBram Moolenaarfunc Test_cexpr_acmd_freelist() 4051531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('c') 4052531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('l') 4053531b9a3aSBram Moolenaarendfunc 4054531b9a3aSBram Moolenaar 4055531b9a3aSBram Moolenaar" Test for commands that create a new quickfix/location list and jump to the 4056531b9a3aSBram Moolenaar" first error automatically. 4057531b9a3aSBram Moolenaarfunc Xjumpto_first_error_test(cchar) 4058531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4059531b9a3aSBram Moolenaar 4060531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4061531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4062531b9a3aSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4063531b9a3aSBram Moolenaar 4064531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4065531b9a3aSBram Moolenaar enew 4066531b9a3aSBram Moolenaar Xexpr l 4067bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4068531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4069531b9a3aSBram Moolenaar 4070531b9a3aSBram Moolenaar " Test for cfile/lfile 4071531b9a3aSBram Moolenaar enew 4072531b9a3aSBram Moolenaar call writefile(l, 'Xerr') 4073531b9a3aSBram Moolenaar Xfile Xerr 4074bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4075531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4076531b9a3aSBram Moolenaar 4077531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4078531b9a3aSBram Moolenaar edit Xerr 4079531b9a3aSBram Moolenaar Xbuffer 4080bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4081531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4082531b9a3aSBram Moolenaar 4083531b9a3aSBram Moolenaar call delete('Xerr') 4084531b9a3aSBram Moolenaar call delete('Xtestfile1') 4085531b9a3aSBram Moolenaar call delete('Xtestfile2') 4086531b9a3aSBram Moolenaarendfunc 4087531b9a3aSBram Moolenaar 4088531b9a3aSBram Moolenaarfunc Test_jumpto_first_error() 4089531b9a3aSBram Moolenaar call Xjumpto_first_error_test('c') 4090531b9a3aSBram Moolenaar call Xjumpto_first_error_test('l') 4091531b9a3aSBram Moolenaarendfunc 4092531b9a3aSBram Moolenaar 4093531b9a3aSBram Moolenaar" Test for a quickfix autocmd changing the quickfix/location list before 4094531b9a3aSBram Moolenaar" jumping to the first error in the new list. 4095531b9a3aSBram Moolenaarfunc Xautocmd_changelist(cchar) 4096531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4097531b9a3aSBram Moolenaar 4098531b9a3aSBram Moolenaar " Test for cfile/lfile 4099531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4100531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4101531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4102531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4103531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4104531b9a3aSBram Moolenaar Xfile Xerr 4105bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4106531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4107531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4108531b9a3aSBram Moolenaar 4109531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4110531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4111531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4112531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4113531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4114531b9a3aSBram Moolenaar edit Xerr 4115531b9a3aSBram Moolenaar Xbuffer 4116bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4117531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4118531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4119531b9a3aSBram Moolenaar 4120531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4121531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4122531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4123531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4124531b9a3aSBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 4125bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4126531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4127531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4128531b9a3aSBram Moolenaar 4129851332eaSBram Moolenaar " The grepprg may not be set on non-Unix systems 4130851332eaSBram Moolenaar if has('unix') 4131531b9a3aSBram Moolenaar " Test for grep/lgrep 4132531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4133531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4134531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4135531b9a3aSBram Moolenaar silent Xgrep Line5 Xtestfile2 4136bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4137531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4138531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4139851332eaSBram Moolenaar endif 4140531b9a3aSBram Moolenaar 4141531b9a3aSBram Moolenaar " Test for vimgrep/lvimgrep 4142531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4143531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4144531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4145531b9a3aSBram Moolenaar silent Xvimgrep Line5 Xtestfile2 4146bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4147531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4148531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4149531b9a3aSBram Moolenaar 41503f347e47SBram Moolenaar " Test for autocommands clearing the quickfix list before jumping to the 41513f347e47SBram Moolenaar " first error. This should not result in an error 41523f347e47SBram Moolenaar autocmd QuickFixCmdPost * call g:Xsetlist([], 'r') 41533f347e47SBram Moolenaar let v:errmsg = '' 41543f347e47SBram Moolenaar " Test for cfile/lfile 41553f347e47SBram Moolenaar Xfile Xerr 41563f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 41573f347e47SBram Moolenaar " Test for cbuffer/lbuffer 41583f347e47SBram Moolenaar edit Xerr 41593f347e47SBram Moolenaar Xbuffer 41603f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 41613f347e47SBram Moolenaar " Test for cexpr/lexpr 41623f347e47SBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 41633f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 41643f347e47SBram Moolenaar " Test for grep/lgrep 41653f347e47SBram Moolenaar " The grepprg may not be set on non-Unix systems 41663f347e47SBram Moolenaar if has('unix') 41673f347e47SBram Moolenaar silent Xgrep Line5 Xtestfile2 41683f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 41693f347e47SBram Moolenaar endif 41703f347e47SBram Moolenaar " Test for vimgrep/lvimgrep 41713f347e47SBram Moolenaar call assert_fails('silent Xvimgrep Line5 Xtestfile2', 'E480:') 41723f347e47SBram Moolenaar autocmd! QuickFixCmdPost 41733f347e47SBram Moolenaar 4174531b9a3aSBram Moolenaar call delete('Xerr') 4175531b9a3aSBram Moolenaar call delete('Xtestfile1') 4176531b9a3aSBram Moolenaar call delete('Xtestfile2') 4177531b9a3aSBram Moolenaarendfunc 4178531b9a3aSBram Moolenaar 4179531b9a3aSBram Moolenaarfunc Test_autocmd_changelist() 4180531b9a3aSBram Moolenaar call Xautocmd_changelist('c') 4181531b9a3aSBram Moolenaar call Xautocmd_changelist('l') 4182531b9a3aSBram Moolenaarendfunc 41834cde86c2SBram Moolenaar 41844cde86c2SBram Moolenaar" Tests for the ':filter /pat/ clist' command 41854cde86c2SBram Moolenaarfunc Test_filter_clist() 41864cde86c2SBram Moolenaar cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15'] 41874cde86c2SBram Moolenaar call assert_equal([' 2 Xfile2:15 col 15: Line 15'], 41884cde86c2SBram Moolenaar \ split(execute('filter /Line 15/ clist'), "\n")) 41894cde86c2SBram Moolenaar call assert_equal([' 1 Xfile1:10 col 10: Line 10'], 41904cde86c2SBram Moolenaar \ split(execute('filter /Xfile1/ clist'), "\n")) 41914cde86c2SBram Moolenaar call assert_equal([], split(execute('filter /abc/ clist'), "\n")) 41924cde86c2SBram Moolenaar 41934cde86c2SBram Moolenaar call setqflist([{'module' : 'abc', 'pattern' : 'pat1'}, 41944cde86c2SBram Moolenaar \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ') 41954cde86c2SBram Moolenaar call assert_equal([' 2 pqr:pat2: '], 41964cde86c2SBram Moolenaar \ split(execute('filter /pqr/ clist'), "\n")) 41974cde86c2SBram Moolenaar call assert_equal([' 1 abc:pat1: '], 41984cde86c2SBram Moolenaar \ split(execute('filter /pat1/ clist'), "\n")) 41994cde86c2SBram Moolenaarendfunc 42000a08c63dSBram Moolenaar 42010a08c63dSBram Moolenaar" Tests for the "CTRL-W <CR>" command. 42020a08c63dSBram Moolenaarfunc Xview_result_split_tests(cchar) 42030a08c63dSBram Moolenaar call s:setup_commands(a:cchar) 42040a08c63dSBram Moolenaar 42050a08c63dSBram Moolenaar " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list. 42060a08c63dSBram Moolenaar call g:Xsetlist([]) 42070a08c63dSBram Moolenaar Xopen 42080a08c63dSBram Moolenaar let l:win_count = winnr('$') 42090a08c63dSBram Moolenaar call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42') 42100a08c63dSBram Moolenaar call assert_equal(l:win_count, winnr('$')) 42110a08c63dSBram Moolenaar Xclose 42120a08c63dSBram Moolenaarendfunc 42130a08c63dSBram Moolenaar 42140a08c63dSBram Moolenaarfunc Test_view_result_split() 42150a08c63dSBram Moolenaar call Xview_result_split_tests('c') 42160a08c63dSBram Moolenaar call Xview_result_split_tests('l') 42170a08c63dSBram Moolenaarendfunc 42182dfcef4cSBram Moolenaar 42192dfcef4cSBram Moolenaar" Test that :cc sets curswant 42202dfcef4cSBram Moolenaarfunc Test_curswant() 42212dfcef4cSBram Moolenaar helpgrep quickfix 42222dfcef4cSBram Moolenaar normal! llll 42232dfcef4cSBram Moolenaar 1cc 42242dfcef4cSBram Moolenaar call assert_equal(getcurpos()[4], virtcol('.')) 42252dfcef4cSBram Moolenaar cclose | helpclose 42262dfcef4cSBram Moolenaarendfunc 4227b244373bSBram Moolenaar 4228b244373bSBram Moolenaar" Test for opening a file from the quickfix window using CTRL-W <Enter> 4229b244373bSBram Moolenaar" doesn't leave an empty buffer around. 4230b244373bSBram Moolenaarfunc Test_splitview() 4231b244373bSBram Moolenaar call s:create_test_file('Xtestfile1') 4232b244373bSBram Moolenaar call s:create_test_file('Xtestfile2') 4233b244373bSBram Moolenaar new | only 4234b244373bSBram Moolenaar let last_bufnr = bufnr('Test_sv_1', 1) 4235b244373bSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4236b244373bSBram Moolenaar cgetexpr l 4237b244373bSBram Moolenaar copen 4238b244373bSBram Moolenaar let numbufs = len(getbufinfo()) 4239b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4240b244373bSBram Moolenaar copen 4241b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4242b244373bSBram Moolenaar " Make sure new empty buffers are not created 4243b244373bSBram Moolenaar call assert_equal(numbufs, len(getbufinfo())) 4244b244373bSBram Moolenaar " Creating a new buffer should use the next available buffer number 4245b244373bSBram Moolenaar call assert_equal(last_bufnr + 4, bufnr("Test_sv_2", 1)) 4246b244373bSBram Moolenaar bwipe Test_sv_1 4247b244373bSBram Moolenaar bwipe Test_sv_2 4248b244373bSBram Moolenaar new | only 4249b244373bSBram Moolenaar 4250b244373bSBram Moolenaar " When split opening files from location list window, make sure that two 4251b244373bSBram Moolenaar " windows doesn't refer to the same location list 4252b244373bSBram Moolenaar lgetexpr l 4253b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4254b244373bSBram Moolenaar lopen 4255b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4256b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4257b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4258b244373bSBram Moolenaar new | only 4259b244373bSBram Moolenaar 4260b244373bSBram Moolenaar " When split opening files from a helpgrep location list window, a new help 4261eeb1b9c7SBram Moolenaar " window should be opened with a copy of the location list. 4262b244373bSBram Moolenaar lhelpgrep window 4263b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4264b244373bSBram Moolenaar lwindow 4265b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4266b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4267b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4268b244373bSBram Moolenaar new | only 4269b244373bSBram Moolenaar 4270406cd90fSBram Moolenaar " Using :split or :vsplit from a quickfix window should behave like a :new 4271406cd90fSBram Moolenaar " or a :vnew command 4272406cd90fSBram Moolenaar copen 4273406cd90fSBram Moolenaar split 4274406cd90fSBram Moolenaar call assert_equal(3, winnr('$')) 4275406cd90fSBram Moolenaar let l = getwininfo() 4276406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4277406cd90fSBram Moolenaar close 4278406cd90fSBram Moolenaar copen 4279406cd90fSBram Moolenaar vsplit 4280406cd90fSBram Moolenaar let l = getwininfo() 4281406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4282406cd90fSBram Moolenaar new | only 4283406cd90fSBram Moolenaar 4284b244373bSBram Moolenaar call delete('Xtestfile1') 4285b244373bSBram Moolenaar call delete('Xtestfile2') 4286b244373bSBram Moolenaarendfunc 4287c45eb770SBram Moolenaar 4288c45eb770SBram Moolenaar" Test for parsing entries using visual screen column 4289c45eb770SBram Moolenaarfunc Test_viscol() 4290c45eb770SBram Moolenaar enew 4291c45eb770SBram Moolenaar call writefile(["Col1\tCol2\tCol3"], 'Xfile1') 4292c45eb770SBram Moolenaar edit Xfile1 4293c45eb770SBram Moolenaar 4294c45eb770SBram Moolenaar " Use byte offset for column number 4295c45eb770SBram Moolenaar set efm& 4296c45eb770SBram Moolenaar cexpr "Xfile1:1:5:XX\nXfile1:1:9:YY\nXfile1:1:20:ZZ" 4297c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4298c45eb770SBram Moolenaar cnext 4299c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4300c45eb770SBram Moolenaar cnext 4301c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4302c45eb770SBram Moolenaar 4303c45eb770SBram Moolenaar " Use screen column offset for column number 4304c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4305c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:12:YY\nXfile1:1:20:ZZ" 4306c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4307c45eb770SBram Moolenaar cnext 4308c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4309c45eb770SBram Moolenaar cnext 4310c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4311c45eb770SBram Moolenaar cexpr "Xfile1:1:6:XX\nXfile1:1:15:YY\nXfile1:1:24:ZZ" 4312c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4313c45eb770SBram Moolenaar cnext 4314c45eb770SBram Moolenaar call assert_equal([10, 16], [col('.'), virtcol('.')]) 4315c45eb770SBram Moolenaar cnext 4316c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4317c45eb770SBram Moolenaar 4318c45eb770SBram Moolenaar enew 4319c45eb770SBram Moolenaar call writefile(["Col1\täü\töß\tCol4"], 'Xfile1') 4320c45eb770SBram Moolenaar 4321c45eb770SBram Moolenaar " Use byte offset for column number 4322c45eb770SBram Moolenaar set efm& 4323c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:11:YY\nXfile1:1:16:ZZ" 4324c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4325c45eb770SBram Moolenaar cnext 4326c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4327c45eb770SBram Moolenaar cnext 4328c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4329c45eb770SBram Moolenaar 4330c45eb770SBram Moolenaar " Use screen column offset for column number 4331c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4332c45eb770SBram Moolenaar cexpr "Xfile1:1:10:XX\nXfile1:1:17:YY\nXfile1:1:25:ZZ" 4333c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4334c45eb770SBram Moolenaar cnext 4335c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4336c45eb770SBram Moolenaar cnext 4337c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4338c45eb770SBram Moolenaar 4339c45eb770SBram Moolenaar enew | only 4340c45eb770SBram Moolenaar set efm& 4341c45eb770SBram Moolenaar call delete('Xfile1') 4342c45eb770SBram Moolenaarendfunc 4343ee8188fcSBram Moolenaar 4344ee8188fcSBram Moolenaar" Test for the quickfix window buffer 4345ee8188fcSBram Moolenaarfunc Xqfbuf_test(cchar) 4346ee8188fcSBram Moolenaar call s:setup_commands(a:cchar) 4347ee8188fcSBram Moolenaar 4348ee8188fcSBram Moolenaar " Quickfix buffer should be reused across closing and opening a quickfix 4349ee8188fcSBram Moolenaar " window 4350ee8188fcSBram Moolenaar Xexpr "F1:10:Line10" 4351ee8188fcSBram Moolenaar Xopen 4352ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4353ee8188fcSBram Moolenaar Xclose 4354ee8188fcSBram Moolenaar " Even after the quickfix window is closed, the buffer should be loaded 4355ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4356647e24baSBram Moolenaar call assert_true(qfbnum, g:Xgetlist({'qfbufnr' : 0}).qfbufnr) 4357ee8188fcSBram Moolenaar Xopen 4358ee8188fcSBram Moolenaar " Buffer should be reused when opening the window again 4359ee8188fcSBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4360ee8188fcSBram Moolenaar Xclose 4361ee8188fcSBram Moolenaar 4362ee8188fcSBram Moolenaar if a:cchar == 'l' 4363ee8188fcSBram Moolenaar %bwipe 4364ee8188fcSBram Moolenaar " For a location list, when both the file window and the location list 4365ee8188fcSBram Moolenaar " window for the list are closed, then the buffer should be freed. 4366ee8188fcSBram Moolenaar new | only 4367ee8188fcSBram Moolenaar lexpr "F1:10:Line10" 4368ee8188fcSBram Moolenaar let wid = win_getid() 4369ee8188fcSBram Moolenaar lopen 4370ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4371ee8188fcSBram Moolenaar call assert_match(qfbnum . ' %a- "\[Location List]"', execute('ls')) 4372ee8188fcSBram Moolenaar close 4373ee8188fcSBram Moolenaar " When the location list window is closed, the buffer name should not 4374ee8188fcSBram Moolenaar " change to 'Quickfix List' 4375647e24baSBram Moolenaar call assert_match(qfbnum . 'u h- "\[Location List]"', execute('ls!')) 4376ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4377ee8188fcSBram Moolenaar 4378d82a81caSBram Moolenaar " After deleting a location list buffer using ":bdelete", opening the 4379d82a81caSBram Moolenaar " location list window should mark the buffer as a location list buffer. 4380d82a81caSBram Moolenaar exe "bdelete " . qfbnum 4381d82a81caSBram Moolenaar lopen 4382d82a81caSBram Moolenaar call assert_equal("quickfix", &buftype) 4383d82a81caSBram Moolenaar call assert_equal(1, getwininfo(win_getid(winnr()))[0].loclist) 4384d82a81caSBram Moolenaar call assert_equal(wid, getloclist(0, {'filewinid' : 0}).filewinid) 4385d82a81caSBram Moolenaar call assert_false(&swapfile) 4386d82a81caSBram Moolenaar lclose 4387d82a81caSBram Moolenaar 4388eeb1b9c7SBram Moolenaar " When the location list is cleared for the window, the buffer should be 4389eeb1b9c7SBram Moolenaar " removed 4390eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4391eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4392647e24baSBram Moolenaar call assert_equal(0, getloclist(0, {'qfbufnr' : 0}).qfbufnr) 4393eeb1b9c7SBram Moolenaar 4394eeb1b9c7SBram Moolenaar " When the location list is freed with the location list window open, the 4395eeb1b9c7SBram Moolenaar " location list buffer should not be lost. It should be reused when the 4396eeb1b9c7SBram Moolenaar " location list is again populated. 4397eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4398eeb1b9c7SBram Moolenaar lopen 4399eeb1b9c7SBram Moolenaar let wid = win_getid() 4400eeb1b9c7SBram Moolenaar let qfbnum = bufnr('') 4401eeb1b9c7SBram Moolenaar wincmd p 4402eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4403eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4404eeb1b9c7SBram Moolenaar lopen 4405eeb1b9c7SBram Moolenaar call assert_equal(wid, win_getid()) 4406eeb1b9c7SBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4407eeb1b9c7SBram Moolenaar lclose 4408eeb1b9c7SBram Moolenaar 4409eeb1b9c7SBram Moolenaar " When the window with the location list is closed, the buffer should be 4410eeb1b9c7SBram Moolenaar " removed 4411ee8188fcSBram Moolenaar new | only 4412eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4413ee8188fcSBram Moolenaar endif 4414ee8188fcSBram Moolenaarendfunc 4415ee8188fcSBram Moolenaar 4416ee8188fcSBram Moolenaarfunc Test_qfbuf() 4417ee8188fcSBram Moolenaar call Xqfbuf_test('c') 4418ee8188fcSBram Moolenaar call Xqfbuf_test('l') 4419ee8188fcSBram Moolenaarendfunc 4420eeb1b9c7SBram Moolenaar 4421eeb1b9c7SBram Moolenaar" If there is an autocmd to use only one window, then opening the location 4422eeb1b9c7SBram Moolenaar" list window used to crash Vim. 4423eeb1b9c7SBram Moolenaarfunc Test_winonly_autocmd() 4424eeb1b9c7SBram Moolenaar call s:create_test_file('Xtest1') 4425eeb1b9c7SBram Moolenaar " Autocmd to show only one Vim window at a time 4426eeb1b9c7SBram Moolenaar autocmd WinEnter * only 4427eeb1b9c7SBram Moolenaar new 4428eeb1b9c7SBram Moolenaar " Load the location list 4429eeb1b9c7SBram Moolenaar lexpr "Xtest1:5:Line5\nXtest1:10:Line10\nXtest1:15:Line15" 4430eeb1b9c7SBram Moolenaar let loclistid = getloclist(0, {'id' : 0}).id 4431eeb1b9c7SBram Moolenaar " Open the location list window. Only this window will be shown and the file 4432eeb1b9c7SBram Moolenaar " window is closed. 4433eeb1b9c7SBram Moolenaar lopen 4434eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4435eeb1b9c7SBram Moolenaar " Jump to an entry in the location list and make sure that the cursor is 4436eeb1b9c7SBram Moolenaar " positioned correctly. 4437eeb1b9c7SBram Moolenaar ll 3 4438eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4439bdd2c290SBram Moolenaar call assert_equal('Xtest1', @%) 4440eeb1b9c7SBram Moolenaar call assert_equal(15, line('.')) 4441eeb1b9c7SBram Moolenaar " Cleanup 4442eeb1b9c7SBram Moolenaar autocmd! WinEnter 4443eeb1b9c7SBram Moolenaar new | only 4444eeb1b9c7SBram Moolenaar call delete('Xtest1') 4445eeb1b9c7SBram Moolenaarendfunc 444639803d82SBram Moolenaar 444739803d82SBram Moolenaar" Test to make sure that an empty quickfix buffer is not reused for loading 444839803d82SBram Moolenaar" a normal buffer. 444939803d82SBram Moolenaarfunc Test_empty_qfbuf() 445039803d82SBram Moolenaar enew | only 445139803d82SBram Moolenaar call writefile(["Test"], 'Xfile1') 445239803d82SBram Moolenaar call setqflist([], 'f') 445339803d82SBram Moolenaar copen | only 445439803d82SBram Moolenaar let qfbuf = bufnr('') 445539803d82SBram Moolenaar edit Xfile1 445639803d82SBram Moolenaar call assert_notequal(qfbuf, bufnr('')) 445739803d82SBram Moolenaar enew 445839803d82SBram Moolenaar call delete('Xfile1') 445939803d82SBram Moolenaarendfunc 44603ff33114SBram Moolenaar 44613ff33114SBram Moolenaar" Test for the :cbelow, :cabove, :lbelow and :labove commands. 4462cf6a55c4SBram Moolenaar" And for the :cafter, :cbefore, :lafter and :lbefore commands. 44633ff33114SBram Moolenaarfunc Xtest_below(cchar) 44643ff33114SBram Moolenaar call s:setup_commands(a:cchar) 44653ff33114SBram Moolenaar 44663ff33114SBram Moolenaar " No quickfix/location list 44673ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 44683ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4469cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4470cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 44713ff33114SBram Moolenaar 44723ff33114SBram Moolenaar " Empty quickfix/location list 44733ff33114SBram Moolenaar call g:Xsetlist([]) 44743ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 44753ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4476cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4477cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 44783ff33114SBram Moolenaar 44793ff33114SBram Moolenaar call s:create_test_file('X1') 44803ff33114SBram Moolenaar call s:create_test_file('X2') 44813ff33114SBram Moolenaar call s:create_test_file('X3') 44823ff33114SBram Moolenaar call s:create_test_file('X4') 44833ff33114SBram Moolenaar 44843ff33114SBram Moolenaar " Invalid entries 44853ff33114SBram Moolenaar edit X1 44863ff33114SBram Moolenaar call g:Xsetlist(["E1", "E2"]) 44873ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 44883ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 44893ff33114SBram Moolenaar call assert_fails('3Xbelow', 'E42:') 44903ff33114SBram Moolenaar call assert_fails('4Xabove', 'E42:') 4491cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4492cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 4493cf6a55c4SBram Moolenaar call assert_fails('3Xbefore', 'E42:') 4494cf6a55c4SBram Moolenaar call assert_fails('4Xafter', 'E42:') 44953ff33114SBram Moolenaar 44963ff33114SBram Moolenaar " Test the commands with various arguments 4497cf6a55c4SBram Moolenaar Xexpr ["X1:5:3:L5", "X2:5:2:L5", "X2:10:3:L10", "X2:15:4:L15", "X3:3:5:L3"] 44983ff33114SBram Moolenaar edit +7 X2 44993ff33114SBram Moolenaar Xabove 4500bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 45013ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4502cf6a55c4SBram Moolenaar normal 7G 4503cf6a55c4SBram Moolenaar Xbefore 4504bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4505cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4506cf6a55c4SBram Moolenaar 45073ff33114SBram Moolenaar normal 2j 45083ff33114SBram Moolenaar Xbelow 4509bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4510cf6a55c4SBram Moolenaar normal 7G 4511cf6a55c4SBram Moolenaar Xafter 4512bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4513cf6a55c4SBram Moolenaar 45143ff33114SBram Moolenaar " Last error in this file 45153ff33114SBram Moolenaar Xbelow 99 4516bdd2c290SBram Moolenaar call assert_equal(['X2', 15], [@%, line('.')]) 45173ff33114SBram Moolenaar call assert_fails('Xbelow', 'E553:') 4518cf6a55c4SBram Moolenaar normal gg 4519cf6a55c4SBram Moolenaar Xafter 99 4520bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 4], [@%, line('.'), col('.')]) 4521cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E553:') 4522cf6a55c4SBram Moolenaar 45233ff33114SBram Moolenaar " First error in this file 45243ff33114SBram Moolenaar Xabove 99 4525bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 45263ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4527cf6a55c4SBram Moolenaar normal G 4528cf6a55c4SBram Moolenaar Xbefore 99 4529bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4530cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4531cf6a55c4SBram Moolenaar 45323ff33114SBram Moolenaar normal gg 45333ff33114SBram Moolenaar Xbelow 2 4534bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4535cf6a55c4SBram Moolenaar normal gg 4536cf6a55c4SBram Moolenaar Xafter 2 4537bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4538cf6a55c4SBram Moolenaar 45393ff33114SBram Moolenaar normal G 45403ff33114SBram Moolenaar Xabove 2 4541bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4542cf6a55c4SBram Moolenaar normal G 4543cf6a55c4SBram Moolenaar Xbefore 2 4544bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4545cf6a55c4SBram Moolenaar 45463ff33114SBram Moolenaar edit X4 45473ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 45483ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 4549cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4550cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 45513ff33114SBram Moolenaar if a:cchar == 'l' 45523ff33114SBram Moolenaar " If a buffer has location list entries from some other window but not 45533ff33114SBram Moolenaar " from the current window, then the commands should fail. 45543ff33114SBram Moolenaar edit X1 | split | call setloclist(0, [], 'f') 45553ff33114SBram Moolenaar call assert_fails('Xabove', 'E776:') 45563ff33114SBram Moolenaar call assert_fails('Xbelow', 'E776:') 4557cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E776:') 4558cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E776:') 45593ff33114SBram Moolenaar close 45603ff33114SBram Moolenaar endif 45613ff33114SBram Moolenaar 45623ff33114SBram Moolenaar " Test for lines with multiple quickfix entries 45633ff33114SBram Moolenaar Xexpr ["X1:5:L5", "X2:5:1:L5_1", "X2:5:2:L5_2", "X2:5:3:L5_3", 45643ff33114SBram Moolenaar \ "X2:10:1:L10_1", "X2:10:2:L10_2", "X2:10:3:L10_3", 45653ff33114SBram Moolenaar \ "X2:15:1:L15_1", "X2:15:2:L15_2", "X2:15:3:L15_3", "X3:3:L3"] 45663ff33114SBram Moolenaar edit +1 X2 45673ff33114SBram Moolenaar Xbelow 2 4568bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 4569cf6a55c4SBram Moolenaar normal 1G 4570cf6a55c4SBram Moolenaar Xafter 2 4571bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4572cf6a55c4SBram Moolenaar 45733ff33114SBram Moolenaar normal gg 45743ff33114SBram Moolenaar Xbelow 99 4575bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4576cf6a55c4SBram Moolenaar normal gg 4577cf6a55c4SBram Moolenaar Xafter 99 4578bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 3], [@%, line('.'), col('.')]) 4579cf6a55c4SBram Moolenaar 45803ff33114SBram Moolenaar normal G 45813ff33114SBram Moolenaar Xabove 2 4582bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 45833ff33114SBram Moolenaar normal G 4584cf6a55c4SBram Moolenaar Xbefore 2 4585bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 4586cf6a55c4SBram Moolenaar 4587cf6a55c4SBram Moolenaar normal G 45883ff33114SBram Moolenaar Xabove 99 4589bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4590cf6a55c4SBram Moolenaar normal G 4591cf6a55c4SBram Moolenaar Xbefore 99 4592bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4593cf6a55c4SBram Moolenaar 45943ff33114SBram Moolenaar normal 10G 45953ff33114SBram Moolenaar Xabove 4596bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4597cf6a55c4SBram Moolenaar normal 10G$ 4598cf6a55c4SBram Moolenaar 2Xbefore 4599bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 2], [@%, line('.'), col('.')]) 4600cf6a55c4SBram Moolenaar 46013ff33114SBram Moolenaar normal 10G 46023ff33114SBram Moolenaar Xbelow 4603bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4604cf6a55c4SBram Moolenaar normal 9G 4605cf6a55c4SBram Moolenaar 5Xafter 4606bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 46073ff33114SBram Moolenaar 46083ff33114SBram Moolenaar " Invalid range 46093ff33114SBram Moolenaar if a:cchar == 'c' 461025190db2SBram Moolenaar call assert_fails('-2cbelow', 'E16:') 4611cf6a55c4SBram Moolenaar call assert_fails('-2cafter', 'E16:') 46123ff33114SBram Moolenaar else 461325190db2SBram Moolenaar call assert_fails('-2lbelow', 'E16:') 4614cf6a55c4SBram Moolenaar call assert_fails('-2lafter', 'E16:') 46153ff33114SBram Moolenaar endif 46163ff33114SBram Moolenaar 46173ff33114SBram Moolenaar call delete('X1') 46183ff33114SBram Moolenaar call delete('X2') 46193ff33114SBram Moolenaar call delete('X3') 46203ff33114SBram Moolenaar call delete('X4') 46213ff33114SBram Moolenaarendfunc 46223ff33114SBram Moolenaar 46233ff33114SBram Moolenaarfunc Test_cbelow() 46243ff33114SBram Moolenaar call Xtest_below('c') 46253ff33114SBram Moolenaar call Xtest_below('l') 46263ff33114SBram Moolenaarendfunc 462725190db2SBram Moolenaar 462825190db2SBram Moolenaarfunc Test_quickfix_count() 462925190db2SBram Moolenaar let commands = [ 463025190db2SBram Moolenaar \ 'cNext', 463125190db2SBram Moolenaar \ 'cNfile', 463225190db2SBram Moolenaar \ 'cabove', 463325190db2SBram Moolenaar \ 'cbelow', 463425190db2SBram Moolenaar \ 'cfirst', 463525190db2SBram Moolenaar \ 'clast', 463625190db2SBram Moolenaar \ 'cnewer', 463725190db2SBram Moolenaar \ 'cnext', 463825190db2SBram Moolenaar \ 'cnfile', 463925190db2SBram Moolenaar \ 'colder', 464025190db2SBram Moolenaar \ 'cprevious', 464125190db2SBram Moolenaar \ 'crewind', 464225190db2SBram Moolenaar \ 464325190db2SBram Moolenaar \ 'lNext', 464425190db2SBram Moolenaar \ 'lNfile', 464525190db2SBram Moolenaar \ 'labove', 464625190db2SBram Moolenaar \ 'lbelow', 464725190db2SBram Moolenaar \ 'lfirst', 464825190db2SBram Moolenaar \ 'llast', 464925190db2SBram Moolenaar \ 'lnewer', 465025190db2SBram Moolenaar \ 'lnext', 465125190db2SBram Moolenaar \ 'lnfile', 465225190db2SBram Moolenaar \ 'lolder', 465325190db2SBram Moolenaar \ 'lprevious', 465425190db2SBram Moolenaar \ 'lrewind', 465525190db2SBram Moolenaar \ ] 465625190db2SBram Moolenaar for cmd in commands 465725190db2SBram Moolenaar call assert_fails('-1' .. cmd, 'E16:') 465825190db2SBram Moolenaar call assert_fails('.' .. cmd, 'E16:') 465925190db2SBram Moolenaar call assert_fails('%' .. cmd, 'E16:') 466025190db2SBram Moolenaar call assert_fails('$' .. cmd, 'E16:') 466125190db2SBram Moolenaar endfor 466225190db2SBram Moolenaarendfunc 46636a0cc916SBram Moolenaar 46646a0cc916SBram Moolenaar" Test for aborting quickfix commands using QuickFixCmdPre 46656a0cc916SBram Moolenaarfunc Xtest_qfcmd_abort(cchar) 46666a0cc916SBram Moolenaar call s:setup_commands(a:cchar) 46676a0cc916SBram Moolenaar 46686a0cc916SBram Moolenaar call g:Xsetlist([], 'f') 46696a0cc916SBram Moolenaar 46706a0cc916SBram Moolenaar " cexpr/lexpr 46716a0cc916SBram Moolenaar let e = '' 46726a0cc916SBram Moolenaar try 46736a0cc916SBram Moolenaar Xexpr ["F1:10:Line10", "F2:20:Line20"] 46746a0cc916SBram Moolenaar catch /.*/ 46756a0cc916SBram Moolenaar let e = v:exception 46766a0cc916SBram Moolenaar endtry 46776a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 46786a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 46796a0cc916SBram Moolenaar 46806a0cc916SBram Moolenaar " cfile/lfile 46816a0cc916SBram Moolenaar call writefile(["F1:10:Line10", "F2:20:Line20"], 'Xfile1') 46826a0cc916SBram Moolenaar let e = '' 46836a0cc916SBram Moolenaar try 46846a0cc916SBram Moolenaar Xfile Xfile1 46856a0cc916SBram Moolenaar catch /.*/ 46866a0cc916SBram Moolenaar let e = v:exception 46876a0cc916SBram Moolenaar endtry 46886a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 46896a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 46906a0cc916SBram Moolenaar call delete('Xfile1') 46916a0cc916SBram Moolenaar 46926a0cc916SBram Moolenaar " cgetbuffer/lgetbuffer 46936a0cc916SBram Moolenaar enew! 46946a0cc916SBram Moolenaar call append(0, ["F1:10:Line10", "F2:20:Line20"]) 46956a0cc916SBram Moolenaar let e = '' 46966a0cc916SBram Moolenaar try 46976a0cc916SBram Moolenaar Xgetbuffer 46986a0cc916SBram Moolenaar catch /.*/ 46996a0cc916SBram Moolenaar let e = v:exception 47006a0cc916SBram Moolenaar endtry 47016a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 47026a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 47036a0cc916SBram Moolenaar enew! 47046a0cc916SBram Moolenaar 47056a0cc916SBram Moolenaar " vimgrep/lvimgrep 47066a0cc916SBram Moolenaar let e = '' 47076a0cc916SBram Moolenaar try 47086a0cc916SBram Moolenaar Xvimgrep /func/ test_quickfix.vim 47096a0cc916SBram Moolenaar catch /.*/ 47106a0cc916SBram Moolenaar let e = v:exception 47116a0cc916SBram Moolenaar endtry 47126a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 47136a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 47146a0cc916SBram Moolenaar 47156a0cc916SBram Moolenaar " helpgrep/lhelpgrep 47166a0cc916SBram Moolenaar let e = '' 47176a0cc916SBram Moolenaar try 47186a0cc916SBram Moolenaar Xhelpgrep quickfix 47196a0cc916SBram Moolenaar catch /.*/ 47206a0cc916SBram Moolenaar let e = v:exception 47216a0cc916SBram Moolenaar endtry 47226a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 47236a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 47246a0cc916SBram Moolenaar 47256a0cc916SBram Moolenaar " grep/lgrep 47266a0cc916SBram Moolenaar if has('unix') 47276a0cc916SBram Moolenaar let e = '' 47286a0cc916SBram Moolenaar try 47296a0cc916SBram Moolenaar silent Xgrep func test_quickfix.vim 47306a0cc916SBram Moolenaar catch /.*/ 47316a0cc916SBram Moolenaar let e = v:exception 47326a0cc916SBram Moolenaar endtry 47336a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 47346a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 47356a0cc916SBram Moolenaar endif 47366a0cc916SBram Moolenaarendfunc 47376a0cc916SBram Moolenaar 47386a0cc916SBram Moolenaarfunc Test_qfcmd_abort() 47396a0cc916SBram Moolenaar augroup QF_Test 47406a0cc916SBram Moolenaar au! 47416a0cc916SBram Moolenaar autocmd QuickFixCmdPre * throw "AbortCmd" 47426a0cc916SBram Moolenaar augroup END 47436a0cc916SBram Moolenaar 47446a0cc916SBram Moolenaar call Xtest_qfcmd_abort('c') 47456a0cc916SBram Moolenaar call Xtest_qfcmd_abort('l') 47466a0cc916SBram Moolenaar 47476a0cc916SBram Moolenaar augroup QF_Test 47486a0cc916SBram Moolenaar au! 47496a0cc916SBram Moolenaar augroup END 47506a0cc916SBram Moolenaarendfunc 47516a0cc916SBram Moolenaar 4752d8a8c4caSBram Moolenaar" Test for using a file in one of the parent directories. 4753d8a8c4caSBram Moolenaarfunc Test_search_in_dirstack() 4754d8a8c4caSBram Moolenaar call mkdir('Xtestdir/a/b/c', 'p') 4755d8a8c4caSBram Moolenaar let save_cwd = getcwd() 4756d8a8c4caSBram Moolenaar call writefile(["X1_L1", "X1_L2"], 'Xtestdir/Xfile1') 4757d8a8c4caSBram Moolenaar call writefile(["X2_L1", "X2_L2"], 'Xtestdir/a/Xfile2') 4758d8a8c4caSBram Moolenaar call writefile(["X3_L1", "X3_L2"], 'Xtestdir/a/b/Xfile3') 4759d8a8c4caSBram Moolenaar call writefile(["X4_L1", "X4_L2"], 'Xtestdir/a/b/c/Xfile4') 4760d8a8c4caSBram Moolenaar 4761d8a8c4caSBram Moolenaar let lines = "Entering dir Xtestdir\n" . 4762d8a8c4caSBram Moolenaar \ "Entering dir a\n" . 4763d8a8c4caSBram Moolenaar \ "Entering dir b\n" . 4764d8a8c4caSBram Moolenaar \ "Xfile2:2:X2_L2\n" . 4765d8a8c4caSBram Moolenaar \ "Leaving dir a\n" . 4766d8a8c4caSBram Moolenaar \ "Xfile1:2:X1_L2\n" . 4767d8a8c4caSBram Moolenaar \ "Xfile3:1:X3_L1\n" . 4768d8a8c4caSBram Moolenaar \ "Entering dir c\n" . 4769d8a8c4caSBram Moolenaar \ "Xfile4:2:X4_L2\n" . 477088a3e2b2SBram Moolenaar \ "Leaving dir c\n" 4771d8a8c4caSBram Moolenaar set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m 477288a3e2b2SBram Moolenaar cexpr lines .. "Leaving dir Xtestdir|\n" | let next = 1 4773d8a8c4caSBram Moolenaar call assert_equal(11, getqflist({'size' : 0}).size) 4774d8a8c4caSBram Moolenaar call assert_equal(4, getqflist({'idx' : 0}).idx) 4775d8a8c4caSBram Moolenaar call assert_equal('X2_L2', getline('.')) 477688a3e2b2SBram Moolenaar call assert_equal(1, next) 4777d8a8c4caSBram Moolenaar cnext 4778d8a8c4caSBram Moolenaar call assert_equal(6, getqflist({'idx' : 0}).idx) 4779d8a8c4caSBram Moolenaar call assert_equal('X1_L2', getline('.')) 4780d8a8c4caSBram Moolenaar cnext 4781d8a8c4caSBram Moolenaar call assert_equal(7, getqflist({'idx' : 0}).idx) 4782d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 4783d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 4784d8a8c4caSBram Moolenaar cnext 4785d8a8c4caSBram Moolenaar call assert_equal(9, getqflist({'idx' : 0}).idx) 4786d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 4787d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 4788d8a8c4caSBram Moolenaar 4789d8a8c4caSBram Moolenaar set efm& 4790d8a8c4caSBram Moolenaar exe 'cd ' . save_cwd 4791d8a8c4caSBram Moolenaar call delete('Xtestdir', 'rf') 4792d8a8c4caSBram Moolenaarendfunc 4793d8a8c4caSBram Moolenaar 47941860bde9SBram Moolenaar" Test for :cquit 47951860bde9SBram Moolenaarfunc Test_cquit() 47961860bde9SBram Moolenaar " Exit Vim with a non-zero value 47971860bde9SBram Moolenaar if RunVim([], ["cquit 7"], '') 47981860bde9SBram Moolenaar call assert_equal(7, v:shell_error) 47991860bde9SBram Moolenaar endif 48001860bde9SBram Moolenaar 48011860bde9SBram Moolenaar if RunVim([], ["50cquit"], '') 48021860bde9SBram Moolenaar call assert_equal(50, v:shell_error) 48031860bde9SBram Moolenaar endif 48041860bde9SBram Moolenaar 48051860bde9SBram Moolenaar " Exit Vim with default value 48061860bde9SBram Moolenaar if RunVim([], ["cquit"], '') 48071860bde9SBram Moolenaar call assert_equal(1, v:shell_error) 48081860bde9SBram Moolenaar endif 48091860bde9SBram Moolenaar 48101860bde9SBram Moolenaar " Exit Vim with zero value 48111860bde9SBram Moolenaar if RunVim([], ["cquit 0"], '') 48121860bde9SBram Moolenaar call assert_equal(0, v:shell_error) 48131860bde9SBram Moolenaar endif 48141860bde9SBram Moolenaar 48151860bde9SBram Moolenaar " Exit Vim with negative value 48161860bde9SBram Moolenaar call assert_fails('-3cquit', 'E16:') 48171860bde9SBram Moolenaarendfunc 48181860bde9SBram Moolenaar 4819858ba06dSBram Moolenaar" Test for getting a specific item from a quickfix list 4820858ba06dSBram Moolenaarfunc Xtest_getqflist_by_idx(cchar) 4821858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 4822858ba06dSBram Moolenaar " Empty list 4823858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 1, 'items' : 0}).items) 4824858ba06dSBram Moolenaar Xexpr ['F1:10:L10', 'F1:20:L20'] 4825858ba06dSBram Moolenaar let l = g:Xgetlist({'idx' : 2, 'items' : 0}).items 4826858ba06dSBram Moolenaar call assert_equal(bufnr('F1'), l[0].bufnr) 4827858ba06dSBram Moolenaar call assert_equal(20, l[0].lnum) 4828858ba06dSBram Moolenaar call assert_equal('L20', l[0].text) 4829858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : -1, 'items' : 0}).items) 4830858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 3, 'items' : 0}).items) 4831858ba06dSBram Moolenaar %bwipe! 4832858ba06dSBram Moolenaarendfunc 4833858ba06dSBram Moolenaar 4834858ba06dSBram Moolenaarfunc Test_getqflist_by_idx() 4835858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('c') 4836858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('l') 4837858ba06dSBram Moolenaarendfunc 4838858ba06dSBram Moolenaar 4839858ba06dSBram Moolenaar" Test for the 'quickfixtextfunc' setting 4840858ba06dSBram Moolenaarfunc Tqfexpr(info) 4841858ba06dSBram Moolenaar if a:info.quickfix 484200e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 4843858ba06dSBram Moolenaar else 484400e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 4845858ba06dSBram Moolenaar endif 4846858ba06dSBram Moolenaar 484700e260bbSBram Moolenaar let l = [] 484800e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 484900e260bbSBram Moolenaar let e = qfl[idx] 4850858ba06dSBram Moolenaar let s = '' 4851858ba06dSBram Moolenaar if e.bufnr != 0 4852858ba06dSBram Moolenaar let bname = bufname(e.bufnr) 4853858ba06dSBram Moolenaar let s ..= fnamemodify(bname, ':.') 4854858ba06dSBram Moolenaar endif 4855858ba06dSBram Moolenaar let s ..= '-' 4856858ba06dSBram Moolenaar let s ..= 'L' .. string(e.lnum) .. 'C' .. string(e.col) .. '-' 4857858ba06dSBram Moolenaar let s ..= e.text 485800e260bbSBram Moolenaar call add(l, s) 485900e260bbSBram Moolenaar endfor 4860858ba06dSBram Moolenaar 486100e260bbSBram Moolenaar return l 4862858ba06dSBram Moolenaarendfunc 4863858ba06dSBram Moolenaar 4864858ba06dSBram Moolenaarfunc Xtest_qftextfunc(cchar) 4865858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 4866858ba06dSBram Moolenaar 4867858ba06dSBram Moolenaar set efm=%f:%l:%c:%m 4868858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 4869*d43906d2SBram Moolenaar call assert_equal('Tqfexpr', &quickfixtextfunc) 4870*d43906d2SBram Moolenaar call assert_equal('', 4871*d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 4872858ba06dSBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 4873858ba06dSBram Moolenaar Xwindow 4874858ba06dSBram Moolenaar call assert_equal('F1-L10C2-green', getline(1)) 4875858ba06dSBram Moolenaar call assert_equal('F1-L20C4-blue', getline(2)) 4876858ba06dSBram Moolenaar Xclose 4877858ba06dSBram Moolenaar set quickfixtextfunc&vim 4878858ba06dSBram Moolenaar Xwindow 4879858ba06dSBram Moolenaar call assert_equal('F1|10 col 2| green', getline(1)) 4880858ba06dSBram Moolenaar call assert_equal('F1|20 col 4| blue', getline(2)) 4881858ba06dSBram Moolenaar Xclose 4882858ba06dSBram Moolenaar set efm& 4883858ba06dSBram Moolenaar set quickfixtextfunc& 4884858ba06dSBram Moolenaar 4885858ba06dSBram Moolenaar " Test for per list 'quickfixtextfunc' setting 4886858ba06dSBram Moolenaar func PerQfText(info) 4887858ba06dSBram Moolenaar if a:info.quickfix 488800e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 4889858ba06dSBram Moolenaar else 489000e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 4891858ba06dSBram Moolenaar endif 4892858ba06dSBram Moolenaar if empty(qfl) 489300e260bbSBram Moolenaar return [] 4894858ba06dSBram Moolenaar endif 489500e260bbSBram Moolenaar let l = [] 489600e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 489700e260bbSBram Moolenaar call add(l, 'Line ' .. qfl[idx].lnum .. ', Col ' .. qfl[idx].col) 489800e260bbSBram Moolenaar endfor 489900e260bbSBram Moolenaar return l 4900858ba06dSBram Moolenaar endfunc 4901858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 4902858ba06dSBram Moolenaar call g:Xsetlist([], ' ', {'quickfixtextfunc' : "PerQfText"}) 4903858ba06dSBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 4904858ba06dSBram Moolenaar Xwindow 4905858ba06dSBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 4906858ba06dSBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 4907858ba06dSBram Moolenaar Xclose 4908*d43906d2SBram Moolenaar call assert_equal(function('PerQfText'), 4909*d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 49107ba5a7efSBram Moolenaar " Add entries to the list when the quickfix buffer is hidden 49117ba5a7efSBram Moolenaar Xaddexpr ['F1:30:6:red'] 49127ba5a7efSBram Moolenaar Xwindow 49137ba5a7efSBram Moolenaar call assert_equal('Line 30, Col 6', getline(3)) 49147ba5a7efSBram Moolenaar Xclose 4915858ba06dSBram Moolenaar call g:Xsetlist([], 'r', {'quickfixtextfunc' : ''}) 4916*d43906d2SBram Moolenaar call assert_equal('', g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 4917858ba06dSBram Moolenaar set quickfixtextfunc& 4918858ba06dSBram Moolenaar delfunc PerQfText 4919858ba06dSBram Moolenaar 4920858ba06dSBram Moolenaar " Non-existing function 4921858ba06dSBram Moolenaar set quickfixtextfunc=Tabc 4922858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 4923858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 4924858ba06dSBram Moolenaar Xclose 4925858ba06dSBram Moolenaar set quickfixtextfunc& 4926858ba06dSBram Moolenaar 4927858ba06dSBram Moolenaar " set option to a non-function 4928858ba06dSBram Moolenaar set quickfixtextfunc=[10,\ 20] 4929858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 4930858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 4931858ba06dSBram Moolenaar Xclose 4932858ba06dSBram Moolenaar set quickfixtextfunc& 4933858ba06dSBram Moolenaar 4934858ba06dSBram Moolenaar " set option to a function with different set of arguments 4935858ba06dSBram Moolenaar func Xqftext(a, b, c) 4936858ba06dSBram Moolenaar return a:a .. a:b .. a:c 4937858ba06dSBram Moolenaar endfunc 4938858ba06dSBram Moolenaar set quickfixtextfunc=Xqftext 4939858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E119:') 4940858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E119:') 4941858ba06dSBram Moolenaar Xclose 494200e260bbSBram Moolenaar 494300e260bbSBram Moolenaar " set option to a function that returns a list with non-strings 494400e260bbSBram Moolenaar func Xqftext2(d) 494500e260bbSBram Moolenaar return ['one', [], 'two'] 494600e260bbSBram Moolenaar endfunc 494700e260bbSBram Moolenaar set quickfixtextfunc=Xqftext2 494800e260bbSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue', 'F1:30:6:red']", 494900e260bbSBram Moolenaar \ 'E730:') 495000e260bbSBram Moolenaar call assert_fails('Xwindow', 'E730:') 4951*d43906d2SBram Moolenaar call assert_equal(['one', 'F1|20 col 4| blue', 'F1|30 col 6| red'], 4952*d43906d2SBram Moolenaar \ getline(1, '$')) 495300e260bbSBram Moolenaar Xclose 495400e260bbSBram Moolenaar 4955858ba06dSBram Moolenaar set quickfixtextfunc& 4956858ba06dSBram Moolenaar delfunc Xqftext 495700e260bbSBram Moolenaar delfunc Xqftext2 4958*d43906d2SBram Moolenaar 4959*d43906d2SBram Moolenaar " set the global option to a lambda function 4960*d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ map(g:Xgetlist({'id'\ :\ d.id,\ 'items'\ :\ 1}).items[d.start_idx-1:d.end_idx-1],\ 'v:val.text')} 4961*d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 4962*d43906d2SBram Moolenaar Xwindow 4963*d43906d2SBram Moolenaar call assert_equal(['green', 'blue'], getline(1, '$')) 4964*d43906d2SBram Moolenaar Xclose 4965*d43906d2SBram 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) 4966*d43906d2SBram Moolenaar set quickfixtextfunc& 4967*d43906d2SBram Moolenaar 4968*d43906d2SBram Moolenaar " use a lambda function that returns an empty list 4969*d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ []} 4970*d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 4971*d43906d2SBram Moolenaar Xwindow 4972*d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 4973*d43906d2SBram Moolenaar \ getline(1, '$')) 4974*d43906d2SBram Moolenaar Xclose 4975*d43906d2SBram Moolenaar set quickfixtextfunc& 4976*d43906d2SBram Moolenaar 4977*d43906d2SBram Moolenaar " use a lambda function that returns a list with empty strings 4978*d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ ['',\ '']} 4979*d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 4980*d43906d2SBram Moolenaar Xwindow 4981*d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 4982*d43906d2SBram Moolenaar \ getline(1, '$')) 4983*d43906d2SBram Moolenaar Xclose 4984*d43906d2SBram Moolenaar set quickfixtextfunc& 4985*d43906d2SBram Moolenaar 4986*d43906d2SBram Moolenaar " set the per-quickfix list text function to a lambda function 4987*d43906d2SBram Moolenaar call g:Xsetlist([], ' ', 4988*d43906d2SBram Moolenaar \ {'quickfixtextfunc' : 4989*d43906d2SBram Moolenaar \ {d -> map(g:Xgetlist({'id' : d.id, 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 4990*d43906d2SBram Moolenaar \ "'Line ' .. v:val.lnum .. ', Col ' .. v:val.col")}}) 4991*d43906d2SBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 4992*d43906d2SBram Moolenaar Xwindow 4993*d43906d2SBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 4994*d43906d2SBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 4995*d43906d2SBram Moolenaar Xclose 4996*d43906d2SBram Moolenaar call assert_match("function('<lambda>\\d\\+')", string(g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc)) 4997*d43906d2SBram Moolenaar call g:Xsetlist([], 'f') 4998858ba06dSBram Moolenaarendfunc 4999858ba06dSBram Moolenaar 5000858ba06dSBram Moolenaarfunc Test_qftextfunc() 5001858ba06dSBram Moolenaar call Xtest_qftextfunc('c') 5002858ba06dSBram Moolenaar call Xtest_qftextfunc('l') 5003858ba06dSBram Moolenaarendfunc 5004858ba06dSBram Moolenaar 5005ec98e93aSBram Moolenaar" Running :lhelpgrep command more than once in a help window, doesn't jump to 5006ec98e93aSBram Moolenaar" the help topic 5007ec98e93aSBram Moolenaarfunc Test_lhelpgrep_from_help_window() 5008ec98e93aSBram Moolenaar call mkdir('Xtestdir/doc', 'p') 5009ec98e93aSBram Moolenaar call writefile(['window'], 'Xtestdir/doc/a.txt') 5010ec98e93aSBram Moolenaar call writefile(['buffer'], 'Xtestdir/doc/b.txt') 5011ec98e93aSBram Moolenaar let save_rtp = &rtp 5012ec98e93aSBram Moolenaar let &rtp = 'Xtestdir' 5013ec98e93aSBram Moolenaar lhelpgrep window 5014ec98e93aSBram Moolenaar lhelpgrep buffer 5015ec98e93aSBram Moolenaar call assert_equal('b.txt', fnamemodify(@%, ":p:t")) 5016ec98e93aSBram Moolenaar lhelpgrep window 5017ec98e93aSBram Moolenaar call assert_equal('a.txt', fnamemodify(@%, ":p:t")) 5018ec98e93aSBram Moolenaar let &rtp = save_rtp 5019ec98e93aSBram Moolenaar call delete('Xtestdir', 'rf') 5020ec98e93aSBram Moolenaar new | only! 5021ec98e93aSBram Moolenaarendfunc 5022ec98e93aSBram Moolenaar 50236a0cc916SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 5024