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> 35bb01a1efSYegappan Lakshmanan command! -count=999 -nargs=* Xvimgrep <mods> <count>vimgrep <args> 36ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods> vimgrepadd <args> 37049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> grep <args> 38049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> grepadd <args> 39049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep helpgrep <args> 4074240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>cc 413ff33114SBram Moolenaar command! -count=1 -nargs=0 Xbelow <mods><count>cbelow 423ff33114SBram Moolenaar command! -count=1 -nargs=0 Xabove <mods><count>cabove 43cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xbefore <mods><count>cbefore 44cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xafter <mods><count>cafter 453ef5bf7dSBram Moolenaar let g:Xgetlist = function('getqflist') 463ef5bf7dSBram Moolenaar let g:Xsetlist = function('setqflist') 47b6fa30ccSBram Moolenaar call setqflist([], 'f') 483ef5bf7dSBram Moolenaar else 493ef5bf7dSBram Moolenaar command! -nargs=* -bang Xlist <mods>llist<bang> <args> 503ef5bf7dSBram Moolenaar command! -nargs=* Xgetexpr <mods>lgetexpr <args> 51361c8f0eSBram Moolenaar command! -nargs=* Xaddexpr <mods>laddexpr <args> 5255b69264SBram Moolenaar command! -nargs=* -count Xolder <mods><count>lolder <args> 533ef5bf7dSBram Moolenaar command! -nargs=* Xnewer <mods>lnewer <args> 543ef5bf7dSBram Moolenaar command! -nargs=* Xopen <mods> lopen <args> 553ef5bf7dSBram Moolenaar command! -nargs=* Xwindow <mods>lwindow <args> 56537ef084SBram Moolenaar command! -nargs=* Xbottom <mods>lbottom <args> 573ef5bf7dSBram Moolenaar command! -nargs=* Xclose <mods>lclose <args> 583ef5bf7dSBram Moolenaar command! -nargs=* -bang Xfile <mods>lfile<bang> <args> 593ef5bf7dSBram Moolenaar command! -nargs=* Xgetfile <mods>lgetfile <args> 603ef5bf7dSBram Moolenaar command! -nargs=* Xaddfile <mods>laddfile <args> 613ef5bf7dSBram Moolenaar command! -nargs=* -bang Xbuffer <mods>lbuffer<bang> <args> 623ef5bf7dSBram Moolenaar command! -nargs=* Xgetbuffer <mods>lgetbuffer <args> 633ef5bf7dSBram Moolenaar command! -nargs=* Xaddbuffer <mods>laddbuffer <args> 643ef5bf7dSBram Moolenaar command! -nargs=* Xrewind <mods>lrewind <args> 6599895eacSBram Moolenaar command! -count -nargs=* -bang Xnext <mods><count>lnext<bang> <args> 6699895eacSBram Moolenaar command! -count -nargs=* -bang Xprev <mods><count>lprev<bang> <args> 670fcc7c6dSBram Moolenaar command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args> 680fcc7c6dSBram Moolenaar command! -nargs=* -bang Xlast <mods>llast<bang> <args> 6925190db2SBram Moolenaar command! -count -nargs=* -bang Xnfile <mods><count>lnfile<bang> <args> 700fcc7c6dSBram Moolenaar command! -nargs=* -bang Xpfile <mods>lpfile<bang> <args> 713ef5bf7dSBram Moolenaar command! -nargs=* Xexpr <mods>lexpr <args> 72bb01a1efSYegappan Lakshmanan command! -count=999 -nargs=* Xvimgrep <mods> <count>lvimgrep <args> 73ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods> lvimgrepadd <args> 74049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> lgrep <args> 75049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> lgrepadd <args> 76049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep lhelpgrep <args> 7774240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>ll 783ff33114SBram Moolenaar command! -count=1 -nargs=0 Xbelow <mods><count>lbelow 793ff33114SBram Moolenaar command! -count=1 -nargs=0 Xabove <mods><count>labove 80cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xbefore <mods><count>lbefore 81cf6a55c4SBram Moolenaar command! -count=1 -nargs=0 Xafter <mods><count>lafter 823ef5bf7dSBram Moolenaar let g:Xgetlist = function('getloclist', [0]) 833ef5bf7dSBram Moolenaar let g:Xsetlist = function('setloclist', [0]) 84b6fa30ccSBram Moolenaar call setloclist(0, [], 'f') 853ef5bf7dSBram Moolenaar endif 862b946c9fSBram Moolenaarendfunc 873ef5bf7dSBram Moolenaar 88da59dd5dSBram Moolenaar" Tests for the :clist and :llist commands 892b946c9fSBram Moolenaarfunc XlistTests(cchar) 903ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 91da59dd5dSBram Moolenaar 92b6fa30ccSBram Moolenaar if a:cchar == 'l' 93b6fa30ccSBram Moolenaar call assert_fails('llist', 'E776:') 94b6fa30ccSBram Moolenaar endif 95da59dd5dSBram Moolenaar " With an empty list, command should return error 963ef5bf7dSBram Moolenaar Xgetexpr [] 973ef5bf7dSBram Moolenaar silent! Xlist 98da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E42: No Errors') 99da59dd5dSBram Moolenaar 100da59dd5dSBram Moolenaar " Populate the list and then try 1013ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1', 102da59dd5dSBram Moolenaar \ 'non-error 2', 'Xtestfile2:2:2:Line2', 10388a3e2b2SBram Moolenaar \ 'non-error| 3', 'Xtestfile3:3:1:Line3'] 104da59dd5dSBram Moolenaar 105da59dd5dSBram Moolenaar " List only valid entries 106ee85df37SBram Moolenaar let l = split(execute('Xlist', ''), "\n") 107da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 108da59dd5dSBram Moolenaar \ ' 4 Xtestfile2:2 col 2: Line2', 109da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 110da59dd5dSBram Moolenaar 111da59dd5dSBram Moolenaar " List all the entries 112ee85df37SBram Moolenaar let l = split(execute('Xlist!', ''), "\n") 113da59dd5dSBram Moolenaar call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', 114da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', 11588a3e2b2SBram Moolenaar \ ' 5: non-error| 3', ' 6 Xtestfile3:3 col 1: Line3'], l) 116da59dd5dSBram Moolenaar 117da59dd5dSBram Moolenaar " List a range of errors 118ee85df37SBram Moolenaar let l = split(execute('Xlist 3,6', ''), "\n") 119da59dd5dSBram Moolenaar call assert_equal([' 4 Xtestfile2:2 col 2: Line2', 120da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 121da59dd5dSBram Moolenaar 122ee85df37SBram Moolenaar let l = split(execute('Xlist! 3,4', ''), "\n") 123da59dd5dSBram Moolenaar call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 124da59dd5dSBram Moolenaar 125ee85df37SBram Moolenaar let l = split(execute('Xlist -6,-4', ''), "\n") 126da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l) 127da59dd5dSBram Moolenaar 128ee85df37SBram Moolenaar let l = split(execute('Xlist! -5,-3', ''), "\n") 129da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 130da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 131391b1dd0SBram Moolenaar 132391b1dd0SBram Moolenaar " Test for '+' 133ee85df37SBram Moolenaar let l = split(execute('Xlist! +2', ''), "\n") 134391b1dd0SBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 135391b1dd0SBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 136ee85df37SBram Moolenaar 1376864efa5Sthinca " Ranged entries 1386864efa5Sthinca call g:Xsetlist([{'lnum':10,'text':'Line1'}, 1396864efa5Sthinca \ {'lnum':20,'col':10,'text':'Line2'}, 1406864efa5Sthinca \ {'lnum':30,'col':15,'end_col':20,'text':'Line3'}, 1416864efa5Sthinca \ {'lnum':40,'end_lnum':45,'text':'Line4'}, 1426864efa5Sthinca \ {'lnum':50,'end_lnum':55,'col':15,'text':'Line5'}, 1436864efa5Sthinca \ {'lnum':60,'end_lnum':65,'col':25,'end_col':35,'text':'Line6'}]) 1446864efa5Sthinca let l = split(execute('Xlist', ""), "\n") 1456864efa5Sthinca call assert_equal([' 1:10: Line1', 1466864efa5Sthinca \ ' 2:20 col 10: Line2', 1476864efa5Sthinca \ ' 3:30 col 15-20: Line3', 1486864efa5Sthinca \ ' 4:40-45: Line4', 1496864efa5Sthinca \ ' 5:50-55 col 15: Line5', 1506864efa5Sthinca \ ' 6:60-65 col 25-35: Line6'], l) 1516864efa5Sthinca 152ee85df37SBram Moolenaar " Different types of errors 153ee85df37SBram Moolenaar call g:Xsetlist([{'lnum':10,'col':5,'type':'W', 'text':'Warning','nr':11}, 154ee85df37SBram Moolenaar \ {'lnum':20,'col':10,'type':'e','text':'Error','nr':22}, 155ee85df37SBram Moolenaar \ {'lnum':30,'col':15,'type':'i','text':'Info','nr':33}, 156ee85df37SBram Moolenaar \ {'lnum':40,'col':20,'type':'x', 'text':'Other','nr':44}, 157ee85df37SBram Moolenaar \ {'lnum':50,'col':25,'type':"\<C-A>",'text':'one','nr':55}]) 158ee85df37SBram Moolenaar let l = split(execute('Xlist', ""), "\n") 159ee85df37SBram Moolenaar call assert_equal([' 1:10 col 5 warning 11: Warning', 160ee85df37SBram Moolenaar \ ' 2:20 col 10 error 22: Error', 161ee85df37SBram Moolenaar \ ' 3:30 col 15 info 33: Info', 162ee85df37SBram Moolenaar \ ' 4:40 col 20 x 44: Other', 163ee85df37SBram Moolenaar \ ' 5:50 col 25 55: one'], l) 164ee85df37SBram Moolenaar 165d76ce852SBram Moolenaar " Test for module names, one needs to explicitly set `'valid':v:true` so 166d76ce852SBram Moolenaar call g:Xsetlist([ 167d76ce852SBram Moolenaar \ {'lnum':10,'col':5,'type':'W','module':'Data.Text','text':'ModuleWarning','nr':11,'valid':v:true}, 168d76ce852SBram Moolenaar \ {'lnum':20,'col':10,'type':'W','module':'Data.Text','filename':'Data/Text.hs','text':'ModuleWarning','nr':22,'valid':v:true}, 169d76ce852SBram Moolenaar \ {'lnum':30,'col':15,'type':'W','filename':'Data/Text.hs','text':'FileWarning','nr':33,'valid':v:true}]) 170d76ce852SBram Moolenaar let l = split(execute('Xlist', ""), "\n") 171d76ce852SBram Moolenaar call assert_equal([' 1 Data.Text:10 col 5 warning 11: ModuleWarning', 172d76ce852SBram Moolenaar \ ' 2 Data.Text:20 col 10 warning 22: ModuleWarning', 173d76ce852SBram Moolenaar \ ' 3 Data/Text.hs:30 col 15 warning 33: FileWarning'], l) 174d76ce852SBram Moolenaar 175f9ae154cSBram Moolenaar " For help entries in the quickfix list, only the filename without directory 176f9ae154cSBram Moolenaar " should be displayed 177f9ae154cSBram Moolenaar Xhelpgrep setqflist() 178f9ae154cSBram Moolenaar let l = split(execute('Xlist 1', ''), "\n") 179f9ae154cSBram Moolenaar call assert_match('^ 1 [^\\/]\{-}:', l[0]) 180f9ae154cSBram Moolenaar 181ee85df37SBram Moolenaar " Error cases 182ee85df37SBram Moolenaar call assert_fails('Xlist abc', 'E488:') 1832b946c9fSBram Moolenaarendfunc 184da59dd5dSBram Moolenaar 1852b946c9fSBram Moolenaarfunc Test_clist() 186da59dd5dSBram Moolenaar call XlistTests('c') 187da59dd5dSBram Moolenaar call XlistTests('l') 1882b946c9fSBram Moolenaarendfunc 189da59dd5dSBram Moolenaar 190da59dd5dSBram Moolenaar" Tests for the :colder, :cnewer, :lolder and :lnewer commands 191da59dd5dSBram Moolenaar" Note that this test assumes that a quickfix/location list is 192cfc0a350SBram Moolenaar" already set by the caller. 1932b946c9fSBram Moolenaarfunc XageTests(cchar) 1943ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 195da59dd5dSBram Moolenaar 19687f59b09SBram Moolenaar if a:cchar == 'l' 19787f59b09SBram Moolenaar " No location list for the current window 19887f59b09SBram Moolenaar call assert_fails('lolder', 'E776:') 19987f59b09SBram Moolenaar call assert_fails('lnewer', 'E776:') 20087f59b09SBram Moolenaar endif 20187f59b09SBram Moolenaar 202cf1ba35fSBram Moolenaar let list = [{'bufnr': bufnr('%'), 'lnum': 1}] 203b6fa30ccSBram Moolenaar call g:Xsetlist(list) 204b6fa30ccSBram Moolenaar 205da59dd5dSBram Moolenaar " Jumping to a non existent list should return error 2063ef5bf7dSBram Moolenaar silent! Xolder 99 207da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack') 208da59dd5dSBram Moolenaar 2093ef5bf7dSBram Moolenaar silent! Xnewer 99 210da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E381: At top of quickfix stack') 211da59dd5dSBram Moolenaar 212da59dd5dSBram Moolenaar " Add three quickfix/location lists 2133ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1'] 2143ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile2:2:2:Line2'] 2153ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile3:3:1:Line3'] 216da59dd5dSBram Moolenaar 217da59dd5dSBram Moolenaar " Go back two lists 2183ef5bf7dSBram Moolenaar Xolder 2193ef5bf7dSBram Moolenaar let l = g:Xgetlist() 220da59dd5dSBram Moolenaar call assert_equal('Line2', l[0].text) 221da59dd5dSBram Moolenaar 222da59dd5dSBram Moolenaar " Go forward two lists 2233ef5bf7dSBram Moolenaar Xnewer 2243ef5bf7dSBram Moolenaar let l = g:Xgetlist() 225da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 226da59dd5dSBram Moolenaar 227da59dd5dSBram Moolenaar " Test for the optional count argument 2283ef5bf7dSBram Moolenaar Xolder 2 2293ef5bf7dSBram Moolenaar let l = g:Xgetlist() 230da59dd5dSBram Moolenaar call assert_equal('Line1', l[0].text) 231da59dd5dSBram Moolenaar 2323ef5bf7dSBram Moolenaar Xnewer 2 2333ef5bf7dSBram Moolenaar let l = g:Xgetlist() 234da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 2352b946c9fSBram Moolenaarendfunc 236da59dd5dSBram Moolenaar 2372b946c9fSBram Moolenaarfunc Test_cage() 238da59dd5dSBram Moolenaar call XageTests('c') 239da59dd5dSBram Moolenaar call XageTests('l') 2402b946c9fSBram Moolenaarendfunc 241da59dd5dSBram Moolenaar 242da59dd5dSBram Moolenaar" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen 243da59dd5dSBram Moolenaar" commands 2442b946c9fSBram Moolenaarfunc XwindowTests(cchar) 2453ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 246da59dd5dSBram Moolenaar 247b6fa30ccSBram Moolenaar " Opening the location list window without any errors should fail 248b6fa30ccSBram Moolenaar if a:cchar == 'l' 249b6fa30ccSBram Moolenaar call assert_fails('lopen', 'E776:') 250b6fa30ccSBram Moolenaar endif 251b6fa30ccSBram Moolenaar 252da59dd5dSBram Moolenaar " Create a list with no valid entries 2533ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 254da59dd5dSBram Moolenaar 255da59dd5dSBram Moolenaar " Quickfix/Location window should not open with no valid errors 2563ef5bf7dSBram Moolenaar Xwindow 257da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 258da59dd5dSBram Moolenaar 259da59dd5dSBram Moolenaar " Create a list with valid entries 2603ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 2613ef5bf7dSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 262da59dd5dSBram Moolenaar 263da59dd5dSBram Moolenaar " Open the window 2643ef5bf7dSBram Moolenaar Xwindow 265da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 266da59dd5dSBram Moolenaar \ getline('.') ==# 'Xtestfile1|1 col 3| Line1') 267537ef084SBram Moolenaar redraw! 268da59dd5dSBram Moolenaar 269da59dd5dSBram Moolenaar " Close the window 2703ef5bf7dSBram Moolenaar Xclose 271da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 272da59dd5dSBram Moolenaar 273da59dd5dSBram Moolenaar " Create a list with no valid entries 2743ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 275da59dd5dSBram Moolenaar 276da59dd5dSBram Moolenaar " Open the window 2773ef5bf7dSBram Moolenaar Xopen 5 278da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1' 279c05d1c04SBram Moolenaar \ && winheight(0) == 5) 280da59dd5dSBram Moolenaar 281da59dd5dSBram Moolenaar " Opening the window again, should move the cursor to that window 282da59dd5dSBram Moolenaar wincmd t 2833ef5bf7dSBram Moolenaar Xopen 7 284da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 285c05d1c04SBram Moolenaar \ winheight(0) == 7 && 286da59dd5dSBram Moolenaar \ getline('.') ==# '|| non-error 1') 287da59dd5dSBram Moolenaar 28815a7bdcbSBram Moolenaar " :cnext in quickfix window should move to the next entry 28915a7bdcbSBram Moolenaar Xnext 29015a7bdcbSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 291da59dd5dSBram Moolenaar 292da59dd5dSBram Moolenaar " Calling cwindow should close the quickfix window with no valid errors 2933ef5bf7dSBram Moolenaar Xwindow 294da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 295b6fa30ccSBram Moolenaar 296f9ae154cSBram Moolenaar " Specifying the width should adjust the width for a vertically split 297f9ae154cSBram Moolenaar " quickfix window. 298f9ae154cSBram Moolenaar vert Xopen 299f9ae154cSBram Moolenaar call assert_equal(10, winwidth(0)) 300f9ae154cSBram Moolenaar vert Xopen 12 301f9ae154cSBram Moolenaar call assert_equal(12, winwidth(0)) 302f9ae154cSBram Moolenaar Xclose 303f9ae154cSBram Moolenaar 3045d3c9f8cSBram Moolenaar " Horizontally or vertically splitting the quickfix window should create a 3055d3c9f8cSBram Moolenaar " normal window/buffer 3065d3c9f8cSBram Moolenaar Xopen 3075d3c9f8cSBram Moolenaar wincmd s 3085d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].quickfix) 3095d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].loclist) 3105d3c9f8cSBram Moolenaar call assert_notequal('quickfix', &buftype) 3115d3c9f8cSBram Moolenaar close 3125d3c9f8cSBram Moolenaar Xopen 3135d3c9f8cSBram Moolenaar wincmd v 3145d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].quickfix) 3155d3c9f8cSBram Moolenaar call assert_equal(0, getwininfo(win_getid())[0].loclist) 3165d3c9f8cSBram Moolenaar call assert_notequal('quickfix', &buftype) 3175d3c9f8cSBram Moolenaar close 3185d3c9f8cSBram Moolenaar Xopen 3195d3c9f8cSBram Moolenaar Xclose 3205d3c9f8cSBram Moolenaar 321b6fa30ccSBram Moolenaar if a:cchar == 'c' 322b6fa30ccSBram Moolenaar " Opening the quickfix window in multiple tab pages should reuse the 323b6fa30ccSBram Moolenaar " quickfix buffer 324b6fa30ccSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 325b6fa30ccSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 326b6fa30ccSBram Moolenaar Xopen 327b6fa30ccSBram Moolenaar let qfbufnum = bufnr('%') 328b6fa30ccSBram Moolenaar tabnew 329b6fa30ccSBram Moolenaar Xopen 330b6fa30ccSBram Moolenaar call assert_equal(qfbufnum, bufnr('%')) 331b6fa30ccSBram Moolenaar new | only | tabonly 332b6fa30ccSBram Moolenaar endif 3332b946c9fSBram Moolenaarendfunc 334da59dd5dSBram Moolenaar 3352b946c9fSBram Moolenaarfunc Test_cwindow() 336da59dd5dSBram Moolenaar call XwindowTests('c') 337da59dd5dSBram Moolenaar call XwindowTests('l') 3382b946c9fSBram Moolenaarendfunc 339da59dd5dSBram Moolenaar 34036d50222SBram Moolenaarfunc Test_copenHeight() 34136d50222SBram Moolenaar copen 34236d50222SBram Moolenaar wincmd H 34336d50222SBram Moolenaar let height = winheight(0) 34436d50222SBram Moolenaar copen 10 34536d50222SBram Moolenaar call assert_equal(height, winheight(0)) 34636d50222SBram Moolenaar quit 34736d50222SBram Moolenaarendfunc 34836d50222SBram Moolenaar 3491142a31bSBram Moolenaarfunc Test_copenHeight_tabline() 3501142a31bSBram Moolenaar set tabline=foo showtabline=2 3511142a31bSBram Moolenaar copen 3521142a31bSBram Moolenaar wincmd H 3531142a31bSBram Moolenaar let height = winheight(0) 3541142a31bSBram Moolenaar copen 10 3551142a31bSBram Moolenaar call assert_equal(height, winheight(0)) 3561142a31bSBram Moolenaar quit 3571142a31bSBram Moolenaar set tabline& showtabline& 3581142a31bSBram Moolenaarendfunc 3591142a31bSBram Moolenaar 3601142a31bSBram Moolenaar 361da59dd5dSBram Moolenaar" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile 362da59dd5dSBram Moolenaar" commands. 3632b946c9fSBram Moolenaarfunc XfileTests(cchar) 3643ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 365da59dd5dSBram Moolenaar 366da59dd5dSBram Moolenaar call writefile(['Xtestfile1:700:10:Line 700', 367da59dd5dSBram Moolenaar \ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1') 368da59dd5dSBram Moolenaar 369da59dd5dSBram Moolenaar enew! 3703ef5bf7dSBram Moolenaar Xfile Xqftestfile1 3713ef5bf7dSBram Moolenaar let l = g:Xgetlist() 372da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 373da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 374da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 375da59dd5dSBram Moolenaar 376049cba9eSBram Moolenaar " Test with a non existent file 377e2e4075fSBram Moolenaar call assert_fails('Xfile non_existent_file', 'E40:') 378049cba9eSBram Moolenaar 379da59dd5dSBram Moolenaar " Run cfile/lfile from a modified buffer 380da59dd5dSBram Moolenaar enew! 381da59dd5dSBram Moolenaar silent! put ='Quickfix' 3823ef5bf7dSBram Moolenaar silent! Xfile Xqftestfile1 383da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)') 384da59dd5dSBram Moolenaar 385da59dd5dSBram Moolenaar call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1') 3863ef5bf7dSBram Moolenaar Xaddfile Xqftestfile1 3873ef5bf7dSBram Moolenaar let l = g:Xgetlist() 388da59dd5dSBram Moolenaar call assert_true(len(l) == 3 && 389da59dd5dSBram Moolenaar \ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900') 390da59dd5dSBram Moolenaar 391da59dd5dSBram Moolenaar call writefile(['Xtestfile1:222:77:Line 222', 392da59dd5dSBram Moolenaar \ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1') 393da59dd5dSBram Moolenaar 394da59dd5dSBram Moolenaar enew! 3953ef5bf7dSBram Moolenaar Xgetfile Xqftestfile1 3963ef5bf7dSBram Moolenaar let l = g:Xgetlist() 397da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 398da59dd5dSBram Moolenaar \ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' && 399da59dd5dSBram Moolenaar \ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333') 400da59dd5dSBram Moolenaar 40170077dd1SBram Moolenaar " Test for a file with a long line and without a newline at the end 40270077dd1SBram Moolenaar let text = repeat('x', 1024) 40370077dd1SBram Moolenaar let t = 'a.txt:18:' . text 40470077dd1SBram Moolenaar call writefile([t], 'Xqftestfile1', 'b') 40570077dd1SBram Moolenaar silent! Xfile Xqftestfile1 40670077dd1SBram Moolenaar call assert_equal(text, g:Xgetlist()[0].text) 40770077dd1SBram Moolenaar 408da59dd5dSBram Moolenaar call delete('Xqftestfile1') 4092b946c9fSBram Moolenaarendfunc 410da59dd5dSBram Moolenaar 4112b946c9fSBram Moolenaarfunc Test_cfile() 412da59dd5dSBram Moolenaar call XfileTests('c') 413da59dd5dSBram Moolenaar call XfileTests('l') 4142b946c9fSBram Moolenaarendfunc 415da59dd5dSBram Moolenaar 416da59dd5dSBram Moolenaar" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and 417da59dd5dSBram Moolenaar" :lgetbuffer commands. 4182b946c9fSBram Moolenaarfunc XbufferTests(cchar) 4193ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 420da59dd5dSBram Moolenaar 421da59dd5dSBram Moolenaar enew! 422da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile7:700:10:Line 700', 423da59dd5dSBram Moolenaar \ 'Xtestfile8:800:15:Line 800']) 4243ef5bf7dSBram Moolenaar Xbuffer! 4253ef5bf7dSBram Moolenaar let l = g:Xgetlist() 426da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 427da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 428da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 429da59dd5dSBram Moolenaar 430da59dd5dSBram Moolenaar enew! 431da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile9:900:55:Line 900', 432da59dd5dSBram Moolenaar \ 'Xtestfile10:950:66:Line 950']) 4333ef5bf7dSBram Moolenaar Xgetbuffer 4343ef5bf7dSBram Moolenaar let l = g:Xgetlist() 435da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 436da59dd5dSBram Moolenaar \ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' && 437da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950') 438da59dd5dSBram Moolenaar 439da59dd5dSBram Moolenaar enew! 440da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile11:700:20:Line 700', 441da59dd5dSBram Moolenaar \ 'Xtestfile12:750:25:Line 750']) 4423ef5bf7dSBram Moolenaar Xaddbuffer 4433ef5bf7dSBram Moolenaar let l = g:Xgetlist() 444da59dd5dSBram Moolenaar call assert_true(len(l) == 4 && 445da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' && 446da59dd5dSBram Moolenaar \ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' && 447da59dd5dSBram Moolenaar \ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750') 448ab47c61fSBram Moolenaar enew! 449da59dd5dSBram Moolenaar 450ee85df37SBram Moolenaar " Check for invalid buffer 451ee85df37SBram Moolenaar call assert_fails('Xbuffer 199', 'E474:') 452ee85df37SBram Moolenaar 453ee85df37SBram Moolenaar " Check for unloaded buffer 454ee85df37SBram Moolenaar edit Xtestfile1 455ee85df37SBram Moolenaar let bnr = bufnr('%') 456ee85df37SBram Moolenaar enew! 457ee85df37SBram Moolenaar call assert_fails('Xbuffer ' . bnr, 'E681:') 458ee85df37SBram Moolenaar 459ee85df37SBram Moolenaar " Check for invalid range 460ee85df37SBram Moolenaar " Using Xbuffer will not run the range check in the cbuffer/lbuffer 461ee85df37SBram Moolenaar " commands. So directly call the commands. 462ee85df37SBram Moolenaar if (a:cchar == 'c') 463ee85df37SBram Moolenaar call assert_fails('900,999cbuffer', 'E16:') 464ee85df37SBram Moolenaar else 465ee85df37SBram Moolenaar call assert_fails('900,999lbuffer', 'E16:') 466ee85df37SBram Moolenaar endif 4672b946c9fSBram Moolenaarendfunc 468da59dd5dSBram Moolenaar 4692b946c9fSBram Moolenaarfunc Test_cbuffer() 470da59dd5dSBram Moolenaar call XbufferTests('c') 471da59dd5dSBram Moolenaar call XbufferTests('l') 4722b946c9fSBram Moolenaarendfunc 473da59dd5dSBram Moolenaar 4742b946c9fSBram Moolenaarfunc XexprTests(cchar) 4750fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 4760fcc7c6dSBram Moolenaar 4770fcc7c6dSBram Moolenaar call assert_fails('Xexpr 10', 'E777:') 4782b946c9fSBram Moolenaarendfunc 4790fcc7c6dSBram Moolenaar 4802b946c9fSBram Moolenaarfunc Test_cexpr() 4810fcc7c6dSBram Moolenaar call XexprTests('c') 4820fcc7c6dSBram Moolenaar call XexprTests('l') 4832b946c9fSBram Moolenaarendfunc 4840fcc7c6dSBram Moolenaar 4850fcc7c6dSBram Moolenaar" Tests for :cnext, :cprev, :cfirst, :clast commands 4862b946c9fSBram Moolenaarfunc Xtest_browse(cchar) 4870fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 4880fcc7c6dSBram Moolenaar 48974240d3fSBram Moolenaar call g:Xsetlist([], 'f') 490b6fa30ccSBram Moolenaar " Jumping to first or next location list entry without any error should 491b6fa30ccSBram Moolenaar " result in failure 49274240d3fSBram Moolenaar if a:cchar == 'c' 49374240d3fSBram Moolenaar let err = 'E42:' 49415a7bdcbSBram Moolenaar let cmd = '$cc' 49574240d3fSBram Moolenaar else 49674240d3fSBram Moolenaar let err = 'E776:' 49715a7bdcbSBram Moolenaar let cmd = '$ll' 498b6fa30ccSBram Moolenaar endif 49974240d3fSBram Moolenaar call assert_fails('Xnext', err) 50074240d3fSBram Moolenaar call assert_fails('Xprev', err) 50174240d3fSBram Moolenaar call assert_fails('Xnfile', err) 50274240d3fSBram Moolenaar call assert_fails('Xpfile', err) 50315a7bdcbSBram Moolenaar call assert_fails(cmd, err) 504b6fa30ccSBram Moolenaar 505f9ae154cSBram Moolenaar Xexpr '' 506f9ae154cSBram Moolenaar call assert_fails(cmd, 'E42:') 507f9ae154cSBram Moolenaar 5080fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile1') 5090fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile2') 5100fcc7c6dSBram Moolenaar 5110fcc7c6dSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 5120fcc7c6dSBram Moolenaar \ 'Xqftestfile1:6:Line6', 5130fcc7c6dSBram Moolenaar \ 'Xqftestfile2:10:Line10', 51499895eacSBram Moolenaar \ 'Xqftestfile2:11:Line11', 51599895eacSBram Moolenaar \ 'RegularLine1', 51699895eacSBram Moolenaar \ 'RegularLine2'] 5170fcc7c6dSBram Moolenaar 5180fcc7c6dSBram Moolenaar Xfirst 519818fc9adSBram Moolenaar call assert_fails('-5Xcc', 'E16:') 520e2e4075fSBram Moolenaar call assert_fails('Xprev', 'E553:') 521e2e4075fSBram Moolenaar call assert_fails('Xpfile', 'E553:') 5220fcc7c6dSBram Moolenaar Xnfile 523bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 5240fcc7c6dSBram Moolenaar call assert_equal(10, line('.')) 5250fcc7c6dSBram Moolenaar Xpfile 526bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 5270fcc7c6dSBram Moolenaar call assert_equal(6, line('.')) 52874240d3fSBram Moolenaar 5Xcc 52974240d3fSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx':0}).idx) 53074240d3fSBram Moolenaar 2Xcc 53174240d3fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx':0}).idx) 532f9ae154cSBram Moolenaar if a:cchar == 'c' 533f9ae154cSBram Moolenaar cc 534f9ae154cSBram Moolenaar else 535f9ae154cSBram Moolenaar ll 536f9ae154cSBram Moolenaar endif 537f9ae154cSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx':0}).idx) 53874240d3fSBram Moolenaar 10Xcc 53974240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'idx':0}).idx) 5400fcc7c6dSBram Moolenaar Xlast 54199895eacSBram Moolenaar Xprev 542bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 5430fcc7c6dSBram Moolenaar call assert_equal(11, line('.')) 544e2e4075fSBram Moolenaar call assert_fails('Xnext', 'E553:') 545e2e4075fSBram Moolenaar call assert_fails('Xnfile', 'E553:') 546f9ae154cSBram Moolenaar " To process the range using quickfix list entries, directly use the 547f9ae154cSBram Moolenaar " quickfix commands (don't use the user defined commands) 548f9ae154cSBram Moolenaar if a:cchar == 'c' 549f9ae154cSBram Moolenaar $cc 550f9ae154cSBram Moolenaar else 551f9ae154cSBram Moolenaar $ll 552f9ae154cSBram Moolenaar endif 553f9ae154cSBram Moolenaar call assert_equal(6, g:Xgetlist({'idx':0}).idx) 5540fcc7c6dSBram Moolenaar Xrewind 555bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 5560fcc7c6dSBram Moolenaar call assert_equal(5, line('.')) 5570fcc7c6dSBram Moolenaar 55899895eacSBram Moolenaar 10Xnext 559bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 56099895eacSBram Moolenaar call assert_equal(11, line('.')) 56199895eacSBram Moolenaar 10Xprev 562bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 56399895eacSBram Moolenaar call assert_equal(5, line('.')) 56499895eacSBram Moolenaar 56574240d3fSBram Moolenaar " Jumping to an error from the error window using cc command 56674240d3fSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 56774240d3fSBram Moolenaar \ 'Xqftestfile1:6:Line6', 56874240d3fSBram Moolenaar \ 'Xqftestfile2:10:Line10', 56974240d3fSBram Moolenaar \ 'Xqftestfile2:11:Line11'] 57074240d3fSBram Moolenaar Xopen 57174240d3fSBram Moolenaar 10Xcc 57274240d3fSBram Moolenaar call assert_equal(11, line('.')) 573bdd2c290SBram Moolenaar call assert_equal('Xqftestfile2', @%) 574f0cee197SBram Moolenaar Xopen 575f0cee197SBram Moolenaar call cursor(2, 1) 576f0cee197SBram Moolenaar if a:cchar == 'c' 577f0cee197SBram Moolenaar .cc 578f0cee197SBram Moolenaar else 579f0cee197SBram Moolenaar .ll 580f0cee197SBram Moolenaar endif 581f0cee197SBram Moolenaar call assert_equal(6, line('.')) 582bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 58374240d3fSBram Moolenaar 58474240d3fSBram Moolenaar " Jumping to an error from the error window (when only the error window is 58574240d3fSBram Moolenaar " present) 58674240d3fSBram Moolenaar Xopen | only 58774240d3fSBram Moolenaar Xlast 1 58874240d3fSBram Moolenaar call assert_equal(5, line('.')) 589bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 59074240d3fSBram Moolenaar 591ee85df37SBram Moolenaar Xexpr "" 592ee85df37SBram Moolenaar call assert_fails('Xnext', 'E42:') 593ee85df37SBram Moolenaar 5940fcc7c6dSBram Moolenaar call delete('Xqftestfile1') 5950fcc7c6dSBram Moolenaar call delete('Xqftestfile2') 596fc2b270cSBram Moolenaar 597fc2b270cSBram Moolenaar " Should be able to use next/prev with invalid entries 598fc2b270cSBram Moolenaar Xexpr "" 599fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 600fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 60188a3e2b2SBram Moolenaar Xaddexpr ['foo', 'bar', 'baz', 'quux', 'sh|moo'] 602fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'size' : 0}).size) 603fc2b270cSBram Moolenaar Xlast 604fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx' : 0}).idx) 605fc2b270cSBram Moolenaar Xfirst 606fc2b270cSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 607fc2b270cSBram Moolenaar 2Xnext 608fc2b270cSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 6092b946c9fSBram Moolenaarendfunc 6100fcc7c6dSBram Moolenaar 6112b946c9fSBram Moolenaarfunc Test_browse() 6120fcc7c6dSBram Moolenaar call Xtest_browse('c') 6130fcc7c6dSBram Moolenaar call Xtest_browse('l') 6142b946c9fSBram Moolenaarendfunc 6150fcc7c6dSBram Moolenaar 6162b946c9fSBram Moolenaarfunc Test_nomem() 6178e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_dirname_start'), 0, 0) 618a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 61975bdf6aaSBram Moolenaar 620ce90e36fSBram Moolenaar call GetAllocId('qf_dirname_now')->test_alloc_fail(0, 0) 621a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 62275bdf6aaSBram Moolenaar 6238e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_namebuf'), 0, 0) 624a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 62575bdf6aaSBram Moolenaar 6268e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_errmsg'), 0, 0) 627a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 62875bdf6aaSBram Moolenaar 6298e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_pattern'), 0, 0) 630a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 63175bdf6aaSBram Moolenaar 63275bdf6aaSBram Moolenaarendfunc 63375bdf6aaSBram Moolenaar 6342b946c9fSBram Moolenaarfunc s:test_xhelpgrep(cchar) 635049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 636049cba9eSBram Moolenaar Xhelpgrep quickfix 637049cba9eSBram Moolenaar Xopen 638049cba9eSBram Moolenaar if a:cchar == 'c' 639049cba9eSBram Moolenaar let title_text = ':helpgrep quickfix' 640049cba9eSBram Moolenaar else 641049cba9eSBram Moolenaar let title_text = ':lhelpgrep quickfix' 642049cba9eSBram Moolenaar endif 643049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ title_text, w:quickfix_title) 64499895eacSBram Moolenaar 64599895eacSBram Moolenaar " Jumping to a help topic should open the help window 64699895eacSBram Moolenaar only 64799895eacSBram Moolenaar Xnext 64899895eacSBram Moolenaar call assert_true(&buftype == 'help') 64999895eacSBram Moolenaar call assert_true(winnr('$') == 2) 65099895eacSBram Moolenaar " Jumping to the next match should reuse the help window 65199895eacSBram Moolenaar Xnext 65299895eacSBram Moolenaar call assert_true(&buftype == 'help') 65399895eacSBram Moolenaar call assert_true(winnr() == 1) 65499895eacSBram Moolenaar call assert_true(winnr('$') == 2) 65599895eacSBram Moolenaar " Jumping to the next match from the quickfix window should reuse the help 65699895eacSBram Moolenaar " window 65799895eacSBram Moolenaar Xopen 65899895eacSBram Moolenaar Xnext 65999895eacSBram Moolenaar call assert_true(&buftype == 'help') 66099895eacSBram Moolenaar call assert_true(winnr() == 1) 66199895eacSBram Moolenaar call assert_true(winnr('$') == 2) 6626864efa5Sthinca call assert_match('|\d\+ col \d\+-\d\+|', getbufline(winbufnr(2), 1)[0]) 66399895eacSBram Moolenaar 66462ef7974SBram Moolenaar " This wipes out the buffer, make sure that doesn't cause trouble. 665049cba9eSBram Moolenaar Xclose 666ee85df37SBram Moolenaar 667f9ae154cSBram Moolenaar " When the current window is vertically split, jumping to a help match 668f9ae154cSBram Moolenaar " should open the help window at the top. 669f9ae154cSBram Moolenaar only | enew 670f9ae154cSBram Moolenaar let w1 = win_getid() 671f9ae154cSBram Moolenaar vert new 672f9ae154cSBram Moolenaar let w2 = win_getid() 673f9ae154cSBram Moolenaar Xnext 674f9ae154cSBram Moolenaar let w3 = win_getid() 675f9ae154cSBram Moolenaar call assert_true(&buftype == 'help') 676f9ae154cSBram Moolenaar call assert_true(winnr() == 1) 677a106e6cdSBram Moolenaar " See jump_to_help_window() for details 678a106e6cdSBram Moolenaar let w2_width = winwidth(w2) 679a106e6cdSBram Moolenaar if w2_width != &columns && w2_width < 80 680a106e6cdSBram Moolenaar call assert_equal(['col', [['leaf', w3], 681a106e6cdSBram Moolenaar \ ['row', [['leaf', w2], ['leaf', w1]]]]], winlayout()) 682a106e6cdSBram Moolenaar else 683a106e6cdSBram Moolenaar call assert_equal(['row', [['col', [['leaf', w3], ['leaf', w2]]], 684a106e6cdSBram Moolenaar \ ['leaf', w1]]] , winlayout()) 685a106e6cdSBram Moolenaar endif 686f9ae154cSBram Moolenaar 687f9ae154cSBram Moolenaar new | only 688f9ae154cSBram Moolenaar set buftype=help 689f9ae154cSBram Moolenaar set modified 690f9ae154cSBram Moolenaar call assert_fails('Xnext', 'E37:') 691f9ae154cSBram Moolenaar set nomodified 692f9ae154cSBram Moolenaar new | only 693f9ae154cSBram Moolenaar 694b4d5fbabSBram Moolenaar if a:cchar == 'l' 695b4d5fbabSBram Moolenaar " When a help window is present, running :lhelpgrep should reuse the 696b4d5fbabSBram Moolenaar " help window and not the current window 697b4d5fbabSBram Moolenaar new | only 698b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 699b4d5fbabSBram Moolenaar help index.txt 700b4d5fbabSBram Moolenaar wincmd w 701b4d5fbabSBram Moolenaar lhelpgrep quickfix 702b4d5fbabSBram Moolenaar call assert_equal(1, winnr()) 703b4d5fbabSBram Moolenaar call assert_notequal([], getloclist(1)) 704b4d5fbabSBram Moolenaar call assert_equal([], getloclist(2)) 705b4d5fbabSBram Moolenaar endif 706b4d5fbabSBram Moolenaar 70799895eacSBram Moolenaar new | only 70899895eacSBram Moolenaar 709ee85df37SBram Moolenaar " Search for non existing help string 710ee85df37SBram Moolenaar call assert_fails('Xhelpgrep a1b2c3', 'E480:') 711108e7b42SBram Moolenaar " Invalid regular expression 7129b7bf9e9SBram Moolenaar call assert_fails('Xhelpgrep \@<!', 'E866:') 7132b946c9fSBram Moolenaarendfunc 714049cba9eSBram Moolenaar 7152b946c9fSBram Moolenaarfunc Test_helpgrep() 716049cba9eSBram Moolenaar call s:test_xhelpgrep('c') 717cf25fdb8SBram Moolenaar helpclose 718049cba9eSBram Moolenaar call s:test_xhelpgrep('l') 71962ef7974SBram Moolenaarendfunc 72075bdf6aaSBram Moolenaar 721e5a2dc87SBram Moolenaardef Test_helpgrep_vim9_restore_cpo() 722e5a2dc87SBram Moolenaar assert_equal('aABceFs', &cpo) 723e5a2dc87SBram Moolenaar 724e5a2dc87SBram Moolenaar var rtp_save = &rtp 725e5a2dc87SBram Moolenaar var dir = 'Xruntime/after' 726e5a2dc87SBram Moolenaar &rtp ..= ',' .. dir 727e5a2dc87SBram Moolenaar mkdir(dir .. '/ftplugin', 'p') 72839f3b141SBram Moolenaar writefile(['vim9script'], dir .. '/ftplugin/qf.vim') 729e5a2dc87SBram Moolenaar filetype plugin on 730e5a2dc87SBram Moolenaar silent helpgrep grail 731e5a2dc87SBram Moolenaar cwindow 732e5a2dc87SBram Moolenaar silent helpgrep grail 733e5a2dc87SBram Moolenaar 734e5a2dc87SBram Moolenaar assert_equal('aABceFs', &cpo) 735e5a2dc87SBram Moolenaar delete(dir, 'rf') 736e5a2dc87SBram Moolenaar &rtp = rtp_save 737e5a2dc87SBram Moolenaar cclose 738e5a2dc87SBram Moolenaar helpclose 739e5a2dc87SBram Moolenaarenddef 740e5a2dc87SBram Moolenaar 7415f7d4c04SBram Moolenaardef Test_vim9_cexpr() 7425f7d4c04SBram Moolenaar var text = 'somefile:95:error' 7435f7d4c04SBram Moolenaar cexpr text 7445f7d4c04SBram Moolenaar var l = getqflist() 7455f7d4c04SBram Moolenaar assert_equal(1, l->len()) 7465f7d4c04SBram Moolenaar assert_equal(95, l[0].lnum) 7475f7d4c04SBram Moolenaar assert_equal('error', l[0].text) 7485f7d4c04SBram Moolenaar 7495f7d4c04SBram Moolenaar text = 'somefile:77:warning' 7505f7d4c04SBram Moolenaar caddexpr text 7515f7d4c04SBram Moolenaar l = getqflist() 7525f7d4c04SBram Moolenaar assert_equal(2, l->len()) 7535f7d4c04SBram Moolenaar assert_equal(77, l[1].lnum) 7545f7d4c04SBram Moolenaar assert_equal('warning', l[1].text) 7555f7d4c04SBram Moolenaarenddef 7565f7d4c04SBram Moolenaar 7576920c72dSBram Moolenaarfunc Test_errortitle() 7586920c72dSBram Moolenaar augroup QfBufWinEnter 7596920c72dSBram Moolenaar au! 7606920c72dSBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7616920c72dSBram Moolenaar augroup END 7626920c72dSBram Moolenaar copen 7636920c72dSBram 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'')'}] 7646920c72dSBram Moolenaar call setqflist(a) 7656920c72dSBram Moolenaar call assert_equal(':setqflist()', g:a) 7666920c72dSBram Moolenaar augroup QfBufWinEnter 7676920c72dSBram Moolenaar au! 7686920c72dSBram Moolenaar augroup END 7696920c72dSBram Moolenaar augroup! QfBufWinEnter 7706920c72dSBram Moolenaarendfunc 771e27dba49SBram Moolenaar 7725584df65SBram Moolenaarfunc Test_vimgreptitle() 7735584df65SBram Moolenaar augroup QfBufWinEnter 7745584df65SBram Moolenaar au! 7755584df65SBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 7765584df65SBram Moolenaar augroup END 7775584df65SBram Moolenaar try 7785584df65SBram Moolenaar vimgrep /pattern/j file 7795584df65SBram Moolenaar catch /E480/ 7805584df65SBram Moolenaar endtry 7815584df65SBram Moolenaar copen 7825584df65SBram Moolenaar call assert_equal(': vimgrep /pattern/j file', g:a) 7835584df65SBram Moolenaar augroup QfBufWinEnter 7845584df65SBram Moolenaar au! 7855584df65SBram Moolenaar augroup END 7865584df65SBram Moolenaar augroup! QfBufWinEnter 7875584df65SBram Moolenaarendfunc 7885584df65SBram Moolenaar 789*1d30fde3SBram Moolenaarfunc Test_bufwinenter_once() 790*1d30fde3SBram Moolenaar augroup QfBufWinEnter 791*1d30fde3SBram Moolenaar au! 792*1d30fde3SBram Moolenaar au BufWinEnter * let g:got_afile ..= 'got ' .. expand('<afile>') 793*1d30fde3SBram Moolenaar augroup END 794*1d30fde3SBram Moolenaar let g:got_afile = '' 795*1d30fde3SBram Moolenaar copen 796*1d30fde3SBram Moolenaar call assert_equal('got quickfix', g:got_afile) 797*1d30fde3SBram Moolenaar 798*1d30fde3SBram Moolenaar cclose 799*1d30fde3SBram Moolenaar unlet g:got_afile 800*1d30fde3SBram Moolenaar augroup QfBufWinEnter 801*1d30fde3SBram Moolenaar au! 802*1d30fde3SBram Moolenaar augroup END 803*1d30fde3SBram Moolenaar augroup! QfBufWinEnter 804*1d30fde3SBram Moolenaarendfunc 805*1d30fde3SBram Moolenaar 8062b946c9fSBram Moolenaarfunc XqfTitleTests(cchar) 8073ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 808e27dba49SBram Moolenaar 8093ef5bf7dSBram Moolenaar Xgetexpr ['file:1:1:message'] 8103ef5bf7dSBram Moolenaar let l = g:Xgetlist() 811e27dba49SBram Moolenaar if a:cchar == 'c' 812e27dba49SBram Moolenaar call setqflist(l, 'r') 813e27dba49SBram Moolenaar else 814e27dba49SBram Moolenaar call setloclist(0, l, 'r') 815e27dba49SBram Moolenaar endif 816e27dba49SBram Moolenaar 8173ef5bf7dSBram Moolenaar Xopen 818e27dba49SBram Moolenaar if a:cchar == 'c' 819e27dba49SBram Moolenaar let title = ':setqflist()' 820e27dba49SBram Moolenaar else 821e27dba49SBram Moolenaar let title = ':setloclist()' 822e27dba49SBram Moolenaar endif 823e27dba49SBram Moolenaar call assert_equal(title, w:quickfix_title) 8243ef5bf7dSBram Moolenaar Xclose 8252b946c9fSBram Moolenaarendfunc 826e27dba49SBram Moolenaar 827e27dba49SBram Moolenaar" Tests for quickfix window's title 8282b946c9fSBram Moolenaarfunc Test_qf_title() 829e27dba49SBram Moolenaar call XqfTitleTests('c') 830e27dba49SBram Moolenaar call XqfTitleTests('l') 8312b946c9fSBram Moolenaarendfunc 832e27dba49SBram Moolenaar 833e27dba49SBram Moolenaar" Tests for 'errorformat' 8342b946c9fSBram Moolenaarfunc Test_efm() 835e27dba49SBram Moolenaar let save_efm = &efm 836e27dba49SBram Moolenaar set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%# 837e27dba49SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 838e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 839e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 840e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC'] 841e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 842e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 843e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY'] 844e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 845e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l) 846e27dba49SBram Moolenaar let &efm = save_efm 8472b946c9fSBram Moolenaarendfunc 8481ff2b64bSBram Moolenaar 8491ff2b64bSBram Moolenaar" This will test for problems in quickfix: 8501ff2b64bSBram Moolenaar" A. incorrectly copying location lists which caused the location list to show 8511ff2b64bSBram Moolenaar" a different name than the file that was actually being displayed. 8521ff2b64bSBram Moolenaar" B. not reusing the window for which the location list window is opened but 8531ff2b64bSBram Moolenaar" instead creating new windows. 8541ff2b64bSBram Moolenaar" C. make sure that the location list window is not reused instead of the 8551ff2b64bSBram Moolenaar" window it belongs to. 8561ff2b64bSBram Moolenaar" 8571ff2b64bSBram Moolenaar" Set up the test environment: 8582b946c9fSBram Moolenaarfunc ReadTestProtocol(name) 8591ff2b64bSBram Moolenaar let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '') 8601ff2b64bSBram Moolenaar let word = substitute(base, '\v(.*)\..*', '\1', '') 8611ff2b64bSBram Moolenaar 8621ff2b64bSBram Moolenaar setl modifiable 8631ff2b64bSBram Moolenaar setl noreadonly 8641ff2b64bSBram Moolenaar setl noswapfile 8651ff2b64bSBram Moolenaar setl bufhidden=delete 8661ff2b64bSBram Moolenaar %del _ 8671ff2b64bSBram Moolenaar " For problem 2: 8681ff2b64bSBram Moolenaar " 'buftype' has to be set to reproduce the constant opening of new windows 8691ff2b64bSBram Moolenaar setl buftype=nofile 8701ff2b64bSBram Moolenaar 8711ff2b64bSBram Moolenaar call setline(1, word) 8721ff2b64bSBram Moolenaar 8731ff2b64bSBram Moolenaar setl nomodified 8741ff2b64bSBram Moolenaar setl nomodifiable 8751ff2b64bSBram Moolenaar setl readonly 8761ff2b64bSBram Moolenaar exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '') 8772b946c9fSBram Moolenaarendfunc 8781ff2b64bSBram Moolenaar 8792b946c9fSBram Moolenaarfunc Test_locationlist() 8801ff2b64bSBram Moolenaar enew 8811ff2b64bSBram Moolenaar 8821ff2b64bSBram Moolenaar augroup testgroup 8831ff2b64bSBram Moolenaar au! 8841ff2b64bSBram Moolenaar autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>")) 8851ff2b64bSBram Moolenaar augroup END 8861ff2b64bSBram Moolenaar 8871ff2b64bSBram Moolenaar let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ] 8881ff2b64bSBram Moolenaar 8891ff2b64bSBram Moolenaar let qflist = [] 8901ff2b64bSBram Moolenaar for word in words 8911ff2b64bSBram Moolenaar call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', }) 8921ff2b64bSBram Moolenaar " NOTE: problem 1: 8931ff2b64bSBram Moolenaar " intentionally not setting 'lnum' so that the quickfix entries are not 8941ff2b64bSBram Moolenaar " valid 895aad222c9SBram Moolenaar eval qflist->setloclist(0, ' ') 8961ff2b64bSBram Moolenaar endfor 8971ff2b64bSBram Moolenaar 8981ff2b64bSBram Moolenaar " Test A 8991ff2b64bSBram Moolenaar lrewind 9001ff2b64bSBram Moolenaar enew 9011ff2b64bSBram Moolenaar lopen 90299895eacSBram Moolenaar 4lnext 9031ff2b64bSBram Moolenaar vert split 9041ff2b64bSBram Moolenaar wincmd L 9051ff2b64bSBram Moolenaar lopen 9061ff2b64bSBram Moolenaar wincmd p 9071ff2b64bSBram Moolenaar lnext 9081ff2b64bSBram Moolenaar let fileName = expand("%") 9091ff2b64bSBram Moolenaar wincmd p 9101ff2b64bSBram Moolenaar let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '') 9111ff2b64bSBram Moolenaar let fileName = substitute(fileName, '\\', '/', 'g') 9121ff2b64bSBram Moolenaar let locationListFileName = substitute(locationListFileName, '\\', '/', 'g') 9131ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", fileName) 9141ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", locationListFileName) 9151ff2b64bSBram Moolenaar 9161ff2b64bSBram Moolenaar wincmd n | only 9171ff2b64bSBram Moolenaar 9181ff2b64bSBram Moolenaar " Test B: 9191ff2b64bSBram Moolenaar lrewind 9201ff2b64bSBram Moolenaar lopen 9211ff2b64bSBram Moolenaar 2 9221ff2b64bSBram Moolenaar exe "normal \<CR>" 9231ff2b64bSBram Moolenaar wincmd p 9241ff2b64bSBram Moolenaar 3 9251ff2b64bSBram Moolenaar exe "normal \<CR>" 9261ff2b64bSBram Moolenaar wincmd p 9271ff2b64bSBram Moolenaar 4 9281ff2b64bSBram Moolenaar exe "normal \<CR>" 9291ff2b64bSBram Moolenaar call assert_equal(2, winnr('$')) 9301ff2b64bSBram Moolenaar wincmd n | only 9311ff2b64bSBram Moolenaar 9321ff2b64bSBram Moolenaar " Test C: 9331ff2b64bSBram Moolenaar lrewind 9341ff2b64bSBram Moolenaar lopen 9351ff2b64bSBram Moolenaar " Let's move the location list window to the top to check whether it (the 9361ff2b64bSBram Moolenaar " first window found) will be reused when we try to open new windows: 9371ff2b64bSBram Moolenaar wincmd K 9381ff2b64bSBram Moolenaar 2 9391ff2b64bSBram Moolenaar exe "normal \<CR>" 9401ff2b64bSBram Moolenaar wincmd p 9411ff2b64bSBram Moolenaar 3 9421ff2b64bSBram Moolenaar exe "normal \<CR>" 9431ff2b64bSBram Moolenaar wincmd p 9441ff2b64bSBram Moolenaar 4 9451ff2b64bSBram Moolenaar exe "normal \<CR>" 9461ff2b64bSBram Moolenaar 1wincmd w 9471ff2b64bSBram Moolenaar call assert_equal('quickfix', &buftype) 9481ff2b64bSBram Moolenaar 2wincmd w 9491ff2b64bSBram Moolenaar let bufferName = expand("%") 9501ff2b64bSBram Moolenaar let bufferName = substitute(bufferName, '\\', '/', 'g') 9511ff2b64bSBram Moolenaar call assert_equal('test://quux.txt', bufferName) 9521ff2b64bSBram Moolenaar 9531ff2b64bSBram Moolenaar wincmd n | only 9541ff2b64bSBram Moolenaar 9551ff2b64bSBram Moolenaar augroup! testgroup 9562b946c9fSBram Moolenaarendfunc 9570899d698SBram Moolenaar 9582b946c9fSBram Moolenaarfunc Test_locationlist_curwin_was_closed() 9590899d698SBram Moolenaar augroup testgroup 9600899d698SBram Moolenaar au! 961d106e5baSBram Moolenaar autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>")) 9620899d698SBram Moolenaar augroup END 9630899d698SBram Moolenaar 9642b946c9fSBram Moolenaar func! R(n) 9650899d698SBram Moolenaar quit 9660899d698SBram Moolenaar endfunc 9670899d698SBram Moolenaar 9680899d698SBram Moolenaar new 9690899d698SBram Moolenaar let q = [] 970d106e5baSBram Moolenaar call add(q, {'filename': 'test_curwin.txt' }) 9710899d698SBram Moolenaar call setloclist(0, q) 9720899d698SBram Moolenaar call assert_fails('lrewind', 'E924:') 9730899d698SBram Moolenaar 9740899d698SBram Moolenaar augroup! testgroup 9752b946c9fSBram Moolenaarendfunc 9767eba3d2cSBram Moolenaar 9772b946c9fSBram Moolenaarfunc Test_locationlist_cross_tab_jump() 9780a9046fbSBram Moolenaar call writefile(['loclistfoo'], 'loclistfoo') 9790a9046fbSBram Moolenaar call writefile(['loclistbar'], 'loclistbar') 9800a9046fbSBram Moolenaar set switchbuf=usetab 9810a9046fbSBram Moolenaar 9820a9046fbSBram Moolenaar edit loclistfoo 9830a9046fbSBram Moolenaar tabedit loclistbar 9840a9046fbSBram Moolenaar silent lgrep loclistfoo loclist* 9850a9046fbSBram Moolenaar call assert_equal(1, tabpagenr()) 9860a9046fbSBram Moolenaar 9870a9046fbSBram Moolenaar enew | only | tabonly 9880a9046fbSBram Moolenaar set switchbuf&vim 9890a9046fbSBram Moolenaar call delete('loclistfoo') 9900a9046fbSBram Moolenaar call delete('loclistbar') 9912b946c9fSBram Moolenaarendfunc 9920a9046fbSBram Moolenaar 9937eba3d2cSBram Moolenaar" More tests for 'errorformat' 9942b946c9fSBram Moolenaarfunc Test_efm1() 9957eba3d2cSBram Moolenaar " The 'errorformat' setting is different on non-Unix systems. 9967eba3d2cSBram Moolenaar " This test works only on Unix-like systems. 9976d91bcb4SBram Moolenaar CheckUnix 9987eba3d2cSBram Moolenaar 999c79745a8SBram Moolenaar let l =<< trim [DATA] 1000c79745a8SBram Moolenaar "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set. 1001c79745a8SBram Moolenaar "Xtestfile", line 6 col 19; this is an error 1002c79745a8SBram Moolenaar gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c 1003c79745a8SBram Moolenaar Xtestfile:9: parse error before `asd' 1004c79745a8SBram Moolenaar make: *** [vim] Error 1 1005c79745a8SBram Moolenaar in file "Xtestfile" linenr 10: there is an error 1006c79745a8SBram Moolenaar 1007c79745a8SBram Moolenaar 2 returned 1008c79745a8SBram Moolenaar "Xtestfile", line 11 col 1; this is an error 1009c79745a8SBram Moolenaar "Xtestfile", line 12 col 2; this is another error 1010c79745a8SBram Moolenaar "Xtestfile", line 14:10; this is an error in column 10 1011c79745a8SBram Moolenaar =Xtestfile=, line 15:10; this is another error, but in vcol 10 this time 1012c79745a8SBram Moolenaar "Xtestfile", linenr 16: yet another problem 1013c79745a8SBram Moolenaar Error in "Xtestfile" at line 17: 1014c79745a8SBram Moolenaar x should be a dot 1015c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 1016c79745a8SBram Moolenaar ^ 1017c79745a8SBram Moolenaar Error in "Xtestfile" at line 18: 1018c79745a8SBram Moolenaar x should be a dot 1019c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 1020c79745a8SBram Moolenaar .............^ 1021c79745a8SBram Moolenaar Error in "Xtestfile" at line 19: 1022c79745a8SBram Moolenaar x should be a dot 1023c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 1024c79745a8SBram Moolenaar --------------^ 1025c79745a8SBram Moolenaar Error in "Xtestfile" at line 20: 1026c79745a8SBram Moolenaar x should be a dot 1027c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 1028c79745a8SBram Moolenaar ^ 1029c79745a8SBram Moolenaar 1030c79745a8SBram Moolenaar Does anyone know what is the problem and how to correction it? 1031c79745a8SBram Moolenaar "Xtestfile", line 21 col 9: What is the title of the quickfix window? 1032c79745a8SBram Moolenaar "Xtestfile", line 22 col 9: What is the title of the quickfix window? 1033c79745a8SBram Moolenaar [DATA] 10347eba3d2cSBram Moolenaar 10357eba3d2cSBram Moolenaar call writefile(l, 'Xerrorfile1') 10367eba3d2cSBram Moolenaar call writefile(l[:-2], 'Xerrorfile2') 10377eba3d2cSBram Moolenaar 1038e7eb9270SBram Moolenaar let m =<< [DATA] 1039c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2 1040c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3 1041c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4 1042c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5 1043c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6 1044c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7 1045c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8 1046c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9 1047c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10 1048c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11 1049c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12 1050c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13 1051c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14 1052c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15 1053c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16 1054c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17 1055c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18 1056c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19 1057c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20 1058c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21 1059c79745a8SBram Moolenaar xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22 1060c79745a8SBram Moolenaar[DATA] 10617eba3d2cSBram Moolenaar call writefile(m, 'Xtestfile') 10627eba3d2cSBram Moolenaar 10637eba3d2cSBram Moolenaar let save_efm = &efm 10647eba3d2cSBram Moolenaar set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m 10657eba3d2cSBram Moolenaar set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m 10667eba3d2cSBram Moolenaar 10677eba3d2cSBram Moolenaar exe 'cf Xerrorfile2' 10687eba3d2cSBram Moolenaar clast 10697eba3d2cSBram Moolenaar copen 10707eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile2', w:quickfix_title) 10717eba3d2cSBram Moolenaar wincmd p 10727eba3d2cSBram Moolenaar 10737eba3d2cSBram Moolenaar exe 'cf Xerrorfile1' 10747eba3d2cSBram Moolenaar call assert_equal([4, 12], [line('.'), col('.')]) 10757eba3d2cSBram Moolenaar cn 10767eba3d2cSBram Moolenaar call assert_equal([6, 19], [line('.'), col('.')]) 10777eba3d2cSBram Moolenaar cn 10787eba3d2cSBram Moolenaar call assert_equal([9, 2], [line('.'), col('.')]) 10797eba3d2cSBram Moolenaar cn 10807eba3d2cSBram Moolenaar call assert_equal([10, 2], [line('.'), col('.')]) 10817eba3d2cSBram Moolenaar cn 10827eba3d2cSBram Moolenaar call assert_equal([11, 1], [line('.'), col('.')]) 10837eba3d2cSBram Moolenaar cn 10847eba3d2cSBram Moolenaar call assert_equal([12, 2], [line('.'), col('.')]) 10857eba3d2cSBram Moolenaar cn 10867eba3d2cSBram Moolenaar call assert_equal([14, 10], [line('.'), col('.')]) 10877eba3d2cSBram Moolenaar cn 10887eba3d2cSBram Moolenaar call assert_equal([15, 3, 10], [line('.'), col('.'), virtcol('.')]) 10897eba3d2cSBram Moolenaar cn 10907eba3d2cSBram Moolenaar call assert_equal([16, 2], [line('.'), col('.')]) 10917eba3d2cSBram Moolenaar cn 10927eba3d2cSBram Moolenaar call assert_equal([17, 6], [line('.'), col('.')]) 10937eba3d2cSBram Moolenaar cn 10947eba3d2cSBram Moolenaar call assert_equal([18, 7], [line('.'), col('.')]) 10957eba3d2cSBram Moolenaar cn 10967eba3d2cSBram Moolenaar call assert_equal([19, 8], [line('.'), col('.')]) 10977eba3d2cSBram Moolenaar cn 10987eba3d2cSBram Moolenaar call assert_equal([20, 9], [line('.'), col('.')]) 10997eba3d2cSBram Moolenaar clast 11007eba3d2cSBram Moolenaar cprev 11017eba3d2cSBram Moolenaar cprev 11027eba3d2cSBram Moolenaar wincmd w 11037eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile1', w:quickfix_title) 11047eba3d2cSBram Moolenaar wincmd p 11057eba3d2cSBram Moolenaar 11067eba3d2cSBram Moolenaar let &efm = save_efm 11077eba3d2cSBram Moolenaar call delete('Xerrorfile1') 11087eba3d2cSBram Moolenaar call delete('Xerrorfile2') 11097eba3d2cSBram Moolenaar call delete('Xtestfile') 11102b946c9fSBram Moolenaarendfunc 1111ffec3c53SBram Moolenaar 1112ab47c61fSBram Moolenaar" Test for quickfix directory stack support 11132b946c9fSBram Moolenaarfunc s:dir_stack_tests(cchar) 111438df43bdSBram Moolenaar call s:setup_commands(a:cchar) 111538df43bdSBram Moolenaar 1116ab47c61fSBram Moolenaar let save_efm=&efm 1117ab47c61fSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 1118ab47c61fSBram Moolenaar 1119361c8f0eSBram Moolenaar let lines = ["Entering dir 'dir1/a'", 1120361c8f0eSBram Moolenaar \ 'habits2.txt:1:Nine Healthy Habits', 1121361c8f0eSBram Moolenaar \ "Entering dir 'b'", 1122361c8f0eSBram Moolenaar \ 'habits3.txt:2:0 Hours of television', 1123361c8f0eSBram Moolenaar \ 'habits2.txt:7:5 Small meals', 1124361c8f0eSBram Moolenaar \ "Entering dir 'dir1/c'", 1125361c8f0eSBram Moolenaar \ 'habits4.txt:3:1 Hour of exercise', 1126361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/c'", 1127361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/a'", 1128361c8f0eSBram Moolenaar \ 'habits1.txt:4:2 Liters of water', 1129361c8f0eSBram Moolenaar \ "Entering dir 'dir2'", 1130361c8f0eSBram Moolenaar \ 'habits5.txt:5:3 Cups of hot green tea', 1131361c8f0eSBram Moolenaar \ "Leaving dir 'dir2'" 1132361c8f0eSBram Moolenaar \] 1133ab47c61fSBram Moolenaar 1134361c8f0eSBram Moolenaar Xexpr "" 1135361c8f0eSBram Moolenaar for l in lines 1136361c8f0eSBram Moolenaar Xaddexpr l 1137361c8f0eSBram Moolenaar endfor 1138ab47c61fSBram Moolenaar 11393ef5bf7dSBram Moolenaar let qf = g:Xgetlist() 1140ab47c61fSBram Moolenaar 1141ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr)) 1142ab47c61fSBram Moolenaar call assert_equal(1, qf[1].lnum) 1143ab47c61fSBram Moolenaar call assert_equal('dir1/a/b/habits3.txt', bufname(qf[3].bufnr)) 1144ab47c61fSBram Moolenaar call assert_equal(2, qf[3].lnum) 1145ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[4].bufnr)) 1146ab47c61fSBram Moolenaar call assert_equal(7, qf[4].lnum) 1147ab47c61fSBram Moolenaar call assert_equal('dir1/c/habits4.txt', bufname(qf[6].bufnr)) 1148ab47c61fSBram Moolenaar call assert_equal(3, qf[6].lnum) 1149ab47c61fSBram Moolenaar call assert_equal('habits1.txt', bufname(qf[9].bufnr)) 1150ab47c61fSBram Moolenaar call assert_equal(4, qf[9].lnum) 1151ab47c61fSBram Moolenaar call assert_equal('dir2/habits5.txt', bufname(qf[11].bufnr)) 1152ab47c61fSBram Moolenaar call assert_equal(5, qf[11].lnum) 1153ab47c61fSBram Moolenaar 1154ab47c61fSBram Moolenaar let &efm=save_efm 11552b946c9fSBram Moolenaarendfunc 1156ab47c61fSBram Moolenaar 1157ab47c61fSBram Moolenaar" Tests for %D and %X errorformat options 11582b946c9fSBram Moolenaarfunc Test_efm_dirstack() 1159ab47c61fSBram Moolenaar " Create the directory stack and files 1160ab47c61fSBram Moolenaar call mkdir('dir1') 1161ab47c61fSBram Moolenaar call mkdir('dir1/a') 1162ab47c61fSBram Moolenaar call mkdir('dir1/a/b') 1163ab47c61fSBram Moolenaar call mkdir('dir1/c') 1164ab47c61fSBram Moolenaar call mkdir('dir2') 1165ab47c61fSBram Moolenaar 1166ab47c61fSBram Moolenaar let lines = ["Nine Healthy Habits", 1167ab47c61fSBram Moolenaar \ "0 Hours of television", 1168ab47c61fSBram Moolenaar \ "1 Hour of exercise", 1169ab47c61fSBram Moolenaar \ "2 Liters of water", 1170ab47c61fSBram Moolenaar \ "3 Cups of hot green tea", 1171ab47c61fSBram Moolenaar \ "4 Short mental breaks", 1172ab47c61fSBram Moolenaar \ "5 Small meals", 1173ab47c61fSBram Moolenaar \ "6 AM wake up time", 1174ab47c61fSBram Moolenaar \ "7 Minutes of laughter", 1175ab47c61fSBram Moolenaar \ "8 Hours of sleep (at least)", 1176ab47c61fSBram Moolenaar \ "9 PM end of the day and off to bed" 1177ab47c61fSBram Moolenaar \ ] 1178ab47c61fSBram Moolenaar call writefile(lines, 'habits1.txt') 1179ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/habits2.txt') 1180ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/b/habits3.txt') 1181ab47c61fSBram Moolenaar call writefile(lines, 'dir1/c/habits4.txt') 1182ab47c61fSBram Moolenaar call writefile(lines, 'dir2/habits5.txt') 1183ab47c61fSBram Moolenaar 1184ab47c61fSBram Moolenaar call s:dir_stack_tests('c') 1185ab47c61fSBram Moolenaar call s:dir_stack_tests('l') 1186ab47c61fSBram Moolenaar 1187ab47c61fSBram Moolenaar call delete('dir1', 'rf') 1188ab47c61fSBram Moolenaar call delete('dir2', 'rf') 1189ab47c61fSBram Moolenaar call delete('habits1.txt') 11902b946c9fSBram Moolenaarendfunc 1191ab47c61fSBram Moolenaar 11929b457948SBram Moolenaar" Test for resync after continuing an ignored message 11932b946c9fSBram Moolenaarfunc Xefm_ignore_continuations(cchar) 11949b457948SBram Moolenaar call s:setup_commands(a:cchar) 11959b457948SBram Moolenaar 11969b457948SBram Moolenaar let save_efm = &efm 11979b457948SBram Moolenaar 11989b457948SBram Moolenaar let &efm = 11999b457948SBram Moolenaar \ '%Eerror %m %l,' . 12009b457948SBram Moolenaar \ '%-Wignored %m %l,' . 12019b457948SBram Moolenaar \ '%+Cmore ignored %m %l,' . 12029b457948SBram Moolenaar \ '%Zignored end' 12039b457948SBram Moolenaar Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4'] 12049b457948SBram Moolenaar let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]') 12059b457948SBram Moolenaar call assert_equal([['resync', 1, 4, 'E']], l) 12069b457948SBram Moolenaar 12079b457948SBram Moolenaar let &efm = save_efm 12082b946c9fSBram Moolenaarendfunc 12099b457948SBram Moolenaar 12102b946c9fSBram Moolenaarfunc Test_efm_ignore_continuations() 12119b457948SBram Moolenaar call Xefm_ignore_continuations('c') 12129b457948SBram Moolenaar call Xefm_ignore_continuations('l') 12132b946c9fSBram Moolenaarendfunc 12149b457948SBram Moolenaar 12150fcc7c6dSBram Moolenaar" Tests for invalid error format specifies 12162b946c9fSBram Moolenaarfunc Xinvalid_efm_Tests(cchar) 12170fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 12180fcc7c6dSBram Moolenaar 1219049cba9eSBram Moolenaar let save_efm = &efm 1220049cba9eSBram Moolenaar 12210fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%f:%l:%m 12220fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:') 12230fcc7c6dSBram Moolenaar 12240fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%r:%m 12250fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 12260fcc7c6dSBram Moolenaar 12270fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%O:%f:%l:%m 12280fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 12290fcc7c6dSBram Moolenaar 12300fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*[^a-z 12310fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:') 12320fcc7c6dSBram Moolenaar 12330fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*c 12340fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:') 12350fcc7c6dSBram Moolenaar 12360fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%L%M%N 12370fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:') 12380fcc7c6dSBram Moolenaar 12390fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%m:%R 12400fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') 12410fcc7c6dSBram Moolenaar 124270077dd1SBram Moolenaar " Invalid regular expression 124370077dd1SBram Moolenaar set efm=%\\%%k 124470077dd1SBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E867:') 124570077dd1SBram Moolenaar 12460fcc7c6dSBram Moolenaar set efm= 12470fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') 12480fcc7c6dSBram Moolenaar 12490fcc7c6dSBram Moolenaar set efm=%DEntering\ dir\ abc,%f:%l:%m 12500fcc7c6dSBram Moolenaar call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:') 12510fcc7c6dSBram Moolenaar 12520fcc7c6dSBram Moolenaar let &efm = save_efm 12532b946c9fSBram Moolenaarendfunc 12540fcc7c6dSBram Moolenaar 12552b946c9fSBram Moolenaarfunc Test_invalid_efm() 12560fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('c') 12570fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('l') 12582b946c9fSBram Moolenaarendfunc 12590fcc7c6dSBram Moolenaar 12600fcc7c6dSBram Moolenaar" TODO: 12610fcc7c6dSBram Moolenaar" Add tests for the following formats in 'errorformat' 12620fcc7c6dSBram Moolenaar" %r %O 12632b946c9fSBram Moolenaarfunc Test_efm2() 12640fcc7c6dSBram Moolenaar let save_efm = &efm 1265049cba9eSBram Moolenaar 1266049cba9eSBram Moolenaar " Test for %s format in efm 1267049cba9eSBram Moolenaar set efm=%f:%s 1268049cba9eSBram Moolenaar cexpr 'Xtestfile:Line search text' 1269049cba9eSBram Moolenaar let l = getqflist() 127070077dd1SBram Moolenaar call assert_equal('^\VLine search text\$', l[0].pattern) 127170077dd1SBram Moolenaar call assert_equal(0, l[0].lnum) 1272049cba9eSBram Moolenaar 1273ee85df37SBram Moolenaar let l = split(execute('clist', ''), "\n") 1274ee85df37SBram Moolenaar call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l) 1275ee85df37SBram Moolenaar 127670077dd1SBram Moolenaar " Test for a long line 127770077dd1SBram Moolenaar cexpr 'Xtestfile:' . repeat('a', 1026) 127870077dd1SBram Moolenaar let l = getqflist() 127970077dd1SBram Moolenaar call assert_equal('^\V' . repeat('a', 1019) . '\$', l[0].pattern) 128070077dd1SBram Moolenaar 12810fcc7c6dSBram Moolenaar " Test for %P, %Q and %t format specifiers 1282c79745a8SBram Moolenaar let lines =<< trim [DATA] 1283c79745a8SBram Moolenaar [Xtestfile1] 1284c79745a8SBram Moolenaar (1,17) error: ';' missing 1285c79745a8SBram Moolenaar (21,2) warning: variable 'z' not defined 1286c79745a8SBram Moolenaar (67,3) error: end of file found before string ended 1287c79745a8SBram Moolenaar -- 1288c79745a8SBram Moolenaar 1289c79745a8SBram Moolenaar [Xtestfile2] 1290c79745a8SBram Moolenaar -- 1291c79745a8SBram Moolenaar 1292c79745a8SBram Moolenaar [Xtestfile3] 1293c79745a8SBram Moolenaar NEW compiler v1.1 1294c79745a8SBram Moolenaar (2,2) warning: variable 'x' not defined 1295c79745a8SBram Moolenaar (67,3) warning: 's' already defined 1296c79745a8SBram Moolenaar -- 1297c79745a8SBram Moolenaar [DATA] 1298c79745a8SBram Moolenaar 1299ee85df37SBram Moolenaar set efm=%+P[%f]%r,(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%+Q--%r 1300391b1dd0SBram Moolenaar " To exercise the push/pop file functionality in quickfix, the test files 1301391b1dd0SBram Moolenaar " need to be created. 1302391b1dd0SBram Moolenaar call writefile(['Line1'], 'Xtestfile1') 1303391b1dd0SBram Moolenaar call writefile(['Line2'], 'Xtestfile2') 1304391b1dd0SBram Moolenaar call writefile(['Line3'], 'Xtestfile3') 1305361c8f0eSBram Moolenaar cexpr "" 1306361c8f0eSBram Moolenaar for l in lines 1307361c8f0eSBram Moolenaar caddexpr l 1308361c8f0eSBram Moolenaar endfor 1309049cba9eSBram Moolenaar let l = getqflist() 1310ee85df37SBram Moolenaar call assert_equal(12, len(l)) 1311049cba9eSBram Moolenaar call assert_equal(21, l[2].lnum) 1312049cba9eSBram Moolenaar call assert_equal(2, l[2].col) 13130fcc7c6dSBram Moolenaar call assert_equal('w', l[2].type) 13140fcc7c6dSBram Moolenaar call assert_equal('e', l[3].type) 1315391b1dd0SBram Moolenaar call delete('Xtestfile1') 1316391b1dd0SBram Moolenaar call delete('Xtestfile2') 1317391b1dd0SBram Moolenaar call delete('Xtestfile3') 13180fcc7c6dSBram Moolenaar 131970077dd1SBram Moolenaar " Test for %P, %Q with non-existing files 132070077dd1SBram Moolenaar cexpr lines 132170077dd1SBram Moolenaar let l = getqflist() 132270077dd1SBram Moolenaar call assert_equal(14, len(l)) 132370077dd1SBram Moolenaar call assert_equal('[Xtestfile1]', l[0].text) 132470077dd1SBram Moolenaar call assert_equal('[Xtestfile2]', l[6].text) 132570077dd1SBram Moolenaar call assert_equal('[Xtestfile3]', l[9].text) 132670077dd1SBram Moolenaar 13270fcc7c6dSBram Moolenaar " Tests for %E, %C and %Z format specifiers 1328c79745a8SBram Moolenaar let lines =<< trim [DATA] 1329c79745a8SBram Moolenaar Error 275 1330c79745a8SBram Moolenaar line 42 1331c79745a8SBram Moolenaar column 3 1332c79745a8SBram Moolenaar ' ' expected after '--' 1333c79745a8SBram Moolenaar [DATA] 1334c79745a8SBram Moolenaar 13350fcc7c6dSBram Moolenaar set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m 13360fcc7c6dSBram Moolenaar cgetexpr lines 13370fcc7c6dSBram Moolenaar let l = getqflist() 13380fcc7c6dSBram Moolenaar call assert_equal(275, l[0].nr) 13390fcc7c6dSBram Moolenaar call assert_equal(42, l[0].lnum) 13400fcc7c6dSBram Moolenaar call assert_equal(3, l[0].col) 13410fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 13420fcc7c6dSBram Moolenaar call assert_equal("\n' ' expected after '--'", l[0].text) 13430fcc7c6dSBram Moolenaar 13440fcc7c6dSBram Moolenaar " Test for %> 1345c79745a8SBram Moolenaar let lines =<< trim [DATA] 1346c79745a8SBram Moolenaar Error in line 147 of foo.c: 1347c79745a8SBram Moolenaar unknown variable 'i' 1348c79745a8SBram Moolenaar [DATA] 1349c79745a8SBram Moolenaar 13500fcc7c6dSBram Moolenaar set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m 13510fcc7c6dSBram Moolenaar cgetexpr lines 13520fcc7c6dSBram Moolenaar let l = getqflist() 13530fcc7c6dSBram Moolenaar call assert_equal(147, l[0].lnum) 13540fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 13550fcc7c6dSBram Moolenaar call assert_equal("\nunknown variable 'i'", l[0].text) 1356049cba9eSBram Moolenaar 1357e87e6dddSBram Moolenaar " Test for %A, %C and other formats 1358c79745a8SBram Moolenaar let lines =<< trim [DATA] 1359c79745a8SBram Moolenaar ============================================================== 1360c79745a8SBram Moolenaar FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest) 1361c79745a8SBram Moolenaar -------------------------------------------------------------- 1362c79745a8SBram Moolenaar Traceback (most recent call last): 1363c79745a8SBram Moolenaar File "unittests/dbfacadeTest.py", line 89, in testFoo 1364c79745a8SBram Moolenaar self.assertEquals(34, dtid) 1365c79745a8SBram Moolenaar File "/usr/lib/python2.2/unittest.py", line 286, in 1366c79745a8SBram Moolenaar failUnlessEqual 1367c79745a8SBram Moolenaar raise self.failureException, \\ 136870077dd1SBram Moolenaar W:AssertionError: 34 != 33 1369c79745a8SBram Moolenaar 1370c79745a8SBram Moolenaar -------------------------------------------------------------- 1371c79745a8SBram Moolenaar Ran 27 tests in 0.063s 1372c79745a8SBram Moolenaar [DATA] 1373c79745a8SBram Moolenaar 137470077dd1SBram Moolenaar set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%t:%m 1375e87e6dddSBram Moolenaar cgetexpr lines 1376e87e6dddSBram Moolenaar let l = getqflist() 1377e87e6dddSBram Moolenaar call assert_equal(8, len(l)) 1378e87e6dddSBram Moolenaar call assert_equal(89, l[4].lnum) 1379e87e6dddSBram Moolenaar call assert_equal(1, l[4].valid) 1380e87e6dddSBram Moolenaar call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr)) 138170077dd1SBram Moolenaar call assert_equal('W', l[4].type) 1382e87e6dddSBram Moolenaar 1383d76ce852SBram Moolenaar " Test for %o 1384d76ce852SBram Moolenaar set efm=%f(%o):%l\ %m 1385bc7845daSBram Moolenaar cgetexpr ['Xotestfile(Language.PureScript.Types):20 Error'] 1386bc7845daSBram Moolenaar call writefile(['Line1'], 'Xotestfile') 1387d76ce852SBram Moolenaar let l = getqflist() 1388d76ce852SBram Moolenaar call assert_equal(1, len(l), string(l)) 1389d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types', l[0].module) 1390d76ce852SBram Moolenaar copen 1391d76ce852SBram Moolenaar call assert_equal('Language.PureScript.Types|20| Error', getline(1)) 1392d76ce852SBram Moolenaar call feedkeys("\<CR>", 'xn') 1393bc7845daSBram Moolenaar call assert_equal('Xotestfile', expand('%:t')) 1394d76ce852SBram Moolenaar cclose 1395d76ce852SBram Moolenaar bd 1396bc7845daSBram Moolenaar call delete("Xotestfile") 1397d76ce852SBram Moolenaar 139870077dd1SBram Moolenaar " Test for a long module name 139970077dd1SBram Moolenaar cexpr 'Xtest(' . repeat('m', 1026) . '):15 message' 140070077dd1SBram Moolenaar let l = getqflist() 140170077dd1SBram Moolenaar call assert_equal(repeat('m', 1024), l[0].module) 140270077dd1SBram Moolenaar call assert_equal(15, l[0].lnum) 140370077dd1SBram Moolenaar call assert_equal('message', l[0].text) 140470077dd1SBram Moolenaar 140599895eacSBram Moolenaar " The following sequence of commands used to crash Vim 140699895eacSBram Moolenaar set efm=%W%m 140799895eacSBram Moolenaar cgetexpr ['msg1'] 140899895eacSBram Moolenaar let l = getqflist() 140999895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 141099895eacSBram Moolenaar call assert_equal('msg1', l[0].text) 141199895eacSBram Moolenaar set efm=%C%m 141299895eacSBram Moolenaar lexpr 'msg2' 141399895eacSBram Moolenaar let l = getloclist(0) 141499895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 141599895eacSBram Moolenaar call assert_equal('msg2', l[0].text) 141699895eacSBram Moolenaar lopen 141799895eacSBram Moolenaar call setqflist([], 'r') 141899895eacSBram Moolenaar caddbuf 141999895eacSBram Moolenaar let l = getqflist() 142099895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 142199895eacSBram Moolenaar call assert_equal('|| msg2', l[0].text) 142299895eacSBram Moolenaar 142378ddc06bSBram Moolenaar " When matching error lines, case should be ignored. Test for this. 142478ddc06bSBram Moolenaar set noignorecase 142578ddc06bSBram Moolenaar let l=getqflist({'lines' : ['Xtest:FOO10:Line 20'], 'efm':'%f:foo%l:%m'}) 142678ddc06bSBram Moolenaar call assert_equal(10, l.items[0].lnum) 142778ddc06bSBram Moolenaar call assert_equal('Line 20', l.items[0].text) 142878ddc06bSBram Moolenaar set ignorecase& 142978ddc06bSBram Moolenaar 143099895eacSBram Moolenaar new | only 1431049cba9eSBram Moolenaar let &efm = save_efm 14322b946c9fSBram Moolenaarendfunc 1433049cba9eSBram Moolenaar 1434e928366dSBram Moolenaar" Test for '%t' (error type) field in 'efm' 1435e928366dSBram Moolenaarfunc Test_efm_error_type() 1436e928366dSBram Moolenaar let save_efm = &efm 1437e928366dSBram Moolenaar 1438e928366dSBram Moolenaar " error type 1439e928366dSBram Moolenaar set efm=%f:%l:%t:%m 1440e928366dSBram Moolenaar cexpr ["Xfile1:10:E:msg1", "Xfile1:20:W:msg2", "Xfile1:30:I:msg3", 1441e928366dSBram Moolenaar \ "Xfile1:40:N:msg4", "Xfile1:50:R:msg5"] 1442e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1443e928366dSBram Moolenaar call assert_equal([ 1444e928366dSBram Moolenaar \ ' 1 Xfile1:10 error: msg1', 1445e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning: msg2', 1446e928366dSBram Moolenaar \ ' 3 Xfile1:30 info: msg3', 1447e928366dSBram Moolenaar \ ' 4 Xfile1:40 note: msg4', 1448e928366dSBram Moolenaar \ ' 5 Xfile1:50 R: msg5'], output) 1449e928366dSBram Moolenaar 1450e928366dSBram Moolenaar " error type and a error number 1451e928366dSBram Moolenaar set efm=%f:%l:%t:%n:%m 1452e928366dSBram Moolenaar cexpr ["Xfile1:10:E:2:msg1", "Xfile1:20:W:4:msg2", "Xfile1:30:I:6:msg3", 1453e928366dSBram Moolenaar \ "Xfile1:40:N:8:msg4", "Xfile1:50:R:3:msg5"] 1454e928366dSBram Moolenaar let output = split(execute('clist'), "\n") 1455e928366dSBram Moolenaar call assert_equal([ 1456e928366dSBram Moolenaar \ ' 1 Xfile1:10 error 2: msg1', 1457e928366dSBram Moolenaar \ ' 2 Xfile1:20 warning 4: msg2', 1458e928366dSBram Moolenaar \ ' 3 Xfile1:30 info 6: msg3', 1459e928366dSBram Moolenaar \ ' 4 Xfile1:40 note 8: msg4', 1460e928366dSBram Moolenaar \ ' 5 Xfile1:50 R 3: msg5'], output) 1461e928366dSBram Moolenaar let &efm = save_efm 1462e928366dSBram Moolenaarendfunc 1463e928366dSBram Moolenaar 14642b946c9fSBram Moolenaarfunc XquickfixChangedByAutocmd(cchar) 14653ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1466ffec3c53SBram Moolenaar if a:cchar == 'c' 1467ffec3c53SBram Moolenaar let ErrorNr = 'E925' 14682b946c9fSBram Moolenaar func! ReadFunc() 1469ffec3c53SBram Moolenaar colder 1470ffec3c53SBram Moolenaar cgetexpr [] 1471ffec3c53SBram Moolenaar endfunc 1472ffec3c53SBram Moolenaar else 1473ffec3c53SBram Moolenaar let ErrorNr = 'E926' 14742b946c9fSBram Moolenaar func! ReadFunc() 1475ffec3c53SBram Moolenaar lolder 1476ffec3c53SBram Moolenaar lgetexpr [] 1477ffec3c53SBram Moolenaar endfunc 1478ffec3c53SBram Moolenaar endif 1479ffec3c53SBram Moolenaar 1480ffec3c53SBram Moolenaar augroup testgroup 1481ffec3c53SBram Moolenaar au! 1482d106e5baSBram Moolenaar autocmd BufReadCmd test_changed.txt call ReadFunc() 1483ffec3c53SBram Moolenaar augroup END 1484ffec3c53SBram Moolenaar 1485d106e5baSBram Moolenaar new | only 1486ffec3c53SBram Moolenaar let words = [ "a", "b" ] 1487ffec3c53SBram Moolenaar let qflist = [] 1488ffec3c53SBram Moolenaar for word in words 1489d106e5baSBram Moolenaar call add(qflist, {'filename': 'test_changed.txt'}) 14903ef5bf7dSBram Moolenaar call g:Xsetlist(qflist, ' ') 1491ffec3c53SBram Moolenaar endfor 14923ef5bf7dSBram Moolenaar call assert_fails('Xrewind', ErrorNr . ':') 1493ffec3c53SBram Moolenaar 1494ffec3c53SBram Moolenaar augroup! testgroup 1495ffec3c53SBram Moolenaarendfunc 1496ffec3c53SBram Moolenaar 14972b946c9fSBram Moolenaarfunc Test_quickfix_was_changed_by_autocmd() 1498ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('c') 1499ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('l') 15002b946c9fSBram Moolenaarendfunc 15018b20179cSBram Moolenaar 15024d170af0SBram Moolenaarfunc Test_setloclist_in_autocommand() 15034d170af0SBram Moolenaar call writefile(['test1', 'test2'], 'Xfile') 15044d170af0SBram Moolenaar edit Xfile 15054d170af0SBram Moolenaar let s:bufnr = bufnr() 15064d170af0SBram Moolenaar call setloclist(1, 15074d170af0SBram Moolenaar \ [{'bufnr' : s:bufnr, 'lnum' : 1, 'text' : 'test1'}, 15084d170af0SBram Moolenaar \ {'bufnr' : s:bufnr, 'lnum' : 2, 'text' : 'test2'}]) 15094d170af0SBram Moolenaar 15104d170af0SBram Moolenaar augroup Test_LocList 15114d170af0SBram Moolenaar au! 15124d170af0SBram Moolenaar autocmd BufEnter * call setloclist(1, 15134d170af0SBram Moolenaar \ [{'bufnr' : s:bufnr, 'lnum' : 1, 'text' : 'test1'}, 15144d170af0SBram Moolenaar \ {'bufnr' : s:bufnr, 'lnum' : 2, 'text' : 'test2'}], 'r') 15154d170af0SBram Moolenaar augroup END 15164d170af0SBram Moolenaar 15174d170af0SBram Moolenaar lopen 15184d170af0SBram Moolenaar call assert_fails('exe "normal j\<CR>"', 'E926:') 15194d170af0SBram Moolenaar 15204d170af0SBram Moolenaar augroup Test_LocList 15214d170af0SBram Moolenaar au! 15224d170af0SBram Moolenaar augroup END 15234d170af0SBram Moolenaar call delete('Xfile') 15244d170af0SBram Moolenaarendfunc 15254d170af0SBram Moolenaar 15268b20179cSBram Moolenaarfunc Test_caddbuffer_to_empty() 15278b20179cSBram Moolenaar helpgr quickfix 15288b20179cSBram Moolenaar call setqflist([], 'r') 15298b20179cSBram Moolenaar cad 1530f68f1d70SBram Moolenaar try 1531f68f1d70SBram Moolenaar cn 1532f68f1d70SBram Moolenaar catch 1533f68f1d70SBram Moolenaar " number of matches is unknown 1534f68f1d70SBram Moolenaar call assert_true(v:exception =~ 'E553:') 1535f68f1d70SBram Moolenaar endtry 15368b20179cSBram Moolenaar quit! 15378b20179cSBram Moolenaarendfunc 153889c64d55SBram Moolenaar 153989c64d55SBram Moolenaarfunc Test_cgetexpr_works() 154089c64d55SBram Moolenaar " this must not crash Vim 154189c64d55SBram Moolenaar cgetexpr [$x] 15423ef5bf7dSBram Moolenaar lgetexpr [$x] 154389c64d55SBram Moolenaarendfunc 1544c1808d58SBram Moolenaar 1545c1808d58SBram Moolenaar" Tests for the setqflist() and setloclist() functions 15462b946c9fSBram Moolenaarfunc SetXlistTests(cchar, bnum) 15473ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1548c1808d58SBram Moolenaar 15493ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1}, 15506864efa5Sthinca \ {'bufnr': a:bnum, 'lnum': 2, 'end_lnum': 3, 'col': 4, 'end_col': 5}]) 15513ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1552c1808d58SBram Moolenaar call assert_equal(2, len(l)) 1553c1808d58SBram Moolenaar call assert_equal(2, l[1].lnum) 15546864efa5Sthinca call assert_equal(3, l[1].end_lnum) 15556864efa5Sthinca call assert_equal(4, l[1].col) 15566864efa5Sthinca call assert_equal(5, l[1].end_col) 1557c1808d58SBram Moolenaar 15583ef5bf7dSBram Moolenaar Xnext 15593ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a') 15603ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1561c1808d58SBram Moolenaar call assert_equal(3, len(l)) 15623ef5bf7dSBram Moolenaar Xnext 1563c1808d58SBram Moolenaar call assert_equal(3, line('.')) 1564c1808d58SBram Moolenaar 15652b2b8ae5SBram Moolenaar " Appending entries to the list should not change the cursor position 15662b2b8ae5SBram Moolenaar " in the quickfix window 15673ef5bf7dSBram Moolenaar Xwindow 15682b2b8ae5SBram Moolenaar 1 15693ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4}, 15702b2b8ae5SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'a') 15712b2b8ae5SBram Moolenaar call assert_equal(1, line('.')) 15722b2b8ae5SBram Moolenaar close 15732b2b8ae5SBram Moolenaar 15743ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}, 1575c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 4}, 1576c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'r') 15773ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1578c1808d58SBram Moolenaar call assert_equal(3, len(l)) 1579c1808d58SBram Moolenaar call assert_equal(5, l[2].lnum) 1580c1808d58SBram Moolenaar 15813ef5bf7dSBram Moolenaar call g:Xsetlist([]) 15823ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1583c1808d58SBram Moolenaar call assert_equal(0, len(l)) 1584ee85df37SBram Moolenaar 1585f1d21c8cSBram Moolenaar " Tests for setting the 'valid' flag 1586f1d21c8cSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':4, 'valid':0}]) 1587f1d21c8cSBram Moolenaar Xwindow 1588f1d21c8cSBram Moolenaar call assert_equal(1, winnr('$')) 1589f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1590f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1591f1d21c8cSBram Moolenaar call assert_equal(0, g:Xgetlist()[0].valid) 15929752c72fSBram Moolenaar " Adding a non-valid entry should not mark the list as having valid entries 15939752c72fSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':5, 'valid':0}], 'a') 15949752c72fSBram Moolenaar Xwindow 15959752c72fSBram Moolenaar call assert_equal(1, winnr('$')) 15969752c72fSBram Moolenaar 15979752c72fSBram Moolenaar " :cnext/:cprev should still work even with invalid entries in the list 15989752c72fSBram Moolenaar let l = [{'bufnr' : a:bnum, 'lnum' : 1, 'text' : '1', 'valid' : 0}, 15999752c72fSBram Moolenaar \ {'bufnr' : a:bnum, 'lnum' : 2, 'text' : '2', 'valid' : 0}] 16009752c72fSBram Moolenaar call g:Xsetlist(l) 16019752c72fSBram Moolenaar Xnext 16029752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 16039752c72fSBram Moolenaar Xprev 16049752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 16059752c72fSBram Moolenaar " :cnext/:cprev should still work after appending invalid entries to an 16069752c72fSBram Moolenaar " empty list 16079752c72fSBram Moolenaar call g:Xsetlist([]) 16089752c72fSBram Moolenaar call g:Xsetlist(l, 'a') 16099752c72fSBram Moolenaar Xnext 16109752c72fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx' : 0}).idx) 16119752c72fSBram Moolenaar Xprev 16129752c72fSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 16139752c72fSBram Moolenaar 1614f1d21c8cSBram Moolenaar call g:Xsetlist([{'text':'Text1', 'valid':1}]) 1615f1d21c8cSBram Moolenaar Xwindow 1616f1d21c8cSBram Moolenaar call assert_equal(2, winnr('$')) 1617f1d21c8cSBram Moolenaar Xclose 1618f1d21c8cSBram Moolenaar let save_efm = &efm 1619f1d21c8cSBram Moolenaar set efm=%m 1620f1d21c8cSBram Moolenaar Xgetexpr 'TestMessage' 1621f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1622f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1623f1d21c8cSBram Moolenaar call assert_equal(1, g:Xgetlist()[0].valid) 1624f1d21c8cSBram Moolenaar let &efm = save_efm 1625f1d21c8cSBram Moolenaar 1626ee85df37SBram Moolenaar " Error cases: 1627ee85df37SBram Moolenaar " Refer to a non-existing buffer and pass a non-dictionary type 1628ee85df37SBram Moolenaar call assert_fails("call g:Xsetlist([{'bufnr':998, 'lnum':4}," . 1629ee85df37SBram Moolenaar \ " {'bufnr':999, 'lnum':5}])", 'E92:') 1630ee85df37SBram Moolenaar call g:Xsetlist([[1, 2,3]]) 1631ee85df37SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 163299fa7219SBram Moolenaar call assert_fails('call g:Xsetlist([], [])', 'E928:') 16332b946c9fSBram Moolenaarendfunc 1634c1808d58SBram Moolenaar 16352b946c9fSBram Moolenaarfunc Test_setqflist() 1636c1808d58SBram Moolenaar new Xtestfile | only 1637c1808d58SBram Moolenaar let bnum = bufnr('%') 1638c1808d58SBram Moolenaar call setline(1, range(1,5)) 1639c1808d58SBram Moolenaar 1640c1808d58SBram Moolenaar call SetXlistTests('c', bnum) 1641c1808d58SBram Moolenaar call SetXlistTests('l', bnum) 1642c1808d58SBram Moolenaar 16431cee693bSBram Moolenaar enew! 1644c1808d58SBram Moolenaar call delete('Xtestfile') 16452b946c9fSBram Moolenaarendfunc 1646d106e5baSBram Moolenaar 16472b946c9fSBram Moolenaarfunc Xlist_empty_middle(cchar) 16483ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 16493ef5bf7dSBram Moolenaar 16501cee693bSBram Moolenaar " create three quickfix lists 1651ee85df37SBram Moolenaar let @/ = 'Test_' 1652ee85df37SBram Moolenaar Xvimgrep // test_quickfix.vim 16533ef5bf7dSBram Moolenaar let testlen = len(g:Xgetlist()) 16541cee693bSBram Moolenaar call assert_true(testlen > 0) 16553ef5bf7dSBram Moolenaar Xvimgrep empty test_quickfix.vim 16563ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) > 0) 16573ef5bf7dSBram Moolenaar Xvimgrep matches test_quickfix.vim 16583ef5bf7dSBram Moolenaar let matchlen = len(g:Xgetlist()) 16591cee693bSBram Moolenaar call assert_true(matchlen > 0) 16603ef5bf7dSBram Moolenaar Xolder 16611cee693bSBram Moolenaar " make the middle list empty 16623ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 16633ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 16643ef5bf7dSBram Moolenaar Xolder 16653ef5bf7dSBram Moolenaar call assert_equal(testlen, len(g:Xgetlist())) 16663ef5bf7dSBram Moolenaar Xnewer 16673ef5bf7dSBram Moolenaar Xnewer 16683ef5bf7dSBram Moolenaar call assert_equal(matchlen, len(g:Xgetlist())) 16691cee693bSBram Moolenaarendfunc 16701cee693bSBram Moolenaar 16712b946c9fSBram Moolenaarfunc Test_setqflist_empty_middle() 16723ef5bf7dSBram Moolenaar call Xlist_empty_middle('c') 16733ef5bf7dSBram Moolenaar call Xlist_empty_middle('l') 16742b946c9fSBram Moolenaarendfunc 16753ef5bf7dSBram Moolenaar 16762b946c9fSBram Moolenaarfunc Xlist_empty_older(cchar) 16773ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 16783ef5bf7dSBram Moolenaar 16791cee693bSBram Moolenaar " create three quickfix lists 16803ef5bf7dSBram Moolenaar Xvimgrep one test_quickfix.vim 16813ef5bf7dSBram Moolenaar let onelen = len(g:Xgetlist()) 16821cee693bSBram Moolenaar call assert_true(onelen > 0) 16833ef5bf7dSBram Moolenaar Xvimgrep two test_quickfix.vim 16843ef5bf7dSBram Moolenaar let twolen = len(g:Xgetlist()) 16851cee693bSBram Moolenaar call assert_true(twolen > 0) 16863ef5bf7dSBram Moolenaar Xvimgrep three test_quickfix.vim 16873ef5bf7dSBram Moolenaar let threelen = len(g:Xgetlist()) 16881cee693bSBram Moolenaar call assert_true(threelen > 0) 16893ef5bf7dSBram Moolenaar Xolder 2 16901cee693bSBram Moolenaar " make the first list empty, check the others didn't change 16913ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 16923ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 16933ef5bf7dSBram Moolenaar Xnewer 16943ef5bf7dSBram Moolenaar call assert_equal(twolen, len(g:Xgetlist())) 16953ef5bf7dSBram Moolenaar Xnewer 16963ef5bf7dSBram Moolenaar call assert_equal(threelen, len(g:Xgetlist())) 16972b946c9fSBram Moolenaarendfunc 16983ef5bf7dSBram Moolenaar 16992b946c9fSBram Moolenaarfunc Test_setqflist_empty_older() 17003ef5bf7dSBram Moolenaar call Xlist_empty_older('c') 17013ef5bf7dSBram Moolenaar call Xlist_empty_older('l') 17022b946c9fSBram Moolenaarendfunc 17031cee693bSBram Moolenaar 17042b946c9fSBram Moolenaarfunc XquickfixSetListWithAct(cchar) 17053ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 17063ef5bf7dSBram Moolenaar 1707d106e5baSBram Moolenaar let list1 = [{'filename': 'fnameA', 'text': 'A'}, 1708d106e5baSBram Moolenaar \ {'filename': 'fnameB', 'text': 'B'}] 1709d106e5baSBram Moolenaar let list2 = [{'filename': 'fnameC', 'text': 'C'}, 1710d106e5baSBram Moolenaar \ {'filename': 'fnameD', 'text': 'D'}, 1711d106e5baSBram Moolenaar \ {'filename': 'fnameE', 'text': 'E'}] 1712d106e5baSBram Moolenaar 1713eeb1b9c7SBram Moolenaar " {action} is unspecified. Same as specifying ' '. 1714d106e5baSBram Moolenaar new | only 17153ef5bf7dSBram Moolenaar silent! Xnewer 99 17163ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 17173ef5bf7dSBram Moolenaar call g:Xsetlist(list2) 17183ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1719d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1720d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1721d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1722d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 17233ef5bf7dSBram Moolenaar silent! Xolder 17243ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1725d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1726d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1727d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1728d106e5baSBram Moolenaar 1729d106e5baSBram Moolenaar " {action} is specified ' '. 1730d106e5baSBram Moolenaar new | only 17313ef5bf7dSBram Moolenaar silent! Xnewer 99 17323ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 17333ef5bf7dSBram Moolenaar call g:Xsetlist(list2, ' ') 17343ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1735d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1736d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1737d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1738d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 17393ef5bf7dSBram Moolenaar silent! Xolder 17403ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1741d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1742d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1743d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1744d106e5baSBram Moolenaar 1745d106e5baSBram Moolenaar " {action} is specified 'a'. 1746d106e5baSBram Moolenaar new | only 17473ef5bf7dSBram Moolenaar silent! Xnewer 99 17483ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 17493ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'a') 17503ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1751d106e5baSBram Moolenaar call assert_equal(5, len(li)) 1752d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1753d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1754d106e5baSBram Moolenaar call assert_equal('C', li[2]['text']) 1755d106e5baSBram Moolenaar call assert_equal('D', li[3]['text']) 1756d106e5baSBram Moolenaar call assert_equal('E', li[4]['text']) 1757d106e5baSBram Moolenaar 1758d106e5baSBram Moolenaar " {action} is specified 'r'. 1759d106e5baSBram Moolenaar new | only 17603ef5bf7dSBram Moolenaar silent! Xnewer 99 17613ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 17623ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'r') 17633ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1764d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1765d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1766d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1767d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 1768d106e5baSBram Moolenaar 1769d106e5baSBram Moolenaar " Test for wrong value. 1770d106e5baSBram Moolenaar new | only 17713ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(0)", 'E714:') 17723ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, '')", 'E927:') 17733ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:') 17743ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:') 17753ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 0)", 'E928:') 1776d106e5baSBram Moolenaarendfunc 1777d106e5baSBram Moolenaar 1778a0ca7d00SBram Moolenaarfunc Test_setqflist_invalid_nr() 1779a0ca7d00SBram Moolenaar " The following command used to crash Vim 1780aad222c9SBram Moolenaar eval []->setqflist(' ', {'nr' : $XXX_DOES_NOT_EXIST}) 1781a0ca7d00SBram Moolenaarendfunc 1782a0ca7d00SBram Moolenaar 178399234f29SBram Moolenaarfunc Test_setqflist_user_sets_buftype() 178499234f29SBram Moolenaar call setqflist([{'text': 'foo'}, {'text': 'bar'}]) 178599234f29SBram Moolenaar set buftype=quickfix 178699234f29SBram Moolenaar call setqflist([], 'a') 178799234f29SBram Moolenaar enew 178899234f29SBram Moolenaarendfunc 178999234f29SBram Moolenaar 17902b946c9fSBram Moolenaarfunc Test_quickfix_set_list_with_act() 1791d106e5baSBram Moolenaar call XquickfixSetListWithAct('c') 1792d106e5baSBram Moolenaar call XquickfixSetListWithAct('l') 17932b946c9fSBram Moolenaarendfunc 17946be8c8e1SBram Moolenaar 17952b946c9fSBram Moolenaarfunc XLongLinesTests(cchar) 17963ef5bf7dSBram Moolenaar let l = g:Xgetlist() 17976be8c8e1SBram Moolenaar 1798049cba9eSBram Moolenaar call assert_equal(4, len(l)) 17996be8c8e1SBram Moolenaar call assert_equal(1, l[0].lnum) 18006be8c8e1SBram Moolenaar call assert_equal(1, l[0].col) 1801049cba9eSBram Moolenaar call assert_equal(1975, len(l[0].text)) 18026be8c8e1SBram Moolenaar call assert_equal(2, l[1].lnum) 18036be8c8e1SBram Moolenaar call assert_equal(1, l[1].col) 18046be8c8e1SBram Moolenaar call assert_equal(4070, len(l[1].text)) 18056be8c8e1SBram Moolenaar call assert_equal(3, l[2].lnum) 18066be8c8e1SBram Moolenaar call assert_equal(1, l[2].col) 1807049cba9eSBram Moolenaar call assert_equal(4070, len(l[2].text)) 1808049cba9eSBram Moolenaar call assert_equal(4, l[3].lnum) 1809049cba9eSBram Moolenaar call assert_equal(1, l[3].col) 1810049cba9eSBram Moolenaar call assert_equal(10, len(l[3].text)) 18116be8c8e1SBram Moolenaar 18123ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 18132b946c9fSBram Moolenaarendfunc 18146be8c8e1SBram Moolenaar 18152b946c9fSBram Moolenaarfunc s:long_lines_tests(cchar) 18163ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 18173ef5bf7dSBram Moolenaar 18186be8c8e1SBram Moolenaar let testfile = 'samples/quickfix.txt' 18196be8c8e1SBram Moolenaar 18206be8c8e1SBram Moolenaar " file 18213ef5bf7dSBram Moolenaar exe 'Xgetfile' testfile 18223ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 18236be8c8e1SBram Moolenaar 18246be8c8e1SBram Moolenaar " list 18253ef5bf7dSBram Moolenaar Xexpr readfile(testfile) 18263ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 18276be8c8e1SBram Moolenaar 18286be8c8e1SBram Moolenaar " string 18293ef5bf7dSBram Moolenaar Xexpr join(readfile(testfile), "\n") 18303ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 18316be8c8e1SBram Moolenaar 18326be8c8e1SBram Moolenaar " buffer 18333ef5bf7dSBram Moolenaar exe 'edit' testfile 18343ef5bf7dSBram Moolenaar exe 'Xbuffer' bufnr('%') 1835f50df392SBram Moolenaar call XLongLinesTests(a:cchar) 18362b946c9fSBram Moolenaarendfunc 18373ef5bf7dSBram Moolenaar 18382b946c9fSBram Moolenaarfunc Test_long_lines() 18393ef5bf7dSBram Moolenaar call s:long_lines_tests('c') 18403ef5bf7dSBram Moolenaar call s:long_lines_tests('l') 18412b946c9fSBram Moolenaarendfunc 1842049cba9eSBram Moolenaar 184359941cbdSBram Moolenaarfunc Test_cgetfile_on_long_lines() 184459941cbdSBram Moolenaar " Problematic values if the line is longer than 4096 bytes. Then 1024 bytes 184559941cbdSBram Moolenaar " are read at a time. 184659941cbdSBram Moolenaar for len in [4078, 4079, 4080, 5102, 5103, 5104, 6126, 6127, 6128, 7150, 7151, 7152] 184759941cbdSBram Moolenaar let lines = [ 184859941cbdSBram Moolenaar \ '/tmp/file1:1:1:aaa', 184959941cbdSBram Moolenaar \ '/tmp/file2:1:1:%s', 185059941cbdSBram Moolenaar \ '/tmp/file3:1:1:bbb', 185159941cbdSBram Moolenaar \ '/tmp/file4:1:1:ccc', 185259941cbdSBram Moolenaar \ ] 185359941cbdSBram Moolenaar let lines[1] = substitute(lines[1], '%s', repeat('x', len), '') 185459941cbdSBram Moolenaar call writefile(lines, 'Xcqetfile.txt') 185559941cbdSBram Moolenaar cgetfile Xcqetfile.txt 185659941cbdSBram Moolenaar call assert_equal(4, getqflist(#{size: v:true}).size, 'with length ' .. len) 185759941cbdSBram Moolenaar endfor 185859941cbdSBram Moolenaar call delete('Xcqetfile.txt') 185959941cbdSBram Moolenaarendfunc 186059941cbdSBram Moolenaar 18612b946c9fSBram Moolenaarfunc s:create_test_file(filename) 1862049cba9eSBram Moolenaar let l = [] 1863049cba9eSBram Moolenaar for i in range(1, 20) 1864049cba9eSBram Moolenaar call add(l, 'Line' . i) 1865049cba9eSBram Moolenaar endfor 1866049cba9eSBram Moolenaar call writefile(l, a:filename) 18672b946c9fSBram Moolenaarendfunc 1868049cba9eSBram Moolenaar 18692b946c9fSBram Moolenaarfunc Test_switchbuf() 1870049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile1') 1871049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile2') 1872049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile3') 1873049cba9eSBram Moolenaar 1874049cba9eSBram Moolenaar new | only 1875049cba9eSBram Moolenaar edit Xqftestfile1 1876049cba9eSBram Moolenaar let file1_winid = win_getid() 1877049cba9eSBram Moolenaar new Xqftestfile2 1878049cba9eSBram Moolenaar let file2_winid = win_getid() 1879049cba9eSBram Moolenaar cgetexpr ['Xqftestfile1:5:Line5', 1880049cba9eSBram Moolenaar \ 'Xqftestfile1:6:Line6', 1881049cba9eSBram Moolenaar \ 'Xqftestfile2:10:Line10', 1882049cba9eSBram Moolenaar \ 'Xqftestfile2:11:Line11', 1883049cba9eSBram Moolenaar \ 'Xqftestfile3:15:Line15', 1884049cba9eSBram Moolenaar \ 'Xqftestfile3:16:Line16'] 1885049cba9eSBram Moolenaar 1886049cba9eSBram Moolenaar new 1887049cba9eSBram Moolenaar let winid = win_getid() 1888049cba9eSBram Moolenaar cfirst | cnext 1889049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 189099895eacSBram Moolenaar 2cnext 1891049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 189299895eacSBram Moolenaar 2cnext 1893049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 1894049cba9eSBram Moolenaar 1895f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in windows in the current 1896f9ae154cSBram Moolenaar " tabpage and jump to an existing window (if present) 1897049cba9eSBram Moolenaar set switchbuf=useopen 1898f9ae154cSBram Moolenaar enew 1899049cba9eSBram Moolenaar cfirst | cnext 1900049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 190199895eacSBram Moolenaar 2cnext 1902049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 190399895eacSBram Moolenaar 2cnext 1904049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1905049cba9eSBram Moolenaar 1906f9ae154cSBram Moolenaar " Test for 'switchbuf' set to search for files in tabpages and jump to an 1907f9ae154cSBram Moolenaar " existing tabpage (if present) 1908049cba9eSBram Moolenaar enew | only 1909049cba9eSBram Moolenaar set switchbuf=usetab 1910049cba9eSBram Moolenaar tabedit Xqftestfile1 1911049cba9eSBram Moolenaar tabedit Xqftestfile2 191274240d3fSBram Moolenaar tabedit Xqftestfile3 1913049cba9eSBram Moolenaar tabfirst 1914049cba9eSBram Moolenaar cfirst | cnext 1915049cba9eSBram Moolenaar call assert_equal(2, tabpagenr()) 191699895eacSBram Moolenaar 2cnext 1917049cba9eSBram Moolenaar call assert_equal(3, tabpagenr()) 191874240d3fSBram Moolenaar 6cnext 191974240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 192074240d3fSBram Moolenaar 2cpfile 192174240d3fSBram Moolenaar call assert_equal(2, tabpagenr()) 192274240d3fSBram Moolenaar 2cnfile 192374240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 1924049cba9eSBram Moolenaar tabfirst | tabonly | enew 1925049cba9eSBram Moolenaar 1926f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new window for every file 1927049cba9eSBram Moolenaar set switchbuf=split 1928049cba9eSBram Moolenaar cfirst | cnext 1929049cba9eSBram Moolenaar call assert_equal(1, winnr('$')) 1930049cba9eSBram Moolenaar cnext | cnext 1931049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1932049cba9eSBram Moolenaar cnext | cnext 1933049cba9eSBram Moolenaar call assert_equal(3, winnr('$')) 1934049cba9eSBram Moolenaar 1935f9ae154cSBram Moolenaar " Test for 'switchbuf' set to open a new tabpage for every file 1936049cba9eSBram Moolenaar set switchbuf=newtab 1937f9ae154cSBram Moolenaar enew | only 1938049cba9eSBram Moolenaar cfirst | cnext 1939049cba9eSBram Moolenaar call assert_equal(1, tabpagenr('$')) 1940049cba9eSBram Moolenaar cnext | cnext 1941049cba9eSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1942049cba9eSBram Moolenaar cnext | cnext 1943049cba9eSBram Moolenaar call assert_equal(3, tabpagenr('$')) 1944049cba9eSBram Moolenaar tabfirst | enew | tabonly | only 1945049cba9eSBram Moolenaar 1946539aa6b2SBram Moolenaar set switchbuf=uselast 1947539aa6b2SBram Moolenaar split 1948539aa6b2SBram Moolenaar let last_winid = win_getid() 1949539aa6b2SBram Moolenaar copen 1950539aa6b2SBram Moolenaar exe "normal 1G\<CR>" 1951539aa6b2SBram Moolenaar call assert_equal(last_winid, win_getid()) 1952539aa6b2SBram Moolenaar enew | only 1953539aa6b2SBram Moolenaar 1954f9ae154cSBram Moolenaar " With an empty 'switchbuf', jumping to a quickfix entry should open the 1955f9ae154cSBram Moolenaar " file in an existing window (if present) 1956049cba9eSBram Moolenaar set switchbuf= 1957049cba9eSBram Moolenaar edit Xqftestfile1 1958049cba9eSBram Moolenaar let file1_winid = win_getid() 1959049cba9eSBram Moolenaar new Xqftestfile2 1960049cba9eSBram Moolenaar let file2_winid = win_getid() 1961049cba9eSBram Moolenaar copen 1962049cba9eSBram Moolenaar exe "normal 1G\<CR>" 1963049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 1964049cba9eSBram Moolenaar copen 1965049cba9eSBram Moolenaar exe "normal 3G\<CR>" 1966049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1967049cba9eSBram Moolenaar copen | only 1968049cba9eSBram Moolenaar exe "normal 5G\<CR>" 1969049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1970049cba9eSBram Moolenaar call assert_equal(1, bufwinnr('Xqftestfile3')) 1971049cba9eSBram Moolenaar 1972391b1dd0SBram Moolenaar " If only quickfix window is open in the current tabpage, jumping to an 19731bc353b6SBram Moolenaar " entry with 'switchbuf' set to 'usetab' should search in other tabpages. 1974049cba9eSBram Moolenaar enew | only 1975391b1dd0SBram Moolenaar set switchbuf=usetab 1976391b1dd0SBram Moolenaar tabedit Xqftestfile1 1977391b1dd0SBram Moolenaar tabedit Xqftestfile2 1978391b1dd0SBram Moolenaar tabedit Xqftestfile3 1979391b1dd0SBram Moolenaar tabfirst 1980391b1dd0SBram Moolenaar copen | only 1981391b1dd0SBram Moolenaar clast 1982391b1dd0SBram Moolenaar call assert_equal(4, tabpagenr()) 1983391b1dd0SBram Moolenaar tabfirst | tabonly | enew | only 1984049cba9eSBram Moolenaar 1985f9ae154cSBram Moolenaar " Jumping to a file that is not present in any of the tabpages and the 1986f9ae154cSBram Moolenaar " current tabpage doesn't have any usable windows, should open it in a new 1987f9ae154cSBram Moolenaar " window in the current tabpage. 1988f9ae154cSBram Moolenaar copen | only 1989f9ae154cSBram Moolenaar cfirst 1990f9ae154cSBram Moolenaar call assert_equal(1, tabpagenr()) 1991bdd2c290SBram Moolenaar call assert_equal('Xqftestfile1', @%) 1992f9ae154cSBram Moolenaar 1993f9ae154cSBram Moolenaar " If opening a file changes 'switchbuf', then the new value should be 1994f9ae154cSBram Moolenaar " retained. 199541d4299fSBram Moolenaar set modeline&vim 1996f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=split"], 'Xqftestfile1') 1997f9ae154cSBram Moolenaar enew | only 1998f9ae154cSBram Moolenaar set switchbuf&vim 1999f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 2000f9ae154cSBram Moolenaar call assert_equal('split', &switchbuf) 2001f9ae154cSBram Moolenaar call writefile(["vim: switchbuf=usetab"], 'Xqftestfile1') 2002f9ae154cSBram Moolenaar enew | only 2003f9ae154cSBram Moolenaar set switchbuf=useopen 2004f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 2005f9ae154cSBram Moolenaar call assert_equal('usetab', &switchbuf) 2006f9ae154cSBram Moolenaar call writefile(["vim: switchbuf&vim"], 'Xqftestfile1') 2007f9ae154cSBram Moolenaar enew | only 2008f9ae154cSBram Moolenaar set switchbuf=useopen 2009f9ae154cSBram Moolenaar cexpr "Xqftestfile1:1:10" 2010f9ae154cSBram Moolenaar call assert_equal('', &switchbuf) 2011f9ae154cSBram Moolenaar 2012049cba9eSBram Moolenaar call delete('Xqftestfile1') 2013049cba9eSBram Moolenaar call delete('Xqftestfile2') 2014049cba9eSBram Moolenaar call delete('Xqftestfile3') 2015391b1dd0SBram Moolenaar set switchbuf&vim 2016391b1dd0SBram Moolenaar 2017391b1dd0SBram Moolenaar enew | only 20182b946c9fSBram Moolenaarendfunc 2019049cba9eSBram Moolenaar 20202b946c9fSBram Moolenaarfunc Xadjust_qflnum(cchar) 2021049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 2022049cba9eSBram Moolenaar 2023049cba9eSBram Moolenaar enew | only 2024049cba9eSBram Moolenaar 2025c1542744SBram Moolenaar let fname = 'Xqftestfile' . a:cchar 2026c1542744SBram Moolenaar call s:create_test_file(fname) 2027c1542744SBram Moolenaar exe 'edit ' . fname 2028049cba9eSBram Moolenaar 2029c1542744SBram Moolenaar Xgetexpr [fname . ':5:Line5', 2030c1542744SBram Moolenaar \ fname . ':10:Line10', 2031c1542744SBram Moolenaar \ fname . ':15:Line15', 2032c1542744SBram Moolenaar \ fname . ':20:Line20'] 2033049cba9eSBram Moolenaar 2034049cba9eSBram Moolenaar 6,14delete 2035049cba9eSBram Moolenaar call append(6, ['Buffer', 'Window']) 2036049cba9eSBram Moolenaar 2037049cba9eSBram Moolenaar let l = g:Xgetlist() 2038049cba9eSBram Moolenaar call assert_equal(5, l[0].lnum) 2039049cba9eSBram Moolenaar call assert_equal(6, l[2].lnum) 2040049cba9eSBram Moolenaar call assert_equal(13, l[3].lnum) 2041049cba9eSBram Moolenaar 2042f9ae154cSBram Moolenaar " If a file doesn't have any quickfix entries, then deleting lines in the 2043f9ae154cSBram Moolenaar " file should not update the quickfix list 2044f9ae154cSBram Moolenaar call g:Xsetlist([], 'f') 2045f9ae154cSBram Moolenaar 1,2delete 2046f9ae154cSBram Moolenaar call assert_equal([], g:Xgetlist()) 2047f9ae154cSBram Moolenaar 2048049cba9eSBram Moolenaar enew! 2049c1542744SBram Moolenaar call delete(fname) 20502b946c9fSBram Moolenaarendfunc 2051049cba9eSBram Moolenaar 20522b946c9fSBram Moolenaarfunc Test_adjust_lnum() 2053c1542744SBram Moolenaar call setloclist(0, []) 2054049cba9eSBram Moolenaar call Xadjust_qflnum('c') 2055c1542744SBram Moolenaar call setqflist([]) 2056049cba9eSBram Moolenaar call Xadjust_qflnum('l') 20572b946c9fSBram Moolenaarendfunc 2058049cba9eSBram Moolenaar 2059049cba9eSBram Moolenaar" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands 20602b946c9fSBram Moolenaarfunc s:test_xgrep(cchar) 2061049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 2062049cba9eSBram Moolenaar 2063049cba9eSBram Moolenaar " The following lines are used for the grep test. Don't remove. 2064049cba9eSBram Moolenaar " Grep_Test_Text: Match 1 2065049cba9eSBram Moolenaar " Grep_Test_Text: Match 2 2066049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 1 2067049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 2 2068049cba9eSBram Moolenaar enew! | only 2069049cba9eSBram Moolenaar set makeef&vim 2070049cba9eSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 207115a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 5) 2072049cba9eSBram Moolenaar Xopen 2073049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ '^:grep') 2074049cba9eSBram Moolenaar Xclose 2075049cba9eSBram Moolenaar enew 2076049cba9eSBram Moolenaar set makeef=Temp_File_## 2077049cba9eSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 207815a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 207915a7bdcbSBram Moolenaar 208015a7bdcbSBram Moolenaar " Try with 'grepprg' set to 'internal' 208115a7bdcbSBram Moolenaar set grepprg=internal 208215a7bdcbSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 208315a7bdcbSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 208415a7bdcbSBram Moolenaar call assert_true(len(g:Xgetlist()) == 9) 208515a7bdcbSBram Moolenaar set grepprg&vim 2086f9ae154cSBram Moolenaar 2087f9ae154cSBram Moolenaar call writefile(['Vim'], 'XtestTempFile') 2088f9ae154cSBram Moolenaar set makeef=XtestTempFile 2089f9ae154cSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 209015a7bdcbSBram Moolenaar call assert_equal(5, len(g:Xgetlist())) 2091f9ae154cSBram Moolenaar call assert_false(filereadable('XtestTempFile')) 2092f9ae154cSBram Moolenaar set makeef&vim 20932b946c9fSBram Moolenaarendfunc 2094049cba9eSBram Moolenaar 20952b946c9fSBram Moolenaarfunc Test_grep() 2096049cba9eSBram Moolenaar " The grepprg may not be set on non-Unix systems 20976d91bcb4SBram Moolenaar CheckUnix 2098049cba9eSBram Moolenaar 2099049cba9eSBram Moolenaar call s:test_xgrep('c') 2100049cba9eSBram Moolenaar call s:test_xgrep('l') 21012b946c9fSBram Moolenaarendfunc 2102361c8f0eSBram Moolenaar 21032b946c9fSBram Moolenaarfunc Test_two_windows() 2104361c8f0eSBram Moolenaar " Use one 'errorformat' for two windows. Add an expression to each of them, 2105361c8f0eSBram Moolenaar " make sure they each keep their own state. 2106361c8f0eSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 2107361c8f0eSBram Moolenaar call mkdir('Xone/a', 'p') 2108361c8f0eSBram Moolenaar call mkdir('Xtwo/a', 'p') 2109361c8f0eSBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 2110361c8f0eSBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 2111361c8f0eSBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 2112361c8f0eSBram Moolenaar 2113361c8f0eSBram Moolenaar new one 2114361c8f0eSBram Moolenaar let one_id = win_getid() 2115361c8f0eSBram Moolenaar lexpr "" 2116361c8f0eSBram Moolenaar new two 2117361c8f0eSBram Moolenaar let two_id = win_getid() 2118361c8f0eSBram Moolenaar lexpr "" 2119361c8f0eSBram Moolenaar 2120361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xtwo/a'" 2121361c8f0eSBram Moolenaar call win_gotoid(one_id) 2122361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xone/a'" 2123361c8f0eSBram Moolenaar call win_gotoid(two_id) 2124361c8f0eSBram Moolenaar laddexpr 'two.txt:5:two two two' 2125361c8f0eSBram Moolenaar call win_gotoid(one_id) 2126361c8f0eSBram Moolenaar laddexpr 'one.txt:3:one one one' 2127361c8f0eSBram Moolenaar 2128361c8f0eSBram Moolenaar let loc_one = getloclist(one_id) 2129361c8f0eSBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr)) 2130361c8f0eSBram Moolenaar call assert_equal(3, loc_one[1].lnum) 2131361c8f0eSBram Moolenaar 2132361c8f0eSBram Moolenaar let loc_two = getloclist(two_id) 2133361c8f0eSBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr)) 2134361c8f0eSBram Moolenaar call assert_equal(5, loc_two[1].lnum) 2135361c8f0eSBram Moolenaar 2136361c8f0eSBram Moolenaar call win_gotoid(one_id) 2137361c8f0eSBram Moolenaar bwipe! 2138361c8f0eSBram Moolenaar call win_gotoid(two_id) 2139361c8f0eSBram Moolenaar bwipe! 2140361c8f0eSBram Moolenaar call delete('Xone', 'rf') 2141361c8f0eSBram Moolenaar call delete('Xtwo', 'rf') 2142361c8f0eSBram Moolenaarendfunc 2143dcb17001SBram Moolenaar 21442b946c9fSBram Moolenaarfunc XbottomTests(cchar) 2145537ef084SBram Moolenaar call s:setup_commands(a:cchar) 2146537ef084SBram Moolenaar 2147b6fa30ccSBram Moolenaar " Calling lbottom without any errors should fail 2148b6fa30ccSBram Moolenaar if a:cchar == 'l' 2149b6fa30ccSBram Moolenaar call assert_fails('lbottom', 'E776:') 2150b6fa30ccSBram Moolenaar endif 2151b6fa30ccSBram Moolenaar 2152537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'foo', 'lnum': 42}]) 2153537ef084SBram Moolenaar Xopen 2154dcb17001SBram Moolenaar let wid = win_getid() 2155dcb17001SBram Moolenaar call assert_equal(1, line('.')) 2156dcb17001SBram Moolenaar wincmd w 2157537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'var', 'lnum': 24}], 'a') 2158537ef084SBram Moolenaar Xbottom 2159dcb17001SBram Moolenaar call win_gotoid(wid) 2160dcb17001SBram Moolenaar call assert_equal(2, line('.')) 2161537ef084SBram Moolenaar Xclose 2162dcb17001SBram Moolenaarendfunc 2163537ef084SBram Moolenaar 2164537ef084SBram Moolenaar" Tests for the :cbottom and :lbottom commands 21652b946c9fSBram Moolenaarfunc Test_cbottom() 2166537ef084SBram Moolenaar call XbottomTests('c') 2167537ef084SBram Moolenaar call XbottomTests('l') 21682b946c9fSBram Moolenaarendfunc 2169f6acffbeSBram Moolenaar 21702b946c9fSBram Moolenaarfunc HistoryTest(cchar) 2171f6acffbeSBram Moolenaar call s:setup_commands(a:cchar) 2172f6acffbeSBram Moolenaar 2173f6acffbeSBram Moolenaar " clear all lists after the first one, then replace the first one. 2174f6acffbeSBram Moolenaar call g:Xsetlist([]) 2175b6fa30ccSBram Moolenaar call assert_fails('Xolder 99', 'E380:') 2176f6acffbeSBram Moolenaar let entry = {'filename': 'foo', 'lnum': 42} 2177f6acffbeSBram Moolenaar call g:Xsetlist([entry], 'r') 2178f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry]) 2179f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry, entry]) 2180f6acffbeSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 2181f6acffbeSBram Moolenaar call assert_equal(3, len(res)) 2182f6acffbeSBram Moolenaar let common = 'errors :set' . (a:cchar == 'c' ? 'qf' : 'loc') . 'list()' 2183f6acffbeSBram Moolenaar call assert_equal(' error list 1 of 3; 1 ' . common, res[0]) 2184f6acffbeSBram Moolenaar call assert_equal(' error list 2 of 3; 2 ' . common, res[1]) 2185f6acffbeSBram Moolenaar call assert_equal('> error list 3 of 3; 3 ' . common, res[2]) 2186b4d5fbabSBram Moolenaar 21878ffc7c8bSBram Moolenaar " Test for changing the quickfix lists 21888ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 21898ffc7c8bSBram Moolenaar exe '1' . a:cchar . 'hist' 21908ffc7c8bSBram Moolenaar call assert_equal(1, g:Xgetlist({'nr' : 0}).nr) 21918ffc7c8bSBram Moolenaar exe '3' . a:cchar . 'hist' 21928ffc7c8bSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 0}).nr) 21938ffc7c8bSBram Moolenaar call assert_fails('-2' . a:cchar . 'hist', 'E16:') 21948ffc7c8bSBram Moolenaar call assert_fails('4' . a:cchar . 'hist', 'E16:') 21958ffc7c8bSBram Moolenaar 2196b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 2197b4d5fbabSBram Moolenaar let l = split(execute(a:cchar . 'hist'), "\n") 2198b4d5fbabSBram Moolenaar call assert_equal('No entries', l[0]) 21998ffc7c8bSBram Moolenaar if a:cchar == 'c' 22008ffc7c8bSBram Moolenaar call assert_fails('4chist', 'E16:') 22018ffc7c8bSBram Moolenaar else 22028ffc7c8bSBram Moolenaar call assert_fails('4lhist', 'E776:') 22038ffc7c8bSBram Moolenaar endif 22045b69c22fSBram Moolenaar 22055b69c22fSBram Moolenaar " An empty list should still show the stack history 22065b69c22fSBram Moolenaar call g:Xsetlist([]) 22075b69c22fSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 22085b69c22fSBram Moolenaar call assert_equal('> error list 1 of 1; 0 ' . common, res[0]) 22095b69c22fSBram Moolenaar 22105b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 2211f6acffbeSBram Moolenaarendfunc 2212f6acffbeSBram Moolenaar 2213f6acffbeSBram Moolenaarfunc Test_history() 2214f6acffbeSBram Moolenaar call HistoryTest('c') 2215f6acffbeSBram Moolenaar call HistoryTest('l') 2216f6acffbeSBram Moolenaarendfunc 2217015102e9SBram Moolenaar 2218015102e9SBram Moolenaarfunc Test_duplicate_buf() 2219015102e9SBram Moolenaar " make sure we can get the highest buffer number 2220015102e9SBram Moolenaar edit DoesNotExist 2221015102e9SBram Moolenaar edit DoesNotExist2 2222015102e9SBram Moolenaar let last_buffer = bufnr("$") 2223015102e9SBram Moolenaar 2224015102e9SBram Moolenaar " make sure only one buffer is created 2225015102e9SBram Moolenaar call writefile(['this one', 'that one'], 'Xgrepthis') 2226015102e9SBram Moolenaar vimgrep one Xgrepthis 2227015102e9SBram Moolenaar vimgrep one Xgrepthis 2228015102e9SBram Moolenaar call assert_equal(last_buffer + 1, bufnr("$")) 2229015102e9SBram Moolenaar 2230015102e9SBram Moolenaar call delete('Xgrepthis') 2231015102e9SBram Moolenaarendfunc 2232d823fa91SBram Moolenaar 2233d823fa91SBram Moolenaar" Quickfix/Location list set/get properties tests 22342b946c9fSBram Moolenaarfunc Xproperty_tests(cchar) 2235d823fa91SBram Moolenaar call s:setup_commands(a:cchar) 2236d823fa91SBram Moolenaar 2237d823fa91SBram Moolenaar " Error cases 2238d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist(99)', 'E715:') 2239d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist(99)', 'E714:') 2240d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 2241d823fa91SBram Moolenaar 2242d823fa91SBram Moolenaar " Set and get the title 2243b6fa30ccSBram Moolenaar call g:Xsetlist([]) 2244d823fa91SBram Moolenaar Xopen 2245d823fa91SBram Moolenaar wincmd p 2246d823fa91SBram Moolenaar call g:Xsetlist([{'filename':'foo', 'lnum':27}]) 224786f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'title' : 'Sample'}) 224886f100dcSBram Moolenaar call assert_equal(0, s) 2249d823fa91SBram Moolenaar let d = g:Xgetlist({"title":1}) 2250d823fa91SBram Moolenaar call assert_equal('Sample', d.title) 2251a2aa8a2bSBram Moolenaar " Try setting title to a non-string value 2252a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'title' : ['Test']})) 2253a2aa8a2bSBram Moolenaar call assert_equal('Sample', g:Xgetlist({"title":1}).title) 2254d823fa91SBram Moolenaar 2255d823fa91SBram Moolenaar Xopen 2256d823fa91SBram Moolenaar call assert_equal('Sample', w:quickfix_title) 2257d823fa91SBram Moolenaar Xclose 2258d823fa91SBram Moolenaar 22592b529bb6SBram Moolenaar " Tests for action argument 22602b529bb6SBram Moolenaar silent! Xolder 999 22612b529bb6SBram Moolenaar let qfnr = g:Xgetlist({'all':1}).nr 22622b529bb6SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'N1'}) 22632b529bb6SBram Moolenaar call assert_equal('N1', g:Xgetlist({'all':1}).title) 22642b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N2'}) 22652b529bb6SBram Moolenaar call assert_equal(qfnr + 1, g:Xgetlist({'all':1}).nr) 2266890680caSBram Moolenaar 2267890680caSBram Moolenaar let res = g:Xgetlist({'nr': 0}) 2268890680caSBram Moolenaar call assert_equal(qfnr + 1, res.nr) 2269890680caSBram Moolenaar call assert_equal(['nr'], keys(res)) 2270890680caSBram Moolenaar 22712b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N3'}) 22722b529bb6SBram Moolenaar call assert_equal('N2', g:Xgetlist({'nr':2, 'title':1}).title) 22732b529bb6SBram Moolenaar 2274ee85df37SBram Moolenaar " Changing the title of an earlier quickfix list 227555b69264SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'NewTitle', 'nr' : 2}) 2276ee85df37SBram Moolenaar call assert_equal('NewTitle', g:Xgetlist({'nr':2, 'title':1}).title) 2277ee85df37SBram Moolenaar 2278ee85df37SBram Moolenaar " Changing the title of an invalid quickfix list 2279ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2280ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 99})) 2281ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 2282ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 'abc'})) 2283ee85df37SBram Moolenaar 2284ee85df37SBram Moolenaar if a:cchar == 'c' 2285ee85df37SBram Moolenaar copen 2286ee85df37SBram Moolenaar call assert_equal({'winid':win_getid()}, getqflist({'winid':1})) 2287ee85df37SBram Moolenaar cclose 2288ee85df37SBram Moolenaar endif 2289ee85df37SBram Moolenaar 2290d823fa91SBram Moolenaar " Invalid arguments 2291e2e4075fSBram Moolenaar call assert_fails('call g:Xgetlist([])', 'E715:') 2292e2e4075fSBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 2293d823fa91SBram Moolenaar let s = g:Xsetlist([], 'a', {'abc':1}) 2294d823fa91SBram Moolenaar call assert_equal(-1, s) 2295d823fa91SBram Moolenaar 2296d823fa91SBram Moolenaar call assert_equal({}, g:Xgetlist({'abc':1})) 2297a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':99, 'title':1}).title) 2298a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':[], 'title':1}).title) 2299d823fa91SBram Moolenaar 2300d823fa91SBram Moolenaar if a:cchar == 'l' 2301890680caSBram Moolenaar call assert_equal({}, getloclist(99, {'title': 1})) 2302d823fa91SBram Moolenaar endif 23038f77c5a4SBram Moolenaar 23048f77c5a4SBram Moolenaar " Context related tests 230586f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'context':[1,2,3]}) 230686f100dcSBram Moolenaar call assert_equal(0, s) 23078f77c5a4SBram Moolenaar call test_garbagecollect_now() 23088f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 23098f77c5a4SBram Moolenaar call assert_equal([1,2,3], d.context) 23108f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':{'color':'green'}}) 23118f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 23128f77c5a4SBram Moolenaar call assert_equal({'color':'green'}, d.context) 23138f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':"Context info"}) 23148f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 23158f77c5a4SBram Moolenaar call assert_equal("Context info", d.context) 23168f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':246}) 23178f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 23188f77c5a4SBram Moolenaar call assert_equal(246, d.context) 231992b83ccfSBram Moolenaar " set other Vim data types as context 232092b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_blob()}) 232192b83ccfSBram Moolenaar if has('channel') 232292b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_channel()}) 232392b83ccfSBram Moolenaar endif 232492b83ccfSBram Moolenaar if has('job') 232592b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_job()}) 232692b83ccfSBram Moolenaar endif 232792b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_function()}) 232892b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : test_null_partial()}) 232992b83ccfSBram Moolenaar call g:Xsetlist([], 'a', {'context' : ''}) 233092b83ccfSBram Moolenaar call test_garbagecollect_now() 23318f77c5a4SBram Moolenaar if a:cchar == 'l' 23328f77c5a4SBram Moolenaar " Test for copying context across two different location lists 23338f77c5a4SBram Moolenaar new | only 23348f77c5a4SBram Moolenaar let w1_id = win_getid() 23358f77c5a4SBram Moolenaar let l = [1] 23368f77c5a4SBram Moolenaar call setloclist(0, [], 'a', {'context':l}) 23378f77c5a4SBram Moolenaar new 23388f77c5a4SBram Moolenaar let w2_id = win_getid() 23398f77c5a4SBram Moolenaar call add(l, 2) 23408f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w1_id, {'context':1}).context) 23418f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 23428f77c5a4SBram Moolenaar unlet! l 23438f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 23448f77c5a4SBram Moolenaar only 23458f77c5a4SBram Moolenaar call setloclist(0, [], 'f') 2346a6d4849cSBram Moolenaar call assert_equal('', getloclist(0, {'context':1}).context) 23478f77c5a4SBram Moolenaar endif 23486e62da3eSBram Moolenaar 23496e62da3eSBram Moolenaar " Test for changing the context of previous quickfix lists 23506e62da3eSBram Moolenaar call g:Xsetlist([], 'f') 23516e62da3eSBram Moolenaar Xexpr "One" 23526e62da3eSBram Moolenaar Xexpr "Two" 23536e62da3eSBram Moolenaar Xexpr "Three" 235455b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [1], 'nr' : 1}) 235555b69264SBram Moolenaar call g:Xsetlist([], 'a', {'context' : [2], 'nr' : 2}) 23566e62da3eSBram Moolenaar " Also, check for setting the context using quickfix list number zero. 235755b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [3], 'nr' : 0}) 23586e62da3eSBram Moolenaar call test_garbagecollect_now() 23596e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 1, 'context' : 1}) 23606e62da3eSBram Moolenaar call assert_equal([1], l.context) 23616e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 2, 'context' : 1}) 23626e62da3eSBram Moolenaar call assert_equal([2], l.context) 23636e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 3, 'context' : 1}) 23646e62da3eSBram Moolenaar call assert_equal([3], l.context) 23656e62da3eSBram Moolenaar 23666e62da3eSBram Moolenaar " Test for changing the context through reference and for garbage 23676e62da3eSBram Moolenaar " collection of quickfix context 23686e62da3eSBram Moolenaar let l = ["red"] 23696e62da3eSBram Moolenaar call g:Xsetlist([], ' ', {'context' : l}) 23706e62da3eSBram Moolenaar call add(l, "blue") 23716e62da3eSBram Moolenaar let x = g:Xgetlist({'context' : 1}) 23726e62da3eSBram Moolenaar call add(x.context, "green") 23736e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], l) 23746e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], x.context) 23756e62da3eSBram Moolenaar unlet l 23766e62da3eSBram Moolenaar call test_garbagecollect_now() 23776e62da3eSBram Moolenaar let m = g:Xgetlist({'context' : 1}) 23786e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], m.context) 23796a8958dbSBram Moolenaar 23806a8958dbSBram Moolenaar " Test for setting/getting items 23816a8958dbSBram Moolenaar Xexpr "" 23826a8958dbSBram Moolenaar let qfprev = g:Xgetlist({'nr':0}) 238386f100dcSBram Moolenaar let s = g:Xsetlist([], ' ', {'title':'Green', 23846a8958dbSBram Moolenaar \ 'items' : [{'filename':'F1', 'lnum':10}]}) 238586f100dcSBram Moolenaar call assert_equal(0, s) 23866a8958dbSBram Moolenaar let qfcur = g:Xgetlist({'nr':0}) 23876a8958dbSBram Moolenaar call assert_true(qfcur.nr == qfprev.nr + 1) 23886a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23896a8958dbSBram Moolenaar call assert_equal('F1', bufname(l.items[0].bufnr)) 23906a8958dbSBram Moolenaar call assert_equal(10, l.items[0].lnum) 23916a8958dbSBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F2', 'lnum':20}, 23926a8958dbSBram Moolenaar \ {'filename':'F2', 'lnum':30}]}) 23936a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23946a8958dbSBram Moolenaar call assert_equal('F2', bufname(l.items[2].bufnr)) 23956a8958dbSBram Moolenaar call assert_equal(30, l.items[2].lnum) 23966a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename':'F3', 'lnum':40}]}) 23976a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 23986a8958dbSBram Moolenaar call assert_equal('F3', bufname(l.items[0].bufnr)) 23996a8958dbSBram Moolenaar call assert_equal(40, l.items[0].lnum) 24006a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 24016a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 24026a8958dbSBram Moolenaar call assert_equal(0, len(l.items)) 24036a8958dbSBram Moolenaar 2404b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'TestTitle'}) 2405b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2406b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 2407b4d5fbabSBram Moolenaar call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title) 2408b4d5fbabSBram Moolenaar 2409c9cc9c78SBram Moolenaar " Test for getting id of window associated with a location list window 2410c9cc9c78SBram Moolenaar if a:cchar == 'l' 2411c9cc9c78SBram Moolenaar only 2412c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'all' : 1}).filewinid) 2413c9cc9c78SBram Moolenaar let wid = win_getid() 2414c9cc9c78SBram Moolenaar Xopen 2415c9cc9c78SBram Moolenaar call assert_equal(wid, g:Xgetlist({'filewinid' : 1}).filewinid) 2416c9cc9c78SBram Moolenaar wincmd w 2417c9cc9c78SBram Moolenaar call assert_equal(0, g:Xgetlist({'filewinid' : 1}).filewinid) 2418c9cc9c78SBram Moolenaar only 2419c9cc9c78SBram Moolenaar endif 2420c9cc9c78SBram Moolenaar 2421ae338338SBram Moolenaar " The following used to crash Vim with address sanitizer 2422ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2423ae338338SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]}) 2424ae338338SBram Moolenaar call assert_equal(10, g:Xgetlist({'items':1}).items[0].lnum) 2425ae338338SBram Moolenaar 2426a2aa8a2bSBram Moolenaar " Try setting the items using a string 2427a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'items' : 'Test'})) 2428a2aa8a2bSBram Moolenaar 24296a8958dbSBram Moolenaar " Save and restore the quickfix stack 24306a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 24316a8958dbSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 24326a8958dbSBram Moolenaar Xexpr "File1:10:Line1" 24336a8958dbSBram Moolenaar Xexpr "File2:20:Line2" 24346a8958dbSBram Moolenaar Xexpr "File3:30:Line3" 24356a8958dbSBram Moolenaar let last_qf = g:Xgetlist({'nr':'$'}).nr 24366a8958dbSBram Moolenaar call assert_equal(3, last_qf) 24376a8958dbSBram Moolenaar let qstack = [] 24386a8958dbSBram Moolenaar for i in range(1, last_qf) 24396a8958dbSBram Moolenaar let qstack = add(qstack, g:Xgetlist({'nr':i, 'all':1})) 24406a8958dbSBram Moolenaar endfor 24416a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 24426a8958dbSBram Moolenaar for i in range(len(qstack)) 24436a8958dbSBram Moolenaar call g:Xsetlist([], ' ', qstack[i]) 24446a8958dbSBram Moolenaar endfor 24456a8958dbSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 24466a8958dbSBram Moolenaar call assert_equal(10, g:Xgetlist({'nr':1, 'items':1}).items[0].lnum) 24476a8958dbSBram Moolenaar call assert_equal(20, g:Xgetlist({'nr':2, 'items':1}).items[0].lnum) 24486a8958dbSBram Moolenaar call assert_equal(30, g:Xgetlist({'nr':3, 'items':1}).items[0].lnum) 24496a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 24506a8958dbSBram Moolenaar 24516a8958dbSBram Moolenaar " Swap two quickfix lists 24526a8958dbSBram Moolenaar Xexpr "File1:10:Line10" 24536a8958dbSBram Moolenaar Xexpr "File2:20:Line20" 24546a8958dbSBram Moolenaar Xexpr "File3:30:Line30" 24556a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':1,'title':'Colors','context':['Colors']}) 24566a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':2,'title':'Fruits','context':['Fruits']}) 24576a8958dbSBram Moolenaar let l1=g:Xgetlist({'nr':1,'all':1}) 24586a8958dbSBram Moolenaar let l2=g:Xgetlist({'nr':2,'all':1}) 2459a539f4f1SBram Moolenaar let save_id = l1.id 2460a539f4f1SBram Moolenaar let l1.id=l2.id 2461a539f4f1SBram Moolenaar let l2.id=save_id 24626a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l1) 24636a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l2) 24646a8958dbSBram Moolenaar let newl1=g:Xgetlist({'nr':1,'all':1}) 24656a8958dbSBram Moolenaar let newl2=g:Xgetlist({'nr':2,'all':1}) 2466b4d5fbabSBram Moolenaar call assert_equal('Fruits', newl1.title) 24676a8958dbSBram Moolenaar call assert_equal(['Fruits'], newl1.context) 24686a8958dbSBram Moolenaar call assert_equal('Line20', newl1.items[0].text) 2469b4d5fbabSBram Moolenaar call assert_equal('Colors', newl2.title) 24706a8958dbSBram Moolenaar call assert_equal(['Colors'], newl2.context) 24716a8958dbSBram Moolenaar call assert_equal('Line10', newl2.items[0].text) 24726a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 2473be7a50c2SBram Moolenaar 2474be7a50c2SBram Moolenaar " Cannot specify both a non-empty list argument and a dict argument 2475be7a50c2SBram Moolenaar call assert_fails("call g:Xsetlist([{}], ' ', {})", 'E475:') 24762b946c9fSBram Moolenaarendfunc 2477d823fa91SBram Moolenaar 24782b946c9fSBram Moolenaarfunc Test_qf_property() 2479d823fa91SBram Moolenaar call Xproperty_tests('c') 2480d823fa91SBram Moolenaar call Xproperty_tests('l') 24812b946c9fSBram Moolenaarendfunc 248204c4ce65SBram Moolenaar 24835b69c22fSBram Moolenaar" Test for setting the current index in the location/quickfix list 24845b69c22fSBram Moolenaarfunc Xtest_setqfidx(cchar) 24855b69c22fSBram Moolenaar call s:setup_commands(a:cchar) 24865b69c22fSBram Moolenaar 24875b69c22fSBram Moolenaar Xgetexpr "F1:10:1:Line1\nF2:20:2:Line2\nF3:30:3:Line3" 24885b69c22fSBram Moolenaar Xgetexpr "F4:10:1:Line1\nF5:20:2:Line2\nF6:30:3:Line3" 24895b69c22fSBram Moolenaar Xgetexpr "F7:10:1:Line1\nF8:20:2:Line2\nF9:30:3:Line3" 24905b69c22fSBram Moolenaar 24915b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 2}) 24925b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'idx' : 2}) 24935b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 3}) 24945b69c22fSBram Moolenaar Xolder 2 24955b69c22fSBram Moolenaar Xopen 24965b69c22fSBram Moolenaar call assert_equal(3, line('.')) 24975b69c22fSBram Moolenaar Xnewer 24985b69c22fSBram Moolenaar call assert_equal(2, line('.')) 24995b69c22fSBram Moolenaar Xnewer 25005b69c22fSBram Moolenaar call assert_equal(2, line('.')) 25015b69c22fSBram Moolenaar " Update the current index with the quickfix window open 25025b69c22fSBram Moolenaar wincmd w 25035b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 3, 'idx' : 3}) 25045b69c22fSBram Moolenaar Xopen 25055b69c22fSBram Moolenaar call assert_equal(3, line('.')) 25065b69c22fSBram Moolenaar Xclose 25075b69c22fSBram Moolenaar 25085b69c22fSBram Moolenaar " Set the current index to the last entry 25095b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : '$'}) 25105b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 25115b69c22fSBram Moolenaar " A large value should set the index to the last index 25125b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 1}) 25135b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 999}) 25145b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 25155b69c22fSBram Moolenaar " Invalid index values 25165b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : -1}) 25175b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 25185b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 0}) 25195b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 25205b69c22fSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'idx' : 'xx'}) 25215b69c22fSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr' : 1, 'idx' : 0}).idx) 25225b69c22fSBram Moolenaar call assert_fails("call g:Xsetlist([], 'a', {'nr':1, 'idx':[]})", 'E745:') 25235b69c22fSBram Moolenaar 25245b69c22fSBram Moolenaar call g:Xsetlist([], 'f') 25255b69c22fSBram Moolenaar new | only 25265b69c22fSBram Moolenaarendfunc 25275b69c22fSBram Moolenaar 25285b69c22fSBram Moolenaarfunc Test_setqfidx() 25295b69c22fSBram Moolenaar call Xtest_setqfidx('c') 25305b69c22fSBram Moolenaar call Xtest_setqfidx('l') 25315b69c22fSBram Moolenaarendfunc 25325b69c22fSBram Moolenaar 253304c4ce65SBram Moolenaar" Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands 25342b946c9fSBram Moolenaarfunc QfAutoCmdHandler(loc, cmd) 253504c4ce65SBram Moolenaar call add(g:acmds, a:loc . a:cmd) 25362b946c9fSBram Moolenaarendfunc 253704c4ce65SBram Moolenaar 25382b946c9fSBram Moolenaarfunc Test_Autocmd() 253904c4ce65SBram Moolenaar autocmd QuickFixCmdPre * call QfAutoCmdHandler('pre', expand('<amatch>')) 254004c4ce65SBram Moolenaar autocmd QuickFixCmdPost * call QfAutoCmdHandler('post', expand('<amatch>')) 254104c4ce65SBram Moolenaar 254204c4ce65SBram Moolenaar let g:acmds = [] 254304c4ce65SBram Moolenaar cexpr "F1:10:Line 10" 254404c4ce65SBram Moolenaar caddexpr "F1:20:Line 20" 254504c4ce65SBram Moolenaar cgetexpr "F1:30:Line 30" 25461ed2276fSBram Moolenaar cexpr "" 25471ed2276fSBram Moolenaar caddexpr "" 25481ed2276fSBram Moolenaar cgetexpr "" 25491ed2276fSBram Moolenaar silent! cexpr non_existing_func() 25501ed2276fSBram Moolenaar silent! caddexpr non_existing_func() 25511ed2276fSBram Moolenaar silent! cgetexpr non_existing_func() 255204c4ce65SBram Moolenaar let l = ['precexpr', 255304c4ce65SBram Moolenaar \ 'postcexpr', 255404c4ce65SBram Moolenaar \ 'precaddexpr', 255504c4ce65SBram Moolenaar \ 'postcaddexpr', 255604c4ce65SBram Moolenaar \ 'precgetexpr', 255704c4ce65SBram Moolenaar \ 'postcgetexpr', 25581ed2276fSBram Moolenaar \ 'precexpr', 25591ed2276fSBram Moolenaar \ 'postcexpr', 25601ed2276fSBram Moolenaar \ 'precaddexpr', 25611ed2276fSBram Moolenaar \ 'postcaddexpr', 25621ed2276fSBram Moolenaar \ 'precgetexpr', 25631ed2276fSBram Moolenaar \ 'postcgetexpr', 25641ed2276fSBram Moolenaar \ 'precexpr', 25651ed2276fSBram Moolenaar \ 'precaddexpr', 25661ed2276fSBram Moolenaar \ 'precgetexpr'] 25671ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 25681ed2276fSBram Moolenaar 25691ed2276fSBram Moolenaar let g:acmds = [] 25701ed2276fSBram Moolenaar enew! | call append(0, "F2:10:Line 10") 25711ed2276fSBram Moolenaar cbuffer! 25721ed2276fSBram Moolenaar enew! | call append(0, "F2:20:Line 20") 25731ed2276fSBram Moolenaar cgetbuffer 25741ed2276fSBram Moolenaar enew! | call append(0, "F2:30:Line 30") 25751ed2276fSBram Moolenaar caddbuffer 25761ed2276fSBram Moolenaar new 25771ed2276fSBram Moolenaar let bnum = bufnr('%') 25781ed2276fSBram Moolenaar bunload 25791ed2276fSBram Moolenaar exe 'silent! cbuffer! ' . bnum 25801ed2276fSBram Moolenaar exe 'silent! cgetbuffer ' . bnum 25811ed2276fSBram Moolenaar exe 'silent! caddbuffer ' . bnum 25821ed2276fSBram Moolenaar enew! 25831ed2276fSBram Moolenaar let l = ['precbuffer', 258404c4ce65SBram Moolenaar \ 'postcbuffer', 258504c4ce65SBram Moolenaar \ 'precgetbuffer', 258604c4ce65SBram Moolenaar \ 'postcgetbuffer', 258704c4ce65SBram Moolenaar \ 'precaddbuffer', 25881ed2276fSBram Moolenaar \ 'postcaddbuffer', 25891ed2276fSBram Moolenaar \ 'precbuffer', 25901ed2276fSBram Moolenaar \ 'precgetbuffer', 25911ed2276fSBram Moolenaar \ 'precaddbuffer'] 259204c4ce65SBram Moolenaar call assert_equal(l, g:acmds) 25931ed2276fSBram Moolenaar 25941ed2276fSBram Moolenaar call writefile(['Xtest:1:Line1'], 'Xtest') 25951ed2276fSBram Moolenaar call writefile([], 'Xempty') 25961ed2276fSBram Moolenaar let g:acmds = [] 25971ed2276fSBram Moolenaar cfile Xtest 25981ed2276fSBram Moolenaar caddfile Xtest 25991ed2276fSBram Moolenaar cgetfile Xtest 26001ed2276fSBram Moolenaar cfile Xempty 26011ed2276fSBram Moolenaar caddfile Xempty 26021ed2276fSBram Moolenaar cgetfile Xempty 26031ed2276fSBram Moolenaar silent! cfile do_not_exist 26041ed2276fSBram Moolenaar silent! caddfile do_not_exist 26051ed2276fSBram Moolenaar silent! cgetfile do_not_exist 26061ed2276fSBram Moolenaar let l = ['precfile', 26071ed2276fSBram Moolenaar \ 'postcfile', 26081ed2276fSBram Moolenaar \ 'precaddfile', 26091ed2276fSBram Moolenaar \ 'postcaddfile', 26101ed2276fSBram Moolenaar \ 'precgetfile', 26111ed2276fSBram Moolenaar \ 'postcgetfile', 26121ed2276fSBram Moolenaar \ 'precfile', 26131ed2276fSBram Moolenaar \ 'postcfile', 26141ed2276fSBram Moolenaar \ 'precaddfile', 26151ed2276fSBram Moolenaar \ 'postcaddfile', 26161ed2276fSBram Moolenaar \ 'precgetfile', 26171ed2276fSBram Moolenaar \ 'postcgetfile', 26181ed2276fSBram Moolenaar \ 'precfile', 26191ed2276fSBram Moolenaar \ 'postcfile', 26201ed2276fSBram Moolenaar \ 'precaddfile', 26211ed2276fSBram Moolenaar \ 'postcaddfile', 26221ed2276fSBram Moolenaar \ 'precgetfile', 26231ed2276fSBram Moolenaar \ 'postcgetfile'] 26241ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 26251ed2276fSBram Moolenaar 26261ed2276fSBram Moolenaar let g:acmds = [] 26271ed2276fSBram Moolenaar helpgrep quickfix 26281ed2276fSBram Moolenaar silent! helpgrep non_existing_help_topic 26291ed2276fSBram Moolenaar vimgrep test Xtest 26301ed2276fSBram Moolenaar vimgrepadd test Xtest 26311ed2276fSBram Moolenaar silent! vimgrep non_existing_test Xtest 26321ed2276fSBram Moolenaar silent! vimgrepadd non_existing_test Xtest 26331ed2276fSBram Moolenaar set makeprg= 26341ed2276fSBram Moolenaar silent! make 26351ed2276fSBram Moolenaar set makeprg& 26361ed2276fSBram Moolenaar let l = ['prehelpgrep', 26371ed2276fSBram Moolenaar \ 'posthelpgrep', 26381ed2276fSBram Moolenaar \ 'prehelpgrep', 26391ed2276fSBram Moolenaar \ 'posthelpgrep', 26401ed2276fSBram Moolenaar \ 'previmgrep', 26411ed2276fSBram Moolenaar \ 'postvimgrep', 26421ed2276fSBram Moolenaar \ 'previmgrepadd', 26431ed2276fSBram Moolenaar \ 'postvimgrepadd', 26441ed2276fSBram Moolenaar \ 'previmgrep', 26451ed2276fSBram Moolenaar \ 'postvimgrep', 26461ed2276fSBram Moolenaar \ 'previmgrepadd', 26471ed2276fSBram Moolenaar \ 'postvimgrepadd', 26481ed2276fSBram Moolenaar \ 'premake', 26491ed2276fSBram Moolenaar \ 'postmake'] 26501ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 26511ed2276fSBram Moolenaar 26521ed2276fSBram Moolenaar if has('unix') 26531ed2276fSBram Moolenaar " Run this test only on Unix-like systems. The grepprg may not be set on 26541ed2276fSBram Moolenaar " non-Unix systems. 26551ed2276fSBram Moolenaar " The following lines are used for the grep test. Don't remove. 26561ed2276fSBram Moolenaar " Grep_Autocmd_Text: Match 1 26571ed2276fSBram Moolenaar " GrepAdd_Autocmd_Text: Match 2 26581ed2276fSBram Moolenaar let g:acmds = [] 26591ed2276fSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 26601ed2276fSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 26611ed2276fSBram Moolenaar silent grep abc123def Xtest 26621ed2276fSBram Moolenaar silent grepadd abc123def Xtest 266315a7bdcbSBram Moolenaar set grepprg=internal 266415a7bdcbSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 266515a7bdcbSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 266615a7bdcbSBram Moolenaar silent lgrep Grep_Autocmd_Text test_quickfix.vim 266715a7bdcbSBram Moolenaar silent lgrepadd GrepAdd_Autocmd_Text test_quickfix.vim 266815a7bdcbSBram Moolenaar set grepprg&vim 26691ed2276fSBram Moolenaar let l = ['pregrep', 26701ed2276fSBram Moolenaar \ 'postgrep', 26711ed2276fSBram Moolenaar \ 'pregrepadd', 26721ed2276fSBram Moolenaar \ 'postgrepadd', 26731ed2276fSBram Moolenaar \ 'pregrep', 26741ed2276fSBram Moolenaar \ 'postgrep', 26751ed2276fSBram Moolenaar \ 'pregrepadd', 267615a7bdcbSBram Moolenaar \ 'postgrepadd', 267715a7bdcbSBram Moolenaar \ 'pregrep', 267815a7bdcbSBram Moolenaar \ 'postgrep', 267915a7bdcbSBram Moolenaar \ 'pregrepadd', 268015a7bdcbSBram Moolenaar \ 'postgrepadd', 268115a7bdcbSBram Moolenaar \ 'prelgrep', 268215a7bdcbSBram Moolenaar \ 'postlgrep', 268315a7bdcbSBram Moolenaar \ 'prelgrepadd', 268415a7bdcbSBram Moolenaar \ 'postlgrepadd'] 26851ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 26861ed2276fSBram Moolenaar endif 26871ed2276fSBram Moolenaar 26881ed2276fSBram Moolenaar call delete('Xtest') 26891ed2276fSBram Moolenaar call delete('Xempty') 2690b254af31SBram Moolenaar au! QuickFixCmdPre 2691b254af31SBram Moolenaar au! QuickFixCmdPost 26922b946c9fSBram Moolenaarendfunc 269321662be2SBram Moolenaar 26942b946c9fSBram Moolenaarfunc Test_Autocmd_Exception() 269521662be2SBram Moolenaar set efm=%m 269621662be2SBram Moolenaar lgetexpr '?' 269721662be2SBram Moolenaar 269821662be2SBram Moolenaar try 269921662be2SBram Moolenaar call DoesNotExit() 270021662be2SBram Moolenaar catch 270121662be2SBram Moolenaar lgetexpr '1' 270221662be2SBram Moolenaar finally 270321662be2SBram Moolenaar lgetexpr '1' 270421662be2SBram Moolenaar endtry 270521662be2SBram Moolenaar 270621662be2SBram Moolenaar call assert_equal('1', getloclist(0)[0].text) 270721662be2SBram Moolenaar 270821662be2SBram Moolenaar set efm&vim 27092b946c9fSBram Moolenaarendfunc 271063bed3d3SBram Moolenaar 27112b946c9fSBram Moolenaarfunc Test_caddbuffer_wrong() 27122b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 271363bed3d3SBram Moolenaar let save_efm = &efm 271463bed3d3SBram Moolenaar set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.# 271563bed3d3SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 271663bed3d3SBram Moolenaar let &efm = save_efm 27172b946c9fSBram Moolenaar caddbuffer 271863bed3d3SBram Moolenaar bwipe! 271963bed3d3SBram Moolenaarendfunc 27202b946c9fSBram Moolenaar 27212b946c9fSBram Moolenaarfunc Test_caddexpr_wrong() 27222b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 27232b946c9fSBram Moolenaar cbuffer 27242b946c9fSBram Moolenaar cbuffer 27252b946c9fSBram Moolenaar copen 27262b946c9fSBram Moolenaar let save_efm = &efm 27272b946c9fSBram Moolenaar set efm=% 27282b946c9fSBram Moolenaar call assert_fails('caddexpr ""', 'E376:') 27292b946c9fSBram Moolenaar let &efm = save_efm 27302b946c9fSBram Moolenaarendfunc 27317618e00dSBram Moolenaar 27327618e00dSBram Moolenaarfunc Test_dirstack_cleanup() 27337618e00dSBram Moolenaar " This used to cause a memory access in freed memory. 27347618e00dSBram Moolenaar let save_efm = &efm 27357618e00dSBram Moolenaar lexpr '0' 27367618e00dSBram Moolenaar lopen 27377618e00dSBram Moolenaar fun X(c) 27387618e00dSBram Moolenaar let save_efm=&efm 27397618e00dSBram Moolenaar set efm=%D%f 27407618e00dSBram Moolenaar if a:c == 'c' 27417618e00dSBram Moolenaar caddexpr '::' 27427618e00dSBram Moolenaar else 27437618e00dSBram Moolenaar laddexpr ':0:0' 27447618e00dSBram Moolenaar endif 27457618e00dSBram Moolenaar let &efm=save_efm 27467618e00dSBram Moolenaar endfun 27477618e00dSBram Moolenaar call X('c') 27487618e00dSBram Moolenaar call X('l') 27497618e00dSBram Moolenaar call setqflist([], 'r') 27507618e00dSBram Moolenaar caddbuffer 27517618e00dSBram Moolenaar let &efm = save_efm 27527618e00dSBram Moolenaarendfunc 2753391b1dd0SBram Moolenaar 2754391b1dd0SBram Moolenaar" Tests for jumping to entries from the location list window and quickfix 2755391b1dd0SBram Moolenaar" window 2756391b1dd0SBram Moolenaarfunc Test_cwindow_jump() 2757391b1dd0SBram Moolenaar set efm=%f%%%l%%%m 2758391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2759391b1dd0SBram Moolenaar lopen | only 2760391b1dd0SBram Moolenaar lfirst 2761391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2762391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2763391b1dd0SBram Moolenaar " Location list for the new window should be set 2764391b1dd0SBram Moolenaar call assert_true(getloclist(0)[2].text == 'Line 30') 2765391b1dd0SBram Moolenaar 2766391b1dd0SBram Moolenaar " Open a scratch buffer 2767391b1dd0SBram Moolenaar " Open a new window and create a location list 2768391b1dd0SBram Moolenaar " Open the location list window and close the other window 2769391b1dd0SBram Moolenaar " Jump to an entry. 2770eeb1b9c7SBram Moolenaar " Should create a new window and jump to the entry. The scratch buffer 2771391b1dd0SBram Moolenaar " should not be used. 2772391b1dd0SBram Moolenaar enew | only 2773391b1dd0SBram Moolenaar set buftype=nofile 2774391b1dd0SBram Moolenaar below new 2775391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2776391b1dd0SBram Moolenaar lopen 2777391b1dd0SBram Moolenaar 2wincmd c 2778391b1dd0SBram Moolenaar lnext 2779391b1dd0SBram Moolenaar call assert_true(winnr('$') == 3) 2780391b1dd0SBram Moolenaar call assert_true(winnr() == 2) 2781391b1dd0SBram Moolenaar 2782391b1dd0SBram Moolenaar " Open two windows with two different location lists 2783391b1dd0SBram Moolenaar " Open the location list window and close the previous window 2784391b1dd0SBram Moolenaar " Jump to an entry in the location list window 2785391b1dd0SBram Moolenaar " Should open the file in the first window and not set the location list. 2786391b1dd0SBram Moolenaar enew | only 2787391b1dd0SBram Moolenaar lgetexpr ["F1%5%Line 5"] 2788391b1dd0SBram Moolenaar below new 2789391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2790391b1dd0SBram Moolenaar lopen 2791391b1dd0SBram Moolenaar 2wincmd c 2792391b1dd0SBram Moolenaar lnext 2793391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2794391b1dd0SBram Moolenaar call assert_true(getloclist(0)[0].text == 'Line 5') 2795391b1dd0SBram Moolenaar 2796391b1dd0SBram Moolenaar enew | only 2797391b1dd0SBram Moolenaar cgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2798391b1dd0SBram Moolenaar copen 2799391b1dd0SBram Moolenaar cnext 2800391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2801391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2802391b1dd0SBram Moolenaar 2803f9ae154cSBram Moolenaar " open the quickfix buffer in two windows and jump to an entry. Should open 2804f9ae154cSBram Moolenaar " the file in the first quickfix window. 2805f9ae154cSBram Moolenaar enew | only 2806f9ae154cSBram Moolenaar copen 2807f9ae154cSBram Moolenaar let bnum = bufnr('') 2808f9ae154cSBram Moolenaar exe 'sbuffer ' . bnum 2809f9ae154cSBram Moolenaar wincmd b 2810f9ae154cSBram Moolenaar cfirst 2811f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2812bdd2c290SBram Moolenaar call assert_equal('F1', @%) 2813f9ae154cSBram Moolenaar enew | only 2814f9ae154cSBram Moolenaar exe 'sb' bnum 2815f9ae154cSBram Moolenaar exe 'botright sb' bnum 2816f9ae154cSBram Moolenaar wincmd t 2817f9ae154cSBram Moolenaar clast 2818f9ae154cSBram Moolenaar call assert_equal(2, winnr()) 2819f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(1, '&buftype')) 2820f9ae154cSBram Moolenaar call assert_equal('quickfix', getwinvar(3, '&buftype')) 2821f9ae154cSBram Moolenaar 28224b96df5aSBram Moolenaar " Jumping to a file from the location list window should find a usable 282315a7bdcbSBram Moolenaar " window by wrapping around the window list. 282415a7bdcbSBram Moolenaar enew | only 282515a7bdcbSBram Moolenaar call setloclist(0, [], 'f') 282615a7bdcbSBram Moolenaar new | new 282715a7bdcbSBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 282815a7bdcbSBram Moolenaar lopen 282915a7bdcbSBram Moolenaar 1close 283015a7bdcbSBram Moolenaar call assert_equal(0, getloclist(3, {'id' : 0}).id) 283115a7bdcbSBram Moolenaar lnext 283215a7bdcbSBram Moolenaar call assert_equal(3, winnr()) 283315a7bdcbSBram Moolenaar call assert_equal(getloclist(1, {'id' : 0}).id, getloclist(3, {'id' : 0}).id) 283415a7bdcbSBram Moolenaar 2835391b1dd0SBram Moolenaar enew | only 2836391b1dd0SBram Moolenaar set efm&vim 2837391b1dd0SBram Moolenaarendfunc 2838ee85df37SBram Moolenaar 2839e00fdf35SBram Moolenaarfunc Test_cwindow_highlight() 2840e00fdf35SBram Moolenaar CheckScreendump 2841e00fdf35SBram Moolenaar 2842e00fdf35SBram Moolenaar let lines =<< trim END 2843e00fdf35SBram Moolenaar call setline(1, ['some', 'text', 'with', 'matches']) 2844e00fdf35SBram Moolenaar write XCwindow 2845e00fdf35SBram Moolenaar vimgrep e XCwindow 2846e00fdf35SBram Moolenaar redraw 2847e00fdf35SBram Moolenaar cwindow 4 2848e00fdf35SBram Moolenaar END 2849e00fdf35SBram Moolenaar call writefile(lines, 'XtestCwindow') 2850e00fdf35SBram Moolenaar let buf = RunVimInTerminal('-S XtestCwindow', #{rows: 12}) 2851e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_1', {}) 2852e00fdf35SBram Moolenaar 2853e00fdf35SBram Moolenaar call term_sendkeys(buf, ":cnext\<CR>") 2854e00fdf35SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_cwindow_2', {}) 2855e00fdf35SBram Moolenaar 2856e00fdf35SBram Moolenaar " clean up 2857e00fdf35SBram Moolenaar call StopVimInTerminal(buf) 2858e00fdf35SBram Moolenaar call delete('XtestCwindow') 2859e00fdf35SBram Moolenaar call delete('XCwindow') 2860e00fdf35SBram Moolenaarendfunc 2861e00fdf35SBram Moolenaar 2862ee85df37SBram Moolenaarfunc XvimgrepTests(cchar) 2863ee85df37SBram Moolenaar call s:setup_commands(a:cchar) 2864ee85df37SBram Moolenaar 2865ee85df37SBram Moolenaar call writefile(['Editor:VIM vim', 2866ee85df37SBram Moolenaar \ 'Editor:Emacs EmAcS', 2867ee85df37SBram Moolenaar \ 'Editor:Notepad NOTEPAD'], 'Xtestfile1') 2868ee85df37SBram Moolenaar call writefile(['Linux', 'MacOS', 'MS-Windows'], 'Xtestfile2') 2869ee85df37SBram Moolenaar 2870ee85df37SBram Moolenaar " Error cases 2871ee85df37SBram Moolenaar call assert_fails('Xvimgrep /abc *', 'E682:') 2872ee85df37SBram Moolenaar 2873ee85df37SBram Moolenaar let @/='' 2874ee85df37SBram Moolenaar call assert_fails('Xvimgrep // *', 'E35:') 2875ee85df37SBram Moolenaar 2876ee85df37SBram Moolenaar call assert_fails('Xvimgrep abc', 'E683:') 2877ee85df37SBram Moolenaar call assert_fails('Xvimgrep a1b2c3 Xtestfile1', 'E480:') 2878ee85df37SBram Moolenaar call assert_fails('Xvimgrep pat Xa1b2c3', 'E480:') 2879ee85df37SBram Moolenaar 2880ee85df37SBram Moolenaar Xexpr "" 2881ee85df37SBram Moolenaar Xvimgrepadd Notepad Xtestfile1 2882ee85df37SBram Moolenaar Xvimgrepadd MacOS Xtestfile2 2883ee85df37SBram Moolenaar let l = g:Xgetlist() 2884ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2885ee85df37SBram Moolenaar call assert_equal('Editor:Notepad NOTEPAD', l[0].text) 2886ee85df37SBram Moolenaar 2887f9ae154cSBram Moolenaar 10Xvimgrep #\cvim#g Xtestfile? 2888ee85df37SBram Moolenaar let l = g:Xgetlist() 2889ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2890ee85df37SBram Moolenaar call assert_equal(8, l[0].col) 28916864efa5Sthinca call assert_equal(11, l[0].end_col) 2892ee85df37SBram Moolenaar call assert_equal(12, l[1].col) 28936864efa5Sthinca call assert_equal(15, l[1].end_col) 2894ee85df37SBram Moolenaar 2895ee85df37SBram Moolenaar 1Xvimgrep ?Editor? Xtestfile* 2896ee85df37SBram Moolenaar let l = g:Xgetlist() 2897ee85df37SBram Moolenaar call assert_equal(1, len(l)) 2898ee85df37SBram Moolenaar call assert_equal('Editor:VIM vim', l[0].text) 2899ee85df37SBram Moolenaar 2900ee85df37SBram Moolenaar edit +3 Xtestfile2 2901ee85df37SBram Moolenaar Xvimgrep +\cemacs+j Xtestfile1 2902ee85df37SBram Moolenaar let l = g:Xgetlist() 2903bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 2904ee85df37SBram Moolenaar call assert_equal('Editor:Emacs EmAcS', l[0].text) 2905ee85df37SBram Moolenaar 29062225ebb4SBram Moolenaar " Test for unloading a buffer after vimgrep searched the buffer 29072225ebb4SBram Moolenaar %bwipe 29082225ebb4SBram Moolenaar Xvimgrep /Editor/j Xtestfile* 29092225ebb4SBram Moolenaar call assert_equal(0, getbufinfo('Xtestfile1')[0].loaded) 29102225ebb4SBram Moolenaar call assert_equal([], getbufinfo('Xtestfile2')) 29112225ebb4SBram Moolenaar 2912ee85df37SBram Moolenaar call delete('Xtestfile1') 2913ee85df37SBram Moolenaar call delete('Xtestfile2') 2914ee85df37SBram Moolenaarendfunc 2915ee85df37SBram Moolenaar 2916ee85df37SBram Moolenaar" Tests for the :vimgrep command 2917ee85df37SBram Moolenaarfunc Test_vimgrep() 2918ee85df37SBram Moolenaar call XvimgrepTests('c') 2919ee85df37SBram Moolenaar call XvimgrepTests('l') 2920ee85df37SBram Moolenaarendfunc 292169f40be6SBram Moolenaar 2922f8c6a171SBram Moolenaarfunc Test_vimgrep_wildcards_expanded_once() 2923f8c6a171SBram Moolenaar new X[id-01] file.txt 2924f8c6a171SBram Moolenaar call setline(1, 'some text to search for') 2925f8c6a171SBram Moolenaar vimgrep text % 2926f8c6a171SBram Moolenaar bwipe! 2927f8c6a171SBram Moolenaarendfunc 2928f8c6a171SBram Moolenaar 29291c299434SBram Moolenaar" Test for incsearch highlighting of the :vimgrep pattern 29301c299434SBram Moolenaar" This test used to cause "E315: ml_get: invalid lnum" errors. 29311c299434SBram Moolenaarfunc Test_vimgrep_incsearch() 29321c299434SBram Moolenaar enew 29331c299434SBram Moolenaar set incsearch 29341c299434SBram Moolenaar call test_override("char_avail", 1) 29351c299434SBram Moolenaar 29361c299434SBram Moolenaar call feedkeys(":2vimgrep assert test_quickfix.vim test_cdo.vim\<CR>", "ntx") 29371c299434SBram Moolenaar let l = getqflist() 29381c299434SBram Moolenaar call assert_equal(2, len(l)) 29391c299434SBram Moolenaar 29401c299434SBram Moolenaar call test_override("ALL", 0) 29411c299434SBram Moolenaar set noincsearch 29421c299434SBram Moolenaarendfunc 29431c299434SBram Moolenaar 29449f6277bdSBram Moolenaar" Test vimgrep with the last search pattern not set 29459f6277bdSBram Moolenaarfunc Test_vimgrep_with_no_last_search_pat() 29469f6277bdSBram Moolenaar let lines =<< trim [SCRIPT] 29479f6277bdSBram Moolenaar call assert_fails('vimgrep // *', 'E35:') 29489f6277bdSBram Moolenaar call writefile(v:errors, 'Xresult') 29499f6277bdSBram Moolenaar qall! 29509f6277bdSBram Moolenaar [SCRIPT] 29519f6277bdSBram Moolenaar call writefile(lines, 'Xscript') 29529f6277bdSBram Moolenaar if RunVim([], [], '--clean -S Xscript') 29539f6277bdSBram Moolenaar call assert_equal([], readfile('Xresult')) 29549f6277bdSBram Moolenaar endif 29559f6277bdSBram Moolenaar call delete('Xscript') 29569f6277bdSBram Moolenaar call delete('Xresult') 29579f6277bdSBram Moolenaarendfunc 29589f6277bdSBram Moolenaar 2959997cd1a1SBram Moolenaar" Test vimgrep without swap file 2960997cd1a1SBram Moolenaarfunc Test_vimgrep_without_swap_file() 2961997cd1a1SBram Moolenaar let lines =<< trim [SCRIPT] 2962997cd1a1SBram Moolenaar vimgrep grep test_c* 2963997cd1a1SBram Moolenaar call writefile(['done'], 'Xresult') 2964997cd1a1SBram Moolenaar qall! 2965997cd1a1SBram Moolenaar [SCRIPT] 2966997cd1a1SBram Moolenaar call writefile(lines, 'Xscript') 2967997cd1a1SBram Moolenaar if RunVim([], [], '--clean -n -S Xscript Xscript') 2968997cd1a1SBram Moolenaar call assert_equal(['done'], readfile('Xresult')) 2969997cd1a1SBram Moolenaar endif 2970997cd1a1SBram Moolenaar call delete('Xscript') 2971997cd1a1SBram Moolenaar call delete('Xresult') 2972997cd1a1SBram Moolenaarendfunc 2973997cd1a1SBram Moolenaar 29748ce4b7edSBram Moolenaarfunc Test_vimgrep_existing_swapfile() 29758ce4b7edSBram Moolenaar call writefile(['match apple with apple'], 'Xapple') 29768ce4b7edSBram Moolenaar call writefile(['swapfile'], '.Xapple.swp') 29778ce4b7edSBram Moolenaar let g:foundSwap = 0 29788ce4b7edSBram Moolenaar let g:ignoreSwapExists = 1 29798ce4b7edSBram Moolenaar augroup grep 29808ce4b7edSBram Moolenaar au SwapExists * let foundSwap = 1 | let v:swapchoice = 'e' 29818ce4b7edSBram Moolenaar augroup END 29828ce4b7edSBram Moolenaar vimgrep apple Xapple 29838ce4b7edSBram Moolenaar call assert_equal(1, g:foundSwap) 29848ce4b7edSBram Moolenaar call assert_match('.Xapple.swo', swapname('')) 29858ce4b7edSBram Moolenaar 29868ce4b7edSBram Moolenaar call delete('Xapple') 29876d91bcb4SBram Moolenaar call delete('.Xapple.swp') 29888ce4b7edSBram Moolenaar augroup grep 29898ce4b7edSBram Moolenaar au! SwapExists 29908ce4b7edSBram Moolenaar augroup END 29918ce4b7edSBram Moolenaar unlet g:ignoreSwapExists 29928ce4b7edSBram Moolenaarendfunc 29938ce4b7edSBram Moolenaar 299469f40be6SBram Moolenaarfunc XfreeTests(cchar) 299569f40be6SBram Moolenaar call s:setup_commands(a:cchar) 299669f40be6SBram Moolenaar 299769f40be6SBram Moolenaar enew | only 299869f40be6SBram Moolenaar 299969f40be6SBram Moolenaar " Deleting the quickfix stack should work even When the current list is 300069f40be6SBram Moolenaar " somewhere in the middle of the stack 300169f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 300269f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 300369f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 300469f40be6SBram Moolenaar Xolder 300569f40be6SBram Moolenaar call g:Xsetlist([], 'f') 300669f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 300769f40be6SBram Moolenaar 300869f40be6SBram Moolenaar " After deleting the stack, adding a new list should create a stack with a 300969f40be6SBram Moolenaar " single list. 301069f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 301169f40be6SBram Moolenaar call assert_equal(1, g:Xgetlist({'all':1}).nr) 301269f40be6SBram Moolenaar 301369f40be6SBram Moolenaar " Deleting the stack from a quickfix window should update/clear the 301469f40be6SBram Moolenaar " quickfix/location list window. 301569f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 301669f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 301769f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 301869f40be6SBram Moolenaar Xolder 301969f40be6SBram Moolenaar Xwindow 302069f40be6SBram Moolenaar call g:Xsetlist([], 'f') 302169f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 302269f40be6SBram Moolenaar call assert_equal(1, line('$')) 302369f40be6SBram Moolenaar Xclose 302469f40be6SBram Moolenaar 302569f40be6SBram Moolenaar " Deleting the stack from a non-quickfix window should update/clear the 302669f40be6SBram Moolenaar " quickfix/location list window. 302769f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 302869f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 302969f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 303069f40be6SBram Moolenaar Xolder 303169f40be6SBram Moolenaar Xwindow 303269f40be6SBram Moolenaar wincmd p 303369f40be6SBram Moolenaar call g:Xsetlist([], 'f') 303469f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 303569f40be6SBram Moolenaar wincmd p 303669f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 303769f40be6SBram Moolenaar call assert_equal(1, line('$')) 303869f40be6SBram Moolenaar 303969f40be6SBram Moolenaar " After deleting the location list stack, if the location list window is 304069f40be6SBram Moolenaar " opened, then a new location list should be created. So opening the 304169f40be6SBram Moolenaar " location list window again should not create a new window. 304269f40be6SBram Moolenaar if a:cchar == 'l' 304369f40be6SBram Moolenaar lexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 304469f40be6SBram Moolenaar wincmd p 304569f40be6SBram Moolenaar lopen 304669f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 304769f40be6SBram Moolenaar endif 304869f40be6SBram Moolenaar Xclose 304969f40be6SBram Moolenaarendfunc 305069f40be6SBram Moolenaar 305174240d3fSBram Moolenaar" Tests for the quickfix free functionality 305269f40be6SBram Moolenaarfunc Test_qf_free() 305369f40be6SBram Moolenaar call XfreeTests('c') 305469f40be6SBram Moolenaar call XfreeTests('l') 305569f40be6SBram Moolenaarendfunc 30566e62da3eSBram Moolenaar 30576e62da3eSBram Moolenaar" Test for buffer overflow when parsing lines and adding new entries to 30586e62da3eSBram Moolenaar" the quickfix list. 30596e62da3eSBram Moolenaarfunc Test_bufoverflow() 30606e62da3eSBram Moolenaar set efm=%f:%l:%m 30616e62da3eSBram Moolenaar cgetexpr ['File1:100:' . repeat('x', 1025)] 30626e62da3eSBram Moolenaar 30636e62da3eSBram Moolenaar set efm=%+GCompiler:\ %.%#,%f:%l:%m 30646e62da3eSBram Moolenaar cgetexpr ['Compiler: ' . repeat('a', 1015), 'File1:10:Hello World'] 30656e62da3eSBram Moolenaar 30666e62da3eSBram Moolenaar set efm=%DEntering\ directory\ %f,%f:%l:%m 30676e62da3eSBram Moolenaar cgetexpr ['Entering directory ' . repeat('a', 1006), 30686e62da3eSBram Moolenaar \ 'File1:10:Hello World'] 30696e62da3eSBram Moolenaar set efm&vim 30706e62da3eSBram Moolenaarendfunc 30716e62da3eSBram Moolenaar 3072875feea6SBram Moolenaar" Tests for getting the quickfix stack size 3073875feea6SBram Moolenaarfunc XsizeTests(cchar) 3074875feea6SBram Moolenaar call s:setup_commands(a:cchar) 3075875feea6SBram Moolenaar 3076875feea6SBram Moolenaar call g:Xsetlist([], 'f') 3077875feea6SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 3078a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':'$', 'all':1}).title) 3079a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':0}).nr) 3080875feea6SBram Moolenaar 3081875feea6SBram Moolenaar Xexpr "File1:10:Line1" 3082875feea6SBram Moolenaar Xexpr "File2:20:Line2" 3083875feea6SBram Moolenaar Xexpr "File3:30:Line3" 3084875feea6SBram Moolenaar Xolder | Xolder 3085875feea6SBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 3086875feea6SBram Moolenaar call g:Xsetlist([], 'f') 3087875feea6SBram Moolenaar 3088875feea6SBram Moolenaar Xexpr "File1:10:Line1" 3089875feea6SBram Moolenaar Xexpr "File2:20:Line2" 3090875feea6SBram Moolenaar Xexpr "File3:30:Line3" 3091875feea6SBram Moolenaar Xolder | Xolder 3092875feea6SBram Moolenaar call g:Xsetlist([], 'a', {'nr':'$', 'title':'Compiler'}) 3093875feea6SBram Moolenaar call assert_equal('Compiler', g:Xgetlist({'nr':3, 'all':1}).title) 3094875feea6SBram Moolenaarendfunc 3095875feea6SBram Moolenaar 3096875feea6SBram Moolenaarfunc Test_Qf_Size() 3097875feea6SBram Moolenaar call XsizeTests('c') 3098875feea6SBram Moolenaar call XsizeTests('l') 3099875feea6SBram Moolenaarendfunc 31001814183bSBram Moolenaar 31019c4fefffSBram Moolenaarfunc Test_cclose_from_copen() 31029c4fefffSBram Moolenaar augroup QF_Test 31039c4fefffSBram Moolenaar au! 3104e2e4075fSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788:') 31059c4fefffSBram Moolenaar augroup END 31069c4fefffSBram Moolenaar copen 31079c4fefffSBram Moolenaar augroup QF_Test 31089c4fefffSBram Moolenaar au! 31099c4fefffSBram Moolenaar augroup END 31109c4fefffSBram Moolenaar augroup! QF_Test 31119c4fefffSBram Moolenaarendfunc 31129c4fefffSBram Moolenaar 31131814183bSBram Moolenaarfunc Test_cclose_in_autocmd() 31141814183bSBram Moolenaar " Problem is only triggered if "starting" is zero, so that the OptionsSet 31151814183bSBram Moolenaar " event will be triggered. 31161814183bSBram Moolenaar call test_override('starting', 1) 31171814183bSBram Moolenaar augroup QF_Test 31181814183bSBram Moolenaar au! 3119e2e4075fSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788:') 31201814183bSBram Moolenaar augroup END 31211814183bSBram Moolenaar copen 31221814183bSBram Moolenaar augroup QF_Test 31231814183bSBram Moolenaar au! 31241814183bSBram Moolenaar augroup END 31251814183bSBram Moolenaar augroup! QF_Test 31261814183bSBram Moolenaar call test_override('starting', 0) 31271814183bSBram Moolenaarendfunc 31289c4fefffSBram Moolenaar 3129379fb76bSBram Moolenaar" Check that ":file" without an argument is possible even when "curbuf_lock" 3130379fb76bSBram Moolenaar" is set. 3131379fb76bSBram Moolenaarfunc Test_file_from_copen() 3132379fb76bSBram Moolenaar " Works without argument. 3133379fb76bSBram Moolenaar augroup QF_Test 3134379fb76bSBram Moolenaar au! 3135379fb76bSBram Moolenaar au FileType qf file 3136379fb76bSBram Moolenaar augroup END 3137379fb76bSBram Moolenaar copen 3138379fb76bSBram Moolenaar 3139379fb76bSBram Moolenaar augroup QF_Test 3140379fb76bSBram Moolenaar au! 3141379fb76bSBram Moolenaar augroup END 3142379fb76bSBram Moolenaar cclose 3143379fb76bSBram Moolenaar 3144379fb76bSBram Moolenaar " Fails with argument. 3145379fb76bSBram Moolenaar augroup QF_Test 3146379fb76bSBram Moolenaar au! 3147e2e4075fSBram Moolenaar au FileType qf call assert_fails(':file foo', 'E788:') 3148379fb76bSBram Moolenaar augroup END 3149379fb76bSBram Moolenaar copen 3150379fb76bSBram Moolenaar augroup QF_Test 3151379fb76bSBram Moolenaar au! 3152379fb76bSBram Moolenaar augroup END 3153379fb76bSBram Moolenaar cclose 3154379fb76bSBram Moolenaar 3155379fb76bSBram Moolenaar augroup! QF_Test 31566a0cc916SBram Moolenaarendfunc 3157379fb76bSBram Moolenaar 31589c4fefffSBram Moolenaarfunc Test_resize_from_copen() 31599c4fefffSBram Moolenaar augroup QF_Test 31609c4fefffSBram Moolenaar au! 31619c4fefffSBram Moolenaar au FileType qf resize 5 31629c4fefffSBram Moolenaar augroup END 31639c4fefffSBram Moolenaar try 31649c4fefffSBram Moolenaar " This should succeed without any exception. No other buffers are 31659c4fefffSBram Moolenaar " involved in the autocmd. 31669c4fefffSBram Moolenaar copen 31679c4fefffSBram Moolenaar finally 31689c4fefffSBram Moolenaar augroup QF_Test 31699c4fefffSBram Moolenaar au! 31709c4fefffSBram Moolenaar augroup END 31719c4fefffSBram Moolenaar augroup! QF_Test 31729c4fefffSBram Moolenaar endtry 31739c4fefffSBram Moolenaarendfunc 3174a8788f4dSBram Moolenaar 317533aecb1fSBram Moolenaarfunc Test_vimgrep_with_textlock() 317633aecb1fSBram Moolenaar new 317733aecb1fSBram Moolenaar 317833aecb1fSBram Moolenaar " Simple way to execute something with "textwinlock" set. 317933aecb1fSBram Moolenaar " Check that vimgrep without jumping can be executed. 318033aecb1fSBram Moolenaar au InsertCharPre * vimgrep /RunTheTest/j runtest.vim 318133aecb1fSBram Moolenaar normal ax 318233aecb1fSBram Moolenaar let qflist = getqflist() 318333aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 318433aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 318533aecb1fSBram Moolenaar call setqflist([], 'r') 318633aecb1fSBram Moolenaar au! InsertCharPre 318733aecb1fSBram Moolenaar 318833aecb1fSBram Moolenaar " Check that vimgrepadd without jumping can be executed. 318933aecb1fSBram Moolenaar au InsertCharPre * vimgrepadd /RunTheTest/j runtest.vim 319033aecb1fSBram Moolenaar normal ax 319133aecb1fSBram Moolenaar let qflist = getqflist() 319233aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 319333aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 319433aecb1fSBram Moolenaar call setqflist([], 'r') 319533aecb1fSBram Moolenaar au! InsertCharPre 319633aecb1fSBram Moolenaar 319733aecb1fSBram Moolenaar " Check that lvimgrep without jumping can be executed. 319833aecb1fSBram Moolenaar au InsertCharPre * lvimgrep /RunTheTest/j runtest.vim 319933aecb1fSBram Moolenaar normal ax 320033aecb1fSBram Moolenaar let qflist = getloclist(0) 320133aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 320233aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 320333aecb1fSBram Moolenaar call setloclist(0, [], 'r') 320433aecb1fSBram Moolenaar au! InsertCharPre 320533aecb1fSBram Moolenaar 320633aecb1fSBram Moolenaar " Check that lvimgrepadd without jumping can be executed. 320733aecb1fSBram Moolenaar au InsertCharPre * lvimgrepadd /RunTheTest/j runtest.vim 320833aecb1fSBram Moolenaar normal ax 320933aecb1fSBram Moolenaar let qflist = getloclist(0) 321033aecb1fSBram Moolenaar call assert_true(len(qflist) > 0) 321133aecb1fSBram Moolenaar call assert_match('RunTheTest', qflist[0].text) 321233aecb1fSBram Moolenaar call setloclist(0, [], 'r') 321333aecb1fSBram Moolenaar au! InsertCharPre 321433aecb1fSBram Moolenaar 321533aecb1fSBram Moolenaar " trying to jump will give an error 321633aecb1fSBram Moolenaar au InsertCharPre * vimgrep /RunTheTest/ runtest.vim 321733aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 321833aecb1fSBram Moolenaar au! InsertCharPre 321933aecb1fSBram Moolenaar 322033aecb1fSBram Moolenaar au InsertCharPre * vimgrepadd /RunTheTest/ runtest.vim 322133aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 322233aecb1fSBram Moolenaar au! InsertCharPre 322333aecb1fSBram Moolenaar 322433aecb1fSBram Moolenaar au InsertCharPre * lvimgrep /RunTheTest/ runtest.vim 322533aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 322633aecb1fSBram Moolenaar au! InsertCharPre 322733aecb1fSBram Moolenaar 322833aecb1fSBram Moolenaar au InsertCharPre * lvimgrepadd /RunTheTest/ runtest.vim 322933aecb1fSBram Moolenaar call assert_fails('normal ax', 'E565:') 323033aecb1fSBram Moolenaar au! InsertCharPre 323133aecb1fSBram Moolenaar 323233aecb1fSBram Moolenaar bwipe! 323333aecb1fSBram Moolenaarendfunc 323433aecb1fSBram Moolenaar 3235a8788f4dSBram Moolenaar" Tests for the quickfix buffer b:changedtick variable 3236a8788f4dSBram Moolenaarfunc Xchangedtick_tests(cchar) 3237a8788f4dSBram Moolenaar call s:setup_commands(a:cchar) 3238a8788f4dSBram Moolenaar 3239a8788f4dSBram Moolenaar new | only 3240a8788f4dSBram Moolenaar 3241a8788f4dSBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 3242a8788f4dSBram Moolenaar 3243a8788f4dSBram Moolenaar Xopen 3244a8788f4dSBram Moolenaar Xolder 3245a8788f4dSBram Moolenaar Xolder 3246a8788f4dSBram Moolenaar Xaddexpr "F1:10:Line10" 3247a8788f4dSBram Moolenaar Xaddexpr "F2:20:Line20" 3248a8788f4dSBram Moolenaar call g:Xsetlist([{"filename":"F3", "lnum":30, "text":"Line30"}], 'a') 3249a8788f4dSBram Moolenaar call g:Xsetlist([], 'f') 3250a8788f4dSBram Moolenaar call assert_equal(8, getbufvar('%', 'changedtick')) 3251a8788f4dSBram Moolenaar Xclose 3252a8788f4dSBram Moolenaarendfunc 3253a8788f4dSBram Moolenaar 3254a8788f4dSBram Moolenaarfunc Test_changedtick() 3255a8788f4dSBram Moolenaar call Xchangedtick_tests('c') 3256a8788f4dSBram Moolenaar call Xchangedtick_tests('l') 3257a8788f4dSBram Moolenaarendfunc 3258d28cc3f5SBram Moolenaar 3259ae338338SBram Moolenaar" Tests for parsing an expression using setqflist() 3260ae338338SBram Moolenaarfunc Xsetexpr_tests(cchar) 3261ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3262ae338338SBram Moolenaar 3263ae338338SBram Moolenaar let t = ["File1:10:Line10", "File1:20:Line20"] 32642c809b7cSBram Moolenaar call g:Xsetlist([], ' ', {'lines' : t}) 32652c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]}) 3266ae338338SBram Moolenaar 3267ae338338SBram Moolenaar let l = g:Xgetlist() 3268ae338338SBram Moolenaar call assert_equal(3, len(l)) 3269ae338338SBram Moolenaar call assert_equal(20, l[1].lnum) 3270ae338338SBram Moolenaar call assert_equal('Line30', l[2].text) 32712c809b7cSBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]}) 3272ae338338SBram Moolenaar let l = g:Xgetlist() 3273ae338338SBram Moolenaar call assert_equal(1, len(l)) 3274ae338338SBram Moolenaar call assert_equal('Line5', l[0].text) 32752c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10})) 32762c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"})) 3277ae338338SBram Moolenaar 3278ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3279ae338338SBram Moolenaar " Add entries to multiple lists 32802c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]}) 32812c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]}) 32822c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]}) 32832c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]}) 3284ae338338SBram Moolenaar call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text) 3285ae338338SBram Moolenaar call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text) 328636538225SBram Moolenaar 328736538225SBram Moolenaar " Adding entries using a custom efm 328836538225SBram Moolenaar set efm& 328936538225SBram Moolenaar call g:Xsetlist([], ' ', {'efm' : '%f#%l#%m', 329036538225SBram Moolenaar \ 'lines' : ["F1#10#L10", "F2#20#L20"]}) 329136538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 329236538225SBram Moolenaar call g:Xsetlist([], 'a', {'efm' : '%f#%l#%m', 'lines' : ["F3:30:L30"]}) 329336538225SBram Moolenaar call assert_equal('F3:30:L30', g:Xgetlist({'items':1}).items[2].text) 329436538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 329536538225SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'efm' : [], 329636538225SBram Moolenaar \ 'lines' : ['F1:10:L10']})) 3297ae338338SBram Moolenaarendfunc 3298ae338338SBram Moolenaar 3299ae338338SBram Moolenaarfunc Test_setexpr() 3300ae338338SBram Moolenaar call Xsetexpr_tests('c') 3301ae338338SBram Moolenaar call Xsetexpr_tests('l') 3302ae338338SBram Moolenaarendfunc 3303ae338338SBram Moolenaar 3304ae338338SBram Moolenaar" Tests for per quickfix/location list directory stack 3305ae338338SBram Moolenaarfunc Xmultidirstack_tests(cchar) 3306ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3307ae338338SBram Moolenaar 3308ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3309ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3310ae338338SBram Moolenaar 33112c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]}) 33122c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]}) 33132c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]}) 33142c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]}) 3315ae338338SBram Moolenaar 3316ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3317ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3318ae338338SBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(l1.items[1].bufnr)) 3319ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3320ae338338SBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(l2.items[1].bufnr)) 3321ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3322ae338338SBram Moolenaarendfunc 3323ae338338SBram Moolenaar 3324ae338338SBram Moolenaarfunc Test_multidirstack() 3325ae338338SBram Moolenaar call mkdir('Xone/a', 'p') 3326ae338338SBram Moolenaar call mkdir('Xtwo/a', 'p') 3327ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3328ae338338SBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 3329ae338338SBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 3330ae338338SBram Moolenaar let save_efm = &efm 3331ae338338SBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 3332ae338338SBram Moolenaar 3333ae338338SBram Moolenaar call Xmultidirstack_tests('c') 3334ae338338SBram Moolenaar call Xmultidirstack_tests('l') 3335ae338338SBram Moolenaar 3336ae338338SBram Moolenaar let &efm = save_efm 3337ae338338SBram Moolenaar call delete('Xone', 'rf') 3338ae338338SBram Moolenaar call delete('Xtwo', 'rf') 3339ae338338SBram Moolenaarendfunc 3340ae338338SBram Moolenaar 3341ae338338SBram Moolenaar" Tests for per quickfix/location list file stack 3342ae338338SBram Moolenaarfunc Xmultifilestack_tests(cchar) 3343ae338338SBram Moolenaar call s:setup_commands(a:cchar) 3344ae338338SBram Moolenaar 3345ae338338SBram Moolenaar call g:Xsetlist([], 'f') 3346ae338338SBram Moolenaar Xexpr "" | Xexpr "" 3347ae338338SBram Moolenaar 33482c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]}) 33492c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]}) 33502c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]}) 33512c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]}) 3352ae338338SBram Moolenaar 3353ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 3354ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 3355ae338338SBram Moolenaar call assert_equal('one.txt', bufname(l1.items[1].bufnr)) 3356ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 3357ae338338SBram Moolenaar call assert_equal('two.txt', bufname(l2.items[1].bufnr)) 3358ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 3359e333e79fSBram Moolenaar 3360e333e79fSBram Moolenaar " Test for start of a new error line in the same line where a previous 3361e333e79fSBram Moolenaar " error line ends with a file stack. 3362e333e79fSBram Moolenaar let efm_val = 'Error\ l%l\ in\ %f,' 3363e333e79fSBram Moolenaar let efm_val .= '%-P%>(%f%r,Error\ l%l\ in\ %m,%-Q)%r' 3364e333e79fSBram Moolenaar let l = g:Xgetlist({'lines' : [ 3365e333e79fSBram Moolenaar \ '(one.txt', 3366e333e79fSBram Moolenaar \ 'Error l4 in one.txt', 3367e333e79fSBram Moolenaar \ ') (two.txt', 3368e333e79fSBram Moolenaar \ 'Error l6 in two.txt', 3369e333e79fSBram Moolenaar \ ')', 3370e333e79fSBram Moolenaar \ 'Error l8 in one.txt' 3371e333e79fSBram Moolenaar \ ], 'efm' : efm_val}) 3372e333e79fSBram Moolenaar call assert_equal(3, len(l.items)) 3373e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[0].bufnr)) 3374e333e79fSBram Moolenaar call assert_equal(4, l.items[0].lnum) 3375e333e79fSBram Moolenaar call assert_equal('one.txt', l.items[0].text) 3376e333e79fSBram Moolenaar call assert_equal('two.txt', bufname(l.items[1].bufnr)) 3377e333e79fSBram Moolenaar call assert_equal(6, l.items[1].lnum) 3378e333e79fSBram Moolenaar call assert_equal('two.txt', l.items[1].text) 3379e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[2].bufnr)) 3380e333e79fSBram Moolenaar call assert_equal(8, l.items[2].lnum) 3381e333e79fSBram Moolenaar call assert_equal('', l.items[2].text) 3382ae338338SBram Moolenaarendfunc 3383ae338338SBram Moolenaar 3384ae338338SBram Moolenaarfunc Test_multifilestack() 3385ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 3386ae338338SBram Moolenaar call writefile(lines, 'one.txt') 3387ae338338SBram Moolenaar call writefile(lines, 'two.txt') 3388ae338338SBram Moolenaar let save_efm = &efm 3389ae338338SBram Moolenaar set efm=%+P[%f],(%l\\,%c)\ %m,%-Q 3390ae338338SBram Moolenaar 3391ae338338SBram Moolenaar call Xmultifilestack_tests('c') 3392ae338338SBram Moolenaar call Xmultifilestack_tests('l') 3393ae338338SBram Moolenaar 3394ae338338SBram Moolenaar let &efm = save_efm 3395ae338338SBram Moolenaar call delete('one.txt') 3396ae338338SBram Moolenaar call delete('two.txt') 3397ae338338SBram Moolenaarendfunc 3398ae338338SBram Moolenaar 3399ae338338SBram Moolenaar" Tests for per buffer 'efm' setting 3400ae338338SBram Moolenaarfunc Test_perbuf_efm() 3401ae338338SBram Moolenaar call writefile(["File1-10-Line10"], 'one.txt') 3402ae338338SBram Moolenaar call writefile(["File2#20#Line20"], 'two.txt') 3403ae338338SBram Moolenaar set efm=%f#%l#%m 3404ae338338SBram Moolenaar new | only 3405ae338338SBram Moolenaar new 3406ae338338SBram Moolenaar setlocal efm=%f-%l-%m 3407ae338338SBram Moolenaar cfile one.txt 3408ae338338SBram Moolenaar wincmd w 3409ae338338SBram Moolenaar caddfile two.txt 3410ae338338SBram Moolenaar 3411ae338338SBram Moolenaar let l = getqflist() 3412ae338338SBram Moolenaar call assert_equal(10, l[0].lnum) 3413ae338338SBram Moolenaar call assert_equal('Line20', l[1].text) 3414ae338338SBram Moolenaar 3415ae338338SBram Moolenaar set efm& 3416ae338338SBram Moolenaar new | only 3417ae338338SBram Moolenaar call delete('one.txt') 3418ae338338SBram Moolenaar call delete('two.txt') 3419ae338338SBram Moolenaarendfunc 3420ae338338SBram Moolenaar 3421d28cc3f5SBram Moolenaar" Open multiple help windows using ":lhelpgrep 3422d28cc3f5SBram Moolenaar" This test used to crash Vim 3423d28cc3f5SBram Moolenaarfunc Test_Multi_LL_Help() 3424d28cc3f5SBram Moolenaar new | only 3425d28cc3f5SBram Moolenaar lhelpgrep window 3426d28cc3f5SBram Moolenaar lopen 3427d28cc3f5SBram Moolenaar e# 3428d28cc3f5SBram Moolenaar lhelpgrep buffer 3429d28cc3f5SBram Moolenaar call assert_equal(3, winnr('$')) 3430d28cc3f5SBram Moolenaar call assert_true(len(getloclist(1)) != 0) 3431d28cc3f5SBram Moolenaar call assert_true(len(getloclist(2)) != 0) 3432d28cc3f5SBram Moolenaar new | only 3433d28cc3f5SBram Moolenaarendfunc 343455b69264SBram Moolenaar 343555b69264SBram Moolenaar" Tests for adding new quickfix lists using setqflist() 343655b69264SBram Moolenaarfunc XaddQf_tests(cchar) 343755b69264SBram Moolenaar call s:setup_commands(a:cchar) 343855b69264SBram Moolenaar 343955b69264SBram Moolenaar " Create a new list using ' ' for action 344055b69264SBram Moolenaar call g:Xsetlist([], 'f') 344155b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test1'}) 344255b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 344355b69264SBram Moolenaar call assert_equal(1, l.nr) 344455b69264SBram Moolenaar call assert_equal('Test1', l.title) 344555b69264SBram Moolenaar 344655b69264SBram Moolenaar " Create a new list using ' ' for action and '$' for 'nr' 344755b69264SBram Moolenaar call g:Xsetlist([], 'f') 344855b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test2', 'nr' : '$'}) 344955b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 345055b69264SBram Moolenaar call assert_equal(1, l.nr) 345155b69264SBram Moolenaar call assert_equal('Test2', l.title) 345255b69264SBram Moolenaar 345355b69264SBram Moolenaar " Create a new list using 'a' for action 345455b69264SBram Moolenaar call g:Xsetlist([], 'f') 345555b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3'}) 345655b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 345755b69264SBram Moolenaar call assert_equal(1, l.nr) 345855b69264SBram Moolenaar call assert_equal('Test3', l.title) 345955b69264SBram Moolenaar 346055b69264SBram Moolenaar " Create a new list using 'a' for action and '$' for 'nr' 346155b69264SBram Moolenaar call g:Xsetlist([], 'f') 346255b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3', 'nr' : '$'}) 346355b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test4'}) 346455b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 346555b69264SBram Moolenaar call assert_equal(1, l.nr) 346655b69264SBram Moolenaar call assert_equal('Test4', l.title) 346755b69264SBram Moolenaar 346855b69264SBram Moolenaar " Adding a quickfix list should remove all the lists following the current 346955b69264SBram Moolenaar " list. 347055b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 347155b69264SBram Moolenaar silent! 10Xolder 347255b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test5'}) 347355b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 347455b69264SBram Moolenaar call assert_equal(2, l.nr) 347555b69264SBram Moolenaar call assert_equal('Test5', l.title) 347655b69264SBram Moolenaar 347755b69264SBram Moolenaar " Add a quickfix list using '$' as the list number. 347855b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 347955b69264SBram Moolenaar silent! 99Xolder 348055b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test6'}) 348155b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 348255b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 348355b69264SBram Moolenaar call assert_equal('Test6', l.title) 348455b69264SBram Moolenaar 348555b69264SBram Moolenaar " Add a quickfix list using 'nr' set to one more than the quickfix 348655b69264SBram Moolenaar " list size. 348755b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 348855b69264SBram Moolenaar silent! 99Xolder 348955b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : lastqf + 1, 'title' : 'Test7'}) 349055b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 349155b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 349255b69264SBram Moolenaar call assert_equal('Test7', l.title) 349355b69264SBram Moolenaar 349455b69264SBram Moolenaar " Add a quickfix list to a stack with 10 lists using 'nr' set to '$' 349555b69264SBram Moolenaar exe repeat('Xexpr "" |', 9) . 'Xexpr ""' 349655b69264SBram Moolenaar silent! 99Xolder 349755b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test8'}) 349855b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 349955b69264SBram Moolenaar call assert_equal(10, l.nr) 350055b69264SBram Moolenaar call assert_equal('Test8', l.title) 350155b69264SBram Moolenaar 350255b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a value greater than 10 350355b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 12, 'title' : 'Test9'})) 350455b69264SBram Moolenaar 350555b69264SBram Moolenaar " Try adding a quickfix list with 'nr' set to a value greater than the 350655b69264SBram Moolenaar " quickfix list size but less than 10. 350755b69264SBram Moolenaar call g:Xsetlist([], 'f') 350855b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 350955b69264SBram Moolenaar silent! 99Xolder 351055b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 8, 'title' : 'Test10'})) 351155b69264SBram Moolenaar 351255b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a some string or list 351355b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : [1,2], 'title' : 'Test11'})) 351455b69264SBram Moolenaarendfunc 351555b69264SBram Moolenaar 351655b69264SBram Moolenaarfunc Test_add_qf() 351755b69264SBram Moolenaar call XaddQf_tests('c') 351855b69264SBram Moolenaar call XaddQf_tests('l') 351955b69264SBram Moolenaarendfunc 35207adf06f4SBram Moolenaar 35217adf06f4SBram Moolenaar" Test for getting the quickfix list items from some text without modifying 35227adf06f4SBram Moolenaar" the quickfix stack 35232c809b7cSBram Moolenaarfunc XgetListFromLines(cchar) 35247adf06f4SBram Moolenaar call s:setup_commands(a:cchar) 35257adf06f4SBram Moolenaar call g:Xsetlist([], 'f') 35267adf06f4SBram Moolenaar 35272c809b7cSBram Moolenaar let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items 35287adf06f4SBram Moolenaar call assert_equal(2, len(l)) 35297adf06f4SBram Moolenaar call assert_equal(30, l[1].lnum) 35307adf06f4SBram Moolenaar 35312c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 10})) 35322c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'})) 35332c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : []}).items) 35342c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items) 35357adf06f4SBram Moolenaar 353636538225SBram Moolenaar " Parse text using a custom efm 353736538225SBram Moolenaar set efm& 353836538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3#30#Line30'], 'efm' : '%f#%l#%m'}).items 353936538225SBram Moolenaar call assert_equal('Line30', l[0].text) 354036538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : '%f-%l-%m'}).items 354136538225SBram Moolenaar call assert_equal('File3:30:Line30', l[0].text) 354236538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : [1,2]}) 354336538225SBram Moolenaar call assert_equal({}, l) 354436538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':'%2'})", 'E376:') 354536538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':''})", 'E378:') 354636538225SBram Moolenaar 35477adf06f4SBram Moolenaar " Make sure that the quickfix stack is not modified 35487adf06f4SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 35497adf06f4SBram Moolenaarendfunc 35507adf06f4SBram Moolenaar 35512c809b7cSBram Moolenaarfunc Test_get_list_from_lines() 35522c809b7cSBram Moolenaar call XgetListFromLines('c') 35532c809b7cSBram Moolenaar call XgetListFromLines('l') 35547adf06f4SBram Moolenaarendfunc 3555a539f4f1SBram Moolenaar 3556a539f4f1SBram Moolenaar" Tests for the quickfix list id 3557a539f4f1SBram Moolenaarfunc Xqfid_tests(cchar) 3558a539f4f1SBram Moolenaar call s:setup_commands(a:cchar) 3559a539f4f1SBram Moolenaar 3560a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3561a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0}).id) 3562a539f4f1SBram Moolenaar Xexpr '' 3563a539f4f1SBram Moolenaar let start_id = g:Xgetlist({'id' : 0}).id 3564a539f4f1SBram Moolenaar Xexpr '' | Xexpr '' 3565a539f4f1SBram Moolenaar Xolder 3566a539f4f1SBram Moolenaar call assert_equal(start_id, g:Xgetlist({'id':0, 'nr':1}).id) 3567a539f4f1SBram Moolenaar call assert_equal(start_id + 1, g:Xgetlist({'id':0, 'nr':0}).id) 3568a539f4f1SBram Moolenaar call assert_equal(start_id + 2, g:Xgetlist({'id':0, 'nr':'$'}).id) 3569a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0, 'nr':99}).id) 3570a539f4f1SBram Moolenaar call assert_equal(2, g:Xgetlist({'id':start_id + 1, 'nr':0}).nr) 3571a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':99, 'nr':0}).id) 3572a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':"abc", 'nr':0}).id) 3573a539f4f1SBram Moolenaar 3574a539f4f1SBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]}) 3575a539f4f1SBram Moolenaar call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context) 35762c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']}) 3577a539f4f1SBram Moolenaar call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text) 3578a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'})) 3579a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'})) 3580a539f4f1SBram Moolenaar 3581a539f4f1SBram Moolenaar let qfid = g:Xgetlist({'id':0, 'nr':0}) 3582a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 3583a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':qfid, 'nr':0}).id) 3584a539f4f1SBram Moolenaarendfunc 3585a539f4f1SBram Moolenaar 3586a539f4f1SBram Moolenaarfunc Test_qf_id() 3587a539f4f1SBram Moolenaar call Xqfid_tests('c') 3588a539f4f1SBram Moolenaar call Xqfid_tests('l') 3589a539f4f1SBram Moolenaarendfunc 359074240d3fSBram Moolenaar 359174240d3fSBram Moolenaarfunc Xqfjump_tests(cchar) 359274240d3fSBram Moolenaar call s:setup_commands(a:cchar) 359374240d3fSBram Moolenaar 359474240d3fSBram Moolenaar call writefile(["Line1\tFoo", "Line2"], 'F1') 359574240d3fSBram Moolenaar call writefile(["Line1\tBar", "Line2"], 'F2') 359674240d3fSBram Moolenaar call writefile(["Line1\tBaz", "Line2"], 'F3') 359774240d3fSBram Moolenaar 359874240d3fSBram Moolenaar call g:Xsetlist([], 'f') 359974240d3fSBram Moolenaar 360074240d3fSBram Moolenaar " Tests for 360174240d3fSBram Moolenaar " Jumping to a line using a pattern 360274240d3fSBram Moolenaar " Jumping to a column greater than the last column in a line 360374240d3fSBram Moolenaar " Jumping to a line greater than the last line in the file 360474240d3fSBram Moolenaar let l = [] 360574240d3fSBram Moolenaar for i in range(1, 7) 360674240d3fSBram Moolenaar call add(l, {}) 360774240d3fSBram Moolenaar endfor 360874240d3fSBram Moolenaar let l[0].filename='F1' 360974240d3fSBram Moolenaar let l[0].pattern='Line1' 361074240d3fSBram Moolenaar let l[1].filename='F2' 361174240d3fSBram Moolenaar let l[1].pattern='Line1' 361274240d3fSBram Moolenaar let l[2].filename='F3' 361374240d3fSBram Moolenaar let l[2].pattern='Line1' 361474240d3fSBram Moolenaar let l[3].filename='F3' 361574240d3fSBram Moolenaar let l[3].lnum=1 361674240d3fSBram Moolenaar let l[3].col=9 361774240d3fSBram Moolenaar let l[3].vcol=1 361874240d3fSBram Moolenaar let l[4].filename='F3' 361974240d3fSBram Moolenaar let l[4].lnum=99 362074240d3fSBram Moolenaar let l[5].filename='F3' 362174240d3fSBram Moolenaar let l[5].lnum=1 362274240d3fSBram Moolenaar let l[5].col=99 362374240d3fSBram Moolenaar let l[5].vcol=1 362474240d3fSBram Moolenaar let l[6].filename='F3' 362574240d3fSBram Moolenaar let l[6].pattern='abcxyz' 362674240d3fSBram Moolenaar 362774240d3fSBram Moolenaar call g:Xsetlist([], ' ', {'items' : l}) 362874240d3fSBram Moolenaar Xopen | only 362974240d3fSBram Moolenaar 2Xnext 363074240d3fSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 3631bdd2c290SBram Moolenaar call assert_equal('F3', @%) 363274240d3fSBram Moolenaar Xnext 363374240d3fSBram Moolenaar call assert_equal(7, col('.')) 363474240d3fSBram Moolenaar Xnext 363574240d3fSBram Moolenaar call assert_equal(2, line('.')) 363674240d3fSBram Moolenaar Xnext 363774240d3fSBram Moolenaar call assert_equal(9, col('.')) 363874240d3fSBram Moolenaar 2 363974240d3fSBram Moolenaar Xnext 364074240d3fSBram Moolenaar call assert_equal(2, line('.')) 364174240d3fSBram Moolenaar 364274240d3fSBram Moolenaar if a:cchar == 'l' 364374240d3fSBram Moolenaar " When jumping to a location list entry in the location list window and 364474240d3fSBram Moolenaar " no usable windows are available, then a new window should be opened. 364574240d3fSBram Moolenaar enew! | new | only 364674240d3fSBram Moolenaar call g:Xsetlist([], 'f') 364774240d3fSBram Moolenaar setlocal buftype=nofile 364874240d3fSBram Moolenaar new 364974240d3fSBram 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']}) 365074240d3fSBram Moolenaar Xopen 365174240d3fSBram Moolenaar let winid = win_getid() 365274240d3fSBram Moolenaar wincmd p 365374240d3fSBram Moolenaar close 365474240d3fSBram Moolenaar call win_gotoid(winid) 365574240d3fSBram Moolenaar Xnext 365674240d3fSBram Moolenaar call assert_equal(3, winnr('$')) 365774240d3fSBram Moolenaar call assert_equal(1, winnr()) 365874240d3fSBram Moolenaar call assert_equal(2, line('.')) 365974240d3fSBram Moolenaar 366074240d3fSBram Moolenaar " When jumping to an entry in the location list window and the window 366174240d3fSBram Moolenaar " associated with the location list is not present and a window containing 366274240d3fSBram Moolenaar " the file is already present, then that window should be used. 366374240d3fSBram Moolenaar close 366474240d3fSBram Moolenaar belowright new 366574240d3fSBram Moolenaar call g:Xsetlist([], 'f') 366674240d3fSBram Moolenaar edit F3 366774240d3fSBram Moolenaar call win_gotoid(winid) 366874240d3fSBram Moolenaar Xlast 366974240d3fSBram Moolenaar call assert_equal(3, winnr()) 367074240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'size' : 1}).size) 367174240d3fSBram Moolenaar call assert_equal(winid, g:Xgetlist({'winid' : 1}).winid) 367274240d3fSBram Moolenaar endif 367374240d3fSBram Moolenaar 367474240d3fSBram Moolenaar " Cleanup 367574240d3fSBram Moolenaar enew! 367674240d3fSBram Moolenaar new | only 367774240d3fSBram Moolenaar 367874240d3fSBram Moolenaar call delete('F1') 367974240d3fSBram Moolenaar call delete('F2') 368074240d3fSBram Moolenaar call delete('F3') 368174240d3fSBram Moolenaarendfunc 368274240d3fSBram Moolenaar 368374240d3fSBram Moolenaarfunc Test_qfjump() 368474240d3fSBram Moolenaar call Xqfjump_tests('c') 368574240d3fSBram Moolenaar call Xqfjump_tests('l') 368674240d3fSBram Moolenaarendfunc 3687a6d4849cSBram Moolenaar 3688a6d4849cSBram Moolenaar" Tests for the getqflist() and getloclist() functions when the list is not 3689a6d4849cSBram Moolenaar" present or is empty 3690a6d4849cSBram Moolenaarfunc Xgetlist_empty_tests(cchar) 3691a6d4849cSBram Moolenaar call s:setup_commands(a:cchar) 3692a6d4849cSBram Moolenaar 3693a6d4849cSBram Moolenaar " Empty quickfix stack 3694a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3695a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3696a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : 0}).id) 3697a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3698a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3699a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 0}).nr) 3700a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3701a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'title' : 0}).title) 3702a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3703b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) 3704c9cc9c78SBram Moolenaar if a:cchar == 'c' 3705c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3706647e24baSBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'qfbufnr' : 0, 3707d43906d2SBram Moolenaar \ 'title' : '', 'winid' : 0, 'changedtick': 0, 3708d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'all' : 0})) 3709c9cc9c78SBram Moolenaar else 3710c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 3711c9cc9c78SBram Moolenaar \ 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 3712647e24baSBram Moolenaar \ 'winid' : 0, 'changedtick': 0, 'filewinid' : 0, 3713d43906d2SBram Moolenaar \ 'qfbufnr' : 0, 'quickfixtextfunc' : ''}, 3714c9cc9c78SBram Moolenaar \ g:Xgetlist({'all' : 0})) 3715c9cc9c78SBram Moolenaar endif 3716a6d4849cSBram Moolenaar 37172ec364e9SBram Moolenaar " Quickfix window with empty stack 37182ec364e9SBram Moolenaar silent! Xopen 37192ec364e9SBram Moolenaar let qfwinid = (a:cchar == 'c') ? win_getid() : 0 3720647e24baSBram Moolenaar let qfbufnr = (a:cchar == 'c') ? bufnr('') : 0 37212ec364e9SBram Moolenaar call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) 37222ec364e9SBram Moolenaar Xclose 37232ec364e9SBram Moolenaar 3724a6d4849cSBram Moolenaar " Empty quickfix list 3725a6d4849cSBram Moolenaar Xexpr "" 3726a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 3727a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'id' : 0}).id) 3728a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 3729a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 3730a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : 0}).nr) 3731a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 3732a6d4849cSBram Moolenaar call assert_notequal('', g:Xgetlist({'title' : 0}).title) 3733a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 3734b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3735a6d4849cSBram Moolenaar 3736a6d4849cSBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3737a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 3738a6d4849cSBram Moolenaar 3739a6d4849cSBram Moolenaar " Non-existing quickfix identifier 3740a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'context' : 0}).context) 3741a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid}).id) 3742a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'idx' : 0}).idx) 3743a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'id' : qfid, 'items' : 0}).items) 3744a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'nr' : 0}).nr) 3745a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'size' : 0}).size) 3746a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title) 3747a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid) 3748b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick) 3749c9cc9c78SBram Moolenaar if a:cchar == 'c' 3750c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3751c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3752d43906d2SBram Moolenaar \ 'qfbufnr' : qfbufnr, 'quickfixtextfunc' : '', 3753c9cc9c78SBram Moolenaar \ 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) 3754c9cc9c78SBram Moolenaar else 3755c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3756c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3757d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3758d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, 3759c9cc9c78SBram Moolenaar \ g:Xgetlist({'id' : qfid, 'all' : 0})) 3760c9cc9c78SBram Moolenaar endif 3761a6d4849cSBram Moolenaar 3762a6d4849cSBram Moolenaar " Non-existing quickfix list number 3763a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context) 3764a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5}).nr) 3765a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'idx' : 0}).idx) 3766a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'nr' : 5, 'items' : 0}).items) 3767a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'id' : 0}).id) 3768a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'size' : 0}).size) 3769a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title) 3770a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid) 3771b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick) 3772c9cc9c78SBram Moolenaar if a:cchar == 'c' 3773c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3774c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3775d43906d2SBram Moolenaar \ 'changedtick' : 0, 'qfbufnr' : qfbufnr, 3776d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3777c9cc9c78SBram Moolenaar else 3778c9cc9c78SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 3779c9cc9c78SBram Moolenaar \ 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 3780d43906d2SBram Moolenaar \ 'changedtick' : 0, 'filewinid' : 0, 'qfbufnr' : 0, 3781d43906d2SBram Moolenaar \ 'quickfixtextfunc' : ''}, g:Xgetlist({'nr' : 5, 'all' : 0})) 3782c9cc9c78SBram Moolenaar endif 3783a6d4849cSBram Moolenaarendfunc 3784a6d4849cSBram Moolenaar 3785a6d4849cSBram Moolenaarfunc Test_getqflist() 3786a6d4849cSBram Moolenaar call Xgetlist_empty_tests('c') 3787a6d4849cSBram Moolenaar call Xgetlist_empty_tests('l') 3788a6d4849cSBram Moolenaarendfunc 3789b254af31SBram Moolenaar 3790a0ca7d00SBram Moolenaarfunc Test_getqflist_invalid_nr() 3791a0ca7d00SBram Moolenaar " The following commands used to crash Vim 3792a0ca7d00SBram Moolenaar cexpr "" 3793a0ca7d00SBram Moolenaar call getqflist({'nr' : $XXX_DOES_NOT_EXIST_XXX}) 3794a0ca7d00SBram Moolenaar 3795a0ca7d00SBram Moolenaar " Cleanup 3796a0ca7d00SBram Moolenaar call setqflist([], 'r') 3797a0ca7d00SBram Moolenaarendfunc 3798a0ca7d00SBram Moolenaar 3799b254af31SBram Moolenaar" Tests for the quickfix/location list changedtick 3800b254af31SBram Moolenaarfunc Xqftick_tests(cchar) 3801b254af31SBram Moolenaar call s:setup_commands(a:cchar) 3802b254af31SBram Moolenaar 3803b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3804b254af31SBram Moolenaar 3805b254af31SBram Moolenaar Xexpr "F1:10:Line10" 3806b254af31SBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3807b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3808b254af31SBram Moolenaar Xaddexpr "F2:20:Line20\nF2:21:Line21" 3809b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3810b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["F3:30:Line30", "F3:31:Line31"]}) 3811b254af31SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 3812b254af31SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["F4:40:Line40"]}) 3813b254af31SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 3814b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'New Title'}) 3815b254af31SBram Moolenaar call assert_equal(5, g:Xgetlist({'changedtick' : 0}).changedtick) 3816b254af31SBram Moolenaar 3817b254af31SBram Moolenaar enew! 3818b254af31SBram Moolenaar call append(0, ["F5:50:L50", "F6:60:L60"]) 3819b254af31SBram Moolenaar Xaddbuffer 3820b254af31SBram Moolenaar call assert_equal(6, g:Xgetlist({'changedtick' : 0}).changedtick) 3821b254af31SBram Moolenaar enew! 3822b254af31SBram Moolenaar 3823b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'context' : {'bus' : 'pci'}}) 3824b254af31SBram Moolenaar call assert_equal(7, g:Xgetlist({'changedtick' : 0}).changedtick) 3825b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3826b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'a') 3827b254af31SBram Moolenaar call assert_equal(8, g:Xgetlist({'changedtick' : 0}).changedtick) 3828b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3829b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], ' ') 3830b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3831b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3832b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'r') 3833b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3834b254af31SBram Moolenaar 3835b254af31SBram Moolenaar call writefile(["F8:80:L80", "F8:81:L81"], "Xone") 3836b254af31SBram Moolenaar Xfile Xone 3837b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3838b254af31SBram Moolenaar Xaddfile Xone 3839b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3840b254af31SBram Moolenaar 3841b254af31SBram Moolenaar " Test case for updating a non-current quickfix list 3842b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3843b254af31SBram Moolenaar Xexpr "F1:1:L1" 3844b254af31SBram Moolenaar Xexpr "F2:2:L2" 3845b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, "lines" : ["F10:10:L10"]}) 3846b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3847b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'nr' : 1, 'changedtick' : 0}).changedtick) 3848b254af31SBram Moolenaar 3849b254af31SBram Moolenaar call delete("Xone") 3850b254af31SBram Moolenaarendfunc 3851b254af31SBram Moolenaar 3852b254af31SBram Moolenaarfunc Test_qf_tick() 3853b254af31SBram Moolenaar call Xqftick_tests('c') 3854b254af31SBram Moolenaar call Xqftick_tests('l') 3855b254af31SBram Moolenaarendfunc 385612237448SBram Moolenaar 3857c631f2dfSBram Moolenaar" Test helpgrep with lang specifier 3858c631f2dfSBram Moolenaarfunc Xtest_helpgrep_with_lang_specifier(cchar) 3859c631f2dfSBram Moolenaar call s:setup_commands(a:cchar) 3860c631f2dfSBram Moolenaar Xhelpgrep Vim@en 3861c631f2dfSBram Moolenaar call assert_equal('help', &filetype) 3862c631f2dfSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : '$'}).nr) 3863c631f2dfSBram Moolenaar new | only 3864c631f2dfSBram Moolenaarendfunc 3865c631f2dfSBram Moolenaar 3866c631f2dfSBram Moolenaarfunc Test_helpgrep_with_lang_specifier() 3867c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('c') 3868c631f2dfSBram Moolenaar call Xtest_helpgrep_with_lang_specifier('l') 3869c631f2dfSBram Moolenaarendfunc 3870c631f2dfSBram Moolenaar 387112237448SBram Moolenaar" The following test used to crash Vim. 387212237448SBram Moolenaar" Open the location list window and close the regular window associated with 387312237448SBram Moolenaar" the location list. When the garbage collection runs now, it incorrectly 387412237448SBram Moolenaar" marks the location list context as not in use and frees the context. 387512237448SBram Moolenaarfunc Test_ll_window_ctx() 387612237448SBram Moolenaar call setloclist(0, [], 'f') 387712237448SBram Moolenaar call setloclist(0, [], 'a', {'context' : []}) 387812237448SBram Moolenaar lopen | only 387912237448SBram Moolenaar call test_garbagecollect_now() 388012237448SBram Moolenaar echo getloclist(0, {'context' : 1}).context 388112237448SBram Moolenaar enew | only 388212237448SBram Moolenaarendfunc 388312237448SBram Moolenaar 388414a4deb0SBram Moolenaar" The following test used to crash vim 388514a4deb0SBram Moolenaarfunc Test_lfile_crash() 388614a4deb0SBram Moolenaar sp Xtest 388714a4deb0SBram Moolenaar au QuickFixCmdPre * bw 3888e2e4075fSBram Moolenaar call assert_fails('lfile', 'E40:') 388914a4deb0SBram Moolenaar au! QuickFixCmdPre 389014a4deb0SBram Moolenaarendfunc 38913c097226SBram Moolenaar 38923c097226SBram Moolenaar" The following test used to crash vim 38933c097226SBram Moolenaarfunc Test_lbuffer_crash() 38943c097226SBram Moolenaar sv Xtest 38953c097226SBram Moolenaar augroup QF_Test 38963c097226SBram Moolenaar au! 38979a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bw 38983c097226SBram Moolenaar augroup END 38993c097226SBram Moolenaar lbuffer 39003c097226SBram Moolenaar augroup QF_Test 39013c097226SBram Moolenaar au! 39023c097226SBram Moolenaar augroup END 39033c097226SBram Moolenaarendfunc 39043c097226SBram Moolenaar 39053c097226SBram Moolenaar" The following test used to crash vim 39063c097226SBram Moolenaarfunc Test_lexpr_crash() 39073c097226SBram Moolenaar augroup QF_Test 39083c097226SBram Moolenaar au! 39099a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f') 39103c097226SBram Moolenaar augroup END 39113c097226SBram Moolenaar lexpr "" 39123c097226SBram Moolenaar augroup QF_Test 39133c097226SBram Moolenaar au! 39143c097226SBram Moolenaar augroup END 39159f84ded3SBram Moolenaar 39163c097226SBram Moolenaar enew | only 39179f84ded3SBram Moolenaar augroup QF_Test 39189f84ded3SBram Moolenaar au! 39199f84ded3SBram Moolenaar au BufNew * call setloclist(0, [], 'f') 39209f84ded3SBram Moolenaar augroup END 39219f84ded3SBram Moolenaar lexpr 'x:1:x' 39229f84ded3SBram Moolenaar augroup QF_Test 39239f84ded3SBram Moolenaar au! 39249f84ded3SBram Moolenaar augroup END 39259f84ded3SBram Moolenaar 39269f84ded3SBram Moolenaar enew | only 39279f84ded3SBram Moolenaar lexpr '' 39289f84ded3SBram Moolenaar lopen 39299f84ded3SBram Moolenaar augroup QF_Test 39309f84ded3SBram Moolenaar au! 39319f84ded3SBram Moolenaar au FileType * call setloclist(0, [], 'f') 39329f84ded3SBram Moolenaar augroup END 39339f84ded3SBram Moolenaar lexpr '' 39349f84ded3SBram Moolenaar augroup QF_Test 39359f84ded3SBram Moolenaar au! 39369f84ded3SBram Moolenaar augroup END 39373c097226SBram Moolenaarendfunc 39383c097226SBram Moolenaar 39393c097226SBram Moolenaar" The following test used to crash Vim 39403c097226SBram Moolenaarfunc Test_lvimgrep_crash() 39413c097226SBram Moolenaar sv Xtest 39423c097226SBram Moolenaar augroup QF_Test 39433c097226SBram Moolenaar au! 39449a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f') 39453c097226SBram Moolenaar augroup END 39463c097226SBram Moolenaar lvimgrep quickfix test_quickfix.vim 39473c097226SBram Moolenaar augroup QF_Test 39483c097226SBram Moolenaar au! 39493c097226SBram Moolenaar augroup END 3950b6f1480aSBram Moolenaar 3951b6f1480aSBram Moolenaar new | only 3952b6f1480aSBram Moolenaar augroup QF_Test 3953b6f1480aSBram Moolenaar au! 3954b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 3955b6f1480aSBram Moolenaar augroup END 3956b6f1480aSBram Moolenaar call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:') 3957b6f1480aSBram Moolenaar augroup QF_Test 3958b6f1480aSBram Moolenaar au! 3959b6f1480aSBram Moolenaar augroup END 3960b6f1480aSBram Moolenaar 39613c097226SBram Moolenaar enew | only 39623c097226SBram Moolenaarendfunc 3963de04654dSBram Moolenaar 39642573af35SBram Moolenaarfunc Test_lvimgrep_crash2() 39652573af35SBram Moolenaar au BufNewFile x sfind 39669b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x', 'E471:') 39679b7bf9e9SBram Moolenaar call assert_fails('lvimgrep x x x', 'E471:') 39682573af35SBram Moolenaar 39692573af35SBram Moolenaar au! BufNewFile 39702573af35SBram Moolenaarendfunc 39712573af35SBram Moolenaar 3972de04654dSBram Moolenaar" Test for the position of the quickfix and location list window 3973de04654dSBram Moolenaarfunc Test_qfwin_pos() 3974de04654dSBram Moolenaar " Open two windows 3975de04654dSBram Moolenaar new | only 3976de04654dSBram Moolenaar new 3977de04654dSBram Moolenaar cexpr ['F1:10:L10'] 3978de04654dSBram Moolenaar copen 3979de04654dSBram Moolenaar " Quickfix window should be the bottom most window 3980de04654dSBram Moolenaar call assert_equal(3, winnr()) 3981de04654dSBram Moolenaar close 3982de04654dSBram Moolenaar " Open at the very top 3983de04654dSBram Moolenaar wincmd t 3984de04654dSBram Moolenaar topleft copen 3985de04654dSBram Moolenaar call assert_equal(1, winnr()) 3986de04654dSBram Moolenaar close 3987de04654dSBram Moolenaar " open left of the current window 3988de04654dSBram Moolenaar wincmd t 3989de04654dSBram Moolenaar below new 3990de04654dSBram Moolenaar leftabove copen 3991de04654dSBram Moolenaar call assert_equal(2, winnr()) 3992de04654dSBram Moolenaar close 3993de04654dSBram Moolenaar " open right of the current window 3994de04654dSBram Moolenaar rightbelow copen 3995de04654dSBram Moolenaar call assert_equal(3, winnr()) 3996de04654dSBram Moolenaar close 3997de04654dSBram Moolenaarendfunc 3998e1bb879fSBram Moolenaar 3999e1bb879fSBram Moolenaar" Tests for quickfix/location lists changed by autocommands when 4000e1bb879fSBram Moolenaar" :vimgrep/:lvimgrep commands are running. 4001e1bb879fSBram Moolenaarfunc Test_vimgrep_autocmd() 4002e1bb879fSBram Moolenaar call setqflist([], 'f') 4003e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest1.txt') 4004e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest2.txt') 4005e1bb879fSBram Moolenaar 4006e1bb879fSBram Moolenaar " Test 1: 4007e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 4008e1bb879fSBram Moolenaar " changed by an autocmd, the results should be added to the correct quickfix 4009e1bb879fSBram Moolenaar " list. 4010e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt cexpr '' | cexpr '' 4011e1bb879fSBram Moolenaar silent vimgrep stars Xtest*.txt 4012e1bb879fSBram Moolenaar call assert_equal(1, getqflist({'nr' : 0}).nr) 4013e1bb879fSBram Moolenaar call assert_equal(3, getqflist({'nr' : '$'}).nr) 4014e1bb879fSBram Moolenaar call assert_equal('Xtest2.txt', bufname(getqflist()[1].bufnr)) 4015e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 4016e1bb879fSBram Moolenaar 4017e1bb879fSBram Moolenaar " Test 2: 4018e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 4019e1bb879fSBram Moolenaar " freed, then a error should be given. 4020e1bb879fSBram Moolenaar silent! %bwipe! 4021e1bb879fSBram Moolenaar call setqflist([], 'f') 4022e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt for i in range(10) | cexpr '' | endfor 4023e1bb879fSBram Moolenaar call assert_fails('vimgrep stars Xtest*.txt', 'E925:') 4024e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 4025e1bb879fSBram Moolenaar 4026e1bb879fSBram Moolenaar " Test 3: 4027e1bb879fSBram Moolenaar " When searching for a pattern using :lvimgrep, if the location list is 4028e1bb879fSBram Moolenaar " freed, then the command should error out. 4029e1bb879fSBram Moolenaar silent! %bwipe! 4030e1bb879fSBram Moolenaar let g:save_winid = win_getid() 4031e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt call setloclist(g:save_winid, [], 'f') 4032e1bb879fSBram Moolenaar call assert_fails('lvimgrep stars Xtest*.txt', 'E926:') 4033e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 4034e1bb879fSBram Moolenaar 4035e1bb879fSBram Moolenaar call delete('Xtest1.txt') 4036e1bb879fSBram Moolenaar call delete('Xtest2.txt') 4037e1bb879fSBram Moolenaar call setqflist([], 'f') 4038e1bb879fSBram Moolenaarendfunc 40393b9474b4SBram Moolenaar 4040f9ae154cSBram Moolenaar" Test for an autocmd changing the current directory when running vimgrep 4041f9ae154cSBram Moolenaarfunc Xvimgrep_autocmd_cd(cchar) 4042f9ae154cSBram Moolenaar call s:setup_commands(a:cchar) 4043f9ae154cSBram Moolenaar 4044f9ae154cSBram Moolenaar %bwipe 4045f9ae154cSBram Moolenaar let save_cwd = getcwd() 4046f9ae154cSBram Moolenaar 4047f9ae154cSBram Moolenaar augroup QF_Test 4048f9ae154cSBram Moolenaar au! 4049f9ae154cSBram Moolenaar autocmd BufRead * silent cd %:p:h 4050f9ae154cSBram Moolenaar augroup END 4051f9ae154cSBram Moolenaar 4052f9ae154cSBram Moolenaar 10Xvimgrep /vim/ Xdir/** 4053f9ae154cSBram Moolenaar let l = g:Xgetlist() 4054f9ae154cSBram Moolenaar call assert_equal('f1.txt', bufname(l[0].bufnr)) 4055f9ae154cSBram Moolenaar call assert_equal('f2.txt', fnamemodify(bufname(l[2].bufnr), ':t')) 4056f9ae154cSBram Moolenaar 4057f9ae154cSBram Moolenaar augroup QF_Test 4058f9ae154cSBram Moolenaar au! 4059f9ae154cSBram Moolenaar augroup END 4060f9ae154cSBram Moolenaar 4061f9ae154cSBram Moolenaar exe 'cd ' . save_cwd 4062f9ae154cSBram Moolenaarendfunc 4063f9ae154cSBram Moolenaar 4064f9ae154cSBram Moolenaarfunc Test_vimgrep_autocmd_cd() 4065f9ae154cSBram Moolenaar call mkdir('Xdir/a', 'p') 4066f9ae154cSBram Moolenaar call mkdir('Xdir/b', 'p') 4067f9ae154cSBram Moolenaar call writefile(['a_L1_vim', 'a_L2_vim'], 'Xdir/a/f1.txt') 4068f9ae154cSBram Moolenaar call writefile(['b_L1_vim', 'b_L2_vim'], 'Xdir/b/f2.txt') 4069f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('c') 4070f9ae154cSBram Moolenaar call Xvimgrep_autocmd_cd('l') 4071f9ae154cSBram Moolenaar %bwipe 4072f9ae154cSBram Moolenaar call delete('Xdir', 'rf') 4073f9ae154cSBram Moolenaarendfunc 4074f9ae154cSBram Moolenaar 40753b9474b4SBram Moolenaar" The following test used to crash Vim 40763b9474b4SBram Moolenaarfunc Test_lhelpgrep_autocmd() 40773b9474b4SBram Moolenaar lhelpgrep quickfix 40783b9474b4SBram Moolenaar autocmd QuickFixCmdPost * call setloclist(0, [], 'f') 40793b9474b4SBram Moolenaar lhelpgrep buffer 40803b9474b4SBram Moolenaar call assert_equal('help', &filetype) 40813b9474b4SBram Moolenaar call assert_equal(0, getloclist(0, {'nr' : '$'}).nr) 40823b9474b4SBram Moolenaar lhelpgrep tabpage 40833b9474b4SBram Moolenaar call assert_equal('help', &filetype) 40843b9474b4SBram Moolenaar call assert_equal(1, getloclist(0, {'nr' : '$'}).nr) 40853b9474b4SBram Moolenaar au! QuickFixCmdPost 4086b6f1480aSBram Moolenaar 4087b6f1480aSBram Moolenaar new | only 4088b6f1480aSBram Moolenaar augroup QF_Test 4089b6f1480aSBram Moolenaar au! 4090b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'f') 4091b6f1480aSBram Moolenaar augroup END 4092b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4093dbfa795dSBram Moolenaar " run the test with a help window already open 4094dbfa795dSBram Moolenaar help 4095dbfa795dSBram Moolenaar wincmd w 4096dbfa795dSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4097b6f1480aSBram Moolenaar augroup QF_Test 4098b6f1480aSBram Moolenaar au! BufEnter 4099b6f1480aSBram Moolenaar augroup END 4100b6f1480aSBram Moolenaar 4101b6f1480aSBram Moolenaar new | only 4102b6f1480aSBram Moolenaar augroup QF_Test 4103b6f1480aSBram Moolenaar au! 4104b6f1480aSBram Moolenaar au BufEnter * call setqflist([], 'r') 4105b6f1480aSBram Moolenaar augroup END 4106b6f1480aSBram Moolenaar call assert_fails('helpgrep quickfix', 'E925:') 4107b6f1480aSBram Moolenaar augroup QF_Test 4108b6f1480aSBram Moolenaar au! BufEnter 4109b6f1480aSBram Moolenaar augroup END 4110b6f1480aSBram Moolenaar 4111b6f1480aSBram Moolenaar new | only 4112b6f1480aSBram Moolenaar augroup QF_Test 4113b6f1480aSBram Moolenaar au! 4114b6f1480aSBram Moolenaar au BufEnter * call setloclist(0, [], 'r') 4115b6f1480aSBram Moolenaar augroup END 4116b6f1480aSBram Moolenaar call assert_fails('lhelpgrep quickfix', 'E926:') 4117b6f1480aSBram Moolenaar augroup QF_Test 4118b6f1480aSBram Moolenaar au! BufEnter 4119b6f1480aSBram Moolenaar augroup END 4120b6f1480aSBram Moolenaar 41213b9474b4SBram Moolenaar new | only 41223b9474b4SBram Moolenaarendfunc 4123a796d46fSBram Moolenaar 4124a796d46fSBram Moolenaar" Test for shortening/simplifying the file name when opening the 4125a796d46fSBram Moolenaar" quickfix window or when displaying the quickfix list 4126a796d46fSBram Moolenaarfunc Test_shorten_fname() 41276d91bcb4SBram Moolenaar CheckUnix 4128a796d46fSBram Moolenaar %bwipe 4129a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 4130a796d46fSBram Moolenaar let fname = getcwd() . '/test_quickfix.vim' 4131a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 4132a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 4133a796d46fSBram Moolenaar " Opening the quickfix window should simplify the file path 4134a796d46fSBram Moolenaar cwindow 4135a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 4136a796d46fSBram Moolenaar cclose 4137a796d46fSBram Moolenaar %bwipe 4138a796d46fSBram Moolenaar " Create a quickfix list with a absolute path filename 4139a796d46fSBram Moolenaar call setqflist([], ' ', {'lines':[fname . ":20:Line20"], 'efm':'%f:%l:%m'}) 4140a796d46fSBram Moolenaar call assert_equal(fname, bufname('test_quickfix.vim')) 4141a796d46fSBram Moolenaar " Displaying the quickfix list should simplify the file path 4142a796d46fSBram Moolenaar silent! clist 4143a796d46fSBram Moolenaar call assert_equal('test_quickfix.vim', bufname('test_quickfix.vim')) 41448ec92c97SBram Moolenaar " Add a few entries for the same file with different paths and check whether 41458ec92c97SBram Moolenaar " the buffer name is shortened 41468ec92c97SBram Moolenaar %bwipe 41478ec92c97SBram Moolenaar call setqflist([], 'f') 41488ec92c97SBram Moolenaar call setqflist([{'filename' : 'test_quickfix.vim', 'lnum' : 10}, 41498ec92c97SBram Moolenaar \ {'filename' : '../testdir/test_quickfix.vim', 'lnum' : 20}, 41508ec92c97SBram Moolenaar \ {'filename' : fname, 'lnum' : 30}], ' ') 41518ec92c97SBram Moolenaar copen 41528ec92c97SBram Moolenaar call assert_equal(['test_quickfix.vim|10| ', 41538ec92c97SBram Moolenaar \ 'test_quickfix.vim|20| ', 41548ec92c97SBram Moolenaar \ 'test_quickfix.vim|30| '], getline(1, '$')) 41558ec92c97SBram Moolenaar cclose 4156a796d46fSBram Moolenaarendfunc 41578b62e310SBram Moolenaar 41588b62e310SBram Moolenaar" Quickfix title tests 41598b62e310SBram Moolenaar" In the below tests, 'exe "cmd"' is used to invoke the quickfix commands. 41608b62e310SBram Moolenaar" Otherwise due to indentation, the title is set with spaces at the beginning 41618b62e310SBram Moolenaar" of the command. 41628b62e310SBram Moolenaarfunc Test_qftitle() 41638b62e310SBram Moolenaar call writefile(["F1:1:Line1"], 'Xerr') 41648b62e310SBram Moolenaar 41658b62e310SBram Moolenaar " :cexpr 41668b62e310SBram Moolenaar exe "cexpr readfile('Xerr')" 41678b62e310SBram Moolenaar call assert_equal(":cexpr readfile('Xerr')", getqflist({'title' : 1}).title) 41688b62e310SBram Moolenaar 41698b62e310SBram Moolenaar " :cgetexpr 41708b62e310SBram Moolenaar exe "cgetexpr readfile('Xerr')" 41718b62e310SBram Moolenaar call assert_equal(":cgetexpr readfile('Xerr')", 41728b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 41738b62e310SBram Moolenaar 41748b62e310SBram Moolenaar " :caddexpr 41758b62e310SBram Moolenaar call setqflist([], 'f') 41768b62e310SBram Moolenaar exe "caddexpr readfile('Xerr')" 41778b62e310SBram Moolenaar call assert_equal(":caddexpr readfile('Xerr')", 41788b62e310SBram Moolenaar \ getqflist({'title' : 1}).title) 41798b62e310SBram Moolenaar 41808b62e310SBram Moolenaar " :cbuffer 41818b62e310SBram Moolenaar new Xerr 41828b62e310SBram Moolenaar exe "cbuffer" 41838b62e310SBram Moolenaar call assert_equal(':cbuffer (Xerr)', getqflist({'title' : 1}).title) 41848b62e310SBram Moolenaar 41858b62e310SBram Moolenaar " :cgetbuffer 41868b62e310SBram Moolenaar edit Xerr 41878b62e310SBram Moolenaar exe "cgetbuffer" 41888b62e310SBram Moolenaar call assert_equal(':cgetbuffer (Xerr)', getqflist({'title' : 1}).title) 41898b62e310SBram Moolenaar 41908b62e310SBram Moolenaar " :caddbuffer 41918b62e310SBram Moolenaar call setqflist([], 'f') 41928b62e310SBram Moolenaar edit Xerr 41938b62e310SBram Moolenaar exe "caddbuffer" 41948b62e310SBram Moolenaar call assert_equal(':caddbuffer (Xerr)', getqflist({'title' : 1}).title) 41958b62e310SBram Moolenaar 41968b62e310SBram Moolenaar " :cfile 41978b62e310SBram Moolenaar exe "cfile Xerr" 41988b62e310SBram Moolenaar call assert_equal(':cfile Xerr', getqflist({'title' : 1}).title) 41998b62e310SBram Moolenaar 42008b62e310SBram Moolenaar " :cgetfile 42018b62e310SBram Moolenaar exe "cgetfile Xerr" 42028b62e310SBram Moolenaar call assert_equal(':cgetfile Xerr', getqflist({'title' : 1}).title) 42038b62e310SBram Moolenaar 42048b62e310SBram Moolenaar " :caddfile 42058b62e310SBram Moolenaar call setqflist([], 'f') 42068b62e310SBram Moolenaar exe "caddfile Xerr" 42078b62e310SBram Moolenaar call assert_equal(':caddfile Xerr', getqflist({'title' : 1}).title) 42088b62e310SBram Moolenaar 42098b62e310SBram Moolenaar " :grep 42108b62e310SBram Moolenaar set grepprg=internal 42118b62e310SBram Moolenaar exe "grep F1 Xerr" 42128b62e310SBram Moolenaar call assert_equal(':grep F1 Xerr', getqflist({'title' : 1}).title) 42138b62e310SBram Moolenaar 42148b62e310SBram Moolenaar " :grepadd 42158b62e310SBram Moolenaar call setqflist([], 'f') 42168b62e310SBram Moolenaar exe "grepadd F1 Xerr" 42178b62e310SBram Moolenaar call assert_equal(':grepadd F1 Xerr', getqflist({'title' : 1}).title) 42188b62e310SBram Moolenaar set grepprg&vim 42198b62e310SBram Moolenaar 42208b62e310SBram Moolenaar " :vimgrep 42218b62e310SBram Moolenaar exe "vimgrep F1 Xerr" 42228b62e310SBram Moolenaar call assert_equal(':vimgrep F1 Xerr', getqflist({'title' : 1}).title) 42238b62e310SBram Moolenaar 42248b62e310SBram Moolenaar " :vimgrepadd 42258b62e310SBram Moolenaar call setqflist([], 'f') 42268b62e310SBram Moolenaar exe "vimgrepadd F1 Xerr" 42278b62e310SBram Moolenaar call assert_equal(':vimgrepadd F1 Xerr', getqflist({'title' : 1}).title) 42288b62e310SBram Moolenaar 42298b62e310SBram Moolenaar call setqflist(['F1:10:L10'], ' ') 42308b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 42318b62e310SBram Moolenaar 42328b62e310SBram Moolenaar call setqflist([], 'f') 42338b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'a') 42348b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 42358b62e310SBram Moolenaar 42368b62e310SBram Moolenaar call setqflist([], 'f') 42378b62e310SBram Moolenaar call setqflist(['F1:10:L10'], 'r') 42388b62e310SBram Moolenaar call assert_equal(':setqflist()', getqflist({'title' : 1}).title) 42398b62e310SBram Moolenaar 42408b62e310SBram Moolenaar close 42418b62e310SBram Moolenaar call delete('Xerr') 42428b62e310SBram Moolenaar 42438b62e310SBram Moolenaar call setqflist([], ' ', {'title' : 'Errors'}) 42448b62e310SBram Moolenaar copen 42458b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 42468b62e310SBram Moolenaar call setqflist([], 'r', {'items' : [{'filename' : 'a.c', 'lnum' : 10}]}) 42478b62e310SBram Moolenaar call assert_equal('Errors', w:quickfix_title) 42488b62e310SBram Moolenaar cclose 4249530bed99SBram Moolenaar 4250530bed99SBram Moolenaar " Switching to another quickfix list in one tab page should update the 4251530bed99SBram Moolenaar " quickfix window title and statusline in all the other tab pages also 4252530bed99SBram Moolenaar call setqflist([], 'f') 4253530bed99SBram Moolenaar %bw! 4254530bed99SBram Moolenaar cgetexpr ['file_one:1:1: error in the first quickfix list'] 4255530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'first quickfix list'}) 4256530bed99SBram Moolenaar cgetexpr ['file_two:2:1: error in the second quickfix list'] 4257530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'second quickfix list'}) 4258530bed99SBram Moolenaar copen 4259530bed99SBram Moolenaar wincmd t 4260530bed99SBram Moolenaar tabnew two 4261530bed99SBram Moolenaar copen 4262530bed99SBram Moolenaar wincmd t 4263530bed99SBram Moolenaar colder 4264530bed99SBram Moolenaar call assert_equal('first quickfix list', gettabwinvar(1, 2, 'quickfix_title')) 4265530bed99SBram Moolenaar call assert_equal('first quickfix list', gettabwinvar(2, 2, 'quickfix_title')) 4266530bed99SBram Moolenaar call assert_equal(1, tabpagewinnr(1)) 4267530bed99SBram Moolenaar call assert_equal(1, tabpagewinnr(2)) 4268530bed99SBram Moolenaar tabnew 4269530bed99SBram Moolenaar call setqflist([], 'a', {'title': 'new quickfix title'}) 4270530bed99SBram Moolenaar call assert_equal('new quickfix title', gettabwinvar(1, 2, 'quickfix_title')) 4271530bed99SBram Moolenaar call assert_equal('new quickfix title', gettabwinvar(2, 2, 'quickfix_title')) 4272530bed99SBram Moolenaar %bw! 42738b62e310SBram Moolenaarendfunc 4274600323b4SBram Moolenaar 4275600323b4SBram Moolenaarfunc Test_lbuffer_with_bwipe() 4276600323b4SBram Moolenaar new 4277600323b4SBram Moolenaar new 4278600323b4SBram Moolenaar augroup nasty 42799a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bwipe 4280600323b4SBram Moolenaar augroup END 4281600323b4SBram Moolenaar lbuffer 4282600323b4SBram Moolenaar augroup nasty 4283600323b4SBram Moolenaar au! 4284600323b4SBram Moolenaar augroup END 4285600323b4SBram Moolenaarendfunc 42860366c016SBram Moolenaar 4287531b9a3aSBram Moolenaar" Test for an autocmd freeing the quickfix/location list when cexpr/lexpr is 4288531b9a3aSBram Moolenaar" running 4289531b9a3aSBram Moolenaarfunc Xexpr_acmd_freelist(cchar) 4290531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4291531b9a3aSBram Moolenaar 42929a046fd0SBram Moolenaar " This was using freed memory (but with what events?) 42930366c016SBram Moolenaar augroup nasty 42949a046fd0SBram Moolenaar au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call g:Xsetlist([], 'f') 42950366c016SBram Moolenaar augroup END 4296531b9a3aSBram Moolenaar Xexpr "x" 42970366c016SBram Moolenaar augroup nasty 42980366c016SBram Moolenaar au! 42990366c016SBram Moolenaar augroup END 43000366c016SBram Moolenaarendfunc 4301531b9a3aSBram Moolenaar 4302531b9a3aSBram Moolenaarfunc Test_cexpr_acmd_freelist() 4303531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('c') 4304531b9a3aSBram Moolenaar call Xexpr_acmd_freelist('l') 4305531b9a3aSBram Moolenaarendfunc 4306531b9a3aSBram Moolenaar 4307531b9a3aSBram Moolenaar" Test for commands that create a new quickfix/location list and jump to the 4308531b9a3aSBram Moolenaar" first error automatically. 4309531b9a3aSBram Moolenaarfunc Xjumpto_first_error_test(cchar) 4310531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4311531b9a3aSBram Moolenaar 4312531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4313531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4314531b9a3aSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4315531b9a3aSBram Moolenaar 4316531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4317531b9a3aSBram Moolenaar enew 4318531b9a3aSBram Moolenaar Xexpr l 4319bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4320531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4321531b9a3aSBram Moolenaar 4322531b9a3aSBram Moolenaar " Test for cfile/lfile 4323531b9a3aSBram Moolenaar enew 4324531b9a3aSBram Moolenaar call writefile(l, 'Xerr') 4325531b9a3aSBram Moolenaar Xfile Xerr 4326bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4327531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4328531b9a3aSBram Moolenaar 4329531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4330531b9a3aSBram Moolenaar edit Xerr 4331531b9a3aSBram Moolenaar Xbuffer 4332bdd2c290SBram Moolenaar call assert_equal('Xtestfile1', @%) 4333531b9a3aSBram Moolenaar call assert_equal(2, line('.')) 4334531b9a3aSBram Moolenaar 4335531b9a3aSBram Moolenaar call delete('Xerr') 4336531b9a3aSBram Moolenaar call delete('Xtestfile1') 4337531b9a3aSBram Moolenaar call delete('Xtestfile2') 4338531b9a3aSBram Moolenaarendfunc 4339531b9a3aSBram Moolenaar 4340531b9a3aSBram Moolenaarfunc Test_jumpto_first_error() 4341531b9a3aSBram Moolenaar call Xjumpto_first_error_test('c') 4342531b9a3aSBram Moolenaar call Xjumpto_first_error_test('l') 4343531b9a3aSBram Moolenaarendfunc 4344531b9a3aSBram Moolenaar 4345531b9a3aSBram Moolenaar" Test for a quickfix autocmd changing the quickfix/location list before 4346531b9a3aSBram Moolenaar" jumping to the first error in the new list. 4347531b9a3aSBram Moolenaarfunc Xautocmd_changelist(cchar) 4348531b9a3aSBram Moolenaar call s:setup_commands(a:cchar) 4349531b9a3aSBram Moolenaar 4350531b9a3aSBram Moolenaar " Test for cfile/lfile 4351531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile1') 4352531b9a3aSBram Moolenaar call s:create_test_file('Xtestfile2') 4353531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4354531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4355531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4356531b9a3aSBram Moolenaar Xfile Xerr 4357bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4358531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4359531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4360531b9a3aSBram Moolenaar 4361531b9a3aSBram Moolenaar " Test for cbuffer/lbuffer 4362531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4363531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4364531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4365531b9a3aSBram Moolenaar call writefile(['Xtestfile2:4:Line4'], 'Xerr') 4366531b9a3aSBram Moolenaar edit Xerr 4367531b9a3aSBram Moolenaar Xbuffer 4368bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4369531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4370531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4371531b9a3aSBram Moolenaar 4372531b9a3aSBram Moolenaar " Test for cexpr/lexpr 4373531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4374531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4375531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4376531b9a3aSBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 4377bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4378531b9a3aSBram Moolenaar call assert_equal(4, line('.')) 4379531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4380531b9a3aSBram Moolenaar 4381851332eaSBram Moolenaar " The grepprg may not be set on non-Unix systems 4382851332eaSBram Moolenaar if has('unix') 4383531b9a3aSBram Moolenaar " Test for grep/lgrep 4384531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4385531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4386531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4387531b9a3aSBram Moolenaar silent Xgrep Line5 Xtestfile2 4388bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4389531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4390531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4391851332eaSBram Moolenaar endif 4392531b9a3aSBram Moolenaar 4393531b9a3aSBram Moolenaar " Test for vimgrep/lvimgrep 4394531b9a3aSBram Moolenaar call g:Xsetlist([], 'f') 4395531b9a3aSBram Moolenaar Xexpr 'Xtestfile1:2:Line2' 4396531b9a3aSBram Moolenaar autocmd QuickFixCmdPost * Xolder 4397531b9a3aSBram Moolenaar silent Xvimgrep Line5 Xtestfile2 4398bdd2c290SBram Moolenaar call assert_equal('Xtestfile2', @%) 4399531b9a3aSBram Moolenaar call assert_equal(5, line('.')) 4400531b9a3aSBram Moolenaar autocmd! QuickFixCmdPost 4401531b9a3aSBram Moolenaar 44023f347e47SBram Moolenaar " Test for autocommands clearing the quickfix list before jumping to the 44033f347e47SBram Moolenaar " first error. This should not result in an error 44043f347e47SBram Moolenaar autocmd QuickFixCmdPost * call g:Xsetlist([], 'r') 44053f347e47SBram Moolenaar let v:errmsg = '' 44063f347e47SBram Moolenaar " Test for cfile/lfile 44073f347e47SBram Moolenaar Xfile Xerr 44083f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 44093f347e47SBram Moolenaar " Test for cbuffer/lbuffer 44103f347e47SBram Moolenaar edit Xerr 44113f347e47SBram Moolenaar Xbuffer 44123f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 44133f347e47SBram Moolenaar " Test for cexpr/lexpr 44143f347e47SBram Moolenaar Xexpr 'Xtestfile2:4:Line4' 44153f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 44163f347e47SBram Moolenaar " Test for grep/lgrep 44173f347e47SBram Moolenaar " The grepprg may not be set on non-Unix systems 44183f347e47SBram Moolenaar if has('unix') 44193f347e47SBram Moolenaar silent Xgrep Line5 Xtestfile2 44203f347e47SBram Moolenaar call assert_true(v:errmsg !~# 'E42:') 44213f347e47SBram Moolenaar endif 44223f347e47SBram Moolenaar " Test for vimgrep/lvimgrep 44233f347e47SBram Moolenaar call assert_fails('silent Xvimgrep Line5 Xtestfile2', 'E480:') 44243f347e47SBram Moolenaar autocmd! QuickFixCmdPost 44253f347e47SBram Moolenaar 4426531b9a3aSBram Moolenaar call delete('Xerr') 4427531b9a3aSBram Moolenaar call delete('Xtestfile1') 4428531b9a3aSBram Moolenaar call delete('Xtestfile2') 4429531b9a3aSBram Moolenaarendfunc 4430531b9a3aSBram Moolenaar 4431531b9a3aSBram Moolenaarfunc Test_autocmd_changelist() 4432531b9a3aSBram Moolenaar call Xautocmd_changelist('c') 4433531b9a3aSBram Moolenaar call Xautocmd_changelist('l') 4434531b9a3aSBram Moolenaarendfunc 44354cde86c2SBram Moolenaar 44364cde86c2SBram Moolenaar" Tests for the ':filter /pat/ clist' command 44374cde86c2SBram Moolenaarfunc Test_filter_clist() 44384cde86c2SBram Moolenaar cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15'] 44394cde86c2SBram Moolenaar call assert_equal([' 2 Xfile2:15 col 15: Line 15'], 44404cde86c2SBram Moolenaar \ split(execute('filter /Line 15/ clist'), "\n")) 44414cde86c2SBram Moolenaar call assert_equal([' 1 Xfile1:10 col 10: Line 10'], 44424cde86c2SBram Moolenaar \ split(execute('filter /Xfile1/ clist'), "\n")) 44434cde86c2SBram Moolenaar call assert_equal([], split(execute('filter /abc/ clist'), "\n")) 44444cde86c2SBram Moolenaar 44454cde86c2SBram Moolenaar call setqflist([{'module' : 'abc', 'pattern' : 'pat1'}, 44464cde86c2SBram Moolenaar \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ') 44474cde86c2SBram Moolenaar call assert_equal([' 2 pqr:pat2: '], 44484cde86c2SBram Moolenaar \ split(execute('filter /pqr/ clist'), "\n")) 44494cde86c2SBram Moolenaar call assert_equal([' 1 abc:pat1: '], 44504cde86c2SBram Moolenaar \ split(execute('filter /pat1/ clist'), "\n")) 44514cde86c2SBram Moolenaarendfunc 44520a08c63dSBram Moolenaar 44530a08c63dSBram Moolenaar" Tests for the "CTRL-W <CR>" command. 44540a08c63dSBram Moolenaarfunc Xview_result_split_tests(cchar) 44550a08c63dSBram Moolenaar call s:setup_commands(a:cchar) 44560a08c63dSBram Moolenaar 44570a08c63dSBram Moolenaar " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list. 44580a08c63dSBram Moolenaar call g:Xsetlist([]) 44590a08c63dSBram Moolenaar Xopen 44600a08c63dSBram Moolenaar let l:win_count = winnr('$') 4461e2e4075fSBram Moolenaar call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42:') 44620a08c63dSBram Moolenaar call assert_equal(l:win_count, winnr('$')) 44630a08c63dSBram Moolenaar Xclose 44640a08c63dSBram Moolenaarendfunc 44650a08c63dSBram Moolenaar 44660a08c63dSBram Moolenaarfunc Test_view_result_split() 44670a08c63dSBram Moolenaar call Xview_result_split_tests('c') 44680a08c63dSBram Moolenaar call Xview_result_split_tests('l') 44690a08c63dSBram Moolenaarendfunc 44702dfcef4cSBram Moolenaar 44712dfcef4cSBram Moolenaar" Test that :cc sets curswant 44722dfcef4cSBram Moolenaarfunc Test_curswant() 44732dfcef4cSBram Moolenaar helpgrep quickfix 44742dfcef4cSBram Moolenaar normal! llll 44752dfcef4cSBram Moolenaar 1cc 44762dfcef4cSBram Moolenaar call assert_equal(getcurpos()[4], virtcol('.')) 44772dfcef4cSBram Moolenaar cclose | helpclose 44782dfcef4cSBram Moolenaarendfunc 4479b244373bSBram Moolenaar 4480b244373bSBram Moolenaar" Test for opening a file from the quickfix window using CTRL-W <Enter> 4481b244373bSBram Moolenaar" doesn't leave an empty buffer around. 4482b244373bSBram Moolenaarfunc Test_splitview() 4483b244373bSBram Moolenaar call s:create_test_file('Xtestfile1') 4484b244373bSBram Moolenaar call s:create_test_file('Xtestfile2') 4485b244373bSBram Moolenaar new | only 4486b244373bSBram Moolenaar let last_bufnr = bufnr('Test_sv_1', 1) 4487b244373bSBram Moolenaar let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] 4488b244373bSBram Moolenaar cgetexpr l 4489b244373bSBram Moolenaar copen 4490b244373bSBram Moolenaar let numbufs = len(getbufinfo()) 4491b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4492b244373bSBram Moolenaar copen 4493b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4494b244373bSBram Moolenaar " Make sure new empty buffers are not created 4495b244373bSBram Moolenaar call assert_equal(numbufs, len(getbufinfo())) 4496b244373bSBram Moolenaar " Creating a new buffer should use the next available buffer number 4497b244373bSBram Moolenaar call assert_equal(last_bufnr + 4, bufnr("Test_sv_2", 1)) 4498b244373bSBram Moolenaar bwipe Test_sv_1 4499b244373bSBram Moolenaar bwipe Test_sv_2 4500b244373bSBram Moolenaar new | only 4501b244373bSBram Moolenaar 4502b244373bSBram Moolenaar " When split opening files from location list window, make sure that two 4503b244373bSBram Moolenaar " windows doesn't refer to the same location list 4504b244373bSBram Moolenaar lgetexpr l 4505b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4506b244373bSBram Moolenaar lopen 4507b244373bSBram Moolenaar exe "normal \<C-W>\<CR>" 4508b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4509b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4510b244373bSBram Moolenaar new | only 4511b244373bSBram Moolenaar 4512b244373bSBram Moolenaar " When split opening files from a helpgrep location list window, a new help 4513eeb1b9c7SBram Moolenaar " window should be opened with a copy of the location list. 4514b244373bSBram Moolenaar lhelpgrep window 4515b244373bSBram Moolenaar let locid = getloclist(0, {'id' : 0}).id 4516b244373bSBram Moolenaar lwindow 4517b244373bSBram Moolenaar exe "normal j\<C-W>\<CR>" 4518b244373bSBram Moolenaar call assert_notequal(locid, getloclist(0, {'id' : 0}).id) 4519b244373bSBram Moolenaar call assert_equal(0, getloclist(0, {'winid' : 0}).winid) 4520b244373bSBram Moolenaar new | only 4521b244373bSBram Moolenaar 4522406cd90fSBram Moolenaar " Using :split or :vsplit from a quickfix window should behave like a :new 4523406cd90fSBram Moolenaar " or a :vnew command 4524406cd90fSBram Moolenaar copen 4525406cd90fSBram Moolenaar split 4526406cd90fSBram Moolenaar call assert_equal(3, winnr('$')) 4527406cd90fSBram Moolenaar let l = getwininfo() 4528406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4529406cd90fSBram Moolenaar close 4530406cd90fSBram Moolenaar copen 4531406cd90fSBram Moolenaar vsplit 4532406cd90fSBram Moolenaar let l = getwininfo() 4533406cd90fSBram Moolenaar call assert_equal([0, 0, 1], [l[0].quickfix, l[1].quickfix, l[2].quickfix]) 4534406cd90fSBram Moolenaar new | only 4535406cd90fSBram Moolenaar 4536b244373bSBram Moolenaar call delete('Xtestfile1') 4537b244373bSBram Moolenaar call delete('Xtestfile2') 4538b244373bSBram Moolenaarendfunc 4539c45eb770SBram Moolenaar 4540c45eb770SBram Moolenaar" Test for parsing entries using visual screen column 4541c45eb770SBram Moolenaarfunc Test_viscol() 4542c45eb770SBram Moolenaar enew 4543c45eb770SBram Moolenaar call writefile(["Col1\tCol2\tCol3"], 'Xfile1') 4544c45eb770SBram Moolenaar edit Xfile1 4545c45eb770SBram Moolenaar 4546c45eb770SBram Moolenaar " Use byte offset for column number 4547c45eb770SBram Moolenaar set efm& 4548c45eb770SBram Moolenaar cexpr "Xfile1:1:5:XX\nXfile1:1:9:YY\nXfile1:1:20:ZZ" 4549c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4550c45eb770SBram Moolenaar cnext 4551c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4552c45eb770SBram Moolenaar cnext 4553c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4554c45eb770SBram Moolenaar 4555c45eb770SBram Moolenaar " Use screen column offset for column number 4556c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4557c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:12:YY\nXfile1:1:20:ZZ" 4558c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4559c45eb770SBram Moolenaar cnext 4560c45eb770SBram Moolenaar call assert_equal([9, 12], [col('.'), virtcol('.')]) 4561c45eb770SBram Moolenaar cnext 4562c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4563c45eb770SBram Moolenaar cexpr "Xfile1:1:6:XX\nXfile1:1:15:YY\nXfile1:1:24:ZZ" 4564c45eb770SBram Moolenaar call assert_equal([5, 8], [col('.'), virtcol('.')]) 4565c45eb770SBram Moolenaar cnext 4566c45eb770SBram Moolenaar call assert_equal([10, 16], [col('.'), virtcol('.')]) 4567c45eb770SBram Moolenaar cnext 4568c45eb770SBram Moolenaar call assert_equal([14, 20], [col('.'), virtcol('.')]) 4569c45eb770SBram Moolenaar 4570c45eb770SBram Moolenaar enew 4571c45eb770SBram Moolenaar call writefile(["Col1\täü\töß\tCol4"], 'Xfile1') 4572c45eb770SBram Moolenaar 4573c45eb770SBram Moolenaar " Use byte offset for column number 4574c45eb770SBram Moolenaar set efm& 4575c45eb770SBram Moolenaar cexpr "Xfile1:1:8:XX\nXfile1:1:11:YY\nXfile1:1:16:ZZ" 4576c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4577c45eb770SBram Moolenaar cnext 4578c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4579c45eb770SBram Moolenaar cnext 4580c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4581c45eb770SBram Moolenaar 4582c45eb770SBram Moolenaar " Use screen column offset for column number 4583c45eb770SBram Moolenaar set efm=%f:%l:%v:%m 4584c45eb770SBram Moolenaar cexpr "Xfile1:1:10:XX\nXfile1:1:17:YY\nXfile1:1:25:ZZ" 4585c45eb770SBram Moolenaar call assert_equal([8, 10], [col('.'), virtcol('.')]) 4586c45eb770SBram Moolenaar cnext 4587c45eb770SBram Moolenaar call assert_equal([11, 17], [col('.'), virtcol('.')]) 4588c45eb770SBram Moolenaar cnext 4589c45eb770SBram Moolenaar call assert_equal([16, 25], [col('.'), virtcol('.')]) 4590c45eb770SBram Moolenaar 4591c95940c0SBram Moolenaar " Use screen column number with a multi-line error message 4592c95940c0SBram Moolenaar enew 4593c95940c0SBram Moolenaar call writefile(["à test"], 'Xfile1') 4594c95940c0SBram Moolenaar set efm=%E===\ %f\ ===,%C%l:%v,%Z%m 4595c95940c0SBram Moolenaar cexpr ["=== Xfile1 ===", "1:3", "errormsg"] 4596c95940c0SBram Moolenaar call assert_equal('Xfile1', @%) 4597c95940c0SBram Moolenaar call assert_equal([0, 1, 4, 0], getpos('.')) 4598c95940c0SBram Moolenaar 4599c95940c0SBram Moolenaar " Repeat previous test with byte offset %c: ensure that fix to issue #7145 4600c95940c0SBram Moolenaar " does not break this 4601c95940c0SBram Moolenaar set efm=%E===\ %f\ ===,%C%l:%c,%Z%m 4602c95940c0SBram Moolenaar cexpr ["=== Xfile1 ===", "1:3", "errormsg"] 4603c95940c0SBram Moolenaar call assert_equal('Xfile1', @%) 4604c95940c0SBram Moolenaar call assert_equal([0, 1, 3, 0], getpos('.')) 4605c95940c0SBram Moolenaar 4606c45eb770SBram Moolenaar enew | only 4607c45eb770SBram Moolenaar set efm& 4608c45eb770SBram Moolenaar call delete('Xfile1') 4609c45eb770SBram Moolenaarendfunc 4610ee8188fcSBram Moolenaar 4611ee8188fcSBram Moolenaar" Test for the quickfix window buffer 4612ee8188fcSBram Moolenaarfunc Xqfbuf_test(cchar) 4613ee8188fcSBram Moolenaar call s:setup_commands(a:cchar) 4614ee8188fcSBram Moolenaar 4615ee8188fcSBram Moolenaar " Quickfix buffer should be reused across closing and opening a quickfix 4616ee8188fcSBram Moolenaar " window 4617ee8188fcSBram Moolenaar Xexpr "F1:10:Line10" 4618ee8188fcSBram Moolenaar Xopen 4619ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4620ee8188fcSBram Moolenaar Xclose 4621ee8188fcSBram Moolenaar " Even after the quickfix window is closed, the buffer should be loaded 4622ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4623647e24baSBram Moolenaar call assert_true(qfbnum, g:Xgetlist({'qfbufnr' : 0}).qfbufnr) 4624ee8188fcSBram Moolenaar Xopen 4625ee8188fcSBram Moolenaar " Buffer should be reused when opening the window again 4626ee8188fcSBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4627ee8188fcSBram Moolenaar Xclose 4628ee8188fcSBram Moolenaar 4629ee8188fcSBram Moolenaar if a:cchar == 'l' 4630ee8188fcSBram Moolenaar %bwipe 4631ee8188fcSBram Moolenaar " For a location list, when both the file window and the location list 4632ee8188fcSBram Moolenaar " window for the list are closed, then the buffer should be freed. 4633ee8188fcSBram Moolenaar new | only 4634ee8188fcSBram Moolenaar lexpr "F1:10:Line10" 4635ee8188fcSBram Moolenaar let wid = win_getid() 4636ee8188fcSBram Moolenaar lopen 4637ee8188fcSBram Moolenaar let qfbnum = bufnr('') 4638ee8188fcSBram Moolenaar call assert_match(qfbnum . ' %a- "\[Location List]"', execute('ls')) 4639ee8188fcSBram Moolenaar close 4640ee8188fcSBram Moolenaar " When the location list window is closed, the buffer name should not 4641ee8188fcSBram Moolenaar " change to 'Quickfix List' 4642647e24baSBram Moolenaar call assert_match(qfbnum . 'u h- "\[Location List]"', execute('ls!')) 4643ee8188fcSBram Moolenaar call assert_true(bufloaded(qfbnum)) 4644ee8188fcSBram Moolenaar 4645d82a81caSBram Moolenaar " After deleting a location list buffer using ":bdelete", opening the 4646d82a81caSBram Moolenaar " location list window should mark the buffer as a location list buffer. 4647d82a81caSBram Moolenaar exe "bdelete " . qfbnum 4648d82a81caSBram Moolenaar lopen 4649d82a81caSBram Moolenaar call assert_equal("quickfix", &buftype) 4650d82a81caSBram Moolenaar call assert_equal(1, getwininfo(win_getid(winnr()))[0].loclist) 4651d82a81caSBram Moolenaar call assert_equal(wid, getloclist(0, {'filewinid' : 0}).filewinid) 4652d82a81caSBram Moolenaar call assert_false(&swapfile) 4653d82a81caSBram Moolenaar lclose 4654d82a81caSBram Moolenaar 4655eeb1b9c7SBram Moolenaar " When the location list is cleared for the window, the buffer should be 4656eeb1b9c7SBram Moolenaar " removed 4657eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4658eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4659647e24baSBram Moolenaar call assert_equal(0, getloclist(0, {'qfbufnr' : 0}).qfbufnr) 4660eeb1b9c7SBram Moolenaar 4661eeb1b9c7SBram Moolenaar " When the location list is freed with the location list window open, the 4662eeb1b9c7SBram Moolenaar " location list buffer should not be lost. It should be reused when the 4663eeb1b9c7SBram Moolenaar " location list is again populated. 4664eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4665eeb1b9c7SBram Moolenaar lopen 4666eeb1b9c7SBram Moolenaar let wid = win_getid() 4667eeb1b9c7SBram Moolenaar let qfbnum = bufnr('') 4668eeb1b9c7SBram Moolenaar wincmd p 4669eeb1b9c7SBram Moolenaar call setloclist(0, [], 'f') 4670eeb1b9c7SBram Moolenaar lexpr "F1:10:Line10" 4671eeb1b9c7SBram Moolenaar lopen 4672eeb1b9c7SBram Moolenaar call assert_equal(wid, win_getid()) 4673eeb1b9c7SBram Moolenaar call assert_equal(qfbnum, bufnr('')) 4674eeb1b9c7SBram Moolenaar lclose 4675eeb1b9c7SBram Moolenaar 4676eeb1b9c7SBram Moolenaar " When the window with the location list is closed, the buffer should be 4677eeb1b9c7SBram Moolenaar " removed 4678ee8188fcSBram Moolenaar new | only 4679eeb1b9c7SBram Moolenaar call assert_false(bufexists(qfbnum)) 4680ee8188fcSBram Moolenaar endif 4681ee8188fcSBram Moolenaarendfunc 4682ee8188fcSBram Moolenaar 4683ee8188fcSBram Moolenaarfunc Test_qfbuf() 4684ee8188fcSBram Moolenaar call Xqfbuf_test('c') 4685ee8188fcSBram Moolenaar call Xqfbuf_test('l') 4686ee8188fcSBram Moolenaarendfunc 4687eeb1b9c7SBram Moolenaar 4688eeb1b9c7SBram Moolenaar" If there is an autocmd to use only one window, then opening the location 4689eeb1b9c7SBram Moolenaar" list window used to crash Vim. 4690eeb1b9c7SBram Moolenaarfunc Test_winonly_autocmd() 4691eeb1b9c7SBram Moolenaar call s:create_test_file('Xtest1') 4692eeb1b9c7SBram Moolenaar " Autocmd to show only one Vim window at a time 4693eeb1b9c7SBram Moolenaar autocmd WinEnter * only 4694eeb1b9c7SBram Moolenaar new 4695eeb1b9c7SBram Moolenaar " Load the location list 4696eeb1b9c7SBram Moolenaar lexpr "Xtest1:5:Line5\nXtest1:10:Line10\nXtest1:15:Line15" 4697eeb1b9c7SBram Moolenaar let loclistid = getloclist(0, {'id' : 0}).id 4698eeb1b9c7SBram Moolenaar " Open the location list window. Only this window will be shown and the file 4699eeb1b9c7SBram Moolenaar " window is closed. 4700eeb1b9c7SBram Moolenaar lopen 4701eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4702eeb1b9c7SBram Moolenaar " Jump to an entry in the location list and make sure that the cursor is 4703eeb1b9c7SBram Moolenaar " positioned correctly. 4704eeb1b9c7SBram Moolenaar ll 3 4705eeb1b9c7SBram Moolenaar call assert_equal(loclistid, getloclist(0, {'id' : 0}).id) 4706bdd2c290SBram Moolenaar call assert_equal('Xtest1', @%) 4707eeb1b9c7SBram Moolenaar call assert_equal(15, line('.')) 4708eeb1b9c7SBram Moolenaar " Cleanup 4709eeb1b9c7SBram Moolenaar autocmd! WinEnter 4710eeb1b9c7SBram Moolenaar new | only 4711eeb1b9c7SBram Moolenaar call delete('Xtest1') 4712eeb1b9c7SBram Moolenaarendfunc 471339803d82SBram Moolenaar 471439803d82SBram Moolenaar" Test to make sure that an empty quickfix buffer is not reused for loading 471539803d82SBram Moolenaar" a normal buffer. 471639803d82SBram Moolenaarfunc Test_empty_qfbuf() 471739803d82SBram Moolenaar enew | only 471839803d82SBram Moolenaar call writefile(["Test"], 'Xfile1') 471939803d82SBram Moolenaar call setqflist([], 'f') 472039803d82SBram Moolenaar copen | only 472139803d82SBram Moolenaar let qfbuf = bufnr('') 472239803d82SBram Moolenaar edit Xfile1 472339803d82SBram Moolenaar call assert_notequal(qfbuf, bufnr('')) 472439803d82SBram Moolenaar enew 472539803d82SBram Moolenaar call delete('Xfile1') 472639803d82SBram Moolenaarendfunc 47273ff33114SBram Moolenaar 47283ff33114SBram Moolenaar" Test for the :cbelow, :cabove, :lbelow and :labove commands. 4729cf6a55c4SBram Moolenaar" And for the :cafter, :cbefore, :lafter and :lbefore commands. 47303ff33114SBram Moolenaarfunc Xtest_below(cchar) 47313ff33114SBram Moolenaar call s:setup_commands(a:cchar) 47323ff33114SBram Moolenaar 47333ff33114SBram Moolenaar " No quickfix/location list 47343ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 47353ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4736cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4737cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 47383ff33114SBram Moolenaar 47393ff33114SBram Moolenaar " Empty quickfix/location list 47403ff33114SBram Moolenaar call g:Xsetlist([]) 47413ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 47423ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 4743cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4744cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 47453ff33114SBram Moolenaar 47463ff33114SBram Moolenaar call s:create_test_file('X1') 47473ff33114SBram Moolenaar call s:create_test_file('X2') 47483ff33114SBram Moolenaar call s:create_test_file('X3') 47493ff33114SBram Moolenaar call s:create_test_file('X4') 47503ff33114SBram Moolenaar 47513ff33114SBram Moolenaar " Invalid entries 47523ff33114SBram Moolenaar edit X1 47533ff33114SBram Moolenaar call g:Xsetlist(["E1", "E2"]) 47543ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 47553ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 47563ff33114SBram Moolenaar call assert_fails('3Xbelow', 'E42:') 47573ff33114SBram Moolenaar call assert_fails('4Xabove', 'E42:') 4758cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4759cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 4760cf6a55c4SBram Moolenaar call assert_fails('3Xbefore', 'E42:') 4761cf6a55c4SBram Moolenaar call assert_fails('4Xafter', 'E42:') 47623ff33114SBram Moolenaar 47633ff33114SBram Moolenaar " Test the commands with various arguments 4764cf6a55c4SBram Moolenaar Xexpr ["X1:5:3:L5", "X2:5:2:L5", "X2:10:3:L10", "X2:15:4:L15", "X3:3:5:L3"] 47653ff33114SBram Moolenaar edit +7 X2 47663ff33114SBram Moolenaar Xabove 4767bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 47683ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4769cf6a55c4SBram Moolenaar normal 7G 4770cf6a55c4SBram Moolenaar Xbefore 4771bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4772cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4773cf6a55c4SBram Moolenaar 47743ff33114SBram Moolenaar normal 2j 47753ff33114SBram Moolenaar Xbelow 4776bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4777cf6a55c4SBram Moolenaar normal 7G 4778cf6a55c4SBram Moolenaar Xafter 4779bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4780cf6a55c4SBram Moolenaar 47813ff33114SBram Moolenaar " Last error in this file 47823ff33114SBram Moolenaar Xbelow 99 4783bdd2c290SBram Moolenaar call assert_equal(['X2', 15], [@%, line('.')]) 47843ff33114SBram Moolenaar call assert_fails('Xbelow', 'E553:') 4785cf6a55c4SBram Moolenaar normal gg 4786cf6a55c4SBram Moolenaar Xafter 99 4787bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 4], [@%, line('.'), col('.')]) 4788cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E553:') 4789cf6a55c4SBram Moolenaar 47903ff33114SBram Moolenaar " First error in this file 47913ff33114SBram Moolenaar Xabove 99 4792bdd2c290SBram Moolenaar call assert_equal(['X2', 5], [@%, line('.')]) 47933ff33114SBram Moolenaar call assert_fails('Xabove', 'E553:') 4794cf6a55c4SBram Moolenaar normal G 4795cf6a55c4SBram Moolenaar Xbefore 99 4796bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4797cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E553:') 4798cf6a55c4SBram Moolenaar 47993ff33114SBram Moolenaar normal gg 48003ff33114SBram Moolenaar Xbelow 2 4801bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4802cf6a55c4SBram Moolenaar normal gg 4803cf6a55c4SBram Moolenaar Xafter 2 4804bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4805cf6a55c4SBram Moolenaar 48063ff33114SBram Moolenaar normal G 48073ff33114SBram Moolenaar Xabove 2 4808bdd2c290SBram Moolenaar call assert_equal(['X2', 10], [@%, line('.')]) 4809cf6a55c4SBram Moolenaar normal G 4810cf6a55c4SBram Moolenaar Xbefore 2 4811bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 3], [@%, line('.'), col('.')]) 4812cf6a55c4SBram Moolenaar 48133ff33114SBram Moolenaar edit X4 48143ff33114SBram Moolenaar call assert_fails('Xabove', 'E42:') 48153ff33114SBram Moolenaar call assert_fails('Xbelow', 'E42:') 4816cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E42:') 4817cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E42:') 48183ff33114SBram Moolenaar if a:cchar == 'l' 48193ff33114SBram Moolenaar " If a buffer has location list entries from some other window but not 48203ff33114SBram Moolenaar " from the current window, then the commands should fail. 48213ff33114SBram Moolenaar edit X1 | split | call setloclist(0, [], 'f') 48223ff33114SBram Moolenaar call assert_fails('Xabove', 'E776:') 48233ff33114SBram Moolenaar call assert_fails('Xbelow', 'E776:') 4824cf6a55c4SBram Moolenaar call assert_fails('Xbefore', 'E776:') 4825cf6a55c4SBram Moolenaar call assert_fails('Xafter', 'E776:') 48263ff33114SBram Moolenaar close 48273ff33114SBram Moolenaar endif 48283ff33114SBram Moolenaar 48293ff33114SBram Moolenaar " Test for lines with multiple quickfix entries 48303ff33114SBram Moolenaar Xexpr ["X1:5:L5", "X2:5:1:L5_1", "X2:5:2:L5_2", "X2:5:3:L5_3", 48313ff33114SBram Moolenaar \ "X2:10:1:L10_1", "X2:10:2:L10_2", "X2:10:3:L10_3", 48323ff33114SBram Moolenaar \ "X2:15:1:L15_1", "X2:15:2:L15_2", "X2:15:3:L15_3", "X3:3:L3"] 48333ff33114SBram Moolenaar edit +1 X2 48343ff33114SBram Moolenaar Xbelow 2 4835bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 4836cf6a55c4SBram Moolenaar normal 1G 4837cf6a55c4SBram Moolenaar Xafter 2 4838bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 2], [@%, line('.'), col('.')]) 4839cf6a55c4SBram Moolenaar 48403ff33114SBram Moolenaar normal gg 48413ff33114SBram Moolenaar Xbelow 99 4842bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4843cf6a55c4SBram Moolenaar normal gg 4844cf6a55c4SBram Moolenaar Xafter 99 4845bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 3], [@%, line('.'), col('.')]) 4846cf6a55c4SBram Moolenaar 48473ff33114SBram Moolenaar normal G 48483ff33114SBram Moolenaar Xabove 2 4849bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 1], [@%, line('.'), col('.')]) 48503ff33114SBram Moolenaar normal G 4851cf6a55c4SBram Moolenaar Xbefore 2 4852bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 4853cf6a55c4SBram Moolenaar 4854cf6a55c4SBram Moolenaar normal G 48553ff33114SBram Moolenaar Xabove 99 4856bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4857cf6a55c4SBram Moolenaar normal G 4858cf6a55c4SBram Moolenaar Xbefore 99 4859bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4860cf6a55c4SBram Moolenaar 48613ff33114SBram Moolenaar normal 10G 48623ff33114SBram Moolenaar Xabove 4863bdd2c290SBram Moolenaar call assert_equal(['X2', 5, 1], [@%, line('.'), col('.')]) 4864cf6a55c4SBram Moolenaar normal 10G$ 4865cf6a55c4SBram Moolenaar 2Xbefore 4866bdd2c290SBram Moolenaar call assert_equal(['X2', 10, 2], [@%, line('.'), col('.')]) 4867cf6a55c4SBram Moolenaar 48683ff33114SBram Moolenaar normal 10G 48693ff33114SBram Moolenaar Xbelow 4870bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 1], [@%, line('.'), col('.')]) 4871cf6a55c4SBram Moolenaar normal 9G 4872cf6a55c4SBram Moolenaar 5Xafter 4873bdd2c290SBram Moolenaar call assert_equal(['X2', 15, 2], [@%, line('.'), col('.')]) 48743ff33114SBram Moolenaar 48753ff33114SBram Moolenaar " Invalid range 48763ff33114SBram Moolenaar if a:cchar == 'c' 487725190db2SBram Moolenaar call assert_fails('-2cbelow', 'E16:') 4878cf6a55c4SBram Moolenaar call assert_fails('-2cafter', 'E16:') 48793ff33114SBram Moolenaar else 488025190db2SBram Moolenaar call assert_fails('-2lbelow', 'E16:') 4881cf6a55c4SBram Moolenaar call assert_fails('-2lafter', 'E16:') 48823ff33114SBram Moolenaar endif 48833ff33114SBram Moolenaar 48843ff33114SBram Moolenaar call delete('X1') 48853ff33114SBram Moolenaar call delete('X2') 48863ff33114SBram Moolenaar call delete('X3') 48873ff33114SBram Moolenaar call delete('X4') 48883ff33114SBram Moolenaarendfunc 48893ff33114SBram Moolenaar 48903ff33114SBram Moolenaarfunc Test_cbelow() 48913ff33114SBram Moolenaar call Xtest_below('c') 48923ff33114SBram Moolenaar call Xtest_below('l') 48933ff33114SBram Moolenaarendfunc 489425190db2SBram Moolenaar 489525190db2SBram Moolenaarfunc Test_quickfix_count() 489625190db2SBram Moolenaar let commands = [ 489725190db2SBram Moolenaar \ 'cNext', 489825190db2SBram Moolenaar \ 'cNfile', 489925190db2SBram Moolenaar \ 'cabove', 490025190db2SBram Moolenaar \ 'cbelow', 490125190db2SBram Moolenaar \ 'cfirst', 490225190db2SBram Moolenaar \ 'clast', 490325190db2SBram Moolenaar \ 'cnewer', 490425190db2SBram Moolenaar \ 'cnext', 490525190db2SBram Moolenaar \ 'cnfile', 490625190db2SBram Moolenaar \ 'colder', 490725190db2SBram Moolenaar \ 'cprevious', 490825190db2SBram Moolenaar \ 'crewind', 490925190db2SBram Moolenaar \ 491025190db2SBram Moolenaar \ 'lNext', 491125190db2SBram Moolenaar \ 'lNfile', 491225190db2SBram Moolenaar \ 'labove', 491325190db2SBram Moolenaar \ 'lbelow', 491425190db2SBram Moolenaar \ 'lfirst', 491525190db2SBram Moolenaar \ 'llast', 491625190db2SBram Moolenaar \ 'lnewer', 491725190db2SBram Moolenaar \ 'lnext', 491825190db2SBram Moolenaar \ 'lnfile', 491925190db2SBram Moolenaar \ 'lolder', 492025190db2SBram Moolenaar \ 'lprevious', 492125190db2SBram Moolenaar \ 'lrewind', 492225190db2SBram Moolenaar \ ] 492325190db2SBram Moolenaar for cmd in commands 492425190db2SBram Moolenaar call assert_fails('-1' .. cmd, 'E16:') 492525190db2SBram Moolenaar call assert_fails('.' .. cmd, 'E16:') 492625190db2SBram Moolenaar call assert_fails('%' .. cmd, 'E16:') 492725190db2SBram Moolenaar call assert_fails('$' .. cmd, 'E16:') 492825190db2SBram Moolenaar endfor 492925190db2SBram Moolenaarendfunc 49306a0cc916SBram Moolenaar 49316a0cc916SBram Moolenaar" Test for aborting quickfix commands using QuickFixCmdPre 49326a0cc916SBram Moolenaarfunc Xtest_qfcmd_abort(cchar) 49336a0cc916SBram Moolenaar call s:setup_commands(a:cchar) 49346a0cc916SBram Moolenaar 49356a0cc916SBram Moolenaar call g:Xsetlist([], 'f') 49366a0cc916SBram Moolenaar 49376a0cc916SBram Moolenaar " cexpr/lexpr 49386a0cc916SBram Moolenaar let e = '' 49396a0cc916SBram Moolenaar try 49406a0cc916SBram Moolenaar Xexpr ["F1:10:Line10", "F2:20:Line20"] 49416a0cc916SBram Moolenaar catch /.*/ 49426a0cc916SBram Moolenaar let e = v:exception 49436a0cc916SBram Moolenaar endtry 49446a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49456a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49466a0cc916SBram Moolenaar 49476a0cc916SBram Moolenaar " cfile/lfile 49486a0cc916SBram Moolenaar call writefile(["F1:10:Line10", "F2:20:Line20"], 'Xfile1') 49496a0cc916SBram Moolenaar let e = '' 49506a0cc916SBram Moolenaar try 49516a0cc916SBram Moolenaar Xfile Xfile1 49526a0cc916SBram Moolenaar catch /.*/ 49536a0cc916SBram Moolenaar let e = v:exception 49546a0cc916SBram Moolenaar endtry 49556a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49566a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49576a0cc916SBram Moolenaar call delete('Xfile1') 49586a0cc916SBram Moolenaar 49596a0cc916SBram Moolenaar " cgetbuffer/lgetbuffer 49606a0cc916SBram Moolenaar enew! 49616a0cc916SBram Moolenaar call append(0, ["F1:10:Line10", "F2:20:Line20"]) 49626a0cc916SBram Moolenaar let e = '' 49636a0cc916SBram Moolenaar try 49646a0cc916SBram Moolenaar Xgetbuffer 49656a0cc916SBram Moolenaar catch /.*/ 49666a0cc916SBram Moolenaar let e = v:exception 49676a0cc916SBram Moolenaar endtry 49686a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49696a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49706a0cc916SBram Moolenaar enew! 49716a0cc916SBram Moolenaar 49726a0cc916SBram Moolenaar " vimgrep/lvimgrep 49736a0cc916SBram Moolenaar let e = '' 49746a0cc916SBram Moolenaar try 49756a0cc916SBram Moolenaar Xvimgrep /func/ test_quickfix.vim 49766a0cc916SBram Moolenaar catch /.*/ 49776a0cc916SBram Moolenaar let e = v:exception 49786a0cc916SBram Moolenaar endtry 49796a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49806a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49816a0cc916SBram Moolenaar 49826a0cc916SBram Moolenaar " helpgrep/lhelpgrep 49836a0cc916SBram Moolenaar let e = '' 49846a0cc916SBram Moolenaar try 49856a0cc916SBram Moolenaar Xhelpgrep quickfix 49866a0cc916SBram Moolenaar catch /.*/ 49876a0cc916SBram Moolenaar let e = v:exception 49886a0cc916SBram Moolenaar endtry 49896a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 49906a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 49916a0cc916SBram Moolenaar 49926a0cc916SBram Moolenaar " grep/lgrep 49936a0cc916SBram Moolenaar if has('unix') 49946a0cc916SBram Moolenaar let e = '' 49956a0cc916SBram Moolenaar try 49966a0cc916SBram Moolenaar silent Xgrep func test_quickfix.vim 49976a0cc916SBram Moolenaar catch /.*/ 49986a0cc916SBram Moolenaar let e = v:exception 49996a0cc916SBram Moolenaar endtry 50006a0cc916SBram Moolenaar call assert_equal('AbortCmd', e) 50016a0cc916SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 50026a0cc916SBram Moolenaar endif 50036a0cc916SBram Moolenaarendfunc 50046a0cc916SBram Moolenaar 50056a0cc916SBram Moolenaarfunc Test_qfcmd_abort() 50066a0cc916SBram Moolenaar augroup QF_Test 50076a0cc916SBram Moolenaar au! 50086a0cc916SBram Moolenaar autocmd QuickFixCmdPre * throw "AbortCmd" 50096a0cc916SBram Moolenaar augroup END 50106a0cc916SBram Moolenaar 50116a0cc916SBram Moolenaar call Xtest_qfcmd_abort('c') 50126a0cc916SBram Moolenaar call Xtest_qfcmd_abort('l') 50136a0cc916SBram Moolenaar 50146a0cc916SBram Moolenaar augroup QF_Test 50156a0cc916SBram Moolenaar au! 50166a0cc916SBram Moolenaar augroup END 50176a0cc916SBram Moolenaarendfunc 50186a0cc916SBram Moolenaar 5019d8a8c4caSBram Moolenaar" Test for using a file in one of the parent directories. 5020d8a8c4caSBram Moolenaarfunc Test_search_in_dirstack() 5021d8a8c4caSBram Moolenaar call mkdir('Xtestdir/a/b/c', 'p') 5022d8a8c4caSBram Moolenaar let save_cwd = getcwd() 5023d8a8c4caSBram Moolenaar call writefile(["X1_L1", "X1_L2"], 'Xtestdir/Xfile1') 5024d8a8c4caSBram Moolenaar call writefile(["X2_L1", "X2_L2"], 'Xtestdir/a/Xfile2') 5025d8a8c4caSBram Moolenaar call writefile(["X3_L1", "X3_L2"], 'Xtestdir/a/b/Xfile3') 5026d8a8c4caSBram Moolenaar call writefile(["X4_L1", "X4_L2"], 'Xtestdir/a/b/c/Xfile4') 5027d8a8c4caSBram Moolenaar 5028d8a8c4caSBram Moolenaar let lines = "Entering dir Xtestdir\n" . 5029d8a8c4caSBram Moolenaar \ "Entering dir a\n" . 5030d8a8c4caSBram Moolenaar \ "Entering dir b\n" . 5031d8a8c4caSBram Moolenaar \ "Xfile2:2:X2_L2\n" . 5032d8a8c4caSBram Moolenaar \ "Leaving dir a\n" . 5033d8a8c4caSBram Moolenaar \ "Xfile1:2:X1_L2\n" . 5034d8a8c4caSBram Moolenaar \ "Xfile3:1:X3_L1\n" . 5035d8a8c4caSBram Moolenaar \ "Entering dir c\n" . 5036d8a8c4caSBram Moolenaar \ "Xfile4:2:X4_L2\n" . 503788a3e2b2SBram Moolenaar \ "Leaving dir c\n" 5038d8a8c4caSBram Moolenaar set efm=%DEntering\ dir\ %f,%XLeaving\ dir\ %f,%f:%l:%m 503988a3e2b2SBram Moolenaar cexpr lines .. "Leaving dir Xtestdir|\n" | let next = 1 5040d8a8c4caSBram Moolenaar call assert_equal(11, getqflist({'size' : 0}).size) 5041d8a8c4caSBram Moolenaar call assert_equal(4, getqflist({'idx' : 0}).idx) 5042d8a8c4caSBram Moolenaar call assert_equal('X2_L2', getline('.')) 504388a3e2b2SBram Moolenaar call assert_equal(1, next) 5044d8a8c4caSBram Moolenaar cnext 5045d8a8c4caSBram Moolenaar call assert_equal(6, getqflist({'idx' : 0}).idx) 5046d8a8c4caSBram Moolenaar call assert_equal('X1_L2', getline('.')) 5047d8a8c4caSBram Moolenaar cnext 5048d8a8c4caSBram Moolenaar call assert_equal(7, getqflist({'idx' : 0}).idx) 5049d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 5050d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 5051d8a8c4caSBram Moolenaar cnext 5052d8a8c4caSBram Moolenaar call assert_equal(9, getqflist({'idx' : 0}).idx) 5053d8a8c4caSBram Moolenaar call assert_equal(1, line('$')) 5054d8a8c4caSBram Moolenaar call assert_equal('', getline(1)) 5055d8a8c4caSBram Moolenaar 5056d8a8c4caSBram Moolenaar set efm& 5057d8a8c4caSBram Moolenaar exe 'cd ' . save_cwd 5058d8a8c4caSBram Moolenaar call delete('Xtestdir', 'rf') 5059d8a8c4caSBram Moolenaarendfunc 5060d8a8c4caSBram Moolenaar 50611860bde9SBram Moolenaar" Test for :cquit 50621860bde9SBram Moolenaarfunc Test_cquit() 50631860bde9SBram Moolenaar " Exit Vim with a non-zero value 50641860bde9SBram Moolenaar if RunVim([], ["cquit 7"], '') 50651860bde9SBram Moolenaar call assert_equal(7, v:shell_error) 50661860bde9SBram Moolenaar endif 50671860bde9SBram Moolenaar 50681860bde9SBram Moolenaar if RunVim([], ["50cquit"], '') 50691860bde9SBram Moolenaar call assert_equal(50, v:shell_error) 50701860bde9SBram Moolenaar endif 50711860bde9SBram Moolenaar 50721860bde9SBram Moolenaar " Exit Vim with default value 50731860bde9SBram Moolenaar if RunVim([], ["cquit"], '') 50741860bde9SBram Moolenaar call assert_equal(1, v:shell_error) 50751860bde9SBram Moolenaar endif 50761860bde9SBram Moolenaar 50771860bde9SBram Moolenaar " Exit Vim with zero value 50781860bde9SBram Moolenaar if RunVim([], ["cquit 0"], '') 50791860bde9SBram Moolenaar call assert_equal(0, v:shell_error) 50801860bde9SBram Moolenaar endif 50811860bde9SBram Moolenaar 50821860bde9SBram Moolenaar " Exit Vim with negative value 50831860bde9SBram Moolenaar call assert_fails('-3cquit', 'E16:') 50841860bde9SBram Moolenaarendfunc 50851860bde9SBram Moolenaar 5086858ba06dSBram Moolenaar" Test for getting a specific item from a quickfix list 5087858ba06dSBram Moolenaarfunc Xtest_getqflist_by_idx(cchar) 5088858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 5089858ba06dSBram Moolenaar " Empty list 5090858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 1, 'items' : 0}).items) 5091858ba06dSBram Moolenaar Xexpr ['F1:10:L10', 'F1:20:L20'] 5092858ba06dSBram Moolenaar let l = g:Xgetlist({'idx' : 2, 'items' : 0}).items 5093858ba06dSBram Moolenaar call assert_equal(bufnr('F1'), l[0].bufnr) 5094858ba06dSBram Moolenaar call assert_equal(20, l[0].lnum) 5095858ba06dSBram Moolenaar call assert_equal('L20', l[0].text) 5096858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : -1, 'items' : 0}).items) 5097858ba06dSBram Moolenaar call assert_equal([], g:Xgetlist({'idx' : 3, 'items' : 0}).items) 5098858ba06dSBram Moolenaar %bwipe! 5099858ba06dSBram Moolenaarendfunc 5100858ba06dSBram Moolenaar 5101858ba06dSBram Moolenaarfunc Test_getqflist_by_idx() 5102858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('c') 5103858ba06dSBram Moolenaar call Xtest_getqflist_by_idx('l') 5104858ba06dSBram Moolenaarendfunc 5105858ba06dSBram Moolenaar 5106858ba06dSBram Moolenaar" Test for the 'quickfixtextfunc' setting 5107858ba06dSBram Moolenaarfunc Tqfexpr(info) 5108858ba06dSBram Moolenaar if a:info.quickfix 510900e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 5110858ba06dSBram Moolenaar else 511100e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 5112858ba06dSBram Moolenaar endif 5113858ba06dSBram Moolenaar 511400e260bbSBram Moolenaar let l = [] 511500e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 511600e260bbSBram Moolenaar let e = qfl[idx] 5117858ba06dSBram Moolenaar let s = '' 5118858ba06dSBram Moolenaar if e.bufnr != 0 5119858ba06dSBram Moolenaar let bname = bufname(e.bufnr) 5120858ba06dSBram Moolenaar let s ..= fnamemodify(bname, ':.') 5121858ba06dSBram Moolenaar endif 5122858ba06dSBram Moolenaar let s ..= '-' 5123858ba06dSBram Moolenaar let s ..= 'L' .. string(e.lnum) .. 'C' .. string(e.col) .. '-' 5124858ba06dSBram Moolenaar let s ..= e.text 512500e260bbSBram Moolenaar call add(l, s) 512600e260bbSBram Moolenaar endfor 5127858ba06dSBram Moolenaar 512800e260bbSBram Moolenaar return l 5129858ba06dSBram Moolenaarendfunc 5130858ba06dSBram Moolenaar 5131858ba06dSBram Moolenaarfunc Xtest_qftextfunc(cchar) 5132858ba06dSBram Moolenaar call s:setup_commands(a:cchar) 5133858ba06dSBram Moolenaar 5134858ba06dSBram Moolenaar set efm=%f:%l:%c:%m 5135858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 5136d43906d2SBram Moolenaar call assert_equal('Tqfexpr', &quickfixtextfunc) 5137d43906d2SBram Moolenaar call assert_equal('', 5138d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 51396864efa5Sthinca call g:Xsetlist([ 51406864efa5Sthinca \ { 'filename': 'F1', 'lnum': 10, 'col': 2, 51416864efa5Sthinca \ 'end_col': 7, 'text': 'green'}, 51426864efa5Sthinca \ { 'filename': 'F1', 'lnum': 20, 'end_lnum': 25, 'col': 4, 51436864efa5Sthinca \ 'end_col': 8, 'text': 'blue'}, 51446864efa5Sthinca \ ]) 51456864efa5Sthinca 5146858ba06dSBram Moolenaar Xwindow 5147858ba06dSBram Moolenaar call assert_equal('F1-L10C2-green', getline(1)) 5148858ba06dSBram Moolenaar call assert_equal('F1-L20C4-blue', getline(2)) 5149858ba06dSBram Moolenaar Xclose 5150858ba06dSBram Moolenaar set quickfixtextfunc&vim 5151858ba06dSBram Moolenaar Xwindow 51526864efa5Sthinca call assert_equal('F1|10 col 2-7| green', getline(1)) 51536864efa5Sthinca call assert_equal('F1|20-25 col 4-8| blue', getline(2)) 5154858ba06dSBram Moolenaar Xclose 5155858ba06dSBram Moolenaar set efm& 5156858ba06dSBram Moolenaar set quickfixtextfunc& 5157858ba06dSBram Moolenaar 5158858ba06dSBram Moolenaar " Test for per list 'quickfixtextfunc' setting 5159858ba06dSBram Moolenaar func PerQfText(info) 5160858ba06dSBram Moolenaar if a:info.quickfix 516100e260bbSBram Moolenaar let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items 5162858ba06dSBram Moolenaar else 516300e260bbSBram Moolenaar let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items 5164858ba06dSBram Moolenaar endif 5165858ba06dSBram Moolenaar if empty(qfl) 516600e260bbSBram Moolenaar return [] 5167858ba06dSBram Moolenaar endif 516800e260bbSBram Moolenaar let l = [] 516900e260bbSBram Moolenaar for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) 517000e260bbSBram Moolenaar call add(l, 'Line ' .. qfl[idx].lnum .. ', Col ' .. qfl[idx].col) 517100e260bbSBram Moolenaar endfor 517200e260bbSBram Moolenaar return l 5173858ba06dSBram Moolenaar endfunc 5174858ba06dSBram Moolenaar set quickfixtextfunc=Tqfexpr 5175858ba06dSBram Moolenaar call g:Xsetlist([], ' ', {'quickfixtextfunc' : "PerQfText"}) 5176858ba06dSBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 5177858ba06dSBram Moolenaar Xwindow 5178858ba06dSBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 5179858ba06dSBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 5180858ba06dSBram Moolenaar Xclose 5181d43906d2SBram Moolenaar call assert_equal(function('PerQfText'), 5182d43906d2SBram Moolenaar \ g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 51837ba5a7efSBram Moolenaar " Add entries to the list when the quickfix buffer is hidden 51847ba5a7efSBram Moolenaar Xaddexpr ['F1:30:6:red'] 51857ba5a7efSBram Moolenaar Xwindow 51867ba5a7efSBram Moolenaar call assert_equal('Line 30, Col 6', getline(3)) 51877ba5a7efSBram Moolenaar Xclose 5188858ba06dSBram Moolenaar call g:Xsetlist([], 'r', {'quickfixtextfunc' : ''}) 5189d43906d2SBram Moolenaar call assert_equal('', g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc) 5190858ba06dSBram Moolenaar set quickfixtextfunc& 5191858ba06dSBram Moolenaar delfunc PerQfText 5192858ba06dSBram Moolenaar 5193858ba06dSBram Moolenaar " Non-existing function 5194858ba06dSBram Moolenaar set quickfixtextfunc=Tabc 5195858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 5196858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 5197858ba06dSBram Moolenaar Xclose 5198858ba06dSBram Moolenaar set quickfixtextfunc& 5199858ba06dSBram Moolenaar 5200858ba06dSBram Moolenaar " set option to a non-function 5201858ba06dSBram Moolenaar set quickfixtextfunc=[10,\ 20] 5202858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') 5203858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E117:') 5204858ba06dSBram Moolenaar Xclose 5205858ba06dSBram Moolenaar set quickfixtextfunc& 5206858ba06dSBram Moolenaar 5207858ba06dSBram Moolenaar " set option to a function with different set of arguments 5208858ba06dSBram Moolenaar func Xqftext(a, b, c) 5209858ba06dSBram Moolenaar return a:a .. a:b .. a:c 5210858ba06dSBram Moolenaar endfunc 5211858ba06dSBram Moolenaar set quickfixtextfunc=Xqftext 5212858ba06dSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E119:') 5213858ba06dSBram Moolenaar call assert_fails("Xwindow", 'E119:') 5214858ba06dSBram Moolenaar Xclose 521500e260bbSBram Moolenaar 521600e260bbSBram Moolenaar " set option to a function that returns a list with non-strings 521700e260bbSBram Moolenaar func Xqftext2(d) 521800e260bbSBram Moolenaar return ['one', [], 'two'] 521900e260bbSBram Moolenaar endfunc 522000e260bbSBram Moolenaar set quickfixtextfunc=Xqftext2 522100e260bbSBram Moolenaar call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue', 'F1:30:6:red']", 522200e260bbSBram Moolenaar \ 'E730:') 522300e260bbSBram Moolenaar call assert_fails('Xwindow', 'E730:') 5224d43906d2SBram Moolenaar call assert_equal(['one', 'F1|20 col 4| blue', 'F1|30 col 6| red'], 5225d43906d2SBram Moolenaar \ getline(1, '$')) 522600e260bbSBram Moolenaar Xclose 522700e260bbSBram Moolenaar 5228858ba06dSBram Moolenaar set quickfixtextfunc& 5229858ba06dSBram Moolenaar delfunc Xqftext 523000e260bbSBram Moolenaar delfunc Xqftext2 5231d43906d2SBram Moolenaar 5232d43906d2SBram Moolenaar " set the global option to a lambda function 5233d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ map(g:Xgetlist({'id'\ :\ d.id,\ 'items'\ :\ 1}).items[d.start_idx-1:d.end_idx-1],\ 'v:val.text')} 5234d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5235d43906d2SBram Moolenaar Xwindow 5236d43906d2SBram Moolenaar call assert_equal(['green', 'blue'], getline(1, '$')) 5237d43906d2SBram Moolenaar Xclose 5238d43906d2SBram 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) 5239d43906d2SBram Moolenaar set quickfixtextfunc& 5240d43906d2SBram Moolenaar 5241d43906d2SBram Moolenaar " use a lambda function that returns an empty list 5242d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ []} 5243d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5244d43906d2SBram Moolenaar Xwindow 5245d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 5246d43906d2SBram Moolenaar \ getline(1, '$')) 5247d43906d2SBram Moolenaar Xclose 5248d43906d2SBram Moolenaar set quickfixtextfunc& 5249d43906d2SBram Moolenaar 5250d43906d2SBram Moolenaar " use a lambda function that returns a list with empty strings 5251d43906d2SBram Moolenaar set quickfixtextfunc={d\ ->\ ['',\ '']} 5252d43906d2SBram Moolenaar Xexpr ['F1:10:2:green', 'F1:20:4:blue'] 5253d43906d2SBram Moolenaar Xwindow 5254d43906d2SBram Moolenaar call assert_equal(['F1|10 col 2| green', 'F1|20 col 4| blue'], 5255d43906d2SBram Moolenaar \ getline(1, '$')) 5256d43906d2SBram Moolenaar Xclose 5257d43906d2SBram Moolenaar set quickfixtextfunc& 5258d43906d2SBram Moolenaar 5259d43906d2SBram Moolenaar " set the per-quickfix list text function to a lambda function 5260d43906d2SBram Moolenaar call g:Xsetlist([], ' ', 5261d43906d2SBram Moolenaar \ {'quickfixtextfunc' : 5262d43906d2SBram Moolenaar \ {d -> map(g:Xgetlist({'id' : d.id, 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 5263d43906d2SBram Moolenaar \ "'Line ' .. v:val.lnum .. ', Col ' .. v:val.col")}}) 5264d43906d2SBram Moolenaar Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] 5265d43906d2SBram Moolenaar Xwindow 5266d43906d2SBram Moolenaar call assert_equal('Line 10, Col 2', getline(1)) 5267d43906d2SBram Moolenaar call assert_equal('Line 20, Col 4', getline(2)) 5268d43906d2SBram Moolenaar Xclose 5269d43906d2SBram Moolenaar call assert_match("function('<lambda>\\d\\+')", string(g:Xgetlist({'quickfixtextfunc' : 1}).quickfixtextfunc)) 5270d43906d2SBram Moolenaar call g:Xsetlist([], 'f') 5271858ba06dSBram Moolenaarendfunc 5272858ba06dSBram Moolenaar 5273858ba06dSBram Moolenaarfunc Test_qftextfunc() 5274858ba06dSBram Moolenaar call Xtest_qftextfunc('c') 5275858ba06dSBram Moolenaar call Xtest_qftextfunc('l') 5276858ba06dSBram Moolenaarendfunc 5277858ba06dSBram Moolenaar 5278ad52f96aSYegappan Lakshmanan" Test for updating a location list for some other window and check that 5279ad52f96aSYegappan Lakshmanan" 'qftextfunc' uses the correct location list. 5280ad52f96aSYegappan Lakshmananfunc Test_qftextfunc_other_loclist() 5281ad52f96aSYegappan Lakshmanan %bw! 5282ad52f96aSYegappan Lakshmanan call setloclist(0, [], 'f') 5283ad52f96aSYegappan Lakshmanan 5284ad52f96aSYegappan Lakshmanan " create a window and a location list for it and open the location list 5285ad52f96aSYegappan Lakshmanan " window 5286ad52f96aSYegappan Lakshmanan lexpr ['F1:10:12:one', 'F1:20:14:two'] 5287ad52f96aSYegappan Lakshmanan let w1_id = win_getid() 5288ad52f96aSYegappan Lakshmanan call setloclist(0, [], ' ', 5289ad52f96aSYegappan Lakshmanan \ {'lines': ['F1:10:12:one', 'F1:20:14:two'], 5290ad52f96aSYegappan Lakshmanan \ 'quickfixtextfunc': 5291ad52f96aSYegappan Lakshmanan \ {d -> map(getloclist(d.winid, {'id' : d.id, 5292ad52f96aSYegappan Lakshmanan \ 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 5293ad52f96aSYegappan Lakshmanan \ "'Line ' .. v:val.lnum .. ', Col ' .. v:val.col")}}) 5294ad52f96aSYegappan Lakshmanan lwindow 5295ad52f96aSYegappan Lakshmanan let w2_id = win_getid() 5296ad52f96aSYegappan Lakshmanan 5297ad52f96aSYegappan Lakshmanan " create another window and a location list for it and open the location 5298ad52f96aSYegappan Lakshmanan " list window 5299ad52f96aSYegappan Lakshmanan topleft new 5300ad52f96aSYegappan Lakshmanan let w3_id = win_getid() 5301ad52f96aSYegappan Lakshmanan call setloclist(0, [], ' ', 5302ad52f96aSYegappan Lakshmanan \ {'lines': ['F2:30:32:eleven', 'F2:40:34:twelve'], 5303ad52f96aSYegappan Lakshmanan \ 'quickfixtextfunc': 5304ad52f96aSYegappan Lakshmanan \ {d -> map(getloclist(d.winid, {'id' : d.id, 5305ad52f96aSYegappan Lakshmanan \ 'items' : 1}).items[d.start_idx-1:d.end_idx-1], 5306ad52f96aSYegappan Lakshmanan \ "'Ligne ' .. v:val.lnum .. ', Colonne ' .. v:val.col")}}) 5307ad52f96aSYegappan Lakshmanan lwindow 5308ad52f96aSYegappan Lakshmanan let w4_id = win_getid() 5309ad52f96aSYegappan Lakshmanan 5310ad52f96aSYegappan Lakshmanan topleft new 5311ad52f96aSYegappan Lakshmanan lexpr ['F3:50:52:green', 'F3:60:54:blue'] 5312ad52f96aSYegappan Lakshmanan let w5_id = win_getid() 5313ad52f96aSYegappan Lakshmanan 5314ad52f96aSYegappan Lakshmanan " change the location list for some other window 5315ad52f96aSYegappan Lakshmanan call setloclist(0, [], 'r', {'lines': ['F3:55:56:aaa', 'F3:57:58:bbb']}) 5316ad52f96aSYegappan Lakshmanan call setloclist(w1_id, [], 'r', {'lines': ['F1:62:63:bbb', 'F1:64:65:ccc']}) 5317ad52f96aSYegappan Lakshmanan call setloclist(w3_id, [], 'r', {'lines': ['F2:76:77:ddd', 'F2:78:79:eee']}) 5318ad52f96aSYegappan Lakshmanan call assert_equal(['Line 62, Col 63', 'Line 64, Col 65'], 5319ad52f96aSYegappan Lakshmanan \ getbufline(winbufnr(w2_id), 1, '$')) 5320ad52f96aSYegappan Lakshmanan call assert_equal(['Ligne 76, Colonne 77', 'Ligne 78, Colonne 79'], 5321ad52f96aSYegappan Lakshmanan \ getbufline(winbufnr(w4_id), 1, '$')) 5322ad52f96aSYegappan Lakshmanan call setloclist(w2_id, [], 'r', {'lines': ['F1:32:33:fff', 'F1:34:35:ggg']}) 5323ad52f96aSYegappan Lakshmanan call setloclist(w4_id, [], 'r', {'lines': ['F2:46:47:hhh', 'F2:48:49:jjj']}) 5324ad52f96aSYegappan Lakshmanan call assert_equal(['Line 32, Col 33', 'Line 34, Col 35'], 5325ad52f96aSYegappan Lakshmanan \ getbufline(winbufnr(w2_id), 1, '$')) 5326ad52f96aSYegappan Lakshmanan call assert_equal(['Ligne 46, Colonne 47', 'Ligne 48, Colonne 49'], 5327ad52f96aSYegappan Lakshmanan \ getbufline(winbufnr(w4_id), 1, '$')) 5328ad52f96aSYegappan Lakshmanan 5329ad52f96aSYegappan Lakshmanan call win_gotoid(w5_id) 5330ad52f96aSYegappan Lakshmanan lwindow 5331ad52f96aSYegappan Lakshmanan call assert_equal(['F3|55 col 56| aaa', 'F3|57 col 58| bbb'], 5332ad52f96aSYegappan Lakshmanan \ getline(1, '$')) 5333ad52f96aSYegappan Lakshmanan %bw! 5334ad52f96aSYegappan Lakshmananendfunc 5335ad52f96aSYegappan Lakshmanan 5336ec98e93aSBram Moolenaar" Running :lhelpgrep command more than once in a help window, doesn't jump to 5337ec98e93aSBram Moolenaar" the help topic 5338ec98e93aSBram Moolenaarfunc Test_lhelpgrep_from_help_window() 5339ec98e93aSBram Moolenaar call mkdir('Xtestdir/doc', 'p') 5340ec98e93aSBram Moolenaar call writefile(['window'], 'Xtestdir/doc/a.txt') 5341ec98e93aSBram Moolenaar call writefile(['buffer'], 'Xtestdir/doc/b.txt') 5342ec98e93aSBram Moolenaar let save_rtp = &rtp 5343ec98e93aSBram Moolenaar let &rtp = 'Xtestdir' 5344ec98e93aSBram Moolenaar lhelpgrep window 5345ec98e93aSBram Moolenaar lhelpgrep buffer 5346ec98e93aSBram Moolenaar call assert_equal('b.txt', fnamemodify(@%, ":p:t")) 5347ec98e93aSBram Moolenaar lhelpgrep window 5348ec98e93aSBram Moolenaar call assert_equal('a.txt', fnamemodify(@%, ":p:t")) 5349ec98e93aSBram Moolenaar let &rtp = save_rtp 5350ec98e93aSBram Moolenaar call delete('Xtestdir', 'rf') 5351ec98e93aSBram Moolenaar new | only! 5352ec98e93aSBram Moolenaarendfunc 5353ec98e93aSBram Moolenaar 5354f7c4d836SBram Moolenaar" Test for the crash fixed by 7.3.715 5355f7c4d836SBram Moolenaarfunc Test_setloclist_crash() 5356f7c4d836SBram Moolenaar %bw! 5357f7c4d836SBram Moolenaar let g:BufNum = bufnr() 5358f7c4d836SBram Moolenaar augroup QF_Test 5359f7c4d836SBram Moolenaar au! 5360f7c4d836SBram Moolenaar au BufUnload * call setloclist(0, [{'bufnr':g:BufNum, 'lnum':1, 'col':1, 'text': 'tango down'}]) 5361f7c4d836SBram Moolenaar augroup END 5362f7c4d836SBram Moolenaar 5363f7c4d836SBram Moolenaar try 5364f7c4d836SBram Moolenaar lvimgrep /.*/ *.mak 5365f7c4d836SBram Moolenaar catch /E926:/ 5366f7c4d836SBram Moolenaar endtry 5367f7c4d836SBram Moolenaar call assert_equal('tango down', getloclist(0, {'items' : 0}).items[0].text) 5368f7c4d836SBram Moolenaar call assert_equal(1, getloclist(0, {'size' : 0}).size) 5369f7c4d836SBram Moolenaar 5370f7c4d836SBram Moolenaar augroup QF_Test 5371f7c4d836SBram Moolenaar au! 5372f7c4d836SBram Moolenaar augroup END 5373f7c4d836SBram Moolenaar unlet g:BufNum 5374f7c4d836SBram Moolenaar %bw! 5375f7c4d836SBram Moolenaarendfunc 5376f7c4d836SBram Moolenaar 53772ce77903SBram Moolenaar" Test for adding an invalid entry with the quickfix window open and making 53782ce77903SBram Moolenaar" sure that the window contents are not changed 53792ce77903SBram Moolenaarfunc Test_add_invalid_entry_with_qf_window() 53802ce77903SBram Moolenaar call setqflist([], 'f') 53812ce77903SBram Moolenaar cexpr "Xfile1:10:aa" 53822ce77903SBram Moolenaar copen 53832ce77903SBram Moolenaar call setqflist(['bb'], 'a') 53842ce77903SBram Moolenaar call assert_equal(1, line('$')) 53852ce77903SBram Moolenaar call assert_equal(['Xfile1|10| aa'], getline(1, '$')) 53866864efa5Sthinca call assert_equal([{'lnum': 10 , 'end_lnum': 0 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 53870d5e1ec3Sshane.xb.qian 53880d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 53890d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 53900d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10| aa'] , getline(1 , '$')) 53910d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': 0 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 53920d5e1ec3Sshane.xb.qian 53930d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': 0 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 53940d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 53950d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10| aa'] , getline(1 , '$')) 53960d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': 0 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 53970d5e1ec3Sshane.xb.qian 53980d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': -456 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 53990d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 54000d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10| aa'] , getline(1 , '$')) 54010d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 0 , 'end_col': -456 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 54020d5e1ec3Sshane.xb.qian 54030d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 54040d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 54050d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10 col 666| aa'] , getline(1 , '$')) 54060d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 0 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 54070d5e1ec3Sshane.xb.qian 54080d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': -456 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 54090d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 54100d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10 col 666| aa'] , getline(1 , '$')) 54110d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': -456 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 54120d5e1ec3Sshane.xb.qian 54130d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 222 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 54140d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 54150d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10 col 666-222| aa'] , getline(1 , '$')) 54160d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': -123 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 222 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 54170d5e1ec3Sshane.xb.qian 54180d5e1ec3Sshane.xb.qian call setqflist([{'lnum': 10 , 'end_lnum': 6 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 222 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , 'r') 54190d5e1ec3Sshane.xb.qian call assert_equal(1 , line('$')) 54200d5e1ec3Sshane.xb.qian call assert_equal(['Xfile1|10-6 col 666-222| aa'] , getline(1 , '$')) 54210d5e1ec3Sshane.xb.qian call assert_equal([{'lnum': 10 , 'end_lnum': 6 , 'bufnr': bufnr('Xfile1') , 'col': 666 , 'end_col': 222 , 'pattern': '' , 'valid': 1 , 'vcol': 0 , 'nr': -1 , 'type': '' , 'module': '' , 'text': 'aa'}] , getqflist()) 54222ce77903SBram Moolenaar cclose 54232ce77903SBram Moolenaarendfunc 54242ce77903SBram Moolenaar 54259e40c4b1SBram Moolenaar" Test for very weird problem: autocommand causes a failure, resulting opening 54269e40c4b1SBram Moolenaar" the quickfix window to fail. This still splits the window, but otherwise 54279e40c4b1SBram Moolenaar" should not mess up buffers. 54289e40c4b1SBram Moolenaarfunc Test_quickfix_window_fails_to_open() 54299e40c4b1SBram Moolenaar CheckScreendump 54309e40c4b1SBram Moolenaar 54319e40c4b1SBram Moolenaar let lines =<< trim END 54329e40c4b1SBram Moolenaar anything 54339e40c4b1SBram Moolenaar try 54349e40c4b1SBram Moolenaar anything 54359e40c4b1SBram Moolenaar endtry 54369e40c4b1SBram Moolenaar END 54379e40c4b1SBram Moolenaar call writefile(lines, 'XquickfixFails') 54389e40c4b1SBram Moolenaar 54399e40c4b1SBram Moolenaar let lines =<< trim END 54409e40c4b1SBram Moolenaar split XquickfixFails 54419e40c4b1SBram Moolenaar silent vimgrep anything % 54429e40c4b1SBram Moolenaar normal o 54439e40c4b1SBram Moolenaar au BufLeave * ++once source XquickfixFails 54449e40c4b1SBram Moolenaar " This will trigger the autocommand, which causes an error, what follows 54459e40c4b1SBram Moolenaar " is aborted but the window was already split. 54469e40c4b1SBram Moolenaar silent! cwindow 54479e40c4b1SBram Moolenaar END 54489e40c4b1SBram Moolenaar call writefile(lines, 'XtestWinFails') 54499e40c4b1SBram Moolenaar let buf = RunVimInTerminal('-S XtestWinFails', #{rows: 13}) 54509e40c4b1SBram Moolenaar call VerifyScreenDump(buf, 'Test_quickfix_window_fails', {}) 54519e40c4b1SBram Moolenaar 54529e40c4b1SBram Moolenaar " clean up 54539e40c4b1SBram Moolenaar call term_sendkeys(buf, ":bwipe!\<CR>") 54549e40c4b1SBram Moolenaar call term_wait(buf) 54559e40c4b1SBram Moolenaar call StopVimInTerminal(buf) 54569e40c4b1SBram Moolenaar call delete('XtestWinFails') 54579e40c4b1SBram Moolenaar call delete('XquickfixFails') 54589e40c4b1SBram Moolenaarendfunc 54599e40c4b1SBram Moolenaar 54602d870f8dSBram Moolenaar" Test for updating the quickfix buffer whenever the associated quickfix list 5461287153c5SBram Moolenaar" is changed. 5462287153c5SBram Moolenaarfunc Xqfbuf_update(cchar) 5463287153c5SBram Moolenaar call s:setup_commands(a:cchar) 5464287153c5SBram Moolenaar 5465287153c5SBram Moolenaar Xexpr "F1:1:line1" 5466287153c5SBram Moolenaar Xopen 5467287153c5SBram Moolenaar call assert_equal(['F1|1| line1'], getline(1, '$')) 5468287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5469287153c5SBram Moolenaar 5470287153c5SBram Moolenaar " Test setqflist() using the 'lines' key in 'what' 5471287153c5SBram Moolenaar " add a new entry 5472287153c5SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ['F2:2: line2']}) 5473287153c5SBram Moolenaar call assert_equal(['F1|1| line1', 'F2|2| line2'], getline(1, '$')) 5474287153c5SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 5475287153c5SBram Moolenaar " replace all the entries with a single entry 5476287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ['F3:3: line3']}) 5477287153c5SBram Moolenaar call assert_equal(['F3|3| line3'], getline(1, '$')) 5478287153c5SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 5479287153c5SBram Moolenaar " remove all the entries 5480287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : []}) 5481287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5482287153c5SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 5483287153c5SBram Moolenaar " add a new list 5484287153c5SBram Moolenaar call g:Xsetlist([], ' ', {'lines' : ['F4:4: line4']}) 5485287153c5SBram Moolenaar call assert_equal(['F4|4| line4'], getline(1, '$')) 5486287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5487287153c5SBram Moolenaar 5488287153c5SBram Moolenaar " Test setqflist() using the 'items' key in 'what' 5489287153c5SBram Moolenaar " add a new entry 5490287153c5SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename' : 'F5', 'lnum' : 5, 'text' : 'line5'}]}) 5491287153c5SBram Moolenaar call assert_equal(['F4|4| line4', 'F5|5| line5'], getline(1, '$')) 5492287153c5SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 5493287153c5SBram Moolenaar " replace all the entries with a single entry 5494287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F6', 'lnum' : 6, 'text' : 'line6'}]}) 5495287153c5SBram Moolenaar call assert_equal(['F6|6| line6'], getline(1, '$')) 5496287153c5SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 5497287153c5SBram Moolenaar " remove all the entries 5498287153c5SBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 5499287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5500287153c5SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 5501287153c5SBram Moolenaar " add a new list 5502287153c5SBram Moolenaar call g:Xsetlist([], ' ', {'items' : [{'filename' : 'F7', 'lnum' : 7, 'text' : 'line7'}]}) 5503287153c5SBram Moolenaar call assert_equal(['F7|7| line7'], getline(1, '$')) 5504287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5505287153c5SBram Moolenaar 5506287153c5SBram Moolenaar call g:Xsetlist([], ' ', {}) 5507287153c5SBram Moolenaar call assert_equal([''], getline(1, '$')) 5508287153c5SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 5509287153c5SBram Moolenaar 5510287153c5SBram Moolenaar Xclose 5511287153c5SBram Moolenaarendfunc 5512287153c5SBram Moolenaar 5513287153c5SBram Moolenaarfunc Test_qfbuf_update() 5514287153c5SBram Moolenaar call Xqfbuf_update('c') 5515287153c5SBram Moolenaar call Xqfbuf_update('l') 5516287153c5SBram Moolenaarendfunc 5517287153c5SBram Moolenaar 55188c801b37SBram Moolenaarfunc Test_vimgrep_noswapfile() 55198c801b37SBram Moolenaar set noswapfile 55208c801b37SBram Moolenaar call writefile(['one', 'two', 'three'], 'Xgreppie') 55218c801b37SBram Moolenaar vimgrep two Xgreppie 55228c801b37SBram Moolenaar call assert_equal('two', getline('.')) 55238c801b37SBram Moolenaar 55248c801b37SBram Moolenaar call delete('Xgreppie') 55258c801b37SBram Moolenaar set swapfile 55268c801b37SBram Moolenaarendfunc 55278c801b37SBram Moolenaar 5528bb01a1efSYegappan Lakshmanan" Test for the :vimgrep 'f' flag (fuzzy match) 5529bb01a1efSYegappan Lakshmananfunc Xvimgrep_fuzzy_match(cchar) 5530bb01a1efSYegappan Lakshmanan call s:setup_commands(a:cchar) 5531bb01a1efSYegappan Lakshmanan 5532bb01a1efSYegappan Lakshmanan Xvimgrep /three one/f Xfile* 5533bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5534bb01a1efSYegappan Lakshmanan call assert_equal(2, len(l)) 5535bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 1, 9, 'one two three'], 5536bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5537bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 2, 1, 'three one two'], 5538bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5539bb01a1efSYegappan Lakshmanan 5540bb01a1efSYegappan Lakshmanan Xvimgrep /the/f Xfile* 5541bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5542bb01a1efSYegappan Lakshmanan call assert_equal(3, len(l)) 5543bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 1, 9, 'one two three'], 5544bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5545bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 2, 1, 'three one two'], 5546bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5547bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 4, 'aaathreeaaa'], 5548bb01a1efSYegappan Lakshmanan \ [bufname(l[2].bufnr), l[2].lnum, l[2].col, l[2].text]) 5549bb01a1efSYegappan Lakshmanan 5550bb01a1efSYegappan Lakshmanan Xvimgrep /aaa/fg Xfile* 5551bb01a1efSYegappan Lakshmanan let l = g:Xgetlist() 5552bb01a1efSYegappan Lakshmanan call assert_equal(4, len(l)) 5553bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 2, 1, 'aaaaaa'], 5554bb01a1efSYegappan Lakshmanan \ [bufname(l[0].bufnr), l[0].lnum, l[0].col, l[0].text]) 5555bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile1', 2, 4, 'aaaaaa'], 5556bb01a1efSYegappan Lakshmanan \ [bufname(l[1].bufnr), l[1].lnum, l[1].col, l[1].text]) 5557bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 1, 'aaathreeaaa'], 5558bb01a1efSYegappan Lakshmanan \ [bufname(l[2].bufnr), l[2].lnum, l[2].col, l[2].text]) 5559bb01a1efSYegappan Lakshmanan call assert_equal(['Xfile2', 4, 9, 'aaathreeaaa'], 5560bb01a1efSYegappan Lakshmanan \ [bufname(l[3].bufnr), l[3].lnum, l[3].col, l[3].text]) 5561bb01a1efSYegappan Lakshmanan 5562bb01a1efSYegappan Lakshmanan call assert_fails('Xvimgrep /xyz/fg Xfile*', 'E480:') 5563bb01a1efSYegappan Lakshmananendfunc 5564bb01a1efSYegappan Lakshmanan 5565bb01a1efSYegappan Lakshmananfunc Test_vimgrep_fuzzy_match() 5566bb01a1efSYegappan Lakshmanan call writefile(['one two three', 'aaaaaa'], 'Xfile1') 5567bb01a1efSYegappan Lakshmanan call writefile(['one', 'three one two', 'two', 'aaathreeaaa'], 'Xfile2') 5568bb01a1efSYegappan Lakshmanan call Xvimgrep_fuzzy_match('c') 5569bb01a1efSYegappan Lakshmanan call Xvimgrep_fuzzy_match('l') 5570bb01a1efSYegappan Lakshmanan call delete('Xfile1') 5571bb01a1efSYegappan Lakshmanan call delete('Xfile2') 5572bb01a1efSYegappan Lakshmananendfunc 5573bb01a1efSYegappan Lakshmanan 55741557b16dSWei-Chung Wenfunc Test_locationlist_open_in_newtab() 55751557b16dSWei-Chung Wen call s:create_test_file('Xqftestfile1') 55761557b16dSWei-Chung Wen call s:create_test_file('Xqftestfile2') 55771557b16dSWei-Chung Wen call s:create_test_file('Xqftestfile3') 55781557b16dSWei-Chung Wen 55791557b16dSWei-Chung Wen %bwipe! 55801557b16dSWei-Chung Wen 55811557b16dSWei-Chung Wen lgetexpr ['Xqftestfile1:5:Line5', 55821557b16dSWei-Chung Wen \ 'Xqftestfile2:10:Line10', 55831557b16dSWei-Chung Wen \ 'Xqftestfile3:16:Line16'] 55841557b16dSWei-Chung Wen 55851557b16dSWei-Chung Wen silent! llast 55861557b16dSWei-Chung Wen call assert_equal(1, tabpagenr('$')) 55871557b16dSWei-Chung Wen call assert_equal('Xqftestfile3', bufname()) 55881557b16dSWei-Chung Wen 55891557b16dSWei-Chung Wen set switchbuf=newtab 55901557b16dSWei-Chung Wen 55911557b16dSWei-Chung Wen silent! lfirst 55921557b16dSWei-Chung Wen call assert_equal(2, tabpagenr('$')) 55931557b16dSWei-Chung Wen call assert_equal('Xqftestfile1', bufname()) 55941557b16dSWei-Chung Wen 55951557b16dSWei-Chung Wen silent! lnext 55961557b16dSWei-Chung Wen call assert_equal(3, tabpagenr('$')) 55971557b16dSWei-Chung Wen call assert_equal('Xqftestfile2', bufname()) 55981557b16dSWei-Chung Wen 55991557b16dSWei-Chung Wen call delete('Xqftestfile1') 56001557b16dSWei-Chung Wen call delete('Xqftestfile2') 56011557b16dSWei-Chung Wen call delete('Xqftestfile3') 56021557b16dSWei-Chung Wen set switchbuf&vim 56031557b16dSWei-Chung Wen 56041557b16dSWei-Chung Wen %bwipe! 56051557b16dSWei-Chung Wenendfunc 56061557b16dSWei-Chung Wen 560728d8421bSYegappan Lakshmanan" Test for win_gettype() in quickfix and location list windows 560828d8421bSYegappan Lakshmananfunc Test_win_gettype() 560928d8421bSYegappan Lakshmanan copen 561028d8421bSYegappan Lakshmanan call assert_equal("quickfix", win_gettype()) 561128d8421bSYegappan Lakshmanan let wid = win_getid() 561228d8421bSYegappan Lakshmanan wincmd p 561328d8421bSYegappan Lakshmanan call assert_equal("quickfix", win_gettype(wid)) 561428d8421bSYegappan Lakshmanan cclose 561528d8421bSYegappan Lakshmanan lexpr '' 561628d8421bSYegappan Lakshmanan lopen 561728d8421bSYegappan Lakshmanan call assert_equal("loclist", win_gettype()) 561828d8421bSYegappan Lakshmanan let wid = win_getid() 561928d8421bSYegappan Lakshmanan wincmd p 562028d8421bSYegappan Lakshmanan call assert_equal("loclist", win_gettype(wid)) 562128d8421bSYegappan Lakshmanan lclose 562228d8421bSYegappan Lakshmananendfunc 562328d8421bSYegappan Lakshmanan 56246a0cc916SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 5625