1da59dd5dSBram Moolenaar" Test for the quickfix commands. 2da59dd5dSBram Moolenaar 3da59dd5dSBram Moolenaarif !has('quickfix') 4da59dd5dSBram Moolenaar finish 5da59dd5dSBram Moolenaarendif 6da59dd5dSBram Moolenaar 77eba3d2cSBram Moolenaarset encoding=utf-8 87eba3d2cSBram Moolenaar 92b946c9fSBram Moolenaarfunc s:setup_commands(cchar) 103ef5bf7dSBram Moolenaar if a:cchar == 'c' 113ef5bf7dSBram Moolenaar command! -nargs=* -bang Xlist <mods>clist<bang> <args> 123ef5bf7dSBram Moolenaar command! -nargs=* Xgetexpr <mods>cgetexpr <args> 13361c8f0eSBram Moolenaar command! -nargs=* Xaddexpr <mods>caddexpr <args> 1455b69264SBram Moolenaar command! -nargs=* -count Xolder <mods><count>colder <args> 153ef5bf7dSBram Moolenaar command! -nargs=* Xnewer <mods>cnewer <args> 163ef5bf7dSBram Moolenaar command! -nargs=* Xopen <mods>copen <args> 173ef5bf7dSBram Moolenaar command! -nargs=* Xwindow <mods>cwindow <args> 18537ef084SBram Moolenaar command! -nargs=* Xbottom <mods>cbottom <args> 193ef5bf7dSBram Moolenaar command! -nargs=* Xclose <mods>cclose <args> 203ef5bf7dSBram Moolenaar command! -nargs=* -bang Xfile <mods>cfile<bang> <args> 213ef5bf7dSBram Moolenaar command! -nargs=* Xgetfile <mods>cgetfile <args> 223ef5bf7dSBram Moolenaar command! -nargs=* Xaddfile <mods>caddfile <args> 233ef5bf7dSBram Moolenaar command! -nargs=* -bang Xbuffer <mods>cbuffer<bang> <args> 243ef5bf7dSBram Moolenaar command! -nargs=* Xgetbuffer <mods>cgetbuffer <args> 253ef5bf7dSBram Moolenaar command! -nargs=* Xaddbuffer <mods>caddbuffer <args> 263ef5bf7dSBram Moolenaar command! -nargs=* Xrewind <mods>crewind <args> 2799895eacSBram Moolenaar command! -count -nargs=* -bang Xnext <mods><count>cnext<bang> <args> 2899895eacSBram Moolenaar command! -count -nargs=* -bang Xprev <mods><count>cprev<bang> <args> 290fcc7c6dSBram Moolenaar command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args> 300fcc7c6dSBram Moolenaar command! -nargs=* -bang Xlast <mods>clast<bang> <args> 3174240d3fSBram Moolenaar command! -nargs=* -bang -range Xnfile <mods><count>cnfile<bang> <args> 320fcc7c6dSBram Moolenaar command! -nargs=* -bang Xpfile <mods>cpfile<bang> <args> 333ef5bf7dSBram Moolenaar command! -nargs=* Xexpr <mods>cexpr <args> 34ee85df37SBram Moolenaar command! -range -nargs=* Xvimgrep <mods><count>vimgrep <args> 35ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods>vimgrepadd <args> 36049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> grep <args> 37049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> grepadd <args> 38049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep helpgrep <args> 3974240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>cc 403ef5bf7dSBram Moolenaar let g:Xgetlist = function('getqflist') 413ef5bf7dSBram Moolenaar let g:Xsetlist = function('setqflist') 42b6fa30ccSBram Moolenaar call setqflist([], 'f') 433ef5bf7dSBram Moolenaar else 443ef5bf7dSBram Moolenaar command! -nargs=* -bang Xlist <mods>llist<bang> <args> 453ef5bf7dSBram Moolenaar command! -nargs=* Xgetexpr <mods>lgetexpr <args> 46361c8f0eSBram Moolenaar command! -nargs=* Xaddexpr <mods>laddexpr <args> 4755b69264SBram Moolenaar command! -nargs=* -count Xolder <mods><count>lolder <args> 483ef5bf7dSBram Moolenaar command! -nargs=* Xnewer <mods>lnewer <args> 493ef5bf7dSBram Moolenaar command! -nargs=* Xopen <mods>lopen <args> 503ef5bf7dSBram Moolenaar command! -nargs=* Xwindow <mods>lwindow <args> 51537ef084SBram Moolenaar command! -nargs=* Xbottom <mods>lbottom <args> 523ef5bf7dSBram Moolenaar command! -nargs=* Xclose <mods>lclose <args> 533ef5bf7dSBram Moolenaar command! -nargs=* -bang Xfile <mods>lfile<bang> <args> 543ef5bf7dSBram Moolenaar command! -nargs=* Xgetfile <mods>lgetfile <args> 553ef5bf7dSBram Moolenaar command! -nargs=* Xaddfile <mods>laddfile <args> 563ef5bf7dSBram Moolenaar command! -nargs=* -bang Xbuffer <mods>lbuffer<bang> <args> 573ef5bf7dSBram Moolenaar command! -nargs=* Xgetbuffer <mods>lgetbuffer <args> 583ef5bf7dSBram Moolenaar command! -nargs=* Xaddbuffer <mods>laddbuffer <args> 593ef5bf7dSBram Moolenaar command! -nargs=* Xrewind <mods>lrewind <args> 6099895eacSBram Moolenaar command! -count -nargs=* -bang Xnext <mods><count>lnext<bang> <args> 6199895eacSBram Moolenaar command! -count -nargs=* -bang Xprev <mods><count>lprev<bang> <args> 620fcc7c6dSBram Moolenaar command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args> 630fcc7c6dSBram Moolenaar command! -nargs=* -bang Xlast <mods>llast<bang> <args> 6474240d3fSBram Moolenaar command! -nargs=* -bang -range Xnfile <mods><count>lnfile<bang> <args> 650fcc7c6dSBram Moolenaar command! -nargs=* -bang Xpfile <mods>lpfile<bang> <args> 663ef5bf7dSBram Moolenaar command! -nargs=* Xexpr <mods>lexpr <args> 67ee85df37SBram Moolenaar command! -range -nargs=* Xvimgrep <mods><count>lvimgrep <args> 68ee85df37SBram Moolenaar command! -nargs=* Xvimgrepadd <mods>lvimgrepadd <args> 69049cba9eSBram Moolenaar command! -nargs=* Xgrep <mods> lgrep <args> 70049cba9eSBram Moolenaar command! -nargs=* Xgrepadd <mods> lgrepadd <args> 71049cba9eSBram Moolenaar command! -nargs=* Xhelpgrep lhelpgrep <args> 7274240d3fSBram Moolenaar command! -nargs=0 -count Xcc <count>ll 733ef5bf7dSBram Moolenaar let g:Xgetlist = function('getloclist', [0]) 743ef5bf7dSBram Moolenaar let g:Xsetlist = function('setloclist', [0]) 75b6fa30ccSBram Moolenaar call setloclist(0, [], 'f') 763ef5bf7dSBram Moolenaar endif 772b946c9fSBram Moolenaarendfunc 783ef5bf7dSBram Moolenaar 79da59dd5dSBram Moolenaar" Tests for the :clist and :llist commands 802b946c9fSBram Moolenaarfunc XlistTests(cchar) 813ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 82da59dd5dSBram Moolenaar 83b6fa30ccSBram Moolenaar if a:cchar == 'l' 84b6fa30ccSBram Moolenaar call assert_fails('llist', 'E776:') 85b6fa30ccSBram Moolenaar endif 86da59dd5dSBram Moolenaar " With an empty list, command should return error 873ef5bf7dSBram Moolenaar Xgetexpr [] 883ef5bf7dSBram Moolenaar silent! Xlist 89da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E42: No Errors') 90da59dd5dSBram Moolenaar 91da59dd5dSBram Moolenaar " Populate the list and then try 923ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1', 93da59dd5dSBram Moolenaar \ 'non-error 2', 'Xtestfile2:2:2:Line2', 943ef5bf7dSBram Moolenaar \ 'non-error 3', 'Xtestfile3:3:1:Line3'] 95da59dd5dSBram Moolenaar 96da59dd5dSBram Moolenaar " List only valid entries 97ee85df37SBram Moolenaar let l = split(execute('Xlist', ''), "\n") 98da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 99da59dd5dSBram Moolenaar \ ' 4 Xtestfile2:2 col 2: Line2', 100da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 101da59dd5dSBram Moolenaar 102da59dd5dSBram Moolenaar " List all the entries 103ee85df37SBram Moolenaar let l = split(execute('Xlist!', ''), "\n") 104da59dd5dSBram Moolenaar call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', 105da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', 106da59dd5dSBram Moolenaar \ ' 5: non-error 3', ' 6 Xtestfile3:3 col 1: Line3'], l) 107da59dd5dSBram Moolenaar 108da59dd5dSBram Moolenaar " List a range of errors 109ee85df37SBram Moolenaar let l = split(execute('Xlist 3,6', ''), "\n") 110da59dd5dSBram Moolenaar call assert_equal([' 4 Xtestfile2:2 col 2: Line2', 111da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 112da59dd5dSBram Moolenaar 113ee85df37SBram Moolenaar let l = split(execute('Xlist! 3,4', ''), "\n") 114da59dd5dSBram Moolenaar call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 115da59dd5dSBram Moolenaar 116ee85df37SBram Moolenaar let l = split(execute('Xlist -6,-4', ''), "\n") 117da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l) 118da59dd5dSBram Moolenaar 119ee85df37SBram Moolenaar let l = split(execute('Xlist! -5,-3', ''), "\n") 120da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 121da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 122391b1dd0SBram Moolenaar 123391b1dd0SBram Moolenaar " Test for '+' 124ee85df37SBram Moolenaar let l = split(execute('Xlist! +2', ''), "\n") 125391b1dd0SBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 126391b1dd0SBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 127ee85df37SBram Moolenaar 128ee85df37SBram Moolenaar " Different types of errors 129ee85df37SBram Moolenaar call g:Xsetlist([{'lnum':10,'col':5,'type':'W', 'text':'Warning','nr':11}, 130ee85df37SBram Moolenaar \ {'lnum':20,'col':10,'type':'e','text':'Error','nr':22}, 131ee85df37SBram Moolenaar \ {'lnum':30,'col':15,'type':'i','text':'Info','nr':33}, 132ee85df37SBram Moolenaar \ {'lnum':40,'col':20,'type':'x', 'text':'Other','nr':44}, 133ee85df37SBram Moolenaar \ {'lnum':50,'col':25,'type':"\<C-A>",'text':'one','nr':55}]) 134ee85df37SBram Moolenaar let l = split(execute('Xlist', ""), "\n") 135ee85df37SBram Moolenaar call assert_equal([' 1:10 col 5 warning 11: Warning', 136ee85df37SBram Moolenaar \ ' 2:20 col 10 error 22: Error', 137ee85df37SBram Moolenaar \ ' 3:30 col 15 info 33: Info', 138ee85df37SBram Moolenaar \ ' 4:40 col 20 x 44: Other', 139ee85df37SBram Moolenaar \ ' 5:50 col 25 55: one'], l) 140ee85df37SBram Moolenaar 141ee85df37SBram Moolenaar " Error cases 142ee85df37SBram Moolenaar call assert_fails('Xlist abc', 'E488:') 1432b946c9fSBram Moolenaarendfunc 144da59dd5dSBram Moolenaar 1452b946c9fSBram Moolenaarfunc Test_clist() 146da59dd5dSBram Moolenaar call XlistTests('c') 147da59dd5dSBram Moolenaar call XlistTests('l') 1482b946c9fSBram Moolenaarendfunc 149da59dd5dSBram Moolenaar 150da59dd5dSBram Moolenaar" Tests for the :colder, :cnewer, :lolder and :lnewer commands 151da59dd5dSBram Moolenaar" Note that this test assumes that a quickfix/location list is 152cfc0a350SBram Moolenaar" already set by the caller. 1532b946c9fSBram Moolenaarfunc XageTests(cchar) 1543ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 155da59dd5dSBram Moolenaar 156cf1ba35fSBram Moolenaar let list = [{'bufnr': bufnr('%'), 'lnum': 1}] 157b6fa30ccSBram Moolenaar call g:Xsetlist(list) 158b6fa30ccSBram Moolenaar 159da59dd5dSBram Moolenaar " Jumping to a non existent list should return error 1603ef5bf7dSBram Moolenaar silent! Xolder 99 161da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack') 162da59dd5dSBram Moolenaar 1633ef5bf7dSBram Moolenaar silent! Xnewer 99 164da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E381: At top of quickfix stack') 165da59dd5dSBram Moolenaar 166da59dd5dSBram Moolenaar " Add three quickfix/location lists 1673ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1'] 1683ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile2:2:2:Line2'] 1693ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile3:3:1:Line3'] 170da59dd5dSBram Moolenaar 171da59dd5dSBram Moolenaar " Go back two lists 1723ef5bf7dSBram Moolenaar Xolder 1733ef5bf7dSBram Moolenaar let l = g:Xgetlist() 174da59dd5dSBram Moolenaar call assert_equal('Line2', l[0].text) 175da59dd5dSBram Moolenaar 176da59dd5dSBram Moolenaar " Go forward two lists 1773ef5bf7dSBram Moolenaar Xnewer 1783ef5bf7dSBram Moolenaar let l = g:Xgetlist() 179da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 180da59dd5dSBram Moolenaar 181da59dd5dSBram Moolenaar " Test for the optional count argument 1823ef5bf7dSBram Moolenaar Xolder 2 1833ef5bf7dSBram Moolenaar let l = g:Xgetlist() 184da59dd5dSBram Moolenaar call assert_equal('Line1', l[0].text) 185da59dd5dSBram Moolenaar 1863ef5bf7dSBram Moolenaar Xnewer 2 1873ef5bf7dSBram Moolenaar let l = g:Xgetlist() 188da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 1892b946c9fSBram Moolenaarendfunc 190da59dd5dSBram Moolenaar 1912b946c9fSBram Moolenaarfunc Test_cage() 192da59dd5dSBram Moolenaar call XageTests('c') 193da59dd5dSBram Moolenaar call XageTests('l') 1942b946c9fSBram Moolenaarendfunc 195da59dd5dSBram Moolenaar 196da59dd5dSBram Moolenaar" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen 197da59dd5dSBram Moolenaar" commands 1982b946c9fSBram Moolenaarfunc XwindowTests(cchar) 1993ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 200da59dd5dSBram Moolenaar 201b6fa30ccSBram Moolenaar " Opening the location list window without any errors should fail 202b6fa30ccSBram Moolenaar if a:cchar == 'l' 203b6fa30ccSBram Moolenaar call assert_fails('lopen', 'E776:') 204b6fa30ccSBram Moolenaar endif 205b6fa30ccSBram Moolenaar 206da59dd5dSBram Moolenaar " Create a list with no valid entries 2073ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 208da59dd5dSBram Moolenaar 209da59dd5dSBram Moolenaar " Quickfix/Location window should not open with no valid errors 2103ef5bf7dSBram Moolenaar Xwindow 211da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 212da59dd5dSBram Moolenaar 213da59dd5dSBram Moolenaar " Create a list with valid entries 2143ef5bf7dSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 2153ef5bf7dSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 216da59dd5dSBram Moolenaar 217da59dd5dSBram Moolenaar " Open the window 2183ef5bf7dSBram Moolenaar Xwindow 219da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 220da59dd5dSBram Moolenaar \ getline('.') ==# 'Xtestfile1|1 col 3| Line1') 221537ef084SBram Moolenaar redraw! 222da59dd5dSBram Moolenaar 223da59dd5dSBram Moolenaar " Close the window 2243ef5bf7dSBram Moolenaar Xclose 225da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 226da59dd5dSBram Moolenaar 227da59dd5dSBram Moolenaar " Create a list with no valid entries 2283ef5bf7dSBram Moolenaar Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3'] 229da59dd5dSBram Moolenaar 230da59dd5dSBram Moolenaar " Open the window 2313ef5bf7dSBram Moolenaar Xopen 5 232da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1' 233da59dd5dSBram Moolenaar \ && winheight('.') == 5) 234da59dd5dSBram Moolenaar 235da59dd5dSBram Moolenaar " Opening the window again, should move the cursor to that window 236da59dd5dSBram Moolenaar wincmd t 2373ef5bf7dSBram Moolenaar Xopen 7 238da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 239da59dd5dSBram Moolenaar \ winheight('.') == 7 && 240da59dd5dSBram Moolenaar \ getline('.') ==# '|| non-error 1') 241da59dd5dSBram Moolenaar 242da59dd5dSBram Moolenaar 243da59dd5dSBram Moolenaar " Calling cwindow should close the quickfix window with no valid errors 2443ef5bf7dSBram Moolenaar Xwindow 245da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 246b6fa30ccSBram Moolenaar 247b6fa30ccSBram Moolenaar if a:cchar == 'c' 248b6fa30ccSBram Moolenaar " Opening the quickfix window in multiple tab pages should reuse the 249b6fa30ccSBram Moolenaar " quickfix buffer 250b6fa30ccSBram Moolenaar Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 251b6fa30ccSBram Moolenaar \ 'Xtestfile3:3:1:Line3'] 252b6fa30ccSBram Moolenaar Xopen 253b6fa30ccSBram Moolenaar let qfbufnum = bufnr('%') 254b6fa30ccSBram Moolenaar tabnew 255b6fa30ccSBram Moolenaar Xopen 256b6fa30ccSBram Moolenaar call assert_equal(qfbufnum, bufnr('%')) 257b6fa30ccSBram Moolenaar new | only | tabonly 258b6fa30ccSBram Moolenaar endif 2592b946c9fSBram Moolenaarendfunc 260da59dd5dSBram Moolenaar 2612b946c9fSBram Moolenaarfunc Test_cwindow() 262da59dd5dSBram Moolenaar call XwindowTests('c') 263da59dd5dSBram Moolenaar call XwindowTests('l') 2642b946c9fSBram Moolenaarendfunc 265da59dd5dSBram Moolenaar 266da59dd5dSBram Moolenaar" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile 267da59dd5dSBram Moolenaar" commands. 2682b946c9fSBram Moolenaarfunc XfileTests(cchar) 2693ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 270da59dd5dSBram Moolenaar 271da59dd5dSBram Moolenaar call writefile(['Xtestfile1:700:10:Line 700', 272da59dd5dSBram Moolenaar \ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1') 273da59dd5dSBram Moolenaar 274da59dd5dSBram Moolenaar enew! 2753ef5bf7dSBram Moolenaar Xfile Xqftestfile1 2763ef5bf7dSBram Moolenaar let l = g:Xgetlist() 277da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 278da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 279da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 280da59dd5dSBram Moolenaar 281049cba9eSBram Moolenaar " Test with a non existent file 282049cba9eSBram Moolenaar call assert_fails('Xfile non_existent_file', 'E40') 283049cba9eSBram Moolenaar 284da59dd5dSBram Moolenaar " Run cfile/lfile from a modified buffer 285da59dd5dSBram Moolenaar enew! 286da59dd5dSBram Moolenaar silent! put ='Quickfix' 2873ef5bf7dSBram Moolenaar silent! Xfile Xqftestfile1 288da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)') 289da59dd5dSBram Moolenaar 290da59dd5dSBram Moolenaar call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1') 2913ef5bf7dSBram Moolenaar Xaddfile Xqftestfile1 2923ef5bf7dSBram Moolenaar let l = g:Xgetlist() 293da59dd5dSBram Moolenaar call assert_true(len(l) == 3 && 294da59dd5dSBram Moolenaar \ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900') 295da59dd5dSBram Moolenaar 296da59dd5dSBram Moolenaar call writefile(['Xtestfile1:222:77:Line 222', 297da59dd5dSBram Moolenaar \ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1') 298da59dd5dSBram Moolenaar 299da59dd5dSBram Moolenaar enew! 3003ef5bf7dSBram Moolenaar Xgetfile Xqftestfile1 3013ef5bf7dSBram Moolenaar let l = g:Xgetlist() 302da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 303da59dd5dSBram Moolenaar \ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' && 304da59dd5dSBram Moolenaar \ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333') 305da59dd5dSBram Moolenaar 306da59dd5dSBram Moolenaar call delete('Xqftestfile1') 3072b946c9fSBram Moolenaarendfunc 308da59dd5dSBram Moolenaar 3092b946c9fSBram Moolenaarfunc Test_cfile() 310da59dd5dSBram Moolenaar call XfileTests('c') 311da59dd5dSBram Moolenaar call XfileTests('l') 3122b946c9fSBram Moolenaarendfunc 313da59dd5dSBram Moolenaar 314da59dd5dSBram Moolenaar" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and 315da59dd5dSBram Moolenaar" :lgetbuffer commands. 3162b946c9fSBram Moolenaarfunc XbufferTests(cchar) 3173ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 318da59dd5dSBram Moolenaar 319da59dd5dSBram Moolenaar enew! 320da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile7:700:10:Line 700', 321da59dd5dSBram Moolenaar \ 'Xtestfile8:800:15:Line 800']) 3223ef5bf7dSBram Moolenaar Xbuffer! 3233ef5bf7dSBram Moolenaar let l = g:Xgetlist() 324da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 325da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 326da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 327da59dd5dSBram Moolenaar 328da59dd5dSBram Moolenaar enew! 329da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile9:900:55:Line 900', 330da59dd5dSBram Moolenaar \ 'Xtestfile10:950:66:Line 950']) 3313ef5bf7dSBram Moolenaar Xgetbuffer 3323ef5bf7dSBram Moolenaar let l = g:Xgetlist() 333da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 334da59dd5dSBram Moolenaar \ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' && 335da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950') 336da59dd5dSBram Moolenaar 337da59dd5dSBram Moolenaar enew! 338da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile11:700:20:Line 700', 339da59dd5dSBram Moolenaar \ 'Xtestfile12:750:25:Line 750']) 3403ef5bf7dSBram Moolenaar Xaddbuffer 3413ef5bf7dSBram Moolenaar let l = g:Xgetlist() 342da59dd5dSBram Moolenaar call assert_true(len(l) == 4 && 343da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' && 344da59dd5dSBram Moolenaar \ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' && 345da59dd5dSBram Moolenaar \ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750') 346ab47c61fSBram Moolenaar enew! 347da59dd5dSBram Moolenaar 348ee85df37SBram Moolenaar " Check for invalid buffer 349ee85df37SBram Moolenaar call assert_fails('Xbuffer 199', 'E474:') 350ee85df37SBram Moolenaar 351ee85df37SBram Moolenaar " Check for unloaded buffer 352ee85df37SBram Moolenaar edit Xtestfile1 353ee85df37SBram Moolenaar let bnr = bufnr('%') 354ee85df37SBram Moolenaar enew! 355ee85df37SBram Moolenaar call assert_fails('Xbuffer ' . bnr, 'E681:') 356ee85df37SBram Moolenaar 357ee85df37SBram Moolenaar " Check for invalid range 358ee85df37SBram Moolenaar " Using Xbuffer will not run the range check in the cbuffer/lbuffer 359ee85df37SBram Moolenaar " commands. So directly call the commands. 360ee85df37SBram Moolenaar if (a:cchar == 'c') 361ee85df37SBram Moolenaar call assert_fails('900,999cbuffer', 'E16:') 362ee85df37SBram Moolenaar else 363ee85df37SBram Moolenaar call assert_fails('900,999lbuffer', 'E16:') 364ee85df37SBram Moolenaar endif 3652b946c9fSBram Moolenaarendfunc 366da59dd5dSBram Moolenaar 3672b946c9fSBram Moolenaarfunc Test_cbuffer() 368da59dd5dSBram Moolenaar call XbufferTests('c') 369da59dd5dSBram Moolenaar call XbufferTests('l') 3702b946c9fSBram Moolenaarendfunc 371da59dd5dSBram Moolenaar 3722b946c9fSBram Moolenaarfunc XexprTests(cchar) 3730fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 3740fcc7c6dSBram Moolenaar 3750fcc7c6dSBram Moolenaar call assert_fails('Xexpr 10', 'E777:') 3762b946c9fSBram Moolenaarendfunc 3770fcc7c6dSBram Moolenaar 3782b946c9fSBram Moolenaarfunc Test_cexpr() 3790fcc7c6dSBram Moolenaar call XexprTests('c') 3800fcc7c6dSBram Moolenaar call XexprTests('l') 3812b946c9fSBram Moolenaarendfunc 3820fcc7c6dSBram Moolenaar 3830fcc7c6dSBram Moolenaar" Tests for :cnext, :cprev, :cfirst, :clast commands 3842b946c9fSBram Moolenaarfunc Xtest_browse(cchar) 3850fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 3860fcc7c6dSBram Moolenaar 38774240d3fSBram Moolenaar call g:Xsetlist([], 'f') 388b6fa30ccSBram Moolenaar " Jumping to first or next location list entry without any error should 389b6fa30ccSBram Moolenaar " result in failure 39074240d3fSBram Moolenaar if a:cchar == 'c' 39174240d3fSBram Moolenaar let err = 'E42:' 39274240d3fSBram Moolenaar else 39374240d3fSBram Moolenaar let err = 'E776:' 394b6fa30ccSBram Moolenaar endif 39574240d3fSBram Moolenaar call assert_fails('Xnext', err) 39674240d3fSBram Moolenaar call assert_fails('Xprev', err) 39774240d3fSBram Moolenaar call assert_fails('Xnfile', err) 39874240d3fSBram Moolenaar call assert_fails('Xpfile', err) 399b6fa30ccSBram Moolenaar 4000fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile1') 4010fcc7c6dSBram Moolenaar call s:create_test_file('Xqftestfile2') 4020fcc7c6dSBram Moolenaar 4030fcc7c6dSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 4040fcc7c6dSBram Moolenaar \ 'Xqftestfile1:6:Line6', 4050fcc7c6dSBram Moolenaar \ 'Xqftestfile2:10:Line10', 40699895eacSBram Moolenaar \ 'Xqftestfile2:11:Line11', 40799895eacSBram Moolenaar \ 'RegularLine1', 40899895eacSBram Moolenaar \ 'RegularLine2'] 4090fcc7c6dSBram Moolenaar 4100fcc7c6dSBram Moolenaar Xfirst 4110fcc7c6dSBram Moolenaar call assert_fails('Xprev', 'E553') 4120fcc7c6dSBram Moolenaar call assert_fails('Xpfile', 'E553') 4130fcc7c6dSBram Moolenaar Xnfile 4140fcc7c6dSBram Moolenaar call assert_equal('Xqftestfile2', bufname('%')) 4150fcc7c6dSBram Moolenaar call assert_equal(10, line('.')) 4160fcc7c6dSBram Moolenaar Xpfile 4170fcc7c6dSBram Moolenaar call assert_equal('Xqftestfile1', bufname('%')) 4180fcc7c6dSBram Moolenaar call assert_equal(6, line('.')) 41974240d3fSBram Moolenaar 5Xcc 42074240d3fSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx':0}).idx) 42174240d3fSBram Moolenaar 2Xcc 42274240d3fSBram Moolenaar call assert_equal(2, g:Xgetlist({'idx':0}).idx) 42374240d3fSBram Moolenaar 10Xcc 42474240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'idx':0}).idx) 4250fcc7c6dSBram Moolenaar Xlast 42699895eacSBram Moolenaar Xprev 4270fcc7c6dSBram Moolenaar call assert_equal('Xqftestfile2', bufname('%')) 4280fcc7c6dSBram Moolenaar call assert_equal(11, line('.')) 4290fcc7c6dSBram Moolenaar call assert_fails('Xnext', 'E553') 4300fcc7c6dSBram Moolenaar call assert_fails('Xnfile', 'E553') 4310fcc7c6dSBram Moolenaar Xrewind 4320fcc7c6dSBram Moolenaar call assert_equal('Xqftestfile1', bufname('%')) 4330fcc7c6dSBram Moolenaar call assert_equal(5, line('.')) 4340fcc7c6dSBram Moolenaar 43599895eacSBram Moolenaar 10Xnext 43699895eacSBram Moolenaar call assert_equal('Xqftestfile2', bufname('%')) 43799895eacSBram Moolenaar call assert_equal(11, line('.')) 43899895eacSBram Moolenaar 10Xprev 43999895eacSBram Moolenaar call assert_equal('Xqftestfile1', bufname('%')) 44099895eacSBram Moolenaar call assert_equal(5, line('.')) 44199895eacSBram Moolenaar 44274240d3fSBram Moolenaar " Jumping to an error from the error window using cc command 44374240d3fSBram Moolenaar Xgetexpr ['Xqftestfile1:5:Line5', 44474240d3fSBram Moolenaar \ 'Xqftestfile1:6:Line6', 44574240d3fSBram Moolenaar \ 'Xqftestfile2:10:Line10', 44674240d3fSBram Moolenaar \ 'Xqftestfile2:11:Line11'] 44774240d3fSBram Moolenaar Xopen 44874240d3fSBram Moolenaar 10Xcc 44974240d3fSBram Moolenaar call assert_equal(11, line('.')) 45074240d3fSBram Moolenaar call assert_equal('Xqftestfile2', bufname('%')) 45174240d3fSBram Moolenaar 45274240d3fSBram Moolenaar " Jumping to an error from the error window (when only the error window is 45374240d3fSBram Moolenaar " present) 45474240d3fSBram Moolenaar Xopen | only 45574240d3fSBram Moolenaar Xlast 1 45674240d3fSBram Moolenaar call assert_equal(5, line('.')) 45774240d3fSBram Moolenaar call assert_equal('Xqftestfile1', bufname('%')) 45874240d3fSBram Moolenaar 459ee85df37SBram Moolenaar Xexpr "" 460ee85df37SBram Moolenaar call assert_fails('Xnext', 'E42:') 461ee85df37SBram Moolenaar 4620fcc7c6dSBram Moolenaar call delete('Xqftestfile1') 4630fcc7c6dSBram Moolenaar call delete('Xqftestfile2') 464fc2b270cSBram Moolenaar 465fc2b270cSBram Moolenaar " Should be able to use next/prev with invalid entries 466fc2b270cSBram Moolenaar Xexpr "" 467fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 468fc2b270cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 469fc2b270cSBram Moolenaar Xaddexpr ['foo', 'bar', 'baz', 'quux', 'shmoo'] 470fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'size' : 0}).size) 471fc2b270cSBram Moolenaar Xlast 472fc2b270cSBram Moolenaar call assert_equal(5, g:Xgetlist({'idx' : 0}).idx) 473fc2b270cSBram Moolenaar Xfirst 474fc2b270cSBram Moolenaar call assert_equal(1, g:Xgetlist({'idx' : 0}).idx) 475fc2b270cSBram Moolenaar 2Xnext 476fc2b270cSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 4772b946c9fSBram Moolenaarendfunc 4780fcc7c6dSBram Moolenaar 4792b946c9fSBram Moolenaarfunc Test_browse() 4800fcc7c6dSBram Moolenaar call Xtest_browse('c') 4810fcc7c6dSBram Moolenaar call Xtest_browse('l') 4822b946c9fSBram Moolenaarendfunc 4830fcc7c6dSBram Moolenaar 4842b946c9fSBram Moolenaarfunc Test_nomem() 4858e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_dirname_start'), 0, 0) 486a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 48775bdf6aaSBram Moolenaar 4888e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_dirname_now'), 0, 0) 489a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 49075bdf6aaSBram Moolenaar 4918e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_namebuf'), 0, 0) 492a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 49375bdf6aaSBram Moolenaar 4948e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_errmsg'), 0, 0) 495a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 49675bdf6aaSBram Moolenaar 4978e8df251SBram Moolenaar call test_alloc_fail(GetAllocId('qf_pattern'), 0, 0) 498a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 49975bdf6aaSBram Moolenaar 50075bdf6aaSBram Moolenaarendfunc 50175bdf6aaSBram Moolenaar 5022b946c9fSBram Moolenaarfunc s:test_xhelpgrep(cchar) 503049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 504049cba9eSBram Moolenaar Xhelpgrep quickfix 505049cba9eSBram Moolenaar Xopen 506049cba9eSBram Moolenaar if a:cchar == 'c' 507049cba9eSBram Moolenaar let title_text = ':helpgrep quickfix' 508049cba9eSBram Moolenaar else 509049cba9eSBram Moolenaar let title_text = ':lhelpgrep quickfix' 510049cba9eSBram Moolenaar endif 511049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ title_text, w:quickfix_title) 51299895eacSBram Moolenaar 51399895eacSBram Moolenaar " Jumping to a help topic should open the help window 51499895eacSBram Moolenaar only 51599895eacSBram Moolenaar Xnext 51699895eacSBram Moolenaar call assert_true(&buftype == 'help') 51799895eacSBram Moolenaar call assert_true(winnr('$') == 2) 51899895eacSBram Moolenaar " Jumping to the next match should reuse the help window 51999895eacSBram Moolenaar Xnext 52099895eacSBram Moolenaar call assert_true(&buftype == 'help') 52199895eacSBram Moolenaar call assert_true(winnr() == 1) 52299895eacSBram Moolenaar call assert_true(winnr('$') == 2) 52399895eacSBram Moolenaar " Jumping to the next match from the quickfix window should reuse the help 52499895eacSBram Moolenaar " window 52599895eacSBram Moolenaar Xopen 52699895eacSBram Moolenaar Xnext 52799895eacSBram Moolenaar call assert_true(&buftype == 'help') 52899895eacSBram Moolenaar call assert_true(winnr() == 1) 52999895eacSBram Moolenaar call assert_true(winnr('$') == 2) 53099895eacSBram Moolenaar 53162ef7974SBram Moolenaar " This wipes out the buffer, make sure that doesn't cause trouble. 532049cba9eSBram Moolenaar Xclose 533ee85df37SBram Moolenaar 534b4d5fbabSBram Moolenaar if a:cchar == 'l' 535b4d5fbabSBram Moolenaar " When a help window is present, running :lhelpgrep should reuse the 536b4d5fbabSBram Moolenaar " help window and not the current window 537b4d5fbabSBram Moolenaar new | only 538b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 539b4d5fbabSBram Moolenaar help index.txt 540b4d5fbabSBram Moolenaar wincmd w 541b4d5fbabSBram Moolenaar lhelpgrep quickfix 542b4d5fbabSBram Moolenaar call assert_equal(1, winnr()) 543b4d5fbabSBram Moolenaar call assert_notequal([], getloclist(1)) 544b4d5fbabSBram Moolenaar call assert_equal([], getloclist(2)) 545b4d5fbabSBram Moolenaar endif 546b4d5fbabSBram Moolenaar 54799895eacSBram Moolenaar new | only 54899895eacSBram Moolenaar 549ee85df37SBram Moolenaar " Search for non existing help string 550ee85df37SBram Moolenaar call assert_fails('Xhelpgrep a1b2c3', 'E480:') 5512b946c9fSBram Moolenaarendfunc 552049cba9eSBram Moolenaar 5532b946c9fSBram Moolenaarfunc Test_helpgrep() 554049cba9eSBram Moolenaar call s:test_xhelpgrep('c') 555cf25fdb8SBram Moolenaar helpclose 556049cba9eSBram Moolenaar call s:test_xhelpgrep('l') 55762ef7974SBram Moolenaarendfunc 55875bdf6aaSBram Moolenaar 5596920c72dSBram Moolenaarfunc Test_errortitle() 5606920c72dSBram Moolenaar augroup QfBufWinEnter 5616920c72dSBram Moolenaar au! 5626920c72dSBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 5636920c72dSBram Moolenaar augroup END 5646920c72dSBram Moolenaar copen 5656920c72dSBram 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'')'}] 5666920c72dSBram Moolenaar call setqflist(a) 5676920c72dSBram Moolenaar call assert_equal(':setqflist()', g:a) 5686920c72dSBram Moolenaar augroup QfBufWinEnter 5696920c72dSBram Moolenaar au! 5706920c72dSBram Moolenaar augroup END 5716920c72dSBram Moolenaar augroup! QfBufWinEnter 5726920c72dSBram Moolenaarendfunc 573e27dba49SBram Moolenaar 5745584df65SBram Moolenaarfunc Test_vimgreptitle() 5755584df65SBram Moolenaar augroup QfBufWinEnter 5765584df65SBram Moolenaar au! 5775584df65SBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 5785584df65SBram Moolenaar augroup END 5795584df65SBram Moolenaar try 5805584df65SBram Moolenaar vimgrep /pattern/j file 5815584df65SBram Moolenaar catch /E480/ 5825584df65SBram Moolenaar endtry 5835584df65SBram Moolenaar copen 5845584df65SBram Moolenaar call assert_equal(': vimgrep /pattern/j file', g:a) 5855584df65SBram Moolenaar augroup QfBufWinEnter 5865584df65SBram Moolenaar au! 5875584df65SBram Moolenaar augroup END 5885584df65SBram Moolenaar augroup! QfBufWinEnter 5895584df65SBram Moolenaarendfunc 5905584df65SBram Moolenaar 5912b946c9fSBram Moolenaarfunc XqfTitleTests(cchar) 5923ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 593e27dba49SBram Moolenaar 5943ef5bf7dSBram Moolenaar Xgetexpr ['file:1:1:message'] 5953ef5bf7dSBram Moolenaar let l = g:Xgetlist() 596e27dba49SBram Moolenaar if a:cchar == 'c' 597e27dba49SBram Moolenaar call setqflist(l, 'r') 598e27dba49SBram Moolenaar else 599e27dba49SBram Moolenaar call setloclist(0, l, 'r') 600e27dba49SBram Moolenaar endif 601e27dba49SBram Moolenaar 6023ef5bf7dSBram Moolenaar Xopen 603e27dba49SBram Moolenaar if a:cchar == 'c' 604e27dba49SBram Moolenaar let title = ':setqflist()' 605e27dba49SBram Moolenaar else 606e27dba49SBram Moolenaar let title = ':setloclist()' 607e27dba49SBram Moolenaar endif 608e27dba49SBram Moolenaar call assert_equal(title, w:quickfix_title) 6093ef5bf7dSBram Moolenaar Xclose 6102b946c9fSBram Moolenaarendfunc 611e27dba49SBram Moolenaar 612e27dba49SBram Moolenaar" Tests for quickfix window's title 6132b946c9fSBram Moolenaarfunc Test_qf_title() 614e27dba49SBram Moolenaar call XqfTitleTests('c') 615e27dba49SBram Moolenaar call XqfTitleTests('l') 6162b946c9fSBram Moolenaarendfunc 617e27dba49SBram Moolenaar 618e27dba49SBram Moolenaar" Tests for 'errorformat' 6192b946c9fSBram Moolenaarfunc Test_efm() 620e27dba49SBram Moolenaar let save_efm = &efm 621e27dba49SBram Moolenaar set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%# 622e27dba49SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 623e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 624e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 625e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC'] 626e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 627e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 628e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY'] 629e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 630e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l) 631e27dba49SBram Moolenaar let &efm = save_efm 6322b946c9fSBram Moolenaarendfunc 6331ff2b64bSBram Moolenaar 6341ff2b64bSBram Moolenaar" This will test for problems in quickfix: 6351ff2b64bSBram Moolenaar" A. incorrectly copying location lists which caused the location list to show 6361ff2b64bSBram Moolenaar" a different name than the file that was actually being displayed. 6371ff2b64bSBram Moolenaar" B. not reusing the window for which the location list window is opened but 6381ff2b64bSBram Moolenaar" instead creating new windows. 6391ff2b64bSBram Moolenaar" C. make sure that the location list window is not reused instead of the 6401ff2b64bSBram Moolenaar" window it belongs to. 6411ff2b64bSBram Moolenaar" 6421ff2b64bSBram Moolenaar" Set up the test environment: 6432b946c9fSBram Moolenaarfunc ReadTestProtocol(name) 6441ff2b64bSBram Moolenaar let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '') 6451ff2b64bSBram Moolenaar let word = substitute(base, '\v(.*)\..*', '\1', '') 6461ff2b64bSBram Moolenaar 6471ff2b64bSBram Moolenaar setl modifiable 6481ff2b64bSBram Moolenaar setl noreadonly 6491ff2b64bSBram Moolenaar setl noswapfile 6501ff2b64bSBram Moolenaar setl bufhidden=delete 6511ff2b64bSBram Moolenaar %del _ 6521ff2b64bSBram Moolenaar " For problem 2: 6531ff2b64bSBram Moolenaar " 'buftype' has to be set to reproduce the constant opening of new windows 6541ff2b64bSBram Moolenaar setl buftype=nofile 6551ff2b64bSBram Moolenaar 6561ff2b64bSBram Moolenaar call setline(1, word) 6571ff2b64bSBram Moolenaar 6581ff2b64bSBram Moolenaar setl nomodified 6591ff2b64bSBram Moolenaar setl nomodifiable 6601ff2b64bSBram Moolenaar setl readonly 6611ff2b64bSBram Moolenaar exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '') 6622b946c9fSBram Moolenaarendfunc 6631ff2b64bSBram Moolenaar 6642b946c9fSBram Moolenaarfunc Test_locationlist() 6651ff2b64bSBram Moolenaar enew 6661ff2b64bSBram Moolenaar 6671ff2b64bSBram Moolenaar augroup testgroup 6681ff2b64bSBram Moolenaar au! 6691ff2b64bSBram Moolenaar autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>")) 6701ff2b64bSBram Moolenaar augroup END 6711ff2b64bSBram Moolenaar 6721ff2b64bSBram Moolenaar let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ] 6731ff2b64bSBram Moolenaar 6741ff2b64bSBram Moolenaar let qflist = [] 6751ff2b64bSBram Moolenaar for word in words 6761ff2b64bSBram Moolenaar call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', }) 6771ff2b64bSBram Moolenaar " NOTE: problem 1: 6781ff2b64bSBram Moolenaar " intentionally not setting 'lnum' so that the quickfix entries are not 6791ff2b64bSBram Moolenaar " valid 6801ff2b64bSBram Moolenaar call setloclist(0, qflist, ' ') 6811ff2b64bSBram Moolenaar endfor 6821ff2b64bSBram Moolenaar 6831ff2b64bSBram Moolenaar " Test A 6841ff2b64bSBram Moolenaar lrewind 6851ff2b64bSBram Moolenaar enew 6861ff2b64bSBram Moolenaar lopen 68799895eacSBram Moolenaar 4lnext 6881ff2b64bSBram Moolenaar vert split 6891ff2b64bSBram Moolenaar wincmd L 6901ff2b64bSBram Moolenaar lopen 6911ff2b64bSBram Moolenaar wincmd p 6921ff2b64bSBram Moolenaar lnext 6931ff2b64bSBram Moolenaar let fileName = expand("%") 6941ff2b64bSBram Moolenaar wincmd p 6951ff2b64bSBram Moolenaar let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '') 6961ff2b64bSBram Moolenaar let fileName = substitute(fileName, '\\', '/', 'g') 6971ff2b64bSBram Moolenaar let locationListFileName = substitute(locationListFileName, '\\', '/', 'g') 6981ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", fileName) 6991ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", locationListFileName) 7001ff2b64bSBram Moolenaar 7011ff2b64bSBram Moolenaar wincmd n | only 7021ff2b64bSBram Moolenaar 7031ff2b64bSBram Moolenaar " Test B: 7041ff2b64bSBram Moolenaar lrewind 7051ff2b64bSBram Moolenaar lopen 7061ff2b64bSBram Moolenaar 2 7071ff2b64bSBram Moolenaar exe "normal \<CR>" 7081ff2b64bSBram Moolenaar wincmd p 7091ff2b64bSBram Moolenaar 3 7101ff2b64bSBram Moolenaar exe "normal \<CR>" 7111ff2b64bSBram Moolenaar wincmd p 7121ff2b64bSBram Moolenaar 4 7131ff2b64bSBram Moolenaar exe "normal \<CR>" 7141ff2b64bSBram Moolenaar call assert_equal(2, winnr('$')) 7151ff2b64bSBram Moolenaar wincmd n | only 7161ff2b64bSBram Moolenaar 7171ff2b64bSBram Moolenaar " Test C: 7181ff2b64bSBram Moolenaar lrewind 7191ff2b64bSBram Moolenaar lopen 7201ff2b64bSBram Moolenaar " Let's move the location list window to the top to check whether it (the 7211ff2b64bSBram Moolenaar " first window found) will be reused when we try to open new windows: 7221ff2b64bSBram Moolenaar wincmd K 7231ff2b64bSBram Moolenaar 2 7241ff2b64bSBram Moolenaar exe "normal \<CR>" 7251ff2b64bSBram Moolenaar wincmd p 7261ff2b64bSBram Moolenaar 3 7271ff2b64bSBram Moolenaar exe "normal \<CR>" 7281ff2b64bSBram Moolenaar wincmd p 7291ff2b64bSBram Moolenaar 4 7301ff2b64bSBram Moolenaar exe "normal \<CR>" 7311ff2b64bSBram Moolenaar 1wincmd w 7321ff2b64bSBram Moolenaar call assert_equal('quickfix', &buftype) 7331ff2b64bSBram Moolenaar 2wincmd w 7341ff2b64bSBram Moolenaar let bufferName = expand("%") 7351ff2b64bSBram Moolenaar let bufferName = substitute(bufferName, '\\', '/', 'g') 7361ff2b64bSBram Moolenaar call assert_equal('test://quux.txt', bufferName) 7371ff2b64bSBram Moolenaar 7381ff2b64bSBram Moolenaar wincmd n | only 7391ff2b64bSBram Moolenaar 7401ff2b64bSBram Moolenaar augroup! testgroup 7412b946c9fSBram Moolenaarendfunc 7420899d698SBram Moolenaar 7432b946c9fSBram Moolenaarfunc Test_locationlist_curwin_was_closed() 7440899d698SBram Moolenaar augroup testgroup 7450899d698SBram Moolenaar au! 746d106e5baSBram Moolenaar autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>")) 7470899d698SBram Moolenaar augroup END 7480899d698SBram Moolenaar 7492b946c9fSBram Moolenaar func! R(n) 7500899d698SBram Moolenaar quit 7510899d698SBram Moolenaar endfunc 7520899d698SBram Moolenaar 7530899d698SBram Moolenaar new 7540899d698SBram Moolenaar let q = [] 755d106e5baSBram Moolenaar call add(q, {'filename': 'test_curwin.txt' }) 7560899d698SBram Moolenaar call setloclist(0, q) 7570899d698SBram Moolenaar call assert_fails('lrewind', 'E924:') 7580899d698SBram Moolenaar 7590899d698SBram Moolenaar augroup! testgroup 7602b946c9fSBram Moolenaarendfunc 7617eba3d2cSBram Moolenaar 7622b946c9fSBram Moolenaarfunc Test_locationlist_cross_tab_jump() 7630a9046fbSBram Moolenaar call writefile(['loclistfoo'], 'loclistfoo') 7640a9046fbSBram Moolenaar call writefile(['loclistbar'], 'loclistbar') 7650a9046fbSBram Moolenaar set switchbuf=usetab 7660a9046fbSBram Moolenaar 7670a9046fbSBram Moolenaar edit loclistfoo 7680a9046fbSBram Moolenaar tabedit loclistbar 7690a9046fbSBram Moolenaar silent lgrep loclistfoo loclist* 7700a9046fbSBram Moolenaar call assert_equal(1, tabpagenr()) 7710a9046fbSBram Moolenaar 7720a9046fbSBram Moolenaar enew | only | tabonly 7730a9046fbSBram Moolenaar set switchbuf&vim 7740a9046fbSBram Moolenaar call delete('loclistfoo') 7750a9046fbSBram Moolenaar call delete('loclistbar') 7762b946c9fSBram Moolenaarendfunc 7770a9046fbSBram Moolenaar 7787eba3d2cSBram Moolenaar" More tests for 'errorformat' 7792b946c9fSBram Moolenaarfunc Test_efm1() 7807eba3d2cSBram Moolenaar if !has('unix') 7817eba3d2cSBram Moolenaar " The 'errorformat' setting is different on non-Unix systems. 7827eba3d2cSBram Moolenaar " This test works only on Unix-like systems. 7837eba3d2cSBram Moolenaar return 7847eba3d2cSBram Moolenaar endif 7857eba3d2cSBram Moolenaar 7867eba3d2cSBram Moolenaar let l = [ 7877eba3d2cSBram Moolenaar \ '"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.', 7887eba3d2cSBram Moolenaar \ '"Xtestfile", line 6 col 19; this is an error', 7897eba3d2cSBram Moolenaar \ 'gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c', 7907eba3d2cSBram Moolenaar \ 'Xtestfile:9: parse error before `asd''', 7917eba3d2cSBram Moolenaar \ 'make: *** [vim] Error 1', 7927eba3d2cSBram Moolenaar \ 'in file "Xtestfile" linenr 10: there is an error', 7937eba3d2cSBram Moolenaar \ '', 7947eba3d2cSBram Moolenaar \ '2 returned', 7957eba3d2cSBram Moolenaar \ '"Xtestfile", line 11 col 1; this is an error', 7967eba3d2cSBram Moolenaar \ '"Xtestfile", line 12 col 2; this is another error', 7977eba3d2cSBram Moolenaar \ '"Xtestfile", line 14:10; this is an error in column 10', 7987eba3d2cSBram Moolenaar \ '=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time', 7997eba3d2cSBram Moolenaar \ '"Xtestfile", linenr 16: yet another problem', 8007eba3d2cSBram Moolenaar \ 'Error in "Xtestfile" at line 17:', 8017eba3d2cSBram Moolenaar \ 'x should be a dot', 8027eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17', 8037eba3d2cSBram Moolenaar \ ' ^', 8047eba3d2cSBram Moolenaar \ 'Error in "Xtestfile" at line 18:', 8057eba3d2cSBram Moolenaar \ 'x should be a dot', 8067eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18', 8077eba3d2cSBram Moolenaar \ '.............^', 8087eba3d2cSBram Moolenaar \ 'Error in "Xtestfile" at line 19:', 8097eba3d2cSBram Moolenaar \ 'x should be a dot', 8107eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19', 8117eba3d2cSBram Moolenaar \ '--------------^', 8127eba3d2cSBram Moolenaar \ 'Error in "Xtestfile" at line 20:', 8137eba3d2cSBram Moolenaar \ 'x should be a dot', 8147eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20', 8157eba3d2cSBram Moolenaar \ ' ^', 8167eba3d2cSBram Moolenaar \ '', 8177eba3d2cSBram Moolenaar \ 'Does anyone know what is the problem and how to correction it?', 8187eba3d2cSBram Moolenaar \ '"Xtestfile", line 21 col 9: What is the title of the quickfix window?', 8197eba3d2cSBram Moolenaar \ '"Xtestfile", line 22 col 9: What is the title of the quickfix window?' 8207eba3d2cSBram Moolenaar \ ] 8217eba3d2cSBram Moolenaar 8227eba3d2cSBram Moolenaar call writefile(l, 'Xerrorfile1') 8237eba3d2cSBram Moolenaar call writefile(l[:-2], 'Xerrorfile2') 8247eba3d2cSBram Moolenaar 8257eba3d2cSBram Moolenaar let m = [ 8267eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2', 8277eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3', 8287eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4', 8297eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5', 8307eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6', 8317eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7', 8327eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8', 8337eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9', 8347eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10', 8357eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11', 8367eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12', 8377eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13', 8387eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14', 8397eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15', 8407eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16', 8417eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17', 8427eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18', 8437eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19', 8447eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20', 8457eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21', 8467eba3d2cSBram Moolenaar \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22' 8477eba3d2cSBram Moolenaar \ ] 8487eba3d2cSBram Moolenaar call writefile(m, 'Xtestfile') 8497eba3d2cSBram Moolenaar 8507eba3d2cSBram Moolenaar let save_efm = &efm 8517eba3d2cSBram Moolenaar set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m 8527eba3d2cSBram Moolenaar set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m 8537eba3d2cSBram Moolenaar 8547eba3d2cSBram Moolenaar exe 'cf Xerrorfile2' 8557eba3d2cSBram Moolenaar clast 8567eba3d2cSBram Moolenaar copen 8577eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile2', w:quickfix_title) 8587eba3d2cSBram Moolenaar wincmd p 8597eba3d2cSBram Moolenaar 8607eba3d2cSBram Moolenaar exe 'cf Xerrorfile1' 8617eba3d2cSBram Moolenaar call assert_equal([4, 12], [line('.'), col('.')]) 8627eba3d2cSBram Moolenaar cn 8637eba3d2cSBram Moolenaar call assert_equal([6, 19], [line('.'), col('.')]) 8647eba3d2cSBram Moolenaar cn 8657eba3d2cSBram Moolenaar call assert_equal([9, 2], [line('.'), col('.')]) 8667eba3d2cSBram Moolenaar cn 8677eba3d2cSBram Moolenaar call assert_equal([10, 2], [line('.'), col('.')]) 8687eba3d2cSBram Moolenaar cn 8697eba3d2cSBram Moolenaar call assert_equal([11, 1], [line('.'), col('.')]) 8707eba3d2cSBram Moolenaar cn 8717eba3d2cSBram Moolenaar call assert_equal([12, 2], [line('.'), col('.')]) 8727eba3d2cSBram Moolenaar cn 8737eba3d2cSBram Moolenaar call assert_equal([14, 10], [line('.'), col('.')]) 8747eba3d2cSBram Moolenaar cn 8757eba3d2cSBram Moolenaar call assert_equal([15, 3, 10], [line('.'), col('.'), virtcol('.')]) 8767eba3d2cSBram Moolenaar cn 8777eba3d2cSBram Moolenaar call assert_equal([16, 2], [line('.'), col('.')]) 8787eba3d2cSBram Moolenaar cn 8797eba3d2cSBram Moolenaar call assert_equal([17, 6], [line('.'), col('.')]) 8807eba3d2cSBram Moolenaar cn 8817eba3d2cSBram Moolenaar call assert_equal([18, 7], [line('.'), col('.')]) 8827eba3d2cSBram Moolenaar cn 8837eba3d2cSBram Moolenaar call assert_equal([19, 8], [line('.'), col('.')]) 8847eba3d2cSBram Moolenaar cn 8857eba3d2cSBram Moolenaar call assert_equal([20, 9], [line('.'), col('.')]) 8867eba3d2cSBram Moolenaar clast 8877eba3d2cSBram Moolenaar cprev 8887eba3d2cSBram Moolenaar cprev 8897eba3d2cSBram Moolenaar wincmd w 8907eba3d2cSBram Moolenaar call assert_equal(':cf Xerrorfile1', w:quickfix_title) 8917eba3d2cSBram Moolenaar wincmd p 8927eba3d2cSBram Moolenaar 8937eba3d2cSBram Moolenaar let &efm = save_efm 8947eba3d2cSBram Moolenaar call delete('Xerrorfile1') 8957eba3d2cSBram Moolenaar call delete('Xerrorfile2') 8967eba3d2cSBram Moolenaar call delete('Xtestfile') 8972b946c9fSBram Moolenaarendfunc 898ffec3c53SBram Moolenaar 899ab47c61fSBram Moolenaar" Test for quickfix directory stack support 9002b946c9fSBram Moolenaarfunc s:dir_stack_tests(cchar) 90138df43bdSBram Moolenaar call s:setup_commands(a:cchar) 90238df43bdSBram Moolenaar 903ab47c61fSBram Moolenaar let save_efm=&efm 904ab47c61fSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 905ab47c61fSBram Moolenaar 906361c8f0eSBram Moolenaar let lines = ["Entering dir 'dir1/a'", 907361c8f0eSBram Moolenaar \ 'habits2.txt:1:Nine Healthy Habits', 908361c8f0eSBram Moolenaar \ "Entering dir 'b'", 909361c8f0eSBram Moolenaar \ 'habits3.txt:2:0 Hours of television', 910361c8f0eSBram Moolenaar \ 'habits2.txt:7:5 Small meals', 911361c8f0eSBram Moolenaar \ "Entering dir 'dir1/c'", 912361c8f0eSBram Moolenaar \ 'habits4.txt:3:1 Hour of exercise', 913361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/c'", 914361c8f0eSBram Moolenaar \ "Leaving dir 'dir1/a'", 915361c8f0eSBram Moolenaar \ 'habits1.txt:4:2 Liters of water', 916361c8f0eSBram Moolenaar \ "Entering dir 'dir2'", 917361c8f0eSBram Moolenaar \ 'habits5.txt:5:3 Cups of hot green tea', 918361c8f0eSBram Moolenaar \ "Leaving dir 'dir2'" 919361c8f0eSBram Moolenaar \] 920ab47c61fSBram Moolenaar 921361c8f0eSBram Moolenaar Xexpr "" 922361c8f0eSBram Moolenaar for l in lines 923361c8f0eSBram Moolenaar Xaddexpr l 924361c8f0eSBram Moolenaar endfor 925ab47c61fSBram Moolenaar 9263ef5bf7dSBram Moolenaar let qf = g:Xgetlist() 927ab47c61fSBram Moolenaar 928ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr)) 929ab47c61fSBram Moolenaar call assert_equal(1, qf[1].lnum) 930ab47c61fSBram Moolenaar call assert_equal('dir1/a/b/habits3.txt', bufname(qf[3].bufnr)) 931ab47c61fSBram Moolenaar call assert_equal(2, qf[3].lnum) 932ab47c61fSBram Moolenaar call assert_equal('dir1/a/habits2.txt', bufname(qf[4].bufnr)) 933ab47c61fSBram Moolenaar call assert_equal(7, qf[4].lnum) 934ab47c61fSBram Moolenaar call assert_equal('dir1/c/habits4.txt', bufname(qf[6].bufnr)) 935ab47c61fSBram Moolenaar call assert_equal(3, qf[6].lnum) 936ab47c61fSBram Moolenaar call assert_equal('habits1.txt', bufname(qf[9].bufnr)) 937ab47c61fSBram Moolenaar call assert_equal(4, qf[9].lnum) 938ab47c61fSBram Moolenaar call assert_equal('dir2/habits5.txt', bufname(qf[11].bufnr)) 939ab47c61fSBram Moolenaar call assert_equal(5, qf[11].lnum) 940ab47c61fSBram Moolenaar 941ab47c61fSBram Moolenaar let &efm=save_efm 9422b946c9fSBram Moolenaarendfunc 943ab47c61fSBram Moolenaar 944ab47c61fSBram Moolenaar" Tests for %D and %X errorformat options 9452b946c9fSBram Moolenaarfunc Test_efm_dirstack() 946ab47c61fSBram Moolenaar " Create the directory stack and files 947ab47c61fSBram Moolenaar call mkdir('dir1') 948ab47c61fSBram Moolenaar call mkdir('dir1/a') 949ab47c61fSBram Moolenaar call mkdir('dir1/a/b') 950ab47c61fSBram Moolenaar call mkdir('dir1/c') 951ab47c61fSBram Moolenaar call mkdir('dir2') 952ab47c61fSBram Moolenaar 953ab47c61fSBram Moolenaar let lines = ["Nine Healthy Habits", 954ab47c61fSBram Moolenaar \ "0 Hours of television", 955ab47c61fSBram Moolenaar \ "1 Hour of exercise", 956ab47c61fSBram Moolenaar \ "2 Liters of water", 957ab47c61fSBram Moolenaar \ "3 Cups of hot green tea", 958ab47c61fSBram Moolenaar \ "4 Short mental breaks", 959ab47c61fSBram Moolenaar \ "5 Small meals", 960ab47c61fSBram Moolenaar \ "6 AM wake up time", 961ab47c61fSBram Moolenaar \ "7 Minutes of laughter", 962ab47c61fSBram Moolenaar \ "8 Hours of sleep (at least)", 963ab47c61fSBram Moolenaar \ "9 PM end of the day and off to bed" 964ab47c61fSBram Moolenaar \ ] 965ab47c61fSBram Moolenaar call writefile(lines, 'habits1.txt') 966ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/habits2.txt') 967ab47c61fSBram Moolenaar call writefile(lines, 'dir1/a/b/habits3.txt') 968ab47c61fSBram Moolenaar call writefile(lines, 'dir1/c/habits4.txt') 969ab47c61fSBram Moolenaar call writefile(lines, 'dir2/habits5.txt') 970ab47c61fSBram Moolenaar 971ab47c61fSBram Moolenaar call s:dir_stack_tests('c') 972ab47c61fSBram Moolenaar call s:dir_stack_tests('l') 973ab47c61fSBram Moolenaar 974ab47c61fSBram Moolenaar call delete('dir1', 'rf') 975ab47c61fSBram Moolenaar call delete('dir2', 'rf') 976ab47c61fSBram Moolenaar call delete('habits1.txt') 9772b946c9fSBram Moolenaarendfunc 978ab47c61fSBram Moolenaar 9799b457948SBram Moolenaar" Test for resync after continuing an ignored message 9802b946c9fSBram Moolenaarfunc Xefm_ignore_continuations(cchar) 9819b457948SBram Moolenaar call s:setup_commands(a:cchar) 9829b457948SBram Moolenaar 9839b457948SBram Moolenaar let save_efm = &efm 9849b457948SBram Moolenaar 9859b457948SBram Moolenaar let &efm = 9869b457948SBram Moolenaar \ '%Eerror %m %l,' . 9879b457948SBram Moolenaar \ '%-Wignored %m %l,' . 9889b457948SBram Moolenaar \ '%+Cmore ignored %m %l,' . 9899b457948SBram Moolenaar \ '%Zignored end' 9909b457948SBram Moolenaar Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4'] 9919b457948SBram Moolenaar let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]') 9929b457948SBram Moolenaar call assert_equal([['resync', 1, 4, 'E']], l) 9939b457948SBram Moolenaar 9949b457948SBram Moolenaar let &efm = save_efm 9952b946c9fSBram Moolenaarendfunc 9969b457948SBram Moolenaar 9972b946c9fSBram Moolenaarfunc Test_efm_ignore_continuations() 9989b457948SBram Moolenaar call Xefm_ignore_continuations('c') 9999b457948SBram Moolenaar call Xefm_ignore_continuations('l') 10002b946c9fSBram Moolenaarendfunc 10019b457948SBram Moolenaar 10020fcc7c6dSBram Moolenaar" Tests for invalid error format specifies 10032b946c9fSBram Moolenaarfunc Xinvalid_efm_Tests(cchar) 10040fcc7c6dSBram Moolenaar call s:setup_commands(a:cchar) 10050fcc7c6dSBram Moolenaar 1006049cba9eSBram Moolenaar let save_efm = &efm 1007049cba9eSBram Moolenaar 10080fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%f:%l:%m 10090fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:') 10100fcc7c6dSBram Moolenaar 10110fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%r:%m 10120fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 10130fcc7c6dSBram Moolenaar 10140fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%O:%f:%l:%m 10150fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:') 10160fcc7c6dSBram Moolenaar 10170fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*[^a-z 10180fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:') 10190fcc7c6dSBram Moolenaar 10200fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%*c 10210fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:') 10220fcc7c6dSBram Moolenaar 10230fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%L%M%N 10240fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:') 10250fcc7c6dSBram Moolenaar 10260fcc7c6dSBram Moolenaar set efm=%f:%l:%m,%f:%l:%m:%R 10270fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') 10280fcc7c6dSBram Moolenaar 10290fcc7c6dSBram Moolenaar set efm= 10300fcc7c6dSBram Moolenaar call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') 10310fcc7c6dSBram Moolenaar 10320fcc7c6dSBram Moolenaar set efm=%DEntering\ dir\ abc,%f:%l:%m 10330fcc7c6dSBram Moolenaar call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:') 10340fcc7c6dSBram Moolenaar 10350fcc7c6dSBram Moolenaar let &efm = save_efm 10362b946c9fSBram Moolenaarendfunc 10370fcc7c6dSBram Moolenaar 10382b946c9fSBram Moolenaarfunc Test_invalid_efm() 10390fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('c') 10400fcc7c6dSBram Moolenaar call Xinvalid_efm_Tests('l') 10412b946c9fSBram Moolenaarendfunc 10420fcc7c6dSBram Moolenaar 10430fcc7c6dSBram Moolenaar" TODO: 10440fcc7c6dSBram Moolenaar" Add tests for the following formats in 'errorformat' 10450fcc7c6dSBram Moolenaar" %r %O 10462b946c9fSBram Moolenaarfunc Test_efm2() 10470fcc7c6dSBram Moolenaar let save_efm = &efm 1048049cba9eSBram Moolenaar 1049049cba9eSBram Moolenaar " Test for %s format in efm 1050049cba9eSBram Moolenaar set efm=%f:%s 1051049cba9eSBram Moolenaar cexpr 'Xtestfile:Line search text' 1052049cba9eSBram Moolenaar let l = getqflist() 1053049cba9eSBram Moolenaar call assert_equal(l[0].pattern, '^\VLine search text\$') 1054049cba9eSBram Moolenaar call assert_equal(l[0].lnum, 0) 1055049cba9eSBram Moolenaar 1056ee85df37SBram Moolenaar let l = split(execute('clist', ''), "\n") 1057ee85df37SBram Moolenaar call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l) 1058ee85df37SBram Moolenaar 10590fcc7c6dSBram Moolenaar " Test for %P, %Q and %t format specifiers 1060049cba9eSBram Moolenaar let lines=["[Xtestfile1]", 1061049cba9eSBram Moolenaar \ "(1,17) error: ';' missing", 1062049cba9eSBram Moolenaar \ "(21,2) warning: variable 'z' not defined", 1063049cba9eSBram Moolenaar \ "(67,3) error: end of file found before string ended", 1064ee85df37SBram Moolenaar \ "--", 1065049cba9eSBram Moolenaar \ "", 1066049cba9eSBram Moolenaar \ "[Xtestfile2]", 1067ee85df37SBram Moolenaar \ "--", 1068049cba9eSBram Moolenaar \ "", 1069049cba9eSBram Moolenaar \ "[Xtestfile3]", 1070049cba9eSBram Moolenaar \ "NEW compiler v1.1", 1071049cba9eSBram Moolenaar \ "(2,2) warning: variable 'x' not defined", 1072ee85df37SBram Moolenaar \ "(67,3) warning: 's' already defined", 1073ee85df37SBram Moolenaar \ "--" 1074049cba9eSBram Moolenaar \] 1075ee85df37SBram Moolenaar set efm=%+P[%f]%r,(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%+Q--%r 1076391b1dd0SBram Moolenaar " To exercise the push/pop file functionality in quickfix, the test files 1077391b1dd0SBram Moolenaar " need to be created. 1078391b1dd0SBram Moolenaar call writefile(['Line1'], 'Xtestfile1') 1079391b1dd0SBram Moolenaar call writefile(['Line2'], 'Xtestfile2') 1080391b1dd0SBram Moolenaar call writefile(['Line3'], 'Xtestfile3') 1081361c8f0eSBram Moolenaar cexpr "" 1082361c8f0eSBram Moolenaar for l in lines 1083361c8f0eSBram Moolenaar caddexpr l 1084361c8f0eSBram Moolenaar endfor 1085049cba9eSBram Moolenaar let l = getqflist() 1086ee85df37SBram Moolenaar call assert_equal(12, len(l)) 1087049cba9eSBram Moolenaar call assert_equal(21, l[2].lnum) 1088049cba9eSBram Moolenaar call assert_equal(2, l[2].col) 10890fcc7c6dSBram Moolenaar call assert_equal('w', l[2].type) 10900fcc7c6dSBram Moolenaar call assert_equal('e', l[3].type) 1091391b1dd0SBram Moolenaar call delete('Xtestfile1') 1092391b1dd0SBram Moolenaar call delete('Xtestfile2') 1093391b1dd0SBram Moolenaar call delete('Xtestfile3') 10940fcc7c6dSBram Moolenaar 10950fcc7c6dSBram Moolenaar " Tests for %E, %C and %Z format specifiers 10960fcc7c6dSBram Moolenaar let lines = ["Error 275", 10970fcc7c6dSBram Moolenaar \ "line 42", 10980fcc7c6dSBram Moolenaar \ "column 3", 10990fcc7c6dSBram Moolenaar \ "' ' expected after '--'" 11000fcc7c6dSBram Moolenaar \] 11010fcc7c6dSBram Moolenaar set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m 11020fcc7c6dSBram Moolenaar cgetexpr lines 11030fcc7c6dSBram Moolenaar let l = getqflist() 11040fcc7c6dSBram Moolenaar call assert_equal(275, l[0].nr) 11050fcc7c6dSBram Moolenaar call assert_equal(42, l[0].lnum) 11060fcc7c6dSBram Moolenaar call assert_equal(3, l[0].col) 11070fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 11080fcc7c6dSBram Moolenaar call assert_equal("\n' ' expected after '--'", l[0].text) 11090fcc7c6dSBram Moolenaar 11100fcc7c6dSBram Moolenaar " Test for %> 11110fcc7c6dSBram Moolenaar let lines = ["Error in line 147 of foo.c:", 11120fcc7c6dSBram Moolenaar \"unknown variable 'i'" 11130fcc7c6dSBram Moolenaar \] 11140fcc7c6dSBram Moolenaar set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m 11150fcc7c6dSBram Moolenaar cgetexpr lines 11160fcc7c6dSBram Moolenaar let l = getqflist() 11170fcc7c6dSBram Moolenaar call assert_equal(147, l[0].lnum) 11180fcc7c6dSBram Moolenaar call assert_equal('E', l[0].type) 11190fcc7c6dSBram Moolenaar call assert_equal("\nunknown variable 'i'", l[0].text) 1120049cba9eSBram Moolenaar 1121e87e6dddSBram Moolenaar " Test for %A, %C and other formats 1122e87e6dddSBram Moolenaar let lines = [ 1123e87e6dddSBram Moolenaar \"==============================================================", 1124e87e6dddSBram Moolenaar \"FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)", 1125e87e6dddSBram Moolenaar \"--------------------------------------------------------------", 1126e87e6dddSBram Moolenaar \"Traceback (most recent call last):", 1127e87e6dddSBram Moolenaar \' File "unittests/dbfacadeTest.py", line 89, in testFoo', 1128e87e6dddSBram Moolenaar \" self.assertEquals(34, dtid)", 1129e87e6dddSBram Moolenaar \' File "/usr/lib/python2.2/unittest.py", line 286, in', 1130e87e6dddSBram Moolenaar \" failUnlessEqual", 1131e87e6dddSBram Moolenaar \" raise self.failureException, \\", 1132e87e6dddSBram Moolenaar \"AssertionError: 34 != 33", 1133e87e6dddSBram Moolenaar \"", 1134e87e6dddSBram Moolenaar \"--------------------------------------------------------------", 1135e87e6dddSBram Moolenaar \"Ran 27 tests in 0.063s" 1136e87e6dddSBram Moolenaar \] 1137e87e6dddSBram Moolenaar set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m 1138e87e6dddSBram Moolenaar cgetexpr lines 1139e87e6dddSBram Moolenaar let l = getqflist() 1140e87e6dddSBram Moolenaar call assert_equal(8, len(l)) 1141e87e6dddSBram Moolenaar call assert_equal(89, l[4].lnum) 1142e87e6dddSBram Moolenaar call assert_equal(1, l[4].valid) 1143e87e6dddSBram Moolenaar call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr)) 1144e87e6dddSBram Moolenaar 114599895eacSBram Moolenaar " The following sequence of commands used to crash Vim 114699895eacSBram Moolenaar set efm=%W%m 114799895eacSBram Moolenaar cgetexpr ['msg1'] 114899895eacSBram Moolenaar let l = getqflist() 114999895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 115099895eacSBram Moolenaar call assert_equal('msg1', l[0].text) 115199895eacSBram Moolenaar set efm=%C%m 115299895eacSBram Moolenaar lexpr 'msg2' 115399895eacSBram Moolenaar let l = getloclist(0) 115499895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 115599895eacSBram Moolenaar call assert_equal('msg2', l[0].text) 115699895eacSBram Moolenaar lopen 115799895eacSBram Moolenaar call setqflist([], 'r') 115899895eacSBram Moolenaar caddbuf 115999895eacSBram Moolenaar let l = getqflist() 116099895eacSBram Moolenaar call assert_equal(1, len(l), string(l)) 116199895eacSBram Moolenaar call assert_equal('|| msg2', l[0].text) 116299895eacSBram Moolenaar 116399895eacSBram Moolenaar new | only 1164049cba9eSBram Moolenaar let &efm = save_efm 11652b946c9fSBram Moolenaarendfunc 1166049cba9eSBram Moolenaar 11672b946c9fSBram Moolenaarfunc XquickfixChangedByAutocmd(cchar) 11683ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1169ffec3c53SBram Moolenaar if a:cchar == 'c' 1170ffec3c53SBram Moolenaar let ErrorNr = 'E925' 11712b946c9fSBram Moolenaar func! ReadFunc() 1172ffec3c53SBram Moolenaar colder 1173ffec3c53SBram Moolenaar cgetexpr [] 1174ffec3c53SBram Moolenaar endfunc 1175ffec3c53SBram Moolenaar else 1176ffec3c53SBram Moolenaar let ErrorNr = 'E926' 11772b946c9fSBram Moolenaar func! ReadFunc() 1178ffec3c53SBram Moolenaar lolder 1179ffec3c53SBram Moolenaar lgetexpr [] 1180ffec3c53SBram Moolenaar endfunc 1181ffec3c53SBram Moolenaar endif 1182ffec3c53SBram Moolenaar 1183ffec3c53SBram Moolenaar augroup testgroup 1184ffec3c53SBram Moolenaar au! 1185d106e5baSBram Moolenaar autocmd BufReadCmd test_changed.txt call ReadFunc() 1186ffec3c53SBram Moolenaar augroup END 1187ffec3c53SBram Moolenaar 1188d106e5baSBram Moolenaar new | only 1189ffec3c53SBram Moolenaar let words = [ "a", "b" ] 1190ffec3c53SBram Moolenaar let qflist = [] 1191ffec3c53SBram Moolenaar for word in words 1192d106e5baSBram Moolenaar call add(qflist, {'filename': 'test_changed.txt'}) 11933ef5bf7dSBram Moolenaar call g:Xsetlist(qflist, ' ') 1194ffec3c53SBram Moolenaar endfor 11953ef5bf7dSBram Moolenaar call assert_fails('Xrewind', ErrorNr . ':') 1196ffec3c53SBram Moolenaar 1197ffec3c53SBram Moolenaar augroup! testgroup 1198ffec3c53SBram Moolenaarendfunc 1199ffec3c53SBram Moolenaar 12002b946c9fSBram Moolenaarfunc Test_quickfix_was_changed_by_autocmd() 1201ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('c') 1202ffec3c53SBram Moolenaar call XquickfixChangedByAutocmd('l') 12032b946c9fSBram Moolenaarendfunc 12048b20179cSBram Moolenaar 12058b20179cSBram Moolenaarfunc Test_caddbuffer_to_empty() 12068b20179cSBram Moolenaar helpgr quickfix 12078b20179cSBram Moolenaar call setqflist([], 'r') 12088b20179cSBram Moolenaar cad 1209f68f1d70SBram Moolenaar try 1210f68f1d70SBram Moolenaar cn 1211f68f1d70SBram Moolenaar catch 1212f68f1d70SBram Moolenaar " number of matches is unknown 1213f68f1d70SBram Moolenaar call assert_true(v:exception =~ 'E553:') 1214f68f1d70SBram Moolenaar endtry 12158b20179cSBram Moolenaar quit! 12168b20179cSBram Moolenaarendfunc 121789c64d55SBram Moolenaar 121889c64d55SBram Moolenaarfunc Test_cgetexpr_works() 121989c64d55SBram Moolenaar " this must not crash Vim 122089c64d55SBram Moolenaar cgetexpr [$x] 12213ef5bf7dSBram Moolenaar lgetexpr [$x] 122289c64d55SBram Moolenaarendfunc 1223c1808d58SBram Moolenaar 1224c1808d58SBram Moolenaar" Tests for the setqflist() and setloclist() functions 12252b946c9fSBram Moolenaarfunc SetXlistTests(cchar, bnum) 12263ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 1227c1808d58SBram Moolenaar 12283ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1}, 1229c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 2}]) 12303ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1231c1808d58SBram Moolenaar call assert_equal(2, len(l)) 1232c1808d58SBram Moolenaar call assert_equal(2, l[1].lnum) 1233c1808d58SBram Moolenaar 12343ef5bf7dSBram Moolenaar Xnext 12353ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a') 12363ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1237c1808d58SBram Moolenaar call assert_equal(3, len(l)) 12383ef5bf7dSBram Moolenaar Xnext 1239c1808d58SBram Moolenaar call assert_equal(3, line('.')) 1240c1808d58SBram Moolenaar 12412b2b8ae5SBram Moolenaar " Appending entries to the list should not change the cursor position 12422b2b8ae5SBram Moolenaar " in the quickfix window 12433ef5bf7dSBram Moolenaar Xwindow 12442b2b8ae5SBram Moolenaar 1 12453ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4}, 12462b2b8ae5SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'a') 12472b2b8ae5SBram Moolenaar call assert_equal(1, line('.')) 12482b2b8ae5SBram Moolenaar close 12492b2b8ae5SBram Moolenaar 12503ef5bf7dSBram Moolenaar call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}, 1251c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 4}, 1252c1808d58SBram Moolenaar \ {'bufnr': a:bnum, 'lnum': 5}], 'r') 12533ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1254c1808d58SBram Moolenaar call assert_equal(3, len(l)) 1255c1808d58SBram Moolenaar call assert_equal(5, l[2].lnum) 1256c1808d58SBram Moolenaar 12573ef5bf7dSBram Moolenaar call g:Xsetlist([]) 12583ef5bf7dSBram Moolenaar let l = g:Xgetlist() 1259c1808d58SBram Moolenaar call assert_equal(0, len(l)) 1260ee85df37SBram Moolenaar 1261f1d21c8cSBram Moolenaar " Tests for setting the 'valid' flag 1262f1d21c8cSBram Moolenaar call g:Xsetlist([{'bufnr':a:bnum, 'lnum':4, 'valid':0}]) 1263f1d21c8cSBram Moolenaar Xwindow 1264f1d21c8cSBram Moolenaar call assert_equal(1, winnr('$')) 1265f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1266f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1267f1d21c8cSBram Moolenaar call assert_equal(0, g:Xgetlist()[0].valid) 1268f1d21c8cSBram Moolenaar call g:Xsetlist([{'text':'Text1', 'valid':1}]) 1269f1d21c8cSBram Moolenaar Xwindow 1270f1d21c8cSBram Moolenaar call assert_equal(2, winnr('$')) 1271f1d21c8cSBram Moolenaar Xclose 1272f1d21c8cSBram Moolenaar let save_efm = &efm 1273f1d21c8cSBram Moolenaar set efm=%m 1274f1d21c8cSBram Moolenaar Xgetexpr 'TestMessage' 1275f1d21c8cSBram Moolenaar let l = g:Xgetlist() 1276f1d21c8cSBram Moolenaar call g:Xsetlist(l) 1277f1d21c8cSBram Moolenaar call assert_equal(1, g:Xgetlist()[0].valid) 1278f1d21c8cSBram Moolenaar let &efm = save_efm 1279f1d21c8cSBram Moolenaar 1280ee85df37SBram Moolenaar " Error cases: 1281ee85df37SBram Moolenaar " Refer to a non-existing buffer and pass a non-dictionary type 1282ee85df37SBram Moolenaar call assert_fails("call g:Xsetlist([{'bufnr':998, 'lnum':4}," . 1283ee85df37SBram Moolenaar \ " {'bufnr':999, 'lnum':5}])", 'E92:') 1284ee85df37SBram Moolenaar call g:Xsetlist([[1, 2,3]]) 1285ee85df37SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 12862b946c9fSBram Moolenaarendfunc 1287c1808d58SBram Moolenaar 12882b946c9fSBram Moolenaarfunc Test_setqflist() 1289c1808d58SBram Moolenaar new Xtestfile | only 1290c1808d58SBram Moolenaar let bnum = bufnr('%') 1291c1808d58SBram Moolenaar call setline(1, range(1,5)) 1292c1808d58SBram Moolenaar 1293c1808d58SBram Moolenaar call SetXlistTests('c', bnum) 1294c1808d58SBram Moolenaar call SetXlistTests('l', bnum) 1295c1808d58SBram Moolenaar 12961cee693bSBram Moolenaar enew! 1297c1808d58SBram Moolenaar call delete('Xtestfile') 12982b946c9fSBram Moolenaarendfunc 1299d106e5baSBram Moolenaar 13002b946c9fSBram Moolenaarfunc Xlist_empty_middle(cchar) 13013ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 13023ef5bf7dSBram Moolenaar 13031cee693bSBram Moolenaar " create three quickfix lists 1304ee85df37SBram Moolenaar let @/ = 'Test_' 1305ee85df37SBram Moolenaar Xvimgrep // test_quickfix.vim 13063ef5bf7dSBram Moolenaar let testlen = len(g:Xgetlist()) 13071cee693bSBram Moolenaar call assert_true(testlen > 0) 13083ef5bf7dSBram Moolenaar Xvimgrep empty test_quickfix.vim 13093ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) > 0) 13103ef5bf7dSBram Moolenaar Xvimgrep matches test_quickfix.vim 13113ef5bf7dSBram Moolenaar let matchlen = len(g:Xgetlist()) 13121cee693bSBram Moolenaar call assert_true(matchlen > 0) 13133ef5bf7dSBram Moolenaar Xolder 13141cee693bSBram Moolenaar " make the middle list empty 13153ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 13163ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 13173ef5bf7dSBram Moolenaar Xolder 13183ef5bf7dSBram Moolenaar call assert_equal(testlen, len(g:Xgetlist())) 13193ef5bf7dSBram Moolenaar Xnewer 13203ef5bf7dSBram Moolenaar Xnewer 13213ef5bf7dSBram Moolenaar call assert_equal(matchlen, len(g:Xgetlist())) 13221cee693bSBram Moolenaarendfunc 13231cee693bSBram Moolenaar 13242b946c9fSBram Moolenaarfunc Test_setqflist_empty_middle() 13253ef5bf7dSBram Moolenaar call Xlist_empty_middle('c') 13263ef5bf7dSBram Moolenaar call Xlist_empty_middle('l') 13272b946c9fSBram Moolenaarendfunc 13283ef5bf7dSBram Moolenaar 13292b946c9fSBram Moolenaarfunc Xlist_empty_older(cchar) 13303ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 13313ef5bf7dSBram Moolenaar 13321cee693bSBram Moolenaar " create three quickfix lists 13333ef5bf7dSBram Moolenaar Xvimgrep one test_quickfix.vim 13343ef5bf7dSBram Moolenaar let onelen = len(g:Xgetlist()) 13351cee693bSBram Moolenaar call assert_true(onelen > 0) 13363ef5bf7dSBram Moolenaar Xvimgrep two test_quickfix.vim 13373ef5bf7dSBram Moolenaar let twolen = len(g:Xgetlist()) 13381cee693bSBram Moolenaar call assert_true(twolen > 0) 13393ef5bf7dSBram Moolenaar Xvimgrep three test_quickfix.vim 13403ef5bf7dSBram Moolenaar let threelen = len(g:Xgetlist()) 13411cee693bSBram Moolenaar call assert_true(threelen > 0) 13423ef5bf7dSBram Moolenaar Xolder 2 13431cee693bSBram Moolenaar " make the first list empty, check the others didn't change 13443ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 13453ef5bf7dSBram Moolenaar call assert_true(len(g:Xgetlist()) == 0) 13463ef5bf7dSBram Moolenaar Xnewer 13473ef5bf7dSBram Moolenaar call assert_equal(twolen, len(g:Xgetlist())) 13483ef5bf7dSBram Moolenaar Xnewer 13493ef5bf7dSBram Moolenaar call assert_equal(threelen, len(g:Xgetlist())) 13502b946c9fSBram Moolenaarendfunc 13513ef5bf7dSBram Moolenaar 13522b946c9fSBram Moolenaarfunc Test_setqflist_empty_older() 13533ef5bf7dSBram Moolenaar call Xlist_empty_older('c') 13543ef5bf7dSBram Moolenaar call Xlist_empty_older('l') 13552b946c9fSBram Moolenaarendfunc 13561cee693bSBram Moolenaar 13572b946c9fSBram Moolenaarfunc XquickfixSetListWithAct(cchar) 13583ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 13593ef5bf7dSBram Moolenaar 1360d106e5baSBram Moolenaar let list1 = [{'filename': 'fnameA', 'text': 'A'}, 1361d106e5baSBram Moolenaar \ {'filename': 'fnameB', 'text': 'B'}] 1362d106e5baSBram Moolenaar let list2 = [{'filename': 'fnameC', 'text': 'C'}, 1363d106e5baSBram Moolenaar \ {'filename': 'fnameD', 'text': 'D'}, 1364d106e5baSBram Moolenaar \ {'filename': 'fnameE', 'text': 'E'}] 1365d106e5baSBram Moolenaar 1366d106e5baSBram Moolenaar " {action} is unspecified. Same as specifing ' '. 1367d106e5baSBram Moolenaar new | only 13683ef5bf7dSBram Moolenaar silent! Xnewer 99 13693ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 13703ef5bf7dSBram Moolenaar call g:Xsetlist(list2) 13713ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1372d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1373d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1374d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1375d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 13763ef5bf7dSBram Moolenaar silent! Xolder 13773ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1378d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1379d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1380d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1381d106e5baSBram Moolenaar 1382d106e5baSBram Moolenaar " {action} is specified ' '. 1383d106e5baSBram Moolenaar new | only 13843ef5bf7dSBram Moolenaar silent! Xnewer 99 13853ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 13863ef5bf7dSBram Moolenaar call g:Xsetlist(list2, ' ') 13873ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1388d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1389d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1390d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1391d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 13923ef5bf7dSBram Moolenaar silent! Xolder 13933ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1394d106e5baSBram Moolenaar call assert_equal(2, len(li)) 1395d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1396d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1397d106e5baSBram Moolenaar 1398d106e5baSBram Moolenaar " {action} is specified 'a'. 1399d106e5baSBram Moolenaar new | only 14003ef5bf7dSBram Moolenaar silent! Xnewer 99 14013ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 14023ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'a') 14033ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1404d106e5baSBram Moolenaar call assert_equal(5, len(li)) 1405d106e5baSBram Moolenaar call assert_equal('A', li[0]['text']) 1406d106e5baSBram Moolenaar call assert_equal('B', li[1]['text']) 1407d106e5baSBram Moolenaar call assert_equal('C', li[2]['text']) 1408d106e5baSBram Moolenaar call assert_equal('D', li[3]['text']) 1409d106e5baSBram Moolenaar call assert_equal('E', li[4]['text']) 1410d106e5baSBram Moolenaar 1411d106e5baSBram Moolenaar " {action} is specified 'r'. 1412d106e5baSBram Moolenaar new | only 14133ef5bf7dSBram Moolenaar silent! Xnewer 99 14143ef5bf7dSBram Moolenaar call g:Xsetlist(list1) 14153ef5bf7dSBram Moolenaar call g:Xsetlist(list2, 'r') 14163ef5bf7dSBram Moolenaar let li = g:Xgetlist() 1417d106e5baSBram Moolenaar call assert_equal(3, len(li)) 1418d106e5baSBram Moolenaar call assert_equal('C', li[0]['text']) 1419d106e5baSBram Moolenaar call assert_equal('D', li[1]['text']) 1420d106e5baSBram Moolenaar call assert_equal('E', li[2]['text']) 1421d106e5baSBram Moolenaar 1422d106e5baSBram Moolenaar " Test for wrong value. 1423d106e5baSBram Moolenaar new | only 14243ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(0)", 'E714:') 14253ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, '')", 'E927:') 14263ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:') 14273ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:') 14283ef5bf7dSBram Moolenaar call assert_fails("call g:Xsetlist(list1, 0)", 'E928:') 1429d106e5baSBram Moolenaarendfunc 1430d106e5baSBram Moolenaar 1431a0ca7d00SBram Moolenaarfunc Test_setqflist_invalid_nr() 1432a0ca7d00SBram Moolenaar " The following command used to crash Vim 1433a0ca7d00SBram Moolenaar call setqflist([], ' ', {'nr' : $XXX_DOES_NOT_EXIST}) 1434a0ca7d00SBram Moolenaarendfunc 1435a0ca7d00SBram Moolenaar 14362b946c9fSBram Moolenaarfunc Test_quickfix_set_list_with_act() 1437d106e5baSBram Moolenaar call XquickfixSetListWithAct('c') 1438d106e5baSBram Moolenaar call XquickfixSetListWithAct('l') 14392b946c9fSBram Moolenaarendfunc 14406be8c8e1SBram Moolenaar 14412b946c9fSBram Moolenaarfunc XLongLinesTests(cchar) 14423ef5bf7dSBram Moolenaar let l = g:Xgetlist() 14436be8c8e1SBram Moolenaar 1444049cba9eSBram Moolenaar call assert_equal(4, len(l)) 14456be8c8e1SBram Moolenaar call assert_equal(1, l[0].lnum) 14466be8c8e1SBram Moolenaar call assert_equal(1, l[0].col) 1447049cba9eSBram Moolenaar call assert_equal(1975, len(l[0].text)) 14486be8c8e1SBram Moolenaar call assert_equal(2, l[1].lnum) 14496be8c8e1SBram Moolenaar call assert_equal(1, l[1].col) 14506be8c8e1SBram Moolenaar call assert_equal(4070, len(l[1].text)) 14516be8c8e1SBram Moolenaar call assert_equal(3, l[2].lnum) 14526be8c8e1SBram Moolenaar call assert_equal(1, l[2].col) 1453049cba9eSBram Moolenaar call assert_equal(4070, len(l[2].text)) 1454049cba9eSBram Moolenaar call assert_equal(4, l[3].lnum) 1455049cba9eSBram Moolenaar call assert_equal(1, l[3].col) 1456049cba9eSBram Moolenaar call assert_equal(10, len(l[3].text)) 14576be8c8e1SBram Moolenaar 14583ef5bf7dSBram Moolenaar call g:Xsetlist([], 'r') 14592b946c9fSBram Moolenaarendfunc 14606be8c8e1SBram Moolenaar 14612b946c9fSBram Moolenaarfunc s:long_lines_tests(cchar) 14623ef5bf7dSBram Moolenaar call s:setup_commands(a:cchar) 14633ef5bf7dSBram Moolenaar 14646be8c8e1SBram Moolenaar let testfile = 'samples/quickfix.txt' 14656be8c8e1SBram Moolenaar 14666be8c8e1SBram Moolenaar " file 14673ef5bf7dSBram Moolenaar exe 'Xgetfile' testfile 14683ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 14696be8c8e1SBram Moolenaar 14706be8c8e1SBram Moolenaar " list 14713ef5bf7dSBram Moolenaar Xexpr readfile(testfile) 14723ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 14736be8c8e1SBram Moolenaar 14746be8c8e1SBram Moolenaar " string 14753ef5bf7dSBram Moolenaar Xexpr join(readfile(testfile), "\n") 14763ef5bf7dSBram Moolenaar call XLongLinesTests(a:cchar) 14776be8c8e1SBram Moolenaar 14786be8c8e1SBram Moolenaar " buffer 14793ef5bf7dSBram Moolenaar exe 'edit' testfile 14803ef5bf7dSBram Moolenaar exe 'Xbuffer' bufnr('%') 1481f50df392SBram Moolenaar call XLongLinesTests(a:cchar) 14822b946c9fSBram Moolenaarendfunc 14833ef5bf7dSBram Moolenaar 14842b946c9fSBram Moolenaarfunc Test_long_lines() 14853ef5bf7dSBram Moolenaar call s:long_lines_tests('c') 14863ef5bf7dSBram Moolenaar call s:long_lines_tests('l') 14872b946c9fSBram Moolenaarendfunc 1488049cba9eSBram Moolenaar 14892b946c9fSBram Moolenaarfunc s:create_test_file(filename) 1490049cba9eSBram Moolenaar let l = [] 1491049cba9eSBram Moolenaar for i in range(1, 20) 1492049cba9eSBram Moolenaar call add(l, 'Line' . i) 1493049cba9eSBram Moolenaar endfor 1494049cba9eSBram Moolenaar call writefile(l, a:filename) 14952b946c9fSBram Moolenaarendfunc 1496049cba9eSBram Moolenaar 14972b946c9fSBram Moolenaarfunc Test_switchbuf() 1498049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile1') 1499049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile2') 1500049cba9eSBram Moolenaar call s:create_test_file('Xqftestfile3') 1501049cba9eSBram Moolenaar 1502049cba9eSBram Moolenaar new | only 1503049cba9eSBram Moolenaar edit Xqftestfile1 1504049cba9eSBram Moolenaar let file1_winid = win_getid() 1505049cba9eSBram Moolenaar new Xqftestfile2 1506049cba9eSBram Moolenaar let file2_winid = win_getid() 1507049cba9eSBram Moolenaar cgetexpr ['Xqftestfile1:5:Line5', 1508049cba9eSBram Moolenaar \ 'Xqftestfile1:6:Line6', 1509049cba9eSBram Moolenaar \ 'Xqftestfile2:10:Line10', 1510049cba9eSBram Moolenaar \ 'Xqftestfile2:11:Line11', 1511049cba9eSBram Moolenaar \ 'Xqftestfile3:15:Line15', 1512049cba9eSBram Moolenaar \ 'Xqftestfile3:16:Line16'] 1513049cba9eSBram Moolenaar 1514049cba9eSBram Moolenaar new 1515049cba9eSBram Moolenaar let winid = win_getid() 1516049cba9eSBram Moolenaar cfirst | cnext 1517049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 151899895eacSBram Moolenaar 2cnext 1519049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 152099895eacSBram Moolenaar 2cnext 1521049cba9eSBram Moolenaar call assert_equal(winid, win_getid()) 1522049cba9eSBram Moolenaar enew 1523049cba9eSBram Moolenaar 1524049cba9eSBram Moolenaar set switchbuf=useopen 1525049cba9eSBram Moolenaar cfirst | cnext 1526049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 152799895eacSBram Moolenaar 2cnext 1528049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 152999895eacSBram Moolenaar 2cnext 1530049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1531049cba9eSBram Moolenaar 1532049cba9eSBram Moolenaar enew | only 1533049cba9eSBram Moolenaar set switchbuf=usetab 1534049cba9eSBram Moolenaar tabedit Xqftestfile1 1535049cba9eSBram Moolenaar tabedit Xqftestfile2 153674240d3fSBram Moolenaar tabedit Xqftestfile3 1537049cba9eSBram Moolenaar tabfirst 1538049cba9eSBram Moolenaar cfirst | cnext 1539049cba9eSBram Moolenaar call assert_equal(2, tabpagenr()) 154099895eacSBram Moolenaar 2cnext 1541049cba9eSBram Moolenaar call assert_equal(3, tabpagenr()) 154274240d3fSBram Moolenaar 6cnext 154374240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 154474240d3fSBram Moolenaar 2cpfile 154574240d3fSBram Moolenaar call assert_equal(2, tabpagenr()) 154674240d3fSBram Moolenaar 2cnfile 154774240d3fSBram Moolenaar call assert_equal(4, tabpagenr()) 1548049cba9eSBram Moolenaar tabfirst | tabonly | enew 1549049cba9eSBram Moolenaar 1550049cba9eSBram Moolenaar set switchbuf=split 1551049cba9eSBram Moolenaar cfirst | cnext 1552049cba9eSBram Moolenaar call assert_equal(1, winnr('$')) 1553049cba9eSBram Moolenaar cnext | cnext 1554049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1555049cba9eSBram Moolenaar cnext | cnext 1556049cba9eSBram Moolenaar call assert_equal(3, winnr('$')) 1557049cba9eSBram Moolenaar enew | only 1558049cba9eSBram Moolenaar 1559049cba9eSBram Moolenaar set switchbuf=newtab 1560049cba9eSBram Moolenaar cfirst | cnext 1561049cba9eSBram Moolenaar call assert_equal(1, tabpagenr('$')) 1562049cba9eSBram Moolenaar cnext | cnext 1563049cba9eSBram Moolenaar call assert_equal(2, tabpagenr('$')) 1564049cba9eSBram Moolenaar cnext | cnext 1565049cba9eSBram Moolenaar call assert_equal(3, tabpagenr('$')) 1566049cba9eSBram Moolenaar tabfirst | enew | tabonly | only 1567049cba9eSBram Moolenaar 1568049cba9eSBram Moolenaar set switchbuf= 1569049cba9eSBram Moolenaar edit Xqftestfile1 1570049cba9eSBram Moolenaar let file1_winid = win_getid() 1571049cba9eSBram Moolenaar new Xqftestfile2 1572049cba9eSBram Moolenaar let file2_winid = win_getid() 1573049cba9eSBram Moolenaar copen 1574049cba9eSBram Moolenaar exe "normal 1G\<CR>" 1575049cba9eSBram Moolenaar call assert_equal(file1_winid, win_getid()) 1576049cba9eSBram Moolenaar copen 1577049cba9eSBram Moolenaar exe "normal 3G\<CR>" 1578049cba9eSBram Moolenaar call assert_equal(file2_winid, win_getid()) 1579049cba9eSBram Moolenaar copen | only 1580049cba9eSBram Moolenaar exe "normal 5G\<CR>" 1581049cba9eSBram Moolenaar call assert_equal(2, winnr('$')) 1582049cba9eSBram Moolenaar call assert_equal(1, bufwinnr('Xqftestfile3')) 1583049cba9eSBram Moolenaar 1584391b1dd0SBram Moolenaar " If only quickfix window is open in the current tabpage, jumping to an 1585391b1dd0SBram Moolenaar " entry with 'switchubf' set to 'usetab' should search in other tabpages. 1586049cba9eSBram Moolenaar enew | only 1587391b1dd0SBram Moolenaar set switchbuf=usetab 1588391b1dd0SBram Moolenaar tabedit Xqftestfile1 1589391b1dd0SBram Moolenaar tabedit Xqftestfile2 1590391b1dd0SBram Moolenaar tabedit Xqftestfile3 1591391b1dd0SBram Moolenaar tabfirst 1592391b1dd0SBram Moolenaar copen | only 1593391b1dd0SBram Moolenaar clast 1594391b1dd0SBram Moolenaar call assert_equal(4, tabpagenr()) 1595391b1dd0SBram Moolenaar tabfirst | tabonly | enew | only 1596049cba9eSBram Moolenaar 1597049cba9eSBram Moolenaar call delete('Xqftestfile1') 1598049cba9eSBram Moolenaar call delete('Xqftestfile2') 1599049cba9eSBram Moolenaar call delete('Xqftestfile3') 1600391b1dd0SBram Moolenaar set switchbuf&vim 1601391b1dd0SBram Moolenaar 1602391b1dd0SBram Moolenaar enew | only 16032b946c9fSBram Moolenaarendfunc 1604049cba9eSBram Moolenaar 16052b946c9fSBram Moolenaarfunc Xadjust_qflnum(cchar) 1606049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 1607049cba9eSBram Moolenaar 1608049cba9eSBram Moolenaar enew | only 1609049cba9eSBram Moolenaar 1610c1542744SBram Moolenaar let fname = 'Xqftestfile' . a:cchar 1611c1542744SBram Moolenaar call s:create_test_file(fname) 1612c1542744SBram Moolenaar exe 'edit ' . fname 1613049cba9eSBram Moolenaar 1614c1542744SBram Moolenaar Xgetexpr [fname . ':5:Line5', 1615c1542744SBram Moolenaar \ fname . ':10:Line10', 1616c1542744SBram Moolenaar \ fname . ':15:Line15', 1617c1542744SBram Moolenaar \ fname . ':20:Line20'] 1618049cba9eSBram Moolenaar 1619049cba9eSBram Moolenaar 6,14delete 1620049cba9eSBram Moolenaar call append(6, ['Buffer', 'Window']) 1621049cba9eSBram Moolenaar 1622049cba9eSBram Moolenaar let l = g:Xgetlist() 1623049cba9eSBram Moolenaar 1624049cba9eSBram Moolenaar call assert_equal(5, l[0].lnum) 1625049cba9eSBram Moolenaar call assert_equal(6, l[2].lnum) 1626049cba9eSBram Moolenaar call assert_equal(13, l[3].lnum) 1627049cba9eSBram Moolenaar 1628049cba9eSBram Moolenaar enew! 1629c1542744SBram Moolenaar call delete(fname) 16302b946c9fSBram Moolenaarendfunc 1631049cba9eSBram Moolenaar 16322b946c9fSBram Moolenaarfunc Test_adjust_lnum() 1633c1542744SBram Moolenaar call setloclist(0, []) 1634049cba9eSBram Moolenaar call Xadjust_qflnum('c') 1635c1542744SBram Moolenaar call setqflist([]) 1636049cba9eSBram Moolenaar call Xadjust_qflnum('l') 16372b946c9fSBram Moolenaarendfunc 1638049cba9eSBram Moolenaar 1639049cba9eSBram Moolenaar" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands 16402b946c9fSBram Moolenaarfunc s:test_xgrep(cchar) 1641049cba9eSBram Moolenaar call s:setup_commands(a:cchar) 1642049cba9eSBram Moolenaar 1643049cba9eSBram Moolenaar " The following lines are used for the grep test. Don't remove. 1644049cba9eSBram Moolenaar " Grep_Test_Text: Match 1 1645049cba9eSBram Moolenaar " Grep_Test_Text: Match 2 1646049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 1 1647049cba9eSBram Moolenaar " GrepAdd_Test_Text: Match 2 1648049cba9eSBram Moolenaar enew! | only 1649049cba9eSBram Moolenaar set makeef&vim 1650049cba9eSBram Moolenaar silent Xgrep Grep_Test_Text: test_quickfix.vim 1651049cba9eSBram Moolenaar call assert_true(len(g:Xgetlist()) == 3) 1652049cba9eSBram Moolenaar Xopen 1653049cba9eSBram Moolenaar call assert_true(w:quickfix_title =~ '^:grep') 1654049cba9eSBram Moolenaar Xclose 1655049cba9eSBram Moolenaar enew 1656049cba9eSBram Moolenaar set makeef=Temp_File_## 1657049cba9eSBram Moolenaar silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim 1658049cba9eSBram Moolenaar call assert_true(len(g:Xgetlist()) == 6) 16592b946c9fSBram Moolenaarendfunc 1660049cba9eSBram Moolenaar 16612b946c9fSBram Moolenaarfunc Test_grep() 1662049cba9eSBram Moolenaar if !has('unix') 1663049cba9eSBram Moolenaar " The grepprg may not be set on non-Unix systems 1664049cba9eSBram Moolenaar return 1665049cba9eSBram Moolenaar endif 1666049cba9eSBram Moolenaar 1667049cba9eSBram Moolenaar call s:test_xgrep('c') 1668049cba9eSBram Moolenaar call s:test_xgrep('l') 16692b946c9fSBram Moolenaarendfunc 1670361c8f0eSBram Moolenaar 16712b946c9fSBram Moolenaarfunc Test_two_windows() 1672361c8f0eSBram Moolenaar " Use one 'errorformat' for two windows. Add an expression to each of them, 1673361c8f0eSBram Moolenaar " make sure they each keep their own state. 1674361c8f0eSBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 1675361c8f0eSBram Moolenaar call mkdir('Xone/a', 'p') 1676361c8f0eSBram Moolenaar call mkdir('Xtwo/a', 'p') 1677361c8f0eSBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 1678361c8f0eSBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 1679361c8f0eSBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 1680361c8f0eSBram Moolenaar 1681361c8f0eSBram Moolenaar new one 1682361c8f0eSBram Moolenaar let one_id = win_getid() 1683361c8f0eSBram Moolenaar lexpr "" 1684361c8f0eSBram Moolenaar new two 1685361c8f0eSBram Moolenaar let two_id = win_getid() 1686361c8f0eSBram Moolenaar lexpr "" 1687361c8f0eSBram Moolenaar 1688361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xtwo/a'" 1689361c8f0eSBram Moolenaar call win_gotoid(one_id) 1690361c8f0eSBram Moolenaar laddexpr "Entering dir 'Xone/a'" 1691361c8f0eSBram Moolenaar call win_gotoid(two_id) 1692361c8f0eSBram Moolenaar laddexpr 'two.txt:5:two two two' 1693361c8f0eSBram Moolenaar call win_gotoid(one_id) 1694361c8f0eSBram Moolenaar laddexpr 'one.txt:3:one one one' 1695361c8f0eSBram Moolenaar 1696361c8f0eSBram Moolenaar let loc_one = getloclist(one_id) 1697361c8f0eSBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr)) 1698361c8f0eSBram Moolenaar call assert_equal(3, loc_one[1].lnum) 1699361c8f0eSBram Moolenaar 1700361c8f0eSBram Moolenaar let loc_two = getloclist(two_id) 1701361c8f0eSBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr)) 1702361c8f0eSBram Moolenaar call assert_equal(5, loc_two[1].lnum) 1703361c8f0eSBram Moolenaar 1704361c8f0eSBram Moolenaar call win_gotoid(one_id) 1705361c8f0eSBram Moolenaar bwipe! 1706361c8f0eSBram Moolenaar call win_gotoid(two_id) 1707361c8f0eSBram Moolenaar bwipe! 1708361c8f0eSBram Moolenaar call delete('Xone', 'rf') 1709361c8f0eSBram Moolenaar call delete('Xtwo', 'rf') 1710361c8f0eSBram Moolenaarendfunc 1711dcb17001SBram Moolenaar 17122b946c9fSBram Moolenaarfunc XbottomTests(cchar) 1713537ef084SBram Moolenaar call s:setup_commands(a:cchar) 1714537ef084SBram Moolenaar 1715b6fa30ccSBram Moolenaar " Calling lbottom without any errors should fail 1716b6fa30ccSBram Moolenaar if a:cchar == 'l' 1717b6fa30ccSBram Moolenaar call assert_fails('lbottom', 'E776:') 1718b6fa30ccSBram Moolenaar endif 1719b6fa30ccSBram Moolenaar 1720537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'foo', 'lnum': 42}]) 1721537ef084SBram Moolenaar Xopen 1722dcb17001SBram Moolenaar let wid = win_getid() 1723dcb17001SBram Moolenaar call assert_equal(1, line('.')) 1724dcb17001SBram Moolenaar wincmd w 1725537ef084SBram Moolenaar call g:Xsetlist([{'filename': 'var', 'lnum': 24}], 'a') 1726537ef084SBram Moolenaar Xbottom 1727dcb17001SBram Moolenaar call win_gotoid(wid) 1728dcb17001SBram Moolenaar call assert_equal(2, line('.')) 1729537ef084SBram Moolenaar Xclose 1730dcb17001SBram Moolenaarendfunc 1731537ef084SBram Moolenaar 1732537ef084SBram Moolenaar" Tests for the :cbottom and :lbottom commands 17332b946c9fSBram Moolenaarfunc Test_cbottom() 1734537ef084SBram Moolenaar call XbottomTests('c') 1735537ef084SBram Moolenaar call XbottomTests('l') 17362b946c9fSBram Moolenaarendfunc 1737f6acffbeSBram Moolenaar 17382b946c9fSBram Moolenaarfunc HistoryTest(cchar) 1739f6acffbeSBram Moolenaar call s:setup_commands(a:cchar) 1740f6acffbeSBram Moolenaar 1741f6acffbeSBram Moolenaar " clear all lists after the first one, then replace the first one. 1742f6acffbeSBram Moolenaar call g:Xsetlist([]) 1743b6fa30ccSBram Moolenaar call assert_fails('Xolder 99', 'E380:') 1744f6acffbeSBram Moolenaar let entry = {'filename': 'foo', 'lnum': 42} 1745f6acffbeSBram Moolenaar call g:Xsetlist([entry], 'r') 1746f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry]) 1747f6acffbeSBram Moolenaar call g:Xsetlist([entry, entry, entry]) 1748f6acffbeSBram Moolenaar let res = split(execute(a:cchar . 'hist'), "\n") 1749f6acffbeSBram Moolenaar call assert_equal(3, len(res)) 1750f6acffbeSBram Moolenaar let common = 'errors :set' . (a:cchar == 'c' ? 'qf' : 'loc') . 'list()' 1751f6acffbeSBram Moolenaar call assert_equal(' error list 1 of 3; 1 ' . common, res[0]) 1752f6acffbeSBram Moolenaar call assert_equal(' error list 2 of 3; 2 ' . common, res[1]) 1753f6acffbeSBram Moolenaar call assert_equal('> error list 3 of 3; 3 ' . common, res[2]) 1754b4d5fbabSBram Moolenaar 1755b4d5fbabSBram Moolenaar call g:Xsetlist([], 'f') 1756b4d5fbabSBram Moolenaar let l = split(execute(a:cchar . 'hist'), "\n") 1757b4d5fbabSBram Moolenaar call assert_equal('No entries', l[0]) 1758f6acffbeSBram Moolenaarendfunc 1759f6acffbeSBram Moolenaar 1760f6acffbeSBram Moolenaarfunc Test_history() 1761f6acffbeSBram Moolenaar call HistoryTest('c') 1762f6acffbeSBram Moolenaar call HistoryTest('l') 1763f6acffbeSBram Moolenaarendfunc 1764015102e9SBram Moolenaar 1765015102e9SBram Moolenaarfunc Test_duplicate_buf() 1766015102e9SBram Moolenaar " make sure we can get the highest buffer number 1767015102e9SBram Moolenaar edit DoesNotExist 1768015102e9SBram Moolenaar edit DoesNotExist2 1769015102e9SBram Moolenaar let last_buffer = bufnr("$") 1770015102e9SBram Moolenaar 1771015102e9SBram Moolenaar " make sure only one buffer is created 1772015102e9SBram Moolenaar call writefile(['this one', 'that one'], 'Xgrepthis') 1773015102e9SBram Moolenaar vimgrep one Xgrepthis 1774015102e9SBram Moolenaar vimgrep one Xgrepthis 1775015102e9SBram Moolenaar call assert_equal(last_buffer + 1, bufnr("$")) 1776015102e9SBram Moolenaar 1777015102e9SBram Moolenaar call delete('Xgrepthis') 1778015102e9SBram Moolenaarendfunc 1779d823fa91SBram Moolenaar 1780d823fa91SBram Moolenaar" Quickfix/Location list set/get properties tests 17812b946c9fSBram Moolenaarfunc Xproperty_tests(cchar) 1782d823fa91SBram Moolenaar call s:setup_commands(a:cchar) 1783d823fa91SBram Moolenaar 1784d823fa91SBram Moolenaar " Error cases 1785d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist(99)', 'E715:') 1786d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist(99)', 'E714:') 1787d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715:') 1788d823fa91SBram Moolenaar 1789d823fa91SBram Moolenaar " Set and get the title 1790b6fa30ccSBram Moolenaar call g:Xsetlist([]) 1791d823fa91SBram Moolenaar Xopen 1792d823fa91SBram Moolenaar wincmd p 1793d823fa91SBram Moolenaar call g:Xsetlist([{'filename':'foo', 'lnum':27}]) 179486f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'title' : 'Sample'}) 179586f100dcSBram Moolenaar call assert_equal(0, s) 1796d823fa91SBram Moolenaar let d = g:Xgetlist({"title":1}) 1797d823fa91SBram Moolenaar call assert_equal('Sample', d.title) 1798*a2aa8a2bSBram Moolenaar " Try setting title to a non-string value 1799*a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'title' : ['Test']})) 1800*a2aa8a2bSBram Moolenaar call assert_equal('Sample', g:Xgetlist({"title":1}).title) 1801d823fa91SBram Moolenaar 1802d823fa91SBram Moolenaar Xopen 1803d823fa91SBram Moolenaar call assert_equal('Sample', w:quickfix_title) 1804d823fa91SBram Moolenaar Xclose 1805d823fa91SBram Moolenaar 18062b529bb6SBram Moolenaar " Tests for action argument 18072b529bb6SBram Moolenaar silent! Xolder 999 18082b529bb6SBram Moolenaar let qfnr = g:Xgetlist({'all':1}).nr 18092b529bb6SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'N1'}) 18102b529bb6SBram Moolenaar call assert_equal('N1', g:Xgetlist({'all':1}).title) 18112b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N2'}) 18122b529bb6SBram Moolenaar call assert_equal(qfnr + 1, g:Xgetlist({'all':1}).nr) 1813890680caSBram Moolenaar 1814890680caSBram Moolenaar let res = g:Xgetlist({'nr': 0}) 1815890680caSBram Moolenaar call assert_equal(qfnr + 1, res.nr) 1816890680caSBram Moolenaar call assert_equal(['nr'], keys(res)) 1817890680caSBram Moolenaar 18182b529bb6SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'N3'}) 18192b529bb6SBram Moolenaar call assert_equal('N2', g:Xgetlist({'nr':2, 'title':1}).title) 18202b529bb6SBram Moolenaar 1821ee85df37SBram Moolenaar " Changing the title of an earlier quickfix list 182255b69264SBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'NewTitle', 'nr' : 2}) 1823ee85df37SBram Moolenaar call assert_equal('NewTitle', g:Xgetlist({'nr':2, 'title':1}).title) 1824ee85df37SBram Moolenaar 1825ee85df37SBram Moolenaar " Changing the title of an invalid quickfix list 1826ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 1827ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 99})) 1828ee85df37SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', 1829ee85df37SBram Moolenaar \ {'title' : 'SomeTitle', 'nr' : 'abc'})) 1830ee85df37SBram Moolenaar 1831ee85df37SBram Moolenaar if a:cchar == 'c' 1832ee85df37SBram Moolenaar copen 1833ee85df37SBram Moolenaar call assert_equal({'winid':win_getid()}, getqflist({'winid':1})) 1834ee85df37SBram Moolenaar cclose 1835ee85df37SBram Moolenaar endif 1836ee85df37SBram Moolenaar 1837d823fa91SBram Moolenaar " Invalid arguments 1838d823fa91SBram Moolenaar call assert_fails('call g:Xgetlist([])', 'E715') 1839d823fa91SBram Moolenaar call assert_fails('call g:Xsetlist([], "a", [])', 'E715') 1840d823fa91SBram Moolenaar let s = g:Xsetlist([], 'a', {'abc':1}) 1841d823fa91SBram Moolenaar call assert_equal(-1, s) 1842d823fa91SBram Moolenaar 1843d823fa91SBram Moolenaar call assert_equal({}, g:Xgetlist({'abc':1})) 1844a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':99, 'title':1}).title) 1845a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':[], 'title':1}).title) 1846d823fa91SBram Moolenaar 1847d823fa91SBram Moolenaar if a:cchar == 'l' 1848890680caSBram Moolenaar call assert_equal({}, getloclist(99, {'title': 1})) 1849d823fa91SBram Moolenaar endif 18508f77c5a4SBram Moolenaar 18518f77c5a4SBram Moolenaar " Context related tests 185286f100dcSBram Moolenaar let s = g:Xsetlist([], 'a', {'context':[1,2,3]}) 185386f100dcSBram Moolenaar call assert_equal(0, s) 18548f77c5a4SBram Moolenaar call test_garbagecollect_now() 18558f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 18568f77c5a4SBram Moolenaar call assert_equal([1,2,3], d.context) 18578f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':{'color':'green'}}) 18588f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 18598f77c5a4SBram Moolenaar call assert_equal({'color':'green'}, d.context) 18608f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':"Context info"}) 18618f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 18628f77c5a4SBram Moolenaar call assert_equal("Context info", d.context) 18638f77c5a4SBram Moolenaar call g:Xsetlist([], 'a', {'context':246}) 18648f77c5a4SBram Moolenaar let d = g:Xgetlist({'context':1}) 18658f77c5a4SBram Moolenaar call assert_equal(246, d.context) 18668f77c5a4SBram Moolenaar if a:cchar == 'l' 18678f77c5a4SBram Moolenaar " Test for copying context across two different location lists 18688f77c5a4SBram Moolenaar new | only 18698f77c5a4SBram Moolenaar let w1_id = win_getid() 18708f77c5a4SBram Moolenaar let l = [1] 18718f77c5a4SBram Moolenaar call setloclist(0, [], 'a', {'context':l}) 18728f77c5a4SBram Moolenaar new 18738f77c5a4SBram Moolenaar let w2_id = win_getid() 18748f77c5a4SBram Moolenaar call add(l, 2) 18758f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w1_id, {'context':1}).context) 18768f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 18778f77c5a4SBram Moolenaar unlet! l 18788f77c5a4SBram Moolenaar call assert_equal([1, 2], getloclist(w2_id, {'context':1}).context) 18798f77c5a4SBram Moolenaar only 18808f77c5a4SBram Moolenaar call setloclist(0, [], 'f') 1881a6d4849cSBram Moolenaar call assert_equal('', getloclist(0, {'context':1}).context) 18828f77c5a4SBram Moolenaar endif 18836e62da3eSBram Moolenaar 18846e62da3eSBram Moolenaar " Test for changing the context of previous quickfix lists 18856e62da3eSBram Moolenaar call g:Xsetlist([], 'f') 18866e62da3eSBram Moolenaar Xexpr "One" 18876e62da3eSBram Moolenaar Xexpr "Two" 18886e62da3eSBram Moolenaar Xexpr "Three" 188955b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [1], 'nr' : 1}) 189055b69264SBram Moolenaar call g:Xsetlist([], 'a', {'context' : [2], 'nr' : 2}) 18916e62da3eSBram Moolenaar " Also, check for setting the context using quickfix list number zero. 189255b69264SBram Moolenaar call g:Xsetlist([], 'r', {'context' : [3], 'nr' : 0}) 18936e62da3eSBram Moolenaar call test_garbagecollect_now() 18946e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 1, 'context' : 1}) 18956e62da3eSBram Moolenaar call assert_equal([1], l.context) 18966e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 2, 'context' : 1}) 18976e62da3eSBram Moolenaar call assert_equal([2], l.context) 18986e62da3eSBram Moolenaar let l = g:Xgetlist({'nr' : 3, 'context' : 1}) 18996e62da3eSBram Moolenaar call assert_equal([3], l.context) 19006e62da3eSBram Moolenaar 19016e62da3eSBram Moolenaar " Test for changing the context through reference and for garbage 19026e62da3eSBram Moolenaar " collection of quickfix context 19036e62da3eSBram Moolenaar let l = ["red"] 19046e62da3eSBram Moolenaar call g:Xsetlist([], ' ', {'context' : l}) 19056e62da3eSBram Moolenaar call add(l, "blue") 19066e62da3eSBram Moolenaar let x = g:Xgetlist({'context' : 1}) 19076e62da3eSBram Moolenaar call add(x.context, "green") 19086e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], l) 19096e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], x.context) 19106e62da3eSBram Moolenaar unlet l 19116e62da3eSBram Moolenaar call test_garbagecollect_now() 19126e62da3eSBram Moolenaar let m = g:Xgetlist({'context' : 1}) 19136e62da3eSBram Moolenaar call assert_equal(["red", "blue", "green"], m.context) 19146a8958dbSBram Moolenaar 19156a8958dbSBram Moolenaar " Test for setting/getting items 19166a8958dbSBram Moolenaar Xexpr "" 19176a8958dbSBram Moolenaar let qfprev = g:Xgetlist({'nr':0}) 191886f100dcSBram Moolenaar let s = g:Xsetlist([], ' ', {'title':'Green', 19196a8958dbSBram Moolenaar \ 'items' : [{'filename':'F1', 'lnum':10}]}) 192086f100dcSBram Moolenaar call assert_equal(0, s) 19216a8958dbSBram Moolenaar let qfcur = g:Xgetlist({'nr':0}) 19226a8958dbSBram Moolenaar call assert_true(qfcur.nr == qfprev.nr + 1) 19236a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 19246a8958dbSBram Moolenaar call assert_equal('F1', bufname(l.items[0].bufnr)) 19256a8958dbSBram Moolenaar call assert_equal(10, l.items[0].lnum) 19266a8958dbSBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F2', 'lnum':20}, 19276a8958dbSBram Moolenaar \ {'filename':'F2', 'lnum':30}]}) 19286a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 19296a8958dbSBram Moolenaar call assert_equal('F2', bufname(l.items[2].bufnr)) 19306a8958dbSBram Moolenaar call assert_equal(30, l.items[2].lnum) 19316a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename':'F3', 'lnum':40}]}) 19326a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 19336a8958dbSBram Moolenaar call assert_equal('F3', bufname(l.items[0].bufnr)) 19346a8958dbSBram Moolenaar call assert_equal(40, l.items[0].lnum) 19356a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'items' : []}) 19366a8958dbSBram Moolenaar let l = g:Xgetlist({'items':1}) 19376a8958dbSBram Moolenaar call assert_equal(0, len(l.items)) 19386a8958dbSBram Moolenaar 1939b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'title' : 'TestTitle'}) 1940b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 1941b4d5fbabSBram Moolenaar call g:Xsetlist([], 'r', {'items' : [{'filename' : 'F1', 'lnum' : 10, 'text' : 'L10'}]}) 1942b4d5fbabSBram Moolenaar call assert_equal('TestTitle', g:Xgetlist({'title' : 1}).title) 1943b4d5fbabSBram Moolenaar 1944ae338338SBram Moolenaar " The following used to crash Vim with address sanitizer 1945ae338338SBram Moolenaar call g:Xsetlist([], 'f') 1946ae338338SBram Moolenaar call g:Xsetlist([], 'a', {'items' : [{'filename':'F1', 'lnum':10}]}) 1947ae338338SBram Moolenaar call assert_equal(10, g:Xgetlist({'items':1}).items[0].lnum) 1948ae338338SBram Moolenaar 1949*a2aa8a2bSBram Moolenaar " Try setting the items using a string 1950*a2aa8a2bSBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'items' : 'Test'})) 1951*a2aa8a2bSBram Moolenaar 19526a8958dbSBram Moolenaar " Save and restore the quickfix stack 19536a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 19546a8958dbSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 19556a8958dbSBram Moolenaar Xexpr "File1:10:Line1" 19566a8958dbSBram Moolenaar Xexpr "File2:20:Line2" 19576a8958dbSBram Moolenaar Xexpr "File3:30:Line3" 19586a8958dbSBram Moolenaar let last_qf = g:Xgetlist({'nr':'$'}).nr 19596a8958dbSBram Moolenaar call assert_equal(3, last_qf) 19606a8958dbSBram Moolenaar let qstack = [] 19616a8958dbSBram Moolenaar for i in range(1, last_qf) 19626a8958dbSBram Moolenaar let qstack = add(qstack, g:Xgetlist({'nr':i, 'all':1})) 19636a8958dbSBram Moolenaar endfor 19646a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 19656a8958dbSBram Moolenaar for i in range(len(qstack)) 19666a8958dbSBram Moolenaar call g:Xsetlist([], ' ', qstack[i]) 19676a8958dbSBram Moolenaar endfor 19686a8958dbSBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 19696a8958dbSBram Moolenaar call assert_equal(10, g:Xgetlist({'nr':1, 'items':1}).items[0].lnum) 19706a8958dbSBram Moolenaar call assert_equal(20, g:Xgetlist({'nr':2, 'items':1}).items[0].lnum) 19716a8958dbSBram Moolenaar call assert_equal(30, g:Xgetlist({'nr':3, 'items':1}).items[0].lnum) 19726a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 19736a8958dbSBram Moolenaar 19746a8958dbSBram Moolenaar " Swap two quickfix lists 19756a8958dbSBram Moolenaar Xexpr "File1:10:Line10" 19766a8958dbSBram Moolenaar Xexpr "File2:20:Line20" 19776a8958dbSBram Moolenaar Xexpr "File3:30:Line30" 19786a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':1,'title':'Colors','context':['Colors']}) 19796a8958dbSBram Moolenaar call g:Xsetlist([], 'r', {'nr':2,'title':'Fruits','context':['Fruits']}) 19806a8958dbSBram Moolenaar let l1=g:Xgetlist({'nr':1,'all':1}) 19816a8958dbSBram Moolenaar let l2=g:Xgetlist({'nr':2,'all':1}) 1982a539f4f1SBram Moolenaar let save_id = l1.id 1983a539f4f1SBram Moolenaar let l1.id=l2.id 1984a539f4f1SBram Moolenaar let l2.id=save_id 19856a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l1) 19866a8958dbSBram Moolenaar call g:Xsetlist([], 'r', l2) 19876a8958dbSBram Moolenaar let newl1=g:Xgetlist({'nr':1,'all':1}) 19886a8958dbSBram Moolenaar let newl2=g:Xgetlist({'nr':2,'all':1}) 1989b4d5fbabSBram Moolenaar call assert_equal('Fruits', newl1.title) 19906a8958dbSBram Moolenaar call assert_equal(['Fruits'], newl1.context) 19916a8958dbSBram Moolenaar call assert_equal('Line20', newl1.items[0].text) 1992b4d5fbabSBram Moolenaar call assert_equal('Colors', newl2.title) 19936a8958dbSBram Moolenaar call assert_equal(['Colors'], newl2.context) 19946a8958dbSBram Moolenaar call assert_equal('Line10', newl2.items[0].text) 19956a8958dbSBram Moolenaar call g:Xsetlist([], 'f') 19962b946c9fSBram Moolenaarendfunc 1997d823fa91SBram Moolenaar 19982b946c9fSBram Moolenaarfunc Test_qf_property() 1999d823fa91SBram Moolenaar call Xproperty_tests('c') 2000d823fa91SBram Moolenaar call Xproperty_tests('l') 20012b946c9fSBram Moolenaarendfunc 200204c4ce65SBram Moolenaar 200304c4ce65SBram Moolenaar" Tests for the QuickFixCmdPre/QuickFixCmdPost autocommands 20042b946c9fSBram Moolenaarfunc QfAutoCmdHandler(loc, cmd) 200504c4ce65SBram Moolenaar call add(g:acmds, a:loc . a:cmd) 20062b946c9fSBram Moolenaarendfunc 200704c4ce65SBram Moolenaar 20082b946c9fSBram Moolenaarfunc Test_Autocmd() 200904c4ce65SBram Moolenaar autocmd QuickFixCmdPre * call QfAutoCmdHandler('pre', expand('<amatch>')) 201004c4ce65SBram Moolenaar autocmd QuickFixCmdPost * call QfAutoCmdHandler('post', expand('<amatch>')) 201104c4ce65SBram Moolenaar 201204c4ce65SBram Moolenaar let g:acmds = [] 201304c4ce65SBram Moolenaar cexpr "F1:10:Line 10" 201404c4ce65SBram Moolenaar caddexpr "F1:20:Line 20" 201504c4ce65SBram Moolenaar cgetexpr "F1:30:Line 30" 20161ed2276fSBram Moolenaar cexpr "" 20171ed2276fSBram Moolenaar caddexpr "" 20181ed2276fSBram Moolenaar cgetexpr "" 20191ed2276fSBram Moolenaar silent! cexpr non_existing_func() 20201ed2276fSBram Moolenaar silent! caddexpr non_existing_func() 20211ed2276fSBram Moolenaar silent! cgetexpr non_existing_func() 202204c4ce65SBram Moolenaar let l = ['precexpr', 202304c4ce65SBram Moolenaar \ 'postcexpr', 202404c4ce65SBram Moolenaar \ 'precaddexpr', 202504c4ce65SBram Moolenaar \ 'postcaddexpr', 202604c4ce65SBram Moolenaar \ 'precgetexpr', 202704c4ce65SBram Moolenaar \ 'postcgetexpr', 20281ed2276fSBram Moolenaar \ 'precexpr', 20291ed2276fSBram Moolenaar \ 'postcexpr', 20301ed2276fSBram Moolenaar \ 'precaddexpr', 20311ed2276fSBram Moolenaar \ 'postcaddexpr', 20321ed2276fSBram Moolenaar \ 'precgetexpr', 20331ed2276fSBram Moolenaar \ 'postcgetexpr', 20341ed2276fSBram Moolenaar \ 'precexpr', 20351ed2276fSBram Moolenaar \ 'precaddexpr', 20361ed2276fSBram Moolenaar \ 'precgetexpr'] 20371ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 20381ed2276fSBram Moolenaar 20391ed2276fSBram Moolenaar let g:acmds = [] 20401ed2276fSBram Moolenaar enew! | call append(0, "F2:10:Line 10") 20411ed2276fSBram Moolenaar cbuffer! 20421ed2276fSBram Moolenaar enew! | call append(0, "F2:20:Line 20") 20431ed2276fSBram Moolenaar cgetbuffer 20441ed2276fSBram Moolenaar enew! | call append(0, "F2:30:Line 30") 20451ed2276fSBram Moolenaar caddbuffer 20461ed2276fSBram Moolenaar new 20471ed2276fSBram Moolenaar let bnum = bufnr('%') 20481ed2276fSBram Moolenaar bunload 20491ed2276fSBram Moolenaar exe 'silent! cbuffer! ' . bnum 20501ed2276fSBram Moolenaar exe 'silent! cgetbuffer ' . bnum 20511ed2276fSBram Moolenaar exe 'silent! caddbuffer ' . bnum 20521ed2276fSBram Moolenaar enew! 20531ed2276fSBram Moolenaar let l = ['precbuffer', 205404c4ce65SBram Moolenaar \ 'postcbuffer', 205504c4ce65SBram Moolenaar \ 'precgetbuffer', 205604c4ce65SBram Moolenaar \ 'postcgetbuffer', 205704c4ce65SBram Moolenaar \ 'precaddbuffer', 20581ed2276fSBram Moolenaar \ 'postcaddbuffer', 20591ed2276fSBram Moolenaar \ 'precbuffer', 20601ed2276fSBram Moolenaar \ 'precgetbuffer', 20611ed2276fSBram Moolenaar \ 'precaddbuffer'] 206204c4ce65SBram Moolenaar call assert_equal(l, g:acmds) 20631ed2276fSBram Moolenaar 20641ed2276fSBram Moolenaar call writefile(['Xtest:1:Line1'], 'Xtest') 20651ed2276fSBram Moolenaar call writefile([], 'Xempty') 20661ed2276fSBram Moolenaar let g:acmds = [] 20671ed2276fSBram Moolenaar cfile Xtest 20681ed2276fSBram Moolenaar caddfile Xtest 20691ed2276fSBram Moolenaar cgetfile Xtest 20701ed2276fSBram Moolenaar cfile Xempty 20711ed2276fSBram Moolenaar caddfile Xempty 20721ed2276fSBram Moolenaar cgetfile Xempty 20731ed2276fSBram Moolenaar silent! cfile do_not_exist 20741ed2276fSBram Moolenaar silent! caddfile do_not_exist 20751ed2276fSBram Moolenaar silent! cgetfile do_not_exist 20761ed2276fSBram Moolenaar let l = ['precfile', 20771ed2276fSBram Moolenaar \ 'postcfile', 20781ed2276fSBram Moolenaar \ 'precaddfile', 20791ed2276fSBram Moolenaar \ 'postcaddfile', 20801ed2276fSBram Moolenaar \ 'precgetfile', 20811ed2276fSBram Moolenaar \ 'postcgetfile', 20821ed2276fSBram Moolenaar \ 'precfile', 20831ed2276fSBram Moolenaar \ 'postcfile', 20841ed2276fSBram Moolenaar \ 'precaddfile', 20851ed2276fSBram Moolenaar \ 'postcaddfile', 20861ed2276fSBram Moolenaar \ 'precgetfile', 20871ed2276fSBram Moolenaar \ 'postcgetfile', 20881ed2276fSBram Moolenaar \ 'precfile', 20891ed2276fSBram Moolenaar \ 'postcfile', 20901ed2276fSBram Moolenaar \ 'precaddfile', 20911ed2276fSBram Moolenaar \ 'postcaddfile', 20921ed2276fSBram Moolenaar \ 'precgetfile', 20931ed2276fSBram Moolenaar \ 'postcgetfile'] 20941ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 20951ed2276fSBram Moolenaar 20961ed2276fSBram Moolenaar let g:acmds = [] 20971ed2276fSBram Moolenaar helpgrep quickfix 20981ed2276fSBram Moolenaar silent! helpgrep non_existing_help_topic 20991ed2276fSBram Moolenaar vimgrep test Xtest 21001ed2276fSBram Moolenaar vimgrepadd test Xtest 21011ed2276fSBram Moolenaar silent! vimgrep non_existing_test Xtest 21021ed2276fSBram Moolenaar silent! vimgrepadd non_existing_test Xtest 21031ed2276fSBram Moolenaar set makeprg= 21041ed2276fSBram Moolenaar silent! make 21051ed2276fSBram Moolenaar set makeprg& 21061ed2276fSBram Moolenaar let l = ['prehelpgrep', 21071ed2276fSBram Moolenaar \ 'posthelpgrep', 21081ed2276fSBram Moolenaar \ 'prehelpgrep', 21091ed2276fSBram Moolenaar \ 'posthelpgrep', 21101ed2276fSBram Moolenaar \ 'previmgrep', 21111ed2276fSBram Moolenaar \ 'postvimgrep', 21121ed2276fSBram Moolenaar \ 'previmgrepadd', 21131ed2276fSBram Moolenaar \ 'postvimgrepadd', 21141ed2276fSBram Moolenaar \ 'previmgrep', 21151ed2276fSBram Moolenaar \ 'postvimgrep', 21161ed2276fSBram Moolenaar \ 'previmgrepadd', 21171ed2276fSBram Moolenaar \ 'postvimgrepadd', 21181ed2276fSBram Moolenaar \ 'premake', 21191ed2276fSBram Moolenaar \ 'postmake'] 21201ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 21211ed2276fSBram Moolenaar 21221ed2276fSBram Moolenaar if has('unix') 21231ed2276fSBram Moolenaar " Run this test only on Unix-like systems. The grepprg may not be set on 21241ed2276fSBram Moolenaar " non-Unix systems. 21251ed2276fSBram Moolenaar " The following lines are used for the grep test. Don't remove. 21261ed2276fSBram Moolenaar " Grep_Autocmd_Text: Match 1 21271ed2276fSBram Moolenaar " GrepAdd_Autocmd_Text: Match 2 21281ed2276fSBram Moolenaar let g:acmds = [] 21291ed2276fSBram Moolenaar silent grep Grep_Autocmd_Text test_quickfix.vim 21301ed2276fSBram Moolenaar silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim 21311ed2276fSBram Moolenaar silent grep abc123def Xtest 21321ed2276fSBram Moolenaar silent grepadd abc123def Xtest 21331ed2276fSBram Moolenaar let l = ['pregrep', 21341ed2276fSBram Moolenaar \ 'postgrep', 21351ed2276fSBram Moolenaar \ 'pregrepadd', 21361ed2276fSBram Moolenaar \ 'postgrepadd', 21371ed2276fSBram Moolenaar \ 'pregrep', 21381ed2276fSBram Moolenaar \ 'postgrep', 21391ed2276fSBram Moolenaar \ 'pregrepadd', 21401ed2276fSBram Moolenaar \ 'postgrepadd'] 21411ed2276fSBram Moolenaar call assert_equal(l, g:acmds) 21421ed2276fSBram Moolenaar endif 21431ed2276fSBram Moolenaar 21441ed2276fSBram Moolenaar call delete('Xtest') 21451ed2276fSBram Moolenaar call delete('Xempty') 2146b254af31SBram Moolenaar au! QuickFixCmdPre 2147b254af31SBram Moolenaar au! QuickFixCmdPost 21482b946c9fSBram Moolenaarendfunc 214921662be2SBram Moolenaar 21502b946c9fSBram Moolenaarfunc Test_Autocmd_Exception() 215121662be2SBram Moolenaar set efm=%m 215221662be2SBram Moolenaar lgetexpr '?' 215321662be2SBram Moolenaar 215421662be2SBram Moolenaar try 215521662be2SBram Moolenaar call DoesNotExit() 215621662be2SBram Moolenaar catch 215721662be2SBram Moolenaar lgetexpr '1' 215821662be2SBram Moolenaar finally 215921662be2SBram Moolenaar lgetexpr '1' 216021662be2SBram Moolenaar endtry 216121662be2SBram Moolenaar 216221662be2SBram Moolenaar call assert_equal('1', getloclist(0)[0].text) 216321662be2SBram Moolenaar 216421662be2SBram Moolenaar set efm&vim 21652b946c9fSBram Moolenaarendfunc 216663bed3d3SBram Moolenaar 21672b946c9fSBram Moolenaarfunc Test_caddbuffer_wrong() 21682b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 216963bed3d3SBram Moolenaar let save_efm = &efm 217063bed3d3SBram Moolenaar set efm=%EEEE%m,%WWWW,%+CCCC%>%#,%GGGG%.# 217163bed3d3SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 217263bed3d3SBram Moolenaar let &efm = save_efm 21732b946c9fSBram Moolenaar caddbuffer 217463bed3d3SBram Moolenaar bwipe! 217563bed3d3SBram Moolenaarendfunc 21762b946c9fSBram Moolenaar 21772b946c9fSBram Moolenaarfunc Test_caddexpr_wrong() 21782b946c9fSBram Moolenaar " This used to cause a memory access in freed memory. 21792b946c9fSBram Moolenaar cbuffer 21802b946c9fSBram Moolenaar cbuffer 21812b946c9fSBram Moolenaar copen 21822b946c9fSBram Moolenaar let save_efm = &efm 21832b946c9fSBram Moolenaar set efm=% 21842b946c9fSBram Moolenaar call assert_fails('caddexpr ""', 'E376:') 21852b946c9fSBram Moolenaar let &efm = save_efm 21862b946c9fSBram Moolenaarendfunc 21877618e00dSBram Moolenaar 21887618e00dSBram Moolenaarfunc Test_dirstack_cleanup() 21897618e00dSBram Moolenaar " This used to cause a memory access in freed memory. 21907618e00dSBram Moolenaar let save_efm = &efm 21917618e00dSBram Moolenaar lexpr '0' 21927618e00dSBram Moolenaar lopen 21937618e00dSBram Moolenaar fun X(c) 21947618e00dSBram Moolenaar let save_efm=&efm 21957618e00dSBram Moolenaar set efm=%D%f 21967618e00dSBram Moolenaar if a:c == 'c' 21977618e00dSBram Moolenaar caddexpr '::' 21987618e00dSBram Moolenaar else 21997618e00dSBram Moolenaar laddexpr ':0:0' 22007618e00dSBram Moolenaar endif 22017618e00dSBram Moolenaar let &efm=save_efm 22027618e00dSBram Moolenaar endfun 22037618e00dSBram Moolenaar call X('c') 22047618e00dSBram Moolenaar call X('l') 22057618e00dSBram Moolenaar call setqflist([], 'r') 22067618e00dSBram Moolenaar caddbuffer 22077618e00dSBram Moolenaar let &efm = save_efm 22087618e00dSBram Moolenaarendfunc 2209391b1dd0SBram Moolenaar 2210391b1dd0SBram Moolenaar" Tests for jumping to entries from the location list window and quickfix 2211391b1dd0SBram Moolenaar" window 2212391b1dd0SBram Moolenaarfunc Test_cwindow_jump() 2213391b1dd0SBram Moolenaar set efm=%f%%%l%%%m 2214391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2215391b1dd0SBram Moolenaar lopen | only 2216391b1dd0SBram Moolenaar lfirst 2217391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2218391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2219391b1dd0SBram Moolenaar " Location list for the new window should be set 2220391b1dd0SBram Moolenaar call assert_true(getloclist(0)[2].text == 'Line 30') 2221391b1dd0SBram Moolenaar 2222391b1dd0SBram Moolenaar " Open a scratch buffer 2223391b1dd0SBram Moolenaar " Open a new window and create a location list 2224391b1dd0SBram Moolenaar " Open the location list window and close the other window 2225391b1dd0SBram Moolenaar " Jump to an entry. 2226391b1dd0SBram Moolenaar " Should create a new window and jump to the entry. The scrtach buffer 2227391b1dd0SBram Moolenaar " should not be used. 2228391b1dd0SBram Moolenaar enew | only 2229391b1dd0SBram Moolenaar set buftype=nofile 2230391b1dd0SBram Moolenaar below new 2231391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2232391b1dd0SBram Moolenaar lopen 2233391b1dd0SBram Moolenaar 2wincmd c 2234391b1dd0SBram Moolenaar lnext 2235391b1dd0SBram Moolenaar call assert_true(winnr('$') == 3) 2236391b1dd0SBram Moolenaar call assert_true(winnr() == 2) 2237391b1dd0SBram Moolenaar 2238391b1dd0SBram Moolenaar " Open two windows with two different location lists 2239391b1dd0SBram Moolenaar " Open the location list window and close the previous window 2240391b1dd0SBram Moolenaar " Jump to an entry in the location list window 2241391b1dd0SBram Moolenaar " Should open the file in the first window and not set the location list. 2242391b1dd0SBram Moolenaar enew | only 2243391b1dd0SBram Moolenaar lgetexpr ["F1%5%Line 5"] 2244391b1dd0SBram Moolenaar below new 2245391b1dd0SBram Moolenaar lgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2246391b1dd0SBram Moolenaar lopen 2247391b1dd0SBram Moolenaar 2wincmd c 2248391b1dd0SBram Moolenaar lnext 2249391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2250391b1dd0SBram Moolenaar call assert_true(getloclist(0)[0].text == 'Line 5') 2251391b1dd0SBram Moolenaar 2252391b1dd0SBram Moolenaar enew | only 2253391b1dd0SBram Moolenaar cgetexpr ["F1%10%Line 10", "F2%20%Line 20", "F3%30%Line 30"] 2254391b1dd0SBram Moolenaar copen 2255391b1dd0SBram Moolenaar cnext 2256391b1dd0SBram Moolenaar call assert_true(winnr('$') == 2) 2257391b1dd0SBram Moolenaar call assert_true(winnr() == 1) 2258391b1dd0SBram Moolenaar 2259391b1dd0SBram Moolenaar enew | only 2260391b1dd0SBram Moolenaar set efm&vim 2261391b1dd0SBram Moolenaarendfunc 2262ee85df37SBram Moolenaar 2263ee85df37SBram Moolenaarfunc XvimgrepTests(cchar) 2264ee85df37SBram Moolenaar call s:setup_commands(a:cchar) 2265ee85df37SBram Moolenaar 2266ee85df37SBram Moolenaar call writefile(['Editor:VIM vim', 2267ee85df37SBram Moolenaar \ 'Editor:Emacs EmAcS', 2268ee85df37SBram Moolenaar \ 'Editor:Notepad NOTEPAD'], 'Xtestfile1') 2269ee85df37SBram Moolenaar call writefile(['Linux', 'MacOS', 'MS-Windows'], 'Xtestfile2') 2270ee85df37SBram Moolenaar 2271ee85df37SBram Moolenaar " Error cases 2272ee85df37SBram Moolenaar call assert_fails('Xvimgrep /abc *', 'E682:') 2273ee85df37SBram Moolenaar 2274ee85df37SBram Moolenaar let @/='' 2275ee85df37SBram Moolenaar call assert_fails('Xvimgrep // *', 'E35:') 2276ee85df37SBram Moolenaar 2277ee85df37SBram Moolenaar call assert_fails('Xvimgrep abc', 'E683:') 2278ee85df37SBram Moolenaar call assert_fails('Xvimgrep a1b2c3 Xtestfile1', 'E480:') 2279ee85df37SBram Moolenaar call assert_fails('Xvimgrep pat Xa1b2c3', 'E480:') 2280ee85df37SBram Moolenaar 2281ee85df37SBram Moolenaar Xexpr "" 2282ee85df37SBram Moolenaar Xvimgrepadd Notepad Xtestfile1 2283ee85df37SBram Moolenaar Xvimgrepadd MacOS Xtestfile2 2284ee85df37SBram Moolenaar let l = g:Xgetlist() 2285ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2286ee85df37SBram Moolenaar call assert_equal('Editor:Notepad NOTEPAD', l[0].text) 2287ee85df37SBram Moolenaar 2288ee85df37SBram Moolenaar Xvimgrep #\cvim#g Xtestfile? 2289ee85df37SBram Moolenaar let l = g:Xgetlist() 2290ee85df37SBram Moolenaar call assert_equal(2, len(l)) 2291ee85df37SBram Moolenaar call assert_equal(8, l[0].col) 2292ee85df37SBram Moolenaar call assert_equal(12, l[1].col) 2293ee85df37SBram Moolenaar 2294ee85df37SBram Moolenaar 1Xvimgrep ?Editor? Xtestfile* 2295ee85df37SBram Moolenaar let l = g:Xgetlist() 2296ee85df37SBram Moolenaar call assert_equal(1, len(l)) 2297ee85df37SBram Moolenaar call assert_equal('Editor:VIM vim', l[0].text) 2298ee85df37SBram Moolenaar 2299ee85df37SBram Moolenaar edit +3 Xtestfile2 2300ee85df37SBram Moolenaar Xvimgrep +\cemacs+j Xtestfile1 2301ee85df37SBram Moolenaar let l = g:Xgetlist() 2302ee85df37SBram Moolenaar call assert_equal('Xtestfile2', bufname('')) 2303ee85df37SBram Moolenaar call assert_equal('Editor:Emacs EmAcS', l[0].text) 2304ee85df37SBram Moolenaar 2305ee85df37SBram Moolenaar call delete('Xtestfile1') 2306ee85df37SBram Moolenaar call delete('Xtestfile2') 2307ee85df37SBram Moolenaarendfunc 2308ee85df37SBram Moolenaar 2309ee85df37SBram Moolenaar" Tests for the :vimgrep command 2310ee85df37SBram Moolenaarfunc Test_vimgrep() 2311ee85df37SBram Moolenaar call XvimgrepTests('c') 2312ee85df37SBram Moolenaar call XvimgrepTests('l') 2313ee85df37SBram Moolenaarendfunc 231469f40be6SBram Moolenaar 231569f40be6SBram Moolenaarfunc XfreeTests(cchar) 231669f40be6SBram Moolenaar call s:setup_commands(a:cchar) 231769f40be6SBram Moolenaar 231869f40be6SBram Moolenaar enew | only 231969f40be6SBram Moolenaar 232069f40be6SBram Moolenaar " Deleting the quickfix stack should work even When the current list is 232169f40be6SBram Moolenaar " somewhere in the middle of the stack 232269f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 232369f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 232469f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 232569f40be6SBram Moolenaar Xolder 232669f40be6SBram Moolenaar call g:Xsetlist([], 'f') 232769f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 232869f40be6SBram Moolenaar 232969f40be6SBram Moolenaar " After deleting the stack, adding a new list should create a stack with a 233069f40be6SBram Moolenaar " single list. 233169f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 233269f40be6SBram Moolenaar call assert_equal(1, g:Xgetlist({'all':1}).nr) 233369f40be6SBram Moolenaar 233469f40be6SBram Moolenaar " Deleting the stack from a quickfix window should update/clear the 233569f40be6SBram Moolenaar " quickfix/location list window. 233669f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 233769f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 233869f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 233969f40be6SBram Moolenaar Xolder 234069f40be6SBram Moolenaar Xwindow 234169f40be6SBram Moolenaar call g:Xsetlist([], 'f') 234269f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 234369f40be6SBram Moolenaar call assert_equal(1, line('$')) 234469f40be6SBram Moolenaar Xclose 234569f40be6SBram Moolenaar 234669f40be6SBram Moolenaar " Deleting the stack from a non-quickfix window should update/clear the 234769f40be6SBram Moolenaar " quickfix/location list window. 234869f40be6SBram Moolenaar Xexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 234969f40be6SBram Moolenaar Xexpr ['Xfile2:20:20:Line 20', 'Xfile2:25:25:Line 25'] 235069f40be6SBram Moolenaar Xexpr ['Xfile3:30:30:Line 30', 'Xfile3:35:35:Line 35'] 235169f40be6SBram Moolenaar Xolder 235269f40be6SBram Moolenaar Xwindow 235369f40be6SBram Moolenaar wincmd p 235469f40be6SBram Moolenaar call g:Xsetlist([], 'f') 235569f40be6SBram Moolenaar call assert_equal(0, len(g:Xgetlist())) 235669f40be6SBram Moolenaar wincmd p 235769f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 235869f40be6SBram Moolenaar call assert_equal(1, line('$')) 235969f40be6SBram Moolenaar 236069f40be6SBram Moolenaar " After deleting the location list stack, if the location list window is 236169f40be6SBram Moolenaar " opened, then a new location list should be created. So opening the 236269f40be6SBram Moolenaar " location list window again should not create a new window. 236369f40be6SBram Moolenaar if a:cchar == 'l' 236469f40be6SBram Moolenaar lexpr ['Xfile1:10:10:Line 10', 'Xfile1:15:15:Line 15'] 236569f40be6SBram Moolenaar wincmd p 236669f40be6SBram Moolenaar lopen 236769f40be6SBram Moolenaar call assert_equal(2, winnr('$')) 236869f40be6SBram Moolenaar endif 236969f40be6SBram Moolenaar Xclose 237069f40be6SBram Moolenaarendfunc 237169f40be6SBram Moolenaar 237274240d3fSBram Moolenaar" Tests for the quickfix free functionality 237369f40be6SBram Moolenaarfunc Test_qf_free() 237469f40be6SBram Moolenaar call XfreeTests('c') 237569f40be6SBram Moolenaar call XfreeTests('l') 237669f40be6SBram Moolenaarendfunc 23776e62da3eSBram Moolenaar 23786e62da3eSBram Moolenaar" Test for buffer overflow when parsing lines and adding new entries to 23796e62da3eSBram Moolenaar" the quickfix list. 23806e62da3eSBram Moolenaarfunc Test_bufoverflow() 23816e62da3eSBram Moolenaar set efm=%f:%l:%m 23826e62da3eSBram Moolenaar cgetexpr ['File1:100:' . repeat('x', 1025)] 23836e62da3eSBram Moolenaar 23846e62da3eSBram Moolenaar set efm=%+GCompiler:\ %.%#,%f:%l:%m 23856e62da3eSBram Moolenaar cgetexpr ['Compiler: ' . repeat('a', 1015), 'File1:10:Hello World'] 23866e62da3eSBram Moolenaar 23876e62da3eSBram Moolenaar set efm=%DEntering\ directory\ %f,%f:%l:%m 23886e62da3eSBram Moolenaar cgetexpr ['Entering directory ' . repeat('a', 1006), 23896e62da3eSBram Moolenaar \ 'File1:10:Hello World'] 23906e62da3eSBram Moolenaar set efm&vim 23916e62da3eSBram Moolenaarendfunc 23926e62da3eSBram Moolenaar 2393875feea6SBram Moolenaar" Tests for getting the quickfix stack size 2394875feea6SBram Moolenaarfunc XsizeTests(cchar) 2395875feea6SBram Moolenaar call s:setup_commands(a:cchar) 2396875feea6SBram Moolenaar 2397875feea6SBram Moolenaar call g:Xsetlist([], 'f') 2398875feea6SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':'$'}).nr) 2399a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr':'$', 'all':1}).title) 2400a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr':0}).nr) 2401875feea6SBram Moolenaar 2402875feea6SBram Moolenaar Xexpr "File1:10:Line1" 2403875feea6SBram Moolenaar Xexpr "File2:20:Line2" 2404875feea6SBram Moolenaar Xexpr "File3:30:Line3" 2405875feea6SBram Moolenaar Xolder | Xolder 2406875feea6SBram Moolenaar call assert_equal(3, g:Xgetlist({'nr':'$'}).nr) 2407875feea6SBram Moolenaar call g:Xsetlist([], 'f') 2408875feea6SBram Moolenaar 2409875feea6SBram Moolenaar Xexpr "File1:10:Line1" 2410875feea6SBram Moolenaar Xexpr "File2:20:Line2" 2411875feea6SBram Moolenaar Xexpr "File3:30:Line3" 2412875feea6SBram Moolenaar Xolder | Xolder 2413875feea6SBram Moolenaar call g:Xsetlist([], 'a', {'nr':'$', 'title':'Compiler'}) 2414875feea6SBram Moolenaar call assert_equal('Compiler', g:Xgetlist({'nr':3, 'all':1}).title) 2415875feea6SBram Moolenaarendfunc 2416875feea6SBram Moolenaar 2417875feea6SBram Moolenaarfunc Test_Qf_Size() 2418875feea6SBram Moolenaar call XsizeTests('c') 2419875feea6SBram Moolenaar call XsizeTests('l') 2420875feea6SBram Moolenaarendfunc 24211814183bSBram Moolenaar 24229c4fefffSBram Moolenaarfunc Test_cclose_from_copen() 24239c4fefffSBram Moolenaar augroup QF_Test 24249c4fefffSBram Moolenaar au! 24259c4fefffSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788') 24269c4fefffSBram Moolenaar augroup END 24279c4fefffSBram Moolenaar copen 24289c4fefffSBram Moolenaar augroup QF_Test 24299c4fefffSBram Moolenaar au! 24309c4fefffSBram Moolenaar augroup END 24319c4fefffSBram Moolenaar augroup! QF_Test 24329c4fefffSBram Moolenaarendfunc 24339c4fefffSBram Moolenaar 24341814183bSBram Moolenaarfunc Test_cclose_in_autocmd() 24351814183bSBram Moolenaar " Problem is only triggered if "starting" is zero, so that the OptionsSet 24361814183bSBram Moolenaar " event will be triggered. 24371814183bSBram Moolenaar call test_override('starting', 1) 24381814183bSBram Moolenaar augroup QF_Test 24391814183bSBram Moolenaar au! 24401814183bSBram Moolenaar au FileType qf :call assert_fails(':cclose', 'E788') 24411814183bSBram Moolenaar augroup END 24421814183bSBram Moolenaar copen 24431814183bSBram Moolenaar augroup QF_Test 24441814183bSBram Moolenaar au! 24451814183bSBram Moolenaar augroup END 24461814183bSBram Moolenaar augroup! QF_Test 24471814183bSBram Moolenaar call test_override('starting', 0) 24481814183bSBram Moolenaarendfunc 24499c4fefffSBram Moolenaar 24509c4fefffSBram Moolenaarfunc Test_resize_from_copen() 24519c4fefffSBram Moolenaar augroup QF_Test 24529c4fefffSBram Moolenaar au! 24539c4fefffSBram Moolenaar au FileType qf resize 5 24549c4fefffSBram Moolenaar augroup END 24559c4fefffSBram Moolenaar try 24569c4fefffSBram Moolenaar " This should succeed without any exception. No other buffers are 24579c4fefffSBram Moolenaar " involved in the autocmd. 24589c4fefffSBram Moolenaar copen 24599c4fefffSBram Moolenaar finally 24609c4fefffSBram Moolenaar augroup QF_Test 24619c4fefffSBram Moolenaar au! 24629c4fefffSBram Moolenaar augroup END 24639c4fefffSBram Moolenaar augroup! QF_Test 24649c4fefffSBram Moolenaar endtry 24659c4fefffSBram Moolenaarendfunc 2466a8788f4dSBram Moolenaar 2467a8788f4dSBram Moolenaar" Tests for the quickfix buffer b:changedtick variable 2468a8788f4dSBram Moolenaarfunc Xchangedtick_tests(cchar) 2469a8788f4dSBram Moolenaar call s:setup_commands(a:cchar) 2470a8788f4dSBram Moolenaar 2471a8788f4dSBram Moolenaar new | only 2472a8788f4dSBram Moolenaar 2473a8788f4dSBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 2474a8788f4dSBram Moolenaar 2475a8788f4dSBram Moolenaar Xopen 2476a8788f4dSBram Moolenaar Xolder 2477a8788f4dSBram Moolenaar Xolder 2478a8788f4dSBram Moolenaar Xaddexpr "F1:10:Line10" 2479a8788f4dSBram Moolenaar Xaddexpr "F2:20:Line20" 2480a8788f4dSBram Moolenaar call g:Xsetlist([{"filename":"F3", "lnum":30, "text":"Line30"}], 'a') 2481a8788f4dSBram Moolenaar call g:Xsetlist([], 'f') 2482a8788f4dSBram Moolenaar call assert_equal(8, getbufvar('%', 'changedtick')) 2483a8788f4dSBram Moolenaar Xclose 2484a8788f4dSBram Moolenaarendfunc 2485a8788f4dSBram Moolenaar 2486a8788f4dSBram Moolenaarfunc Test_changedtick() 2487a8788f4dSBram Moolenaar call Xchangedtick_tests('c') 2488a8788f4dSBram Moolenaar call Xchangedtick_tests('l') 2489a8788f4dSBram Moolenaarendfunc 2490d28cc3f5SBram Moolenaar 2491ae338338SBram Moolenaar" Tests for parsing an expression using setqflist() 2492ae338338SBram Moolenaarfunc Xsetexpr_tests(cchar) 2493ae338338SBram Moolenaar call s:setup_commands(a:cchar) 2494ae338338SBram Moolenaar 2495ae338338SBram Moolenaar let t = ["File1:10:Line10", "File1:20:Line20"] 24962c809b7cSBram Moolenaar call g:Xsetlist([], ' ', {'lines' : t}) 24972c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["File1:30:Line30"]}) 2498ae338338SBram Moolenaar 2499ae338338SBram Moolenaar let l = g:Xgetlist() 2500ae338338SBram Moolenaar call assert_equal(3, len(l)) 2501ae338338SBram Moolenaar call assert_equal(20, l[1].lnum) 2502ae338338SBram Moolenaar call assert_equal('Line30', l[2].text) 25032c809b7cSBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["File2:5:Line5"]}) 2504ae338338SBram Moolenaar let l = g:Xgetlist() 2505ae338338SBram Moolenaar call assert_equal(1, len(l)) 2506ae338338SBram Moolenaar call assert_equal('Line5', l[0].text) 25072c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : 10})) 25082c809b7cSBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'lines' : "F1:10:L10"})) 2509ae338338SBram Moolenaar 2510ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2511ae338338SBram Moolenaar " Add entries to multiple lists 25122c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:10:Line10"]}) 25132c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:20:Line20"]}) 25142c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["File1:15:Line15"]}) 25152c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["File2:25:Line25"]}) 2516ae338338SBram Moolenaar call assert_equal('Line15', g:Xgetlist({'nr':1, 'items':1}).items[1].text) 2517ae338338SBram Moolenaar call assert_equal('Line25', g:Xgetlist({'nr':2, 'items':1}).items[1].text) 251836538225SBram Moolenaar 251936538225SBram Moolenaar " Adding entries using a custom efm 252036538225SBram Moolenaar set efm& 252136538225SBram Moolenaar call g:Xsetlist([], ' ', {'efm' : '%f#%l#%m', 252236538225SBram Moolenaar \ 'lines' : ["F1#10#L10", "F2#20#L20"]}) 252336538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 252436538225SBram Moolenaar call g:Xsetlist([], 'a', {'efm' : '%f#%l#%m', 'lines' : ["F3:30:L30"]}) 252536538225SBram Moolenaar call assert_equal('F3:30:L30', g:Xgetlist({'items':1}).items[2].text) 252636538225SBram Moolenaar call assert_equal(20, g:Xgetlist({'items':1}).items[1].lnum) 252736538225SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'efm' : [], 252836538225SBram Moolenaar \ 'lines' : ['F1:10:L10']})) 2529ae338338SBram Moolenaarendfunc 2530ae338338SBram Moolenaar 2531ae338338SBram Moolenaarfunc Test_setexpr() 2532ae338338SBram Moolenaar call Xsetexpr_tests('c') 2533ae338338SBram Moolenaar call Xsetexpr_tests('l') 2534ae338338SBram Moolenaarendfunc 2535ae338338SBram Moolenaar 2536ae338338SBram Moolenaar" Tests for per quickfix/location list directory stack 2537ae338338SBram Moolenaarfunc Xmultidirstack_tests(cchar) 2538ae338338SBram Moolenaar call s:setup_commands(a:cchar) 2539ae338338SBram Moolenaar 2540ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2541ae338338SBram Moolenaar Xexpr "" | Xexpr "" 2542ae338338SBram Moolenaar 25432c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["Entering dir 'Xone/a'"]}) 25442c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["Entering dir 'Xtwo/a'"]}) 25452c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["one.txt:3:one one one"]}) 25462c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["two.txt:5:two two two"]}) 2547ae338338SBram Moolenaar 2548ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 2549ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 2550ae338338SBram Moolenaar call assert_equal('Xone/a/one.txt', bufname(l1.items[1].bufnr)) 2551ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 2552ae338338SBram Moolenaar call assert_equal('Xtwo/a/two.txt', bufname(l2.items[1].bufnr)) 2553ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 2554ae338338SBram Moolenaarendfunc 2555ae338338SBram Moolenaar 2556ae338338SBram Moolenaarfunc Test_multidirstack() 2557ae338338SBram Moolenaar call mkdir('Xone/a', 'p') 2558ae338338SBram Moolenaar call mkdir('Xtwo/a', 'p') 2559ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 2560ae338338SBram Moolenaar call writefile(lines, 'Xone/a/one.txt') 2561ae338338SBram Moolenaar call writefile(lines, 'Xtwo/a/two.txt') 2562ae338338SBram Moolenaar let save_efm = &efm 2563ae338338SBram Moolenaar set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f' 2564ae338338SBram Moolenaar 2565ae338338SBram Moolenaar call Xmultidirstack_tests('c') 2566ae338338SBram Moolenaar call Xmultidirstack_tests('l') 2567ae338338SBram Moolenaar 2568ae338338SBram Moolenaar let &efm = save_efm 2569ae338338SBram Moolenaar call delete('Xone', 'rf') 2570ae338338SBram Moolenaar call delete('Xtwo', 'rf') 2571ae338338SBram Moolenaarendfunc 2572ae338338SBram Moolenaar 2573ae338338SBram Moolenaar" Tests for per quickfix/location list file stack 2574ae338338SBram Moolenaarfunc Xmultifilestack_tests(cchar) 2575ae338338SBram Moolenaar call s:setup_commands(a:cchar) 2576ae338338SBram Moolenaar 2577ae338338SBram Moolenaar call g:Xsetlist([], 'f') 2578ae338338SBram Moolenaar Xexpr "" | Xexpr "" 2579ae338338SBram Moolenaar 25802c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["[one.txt]"]}) 25812c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["[two.txt]"]}) 25822c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, 'lines' : ["(3,5) one one one"]}) 25832c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 2, 'lines' : ["(5,9) two two two"]}) 2584ae338338SBram Moolenaar 2585ae338338SBram Moolenaar let l1 = g:Xgetlist({'nr':1, 'items':1}) 2586ae338338SBram Moolenaar let l2 = g:Xgetlist({'nr':2, 'items':1}) 2587ae338338SBram Moolenaar call assert_equal('one.txt', bufname(l1.items[1].bufnr)) 2588ae338338SBram Moolenaar call assert_equal(3, l1.items[1].lnum) 2589ae338338SBram Moolenaar call assert_equal('two.txt', bufname(l2.items[1].bufnr)) 2590ae338338SBram Moolenaar call assert_equal(5, l2.items[1].lnum) 2591e333e79fSBram Moolenaar 2592e333e79fSBram Moolenaar " Test for start of a new error line in the same line where a previous 2593e333e79fSBram Moolenaar " error line ends with a file stack. 2594e333e79fSBram Moolenaar let efm_val = 'Error\ l%l\ in\ %f,' 2595e333e79fSBram Moolenaar let efm_val .= '%-P%>(%f%r,Error\ l%l\ in\ %m,%-Q)%r' 2596e333e79fSBram Moolenaar let l = g:Xgetlist({'lines' : [ 2597e333e79fSBram Moolenaar \ '(one.txt', 2598e333e79fSBram Moolenaar \ 'Error l4 in one.txt', 2599e333e79fSBram Moolenaar \ ') (two.txt', 2600e333e79fSBram Moolenaar \ 'Error l6 in two.txt', 2601e333e79fSBram Moolenaar \ ')', 2602e333e79fSBram Moolenaar \ 'Error l8 in one.txt' 2603e333e79fSBram Moolenaar \ ], 'efm' : efm_val}) 2604e333e79fSBram Moolenaar call assert_equal(3, len(l.items)) 2605e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[0].bufnr)) 2606e333e79fSBram Moolenaar call assert_equal(4, l.items[0].lnum) 2607e333e79fSBram Moolenaar call assert_equal('one.txt', l.items[0].text) 2608e333e79fSBram Moolenaar call assert_equal('two.txt', bufname(l.items[1].bufnr)) 2609e333e79fSBram Moolenaar call assert_equal(6, l.items[1].lnum) 2610e333e79fSBram Moolenaar call assert_equal('two.txt', l.items[1].text) 2611e333e79fSBram Moolenaar call assert_equal('one.txt', bufname(l.items[2].bufnr)) 2612e333e79fSBram Moolenaar call assert_equal(8, l.items[2].lnum) 2613e333e79fSBram Moolenaar call assert_equal('', l.items[2].text) 2614ae338338SBram Moolenaarendfunc 2615ae338338SBram Moolenaar 2616ae338338SBram Moolenaarfunc Test_multifilestack() 2617ae338338SBram Moolenaar let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7'] 2618ae338338SBram Moolenaar call writefile(lines, 'one.txt') 2619ae338338SBram Moolenaar call writefile(lines, 'two.txt') 2620ae338338SBram Moolenaar let save_efm = &efm 2621ae338338SBram Moolenaar set efm=%+P[%f],(%l\\,%c)\ %m,%-Q 2622ae338338SBram Moolenaar 2623ae338338SBram Moolenaar call Xmultifilestack_tests('c') 2624ae338338SBram Moolenaar call Xmultifilestack_tests('l') 2625ae338338SBram Moolenaar 2626ae338338SBram Moolenaar let &efm = save_efm 2627ae338338SBram Moolenaar call delete('one.txt') 2628ae338338SBram Moolenaar call delete('two.txt') 2629ae338338SBram Moolenaarendfunc 2630ae338338SBram Moolenaar 2631ae338338SBram Moolenaar" Tests for per buffer 'efm' setting 2632ae338338SBram Moolenaarfunc Test_perbuf_efm() 2633ae338338SBram Moolenaar call writefile(["File1-10-Line10"], 'one.txt') 2634ae338338SBram Moolenaar call writefile(["File2#20#Line20"], 'two.txt') 2635ae338338SBram Moolenaar set efm=%f#%l#%m 2636ae338338SBram Moolenaar new | only 2637ae338338SBram Moolenaar new 2638ae338338SBram Moolenaar setlocal efm=%f-%l-%m 2639ae338338SBram Moolenaar cfile one.txt 2640ae338338SBram Moolenaar wincmd w 2641ae338338SBram Moolenaar caddfile two.txt 2642ae338338SBram Moolenaar 2643ae338338SBram Moolenaar let l = getqflist() 2644ae338338SBram Moolenaar call assert_equal(10, l[0].lnum) 2645ae338338SBram Moolenaar call assert_equal('Line20', l[1].text) 2646ae338338SBram Moolenaar 2647ae338338SBram Moolenaar set efm& 2648ae338338SBram Moolenaar new | only 2649ae338338SBram Moolenaar call delete('one.txt') 2650ae338338SBram Moolenaar call delete('two.txt') 2651ae338338SBram Moolenaarendfunc 2652ae338338SBram Moolenaar 2653d28cc3f5SBram Moolenaar" Open multiple help windows using ":lhelpgrep 2654d28cc3f5SBram Moolenaar" This test used to crash Vim 2655d28cc3f5SBram Moolenaarfunc Test_Multi_LL_Help() 2656d28cc3f5SBram Moolenaar new | only 2657d28cc3f5SBram Moolenaar lhelpgrep window 2658d28cc3f5SBram Moolenaar lopen 2659d28cc3f5SBram Moolenaar e# 2660d28cc3f5SBram Moolenaar lhelpgrep buffer 2661d28cc3f5SBram Moolenaar call assert_equal(3, winnr('$')) 2662d28cc3f5SBram Moolenaar call assert_true(len(getloclist(1)) != 0) 2663d28cc3f5SBram Moolenaar call assert_true(len(getloclist(2)) != 0) 2664d28cc3f5SBram Moolenaar new | only 2665d28cc3f5SBram Moolenaarendfunc 266655b69264SBram Moolenaar 266755b69264SBram Moolenaar" Tests for adding new quickfix lists using setqflist() 266855b69264SBram Moolenaarfunc XaddQf_tests(cchar) 266955b69264SBram Moolenaar call s:setup_commands(a:cchar) 267055b69264SBram Moolenaar 267155b69264SBram Moolenaar " Create a new list using ' ' for action 267255b69264SBram Moolenaar call g:Xsetlist([], 'f') 267355b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test1'}) 267455b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 267555b69264SBram Moolenaar call assert_equal(1, l.nr) 267655b69264SBram Moolenaar call assert_equal('Test1', l.title) 267755b69264SBram Moolenaar 267855b69264SBram Moolenaar " Create a new list using ' ' for action and '$' for 'nr' 267955b69264SBram Moolenaar call g:Xsetlist([], 'f') 268055b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test2', 'nr' : '$'}) 268155b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 268255b69264SBram Moolenaar call assert_equal(1, l.nr) 268355b69264SBram Moolenaar call assert_equal('Test2', l.title) 268455b69264SBram Moolenaar 268555b69264SBram Moolenaar " Create a new list using 'a' for action 268655b69264SBram Moolenaar call g:Xsetlist([], 'f') 268755b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3'}) 268855b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 268955b69264SBram Moolenaar call assert_equal(1, l.nr) 269055b69264SBram Moolenaar call assert_equal('Test3', l.title) 269155b69264SBram Moolenaar 269255b69264SBram Moolenaar " Create a new list using 'a' for action and '$' for 'nr' 269355b69264SBram Moolenaar call g:Xsetlist([], 'f') 269455b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test3', 'nr' : '$'}) 269555b69264SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'Test4'}) 269655b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 269755b69264SBram Moolenaar call assert_equal(1, l.nr) 269855b69264SBram Moolenaar call assert_equal('Test4', l.title) 269955b69264SBram Moolenaar 270055b69264SBram Moolenaar " Adding a quickfix list should remove all the lists following the current 270155b69264SBram Moolenaar " list. 270255b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 270355b69264SBram Moolenaar silent! 10Xolder 270455b69264SBram Moolenaar call g:Xsetlist([], ' ', {'title' : 'Test5'}) 270555b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 270655b69264SBram Moolenaar call assert_equal(2, l.nr) 270755b69264SBram Moolenaar call assert_equal('Test5', l.title) 270855b69264SBram Moolenaar 270955b69264SBram Moolenaar " Add a quickfix list using '$' as the list number. 271055b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 271155b69264SBram Moolenaar silent! 99Xolder 271255b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test6'}) 271355b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 271455b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 271555b69264SBram Moolenaar call assert_equal('Test6', l.title) 271655b69264SBram Moolenaar 271755b69264SBram Moolenaar " Add a quickfix list using 'nr' set to one more than the quickfix 271855b69264SBram Moolenaar " list size. 271955b69264SBram Moolenaar let lastqf = g:Xgetlist({'nr':'$'}).nr 272055b69264SBram Moolenaar silent! 99Xolder 272155b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : lastqf + 1, 'title' : 'Test7'}) 272255b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 272355b69264SBram Moolenaar call assert_equal(lastqf + 1, l.nr) 272455b69264SBram Moolenaar call assert_equal('Test7', l.title) 272555b69264SBram Moolenaar 272655b69264SBram Moolenaar " Add a quickfix list to a stack with 10 lists using 'nr' set to '$' 272755b69264SBram Moolenaar exe repeat('Xexpr "" |', 9) . 'Xexpr ""' 272855b69264SBram Moolenaar silent! 99Xolder 272955b69264SBram Moolenaar call g:Xsetlist([], ' ', {'nr' : '$', 'title' : 'Test8'}) 273055b69264SBram Moolenaar let l = g:Xgetlist({'nr' : '$', 'all' : 1}) 273155b69264SBram Moolenaar call assert_equal(10, l.nr) 273255b69264SBram Moolenaar call assert_equal('Test8', l.title) 273355b69264SBram Moolenaar 273455b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a value greater than 10 273555b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 12, 'title' : 'Test9'})) 273655b69264SBram Moolenaar 273755b69264SBram Moolenaar " Try adding a quickfix list with 'nr' set to a value greater than the 273855b69264SBram Moolenaar " quickfix list size but less than 10. 273955b69264SBram Moolenaar call g:Xsetlist([], 'f') 274055b69264SBram Moolenaar Xexpr "" | Xexpr "" | Xexpr "" 274155b69264SBram Moolenaar silent! 99Xolder 274255b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : 8, 'title' : 'Test10'})) 274355b69264SBram Moolenaar 274455b69264SBram Moolenaar " Add a quickfix list using 'nr' set to a some string or list 274555b69264SBram Moolenaar call assert_equal(-1, g:Xsetlist([], ' ', {'nr' : [1,2], 'title' : 'Test11'})) 274655b69264SBram Moolenaarendfunc 274755b69264SBram Moolenaar 274855b69264SBram Moolenaarfunc Test_add_qf() 274955b69264SBram Moolenaar call XaddQf_tests('c') 275055b69264SBram Moolenaar call XaddQf_tests('l') 275155b69264SBram Moolenaarendfunc 27527adf06f4SBram Moolenaar 27537adf06f4SBram Moolenaar" Test for getting the quickfix list items from some text without modifying 27547adf06f4SBram Moolenaar" the quickfix stack 27552c809b7cSBram Moolenaarfunc XgetListFromLines(cchar) 27567adf06f4SBram Moolenaar call s:setup_commands(a:cchar) 27577adf06f4SBram Moolenaar call g:Xsetlist([], 'f') 27587adf06f4SBram Moolenaar 27592c809b7cSBram Moolenaar let l = g:Xgetlist({'lines' : ["File2:20:Line20", "File2:30:Line30"]}).items 27607adf06f4SBram Moolenaar call assert_equal(2, len(l)) 27617adf06f4SBram Moolenaar call assert_equal(30, l[1].lnum) 27627adf06f4SBram Moolenaar 27632c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 10})) 27642c809b7cSBram Moolenaar call assert_equal({}, g:Xgetlist({'lines' : 'File1:10:Line10'})) 27652c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : []}).items) 27662c809b7cSBram Moolenaar call assert_equal([], g:Xgetlist({'lines' : [10, 20]}).items) 27677adf06f4SBram Moolenaar 276836538225SBram Moolenaar " Parse text using a custom efm 276936538225SBram Moolenaar set efm& 277036538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3#30#Line30'], 'efm' : '%f#%l#%m'}).items 277136538225SBram Moolenaar call assert_equal('Line30', l[0].text) 277236538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : '%f-%l-%m'}).items 277336538225SBram Moolenaar call assert_equal('File3:30:Line30', l[0].text) 277436538225SBram Moolenaar let l = g:Xgetlist({'lines':['File3:30:Line30'], 'efm' : [1,2]}) 277536538225SBram Moolenaar call assert_equal({}, l) 277636538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':'%2'})", 'E376:') 277736538225SBram Moolenaar call assert_fails("call g:Xgetlist({'lines':['abc'], 'efm':''})", 'E378:') 277836538225SBram Moolenaar 27797adf06f4SBram Moolenaar " Make sure that the quickfix stack is not modified 27807adf06f4SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : '$'}).nr) 27817adf06f4SBram Moolenaarendfunc 27827adf06f4SBram Moolenaar 27832c809b7cSBram Moolenaarfunc Test_get_list_from_lines() 27842c809b7cSBram Moolenaar call XgetListFromLines('c') 27852c809b7cSBram Moolenaar call XgetListFromLines('l') 27867adf06f4SBram Moolenaarendfunc 2787a539f4f1SBram Moolenaar 2788a539f4f1SBram Moolenaar" Tests for the quickfix list id 2789a539f4f1SBram Moolenaarfunc Xqfid_tests(cchar) 2790a539f4f1SBram Moolenaar call s:setup_commands(a:cchar) 2791a539f4f1SBram Moolenaar 2792a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 2793a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0}).id) 2794a539f4f1SBram Moolenaar Xexpr '' 2795a539f4f1SBram Moolenaar let start_id = g:Xgetlist({'id' : 0}).id 2796a539f4f1SBram Moolenaar Xexpr '' | Xexpr '' 2797a539f4f1SBram Moolenaar Xolder 2798a539f4f1SBram Moolenaar call assert_equal(start_id, g:Xgetlist({'id':0, 'nr':1}).id) 2799a539f4f1SBram Moolenaar call assert_equal(start_id + 1, g:Xgetlist({'id':0, 'nr':0}).id) 2800a539f4f1SBram Moolenaar call assert_equal(start_id + 2, g:Xgetlist({'id':0, 'nr':'$'}).id) 2801a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':0, 'nr':99}).id) 2802a539f4f1SBram Moolenaar call assert_equal(2, g:Xgetlist({'id':start_id + 1, 'nr':0}).nr) 2803a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':99, 'nr':0}).id) 2804a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':"abc", 'nr':0}).id) 2805a539f4f1SBram Moolenaar 2806a539f4f1SBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id, 'context':[1,2]}) 2807a539f4f1SBram Moolenaar call assert_equal([1,2], g:Xgetlist({'nr':1, 'context':1}).context) 28082c809b7cSBram Moolenaar call g:Xsetlist([], 'a', {'id':start_id+1, 'lines':['F1:10:L10']}) 2809a539f4f1SBram Moolenaar call assert_equal('L10', g:Xgetlist({'nr':2, 'items':1}).items[0].text) 2810a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':999, 'title':'Vim'})) 2811a539f4f1SBram Moolenaar call assert_equal(-1, g:Xsetlist([], 'a', {'id':'abc', 'title':'Vim'})) 2812a539f4f1SBram Moolenaar 2813a539f4f1SBram Moolenaar let qfid = g:Xgetlist({'id':0, 'nr':0}) 2814a539f4f1SBram Moolenaar call g:Xsetlist([], 'f') 2815a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id':qfid, 'nr':0}).id) 2816a539f4f1SBram Moolenaarendfunc 2817a539f4f1SBram Moolenaar 2818a539f4f1SBram Moolenaarfunc Test_qf_id() 2819a539f4f1SBram Moolenaar call Xqfid_tests('c') 2820a539f4f1SBram Moolenaar call Xqfid_tests('l') 2821a539f4f1SBram Moolenaarendfunc 282274240d3fSBram Moolenaar 282374240d3fSBram Moolenaarfunc Xqfjump_tests(cchar) 282474240d3fSBram Moolenaar call s:setup_commands(a:cchar) 282574240d3fSBram Moolenaar 282674240d3fSBram Moolenaar call writefile(["Line1\tFoo", "Line2"], 'F1') 282774240d3fSBram Moolenaar call writefile(["Line1\tBar", "Line2"], 'F2') 282874240d3fSBram Moolenaar call writefile(["Line1\tBaz", "Line2"], 'F3') 282974240d3fSBram Moolenaar 283074240d3fSBram Moolenaar call g:Xsetlist([], 'f') 283174240d3fSBram Moolenaar 283274240d3fSBram Moolenaar " Tests for 283374240d3fSBram Moolenaar " Jumping to a line using a pattern 283474240d3fSBram Moolenaar " Jumping to a column greater than the last column in a line 283574240d3fSBram Moolenaar " Jumping to a line greater than the last line in the file 283674240d3fSBram Moolenaar let l = [] 283774240d3fSBram Moolenaar for i in range(1, 7) 283874240d3fSBram Moolenaar call add(l, {}) 283974240d3fSBram Moolenaar endfor 284074240d3fSBram Moolenaar let l[0].filename='F1' 284174240d3fSBram Moolenaar let l[0].pattern='Line1' 284274240d3fSBram Moolenaar let l[1].filename='F2' 284374240d3fSBram Moolenaar let l[1].pattern='Line1' 284474240d3fSBram Moolenaar let l[2].filename='F3' 284574240d3fSBram Moolenaar let l[2].pattern='Line1' 284674240d3fSBram Moolenaar let l[3].filename='F3' 284774240d3fSBram Moolenaar let l[3].lnum=1 284874240d3fSBram Moolenaar let l[3].col=9 284974240d3fSBram Moolenaar let l[3].vcol=1 285074240d3fSBram Moolenaar let l[4].filename='F3' 285174240d3fSBram Moolenaar let l[4].lnum=99 285274240d3fSBram Moolenaar let l[5].filename='F3' 285374240d3fSBram Moolenaar let l[5].lnum=1 285474240d3fSBram Moolenaar let l[5].col=99 285574240d3fSBram Moolenaar let l[5].vcol=1 285674240d3fSBram Moolenaar let l[6].filename='F3' 285774240d3fSBram Moolenaar let l[6].pattern='abcxyz' 285874240d3fSBram Moolenaar 285974240d3fSBram Moolenaar call g:Xsetlist([], ' ', {'items' : l}) 286074240d3fSBram Moolenaar Xopen | only 286174240d3fSBram Moolenaar 2Xnext 286274240d3fSBram Moolenaar call assert_equal(3, g:Xgetlist({'idx' : 0}).idx) 286374240d3fSBram Moolenaar call assert_equal('F3', bufname('%')) 286474240d3fSBram Moolenaar Xnext 286574240d3fSBram Moolenaar call assert_equal(7, col('.')) 286674240d3fSBram Moolenaar Xnext 286774240d3fSBram Moolenaar call assert_equal(2, line('.')) 286874240d3fSBram Moolenaar Xnext 286974240d3fSBram Moolenaar call assert_equal(9, col('.')) 287074240d3fSBram Moolenaar 2 287174240d3fSBram Moolenaar Xnext 287274240d3fSBram Moolenaar call assert_equal(2, line('.')) 287374240d3fSBram Moolenaar 287474240d3fSBram Moolenaar if a:cchar == 'l' 287574240d3fSBram Moolenaar " When jumping to a location list entry in the location list window and 287674240d3fSBram Moolenaar " no usable windows are available, then a new window should be opened. 287774240d3fSBram Moolenaar enew! | new | only 287874240d3fSBram Moolenaar call g:Xsetlist([], 'f') 287974240d3fSBram Moolenaar setlocal buftype=nofile 288074240d3fSBram Moolenaar new 288174240d3fSBram 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']}) 288274240d3fSBram Moolenaar Xopen 288374240d3fSBram Moolenaar let winid = win_getid() 288474240d3fSBram Moolenaar wincmd p 288574240d3fSBram Moolenaar close 288674240d3fSBram Moolenaar call win_gotoid(winid) 288774240d3fSBram Moolenaar Xnext 288874240d3fSBram Moolenaar call assert_equal(3, winnr('$')) 288974240d3fSBram Moolenaar call assert_equal(1, winnr()) 289074240d3fSBram Moolenaar call assert_equal(2, line('.')) 289174240d3fSBram Moolenaar 289274240d3fSBram Moolenaar " When jumping to an entry in the location list window and the window 289374240d3fSBram Moolenaar " associated with the location list is not present and a window containing 289474240d3fSBram Moolenaar " the file is already present, then that window should be used. 289574240d3fSBram Moolenaar close 289674240d3fSBram Moolenaar belowright new 289774240d3fSBram Moolenaar call g:Xsetlist([], 'f') 289874240d3fSBram Moolenaar edit F3 289974240d3fSBram Moolenaar call win_gotoid(winid) 290074240d3fSBram Moolenaar Xlast 290174240d3fSBram Moolenaar call assert_equal(3, winnr()) 290274240d3fSBram Moolenaar call assert_equal(6, g:Xgetlist({'size' : 1}).size) 290374240d3fSBram Moolenaar call assert_equal(winid, g:Xgetlist({'winid' : 1}).winid) 290474240d3fSBram Moolenaar endif 290574240d3fSBram Moolenaar 290674240d3fSBram Moolenaar " Cleanup 290774240d3fSBram Moolenaar enew! 290874240d3fSBram Moolenaar new | only 290974240d3fSBram Moolenaar 291074240d3fSBram Moolenaar call delete('F1') 291174240d3fSBram Moolenaar call delete('F2') 291274240d3fSBram Moolenaar call delete('F3') 291374240d3fSBram Moolenaarendfunc 291474240d3fSBram Moolenaar 291574240d3fSBram Moolenaarfunc Test_qfjump() 291674240d3fSBram Moolenaar call Xqfjump_tests('c') 291774240d3fSBram Moolenaar call Xqfjump_tests('l') 291874240d3fSBram Moolenaarendfunc 2919a6d4849cSBram Moolenaar 2920a6d4849cSBram Moolenaar" Tests for the getqflist() and getloclist() functions when the list is not 2921a6d4849cSBram Moolenaar" present or is empty 2922a6d4849cSBram Moolenaarfunc Xgetlist_empty_tests(cchar) 2923a6d4849cSBram Moolenaar call s:setup_commands(a:cchar) 2924a6d4849cSBram Moolenaar 2925a6d4849cSBram Moolenaar " Empty quickfix stack 2926a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 2927a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 2928a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : 0}).id) 2929a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 2930a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 2931a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 0}).nr) 2932a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 2933a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'title' : 0}).title) 2934a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 2935b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'changedtick' : 0}).changedtick) 2936b254af31SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick': 0}, g:Xgetlist({'all' : 0})) 2937a6d4849cSBram Moolenaar 29382ec364e9SBram Moolenaar " Quickfix window with empty stack 29392ec364e9SBram Moolenaar silent! Xopen 29402ec364e9SBram Moolenaar let qfwinid = (a:cchar == 'c') ? win_getid() : 0 29412ec364e9SBram Moolenaar call assert_equal(qfwinid, g:Xgetlist({'winid' : 0}).winid) 29422ec364e9SBram Moolenaar Xclose 29432ec364e9SBram Moolenaar 2944a6d4849cSBram Moolenaar " Empty quickfix list 2945a6d4849cSBram Moolenaar Xexpr "" 2946a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'context' : 0}).context) 2947a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'id' : 0}).id) 2948a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'idx' : 0}).idx) 2949a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'items' : 0}).items) 2950a6d4849cSBram Moolenaar call assert_notequal(0, g:Xgetlist({'nr' : 0}).nr) 2951a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'size' : 0}).size) 2952a6d4849cSBram Moolenaar call assert_notequal('', g:Xgetlist({'title' : 0}).title) 2953a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'winid' : 0}).winid) 2954b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 2955a6d4849cSBram Moolenaar 2956a6d4849cSBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 2957a6d4849cSBram Moolenaar call g:Xsetlist([], 'f') 2958a6d4849cSBram Moolenaar 2959a6d4849cSBram Moolenaar " Non-existing quickfix identifier 2960a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'context' : 0}).context) 2961a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid}).id) 2962a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'idx' : 0}).idx) 2963a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'id' : qfid, 'items' : 0}).items) 2964a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'nr' : 0}).nr) 2965a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'size' : 0}).size) 2966a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'id' : qfid, 'title' : 0}).title) 2967a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'winid' : 0}).winid) 2968b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'id' : qfid, 'changedtick' : 0}).changedtick) 2969b254af31SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0}, g:Xgetlist({'id' : qfid, 'all' : 0})) 2970a6d4849cSBram Moolenaar 2971a6d4849cSBram Moolenaar " Non-existing quickfix list number 2972a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'context' : 0}).context) 2973a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5}).nr) 2974a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'idx' : 0}).idx) 2975a6d4849cSBram Moolenaar call assert_equal([], g:Xgetlist({'nr' : 5, 'items' : 0}).items) 2976a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'id' : 0}).id) 2977a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'size' : 0}).size) 2978a6d4849cSBram Moolenaar call assert_equal('', g:Xgetlist({'nr' : 5, 'title' : 0}).title) 2979a6d4849cSBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'winid' : 0}).winid) 2980b254af31SBram Moolenaar call assert_equal(0, g:Xgetlist({'nr' : 5, 'changedtick' : 0}).changedtick) 2981b254af31SBram Moolenaar call assert_equal({'context' : '', 'id' : 0, 'idx' : 0, 'items' : [], 'nr' : 0, 'size' : 0, 'title' : '', 'winid' : 0, 'changedtick' : 0}, g:Xgetlist({'nr' : 5, 'all' : 0})) 2982a6d4849cSBram Moolenaarendfunc 2983a6d4849cSBram Moolenaar 2984a6d4849cSBram Moolenaarfunc Test_getqflist() 2985a6d4849cSBram Moolenaar call Xgetlist_empty_tests('c') 2986a6d4849cSBram Moolenaar call Xgetlist_empty_tests('l') 2987a6d4849cSBram Moolenaarendfunc 2988b254af31SBram Moolenaar 2989a0ca7d00SBram Moolenaarfunc Test_getqflist_invalid_nr() 2990a0ca7d00SBram Moolenaar " The following commands used to crash Vim 2991a0ca7d00SBram Moolenaar cexpr "" 2992a0ca7d00SBram Moolenaar call getqflist({'nr' : $XXX_DOES_NOT_EXIST_XXX}) 2993a0ca7d00SBram Moolenaar 2994a0ca7d00SBram Moolenaar " Cleanup 2995a0ca7d00SBram Moolenaar call setqflist([], 'r') 2996a0ca7d00SBram Moolenaarendfunc 2997a0ca7d00SBram Moolenaar 2998b254af31SBram Moolenaar" Tests for the quickfix/location list changedtick 2999b254af31SBram Moolenaarfunc Xqftick_tests(cchar) 3000b254af31SBram Moolenaar call s:setup_commands(a:cchar) 3001b254af31SBram Moolenaar 3002b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3003b254af31SBram Moolenaar 3004b254af31SBram Moolenaar Xexpr "F1:10:Line10" 3005b254af31SBram Moolenaar let qfid = g:Xgetlist({'id' : 0}).id 3006b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3007b254af31SBram Moolenaar Xaddexpr "F2:20:Line20\nF2:21:Line21" 3008b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3009b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'lines' : ["F3:30:Line30", "F3:31:Line31"]}) 3010b254af31SBram Moolenaar call assert_equal(3, g:Xgetlist({'changedtick' : 0}).changedtick) 3011b254af31SBram Moolenaar call g:Xsetlist([], 'r', {'lines' : ["F4:40:Line40"]}) 3012b254af31SBram Moolenaar call assert_equal(4, g:Xgetlist({'changedtick' : 0}).changedtick) 3013b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'title' : 'New Title'}) 3014b254af31SBram Moolenaar call assert_equal(5, g:Xgetlist({'changedtick' : 0}).changedtick) 3015b254af31SBram Moolenaar 3016b254af31SBram Moolenaar enew! 3017b254af31SBram Moolenaar call append(0, ["F5:50:L50", "F6:60:L60"]) 3018b254af31SBram Moolenaar Xaddbuffer 3019b254af31SBram Moolenaar call assert_equal(6, g:Xgetlist({'changedtick' : 0}).changedtick) 3020b254af31SBram Moolenaar enew! 3021b254af31SBram Moolenaar 3022b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'context' : {'bus' : 'pci'}}) 3023b254af31SBram Moolenaar call assert_equal(7, g:Xgetlist({'changedtick' : 0}).changedtick) 3024b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3025b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'a') 3026b254af31SBram Moolenaar call assert_equal(8, g:Xgetlist({'changedtick' : 0}).changedtick) 3027b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3028b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], ' ') 3029b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3030b254af31SBram Moolenaar call g:Xsetlist([{'filename' : 'F7', 'lnum' : 10, 'text' : 'L7'}, 3031b254af31SBram Moolenaar \ {'filename' : 'F7', 'lnum' : 11, 'text' : 'L11'}], 'r') 3032b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3033b254af31SBram Moolenaar 3034b254af31SBram Moolenaar call writefile(["F8:80:L80", "F8:81:L81"], "Xone") 3035b254af31SBram Moolenaar Xfile Xone 3036b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3037b254af31SBram Moolenaar Xaddfile Xone 3038b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'changedtick' : 0}).changedtick) 3039b254af31SBram Moolenaar 3040b254af31SBram Moolenaar " Test case for updating a non-current quickfix list 3041b254af31SBram Moolenaar call g:Xsetlist([], 'f') 3042b254af31SBram Moolenaar Xexpr "F1:1:L1" 3043b254af31SBram Moolenaar Xexpr "F2:2:L2" 3044b254af31SBram Moolenaar call g:Xsetlist([], 'a', {'nr' : 1, "lines" : ["F10:10:L10"]}) 3045b254af31SBram Moolenaar call assert_equal(1, g:Xgetlist({'changedtick' : 0}).changedtick) 3046b254af31SBram Moolenaar call assert_equal(2, g:Xgetlist({'nr' : 1, 'changedtick' : 0}).changedtick) 3047b254af31SBram Moolenaar 3048b254af31SBram Moolenaar call delete("Xone") 3049b254af31SBram Moolenaarendfunc 3050b254af31SBram Moolenaar 3051b254af31SBram Moolenaarfunc Test_qf_tick() 3052b254af31SBram Moolenaar call Xqftick_tests('c') 3053b254af31SBram Moolenaar call Xqftick_tests('l') 3054b254af31SBram Moolenaarendfunc 305512237448SBram Moolenaar 305612237448SBram Moolenaar" The following test used to crash Vim. 305712237448SBram Moolenaar" Open the location list window and close the regular window associated with 305812237448SBram Moolenaar" the location list. When the garbage collection runs now, it incorrectly 305912237448SBram Moolenaar" marks the location list context as not in use and frees the context. 306012237448SBram Moolenaarfunc Test_ll_window_ctx() 306112237448SBram Moolenaar call setloclist(0, [], 'f') 306212237448SBram Moolenaar call setloclist(0, [], 'a', {'context' : []}) 306312237448SBram Moolenaar lopen | only 306412237448SBram Moolenaar call test_garbagecollect_now() 306512237448SBram Moolenaar echo getloclist(0, {'context' : 1}).context 306612237448SBram Moolenaar enew | only 306712237448SBram Moolenaarendfunc 306812237448SBram Moolenaar 306914a4deb0SBram Moolenaar" The following test used to crash vim 307014a4deb0SBram Moolenaarfunc Test_lfile_crash() 307114a4deb0SBram Moolenaar sp Xtest 307214a4deb0SBram Moolenaar au QuickFixCmdPre * bw 307314a4deb0SBram Moolenaar call assert_fails('lfile', 'E40') 307414a4deb0SBram Moolenaar au! QuickFixCmdPre 307514a4deb0SBram Moolenaarendfunc 30763c097226SBram Moolenaar 30773c097226SBram Moolenaar" The following test used to crash vim 30783c097226SBram Moolenaarfunc Test_lbuffer_crash() 30793c097226SBram Moolenaar sv Xtest 30803c097226SBram Moolenaar augroup QF_Test 30813c097226SBram Moolenaar au! 30823c097226SBram Moolenaar au * * bw 30833c097226SBram Moolenaar augroup END 30843c097226SBram Moolenaar lbuffer 30853c097226SBram Moolenaar augroup QF_Test 30863c097226SBram Moolenaar au! 30873c097226SBram Moolenaar augroup END 30883c097226SBram Moolenaarendfunc 30893c097226SBram Moolenaar 30903c097226SBram Moolenaar" The following test used to crash vim 30913c097226SBram Moolenaarfunc Test_lexpr_crash() 30923c097226SBram Moolenaar augroup QF_Test 30933c097226SBram Moolenaar au! 30943c097226SBram Moolenaar au * * call setloclist(0, [], 'f') 30953c097226SBram Moolenaar augroup END 30963c097226SBram Moolenaar lexpr "" 30973c097226SBram Moolenaar augroup QF_Test 30983c097226SBram Moolenaar au! 30993c097226SBram Moolenaar augroup END 31003c097226SBram Moolenaar enew | only 31013c097226SBram Moolenaarendfunc 31023c097226SBram Moolenaar 31033c097226SBram Moolenaar" The following test used to crash Vim 31043c097226SBram Moolenaarfunc Test_lvimgrep_crash() 31053c097226SBram Moolenaar sv Xtest 31063c097226SBram Moolenaar augroup QF_Test 31073c097226SBram Moolenaar au! 31083c097226SBram Moolenaar au * * call setloclist(0, [], 'f') 31093c097226SBram Moolenaar augroup END 31103c097226SBram Moolenaar lvimgrep quickfix test_quickfix.vim 31113c097226SBram Moolenaar augroup QF_Test 31123c097226SBram Moolenaar au! 31133c097226SBram Moolenaar augroup END 31143c097226SBram Moolenaar enew | only 31153c097226SBram Moolenaarendfunc 3116de04654dSBram Moolenaar 3117de04654dSBram Moolenaar" Test for the position of the quickfix and location list window 3118de04654dSBram Moolenaarfunc Test_qfwin_pos() 3119de04654dSBram Moolenaar " Open two windows 3120de04654dSBram Moolenaar new | only 3121de04654dSBram Moolenaar new 3122de04654dSBram Moolenaar cexpr ['F1:10:L10'] 3123de04654dSBram Moolenaar copen 3124de04654dSBram Moolenaar " Quickfix window should be the bottom most window 3125de04654dSBram Moolenaar call assert_equal(3, winnr()) 3126de04654dSBram Moolenaar close 3127de04654dSBram Moolenaar " Open at the very top 3128de04654dSBram Moolenaar wincmd t 3129de04654dSBram Moolenaar topleft copen 3130de04654dSBram Moolenaar call assert_equal(1, winnr()) 3131de04654dSBram Moolenaar close 3132de04654dSBram Moolenaar " open left of the current window 3133de04654dSBram Moolenaar wincmd t 3134de04654dSBram Moolenaar below new 3135de04654dSBram Moolenaar leftabove copen 3136de04654dSBram Moolenaar call assert_equal(2, winnr()) 3137de04654dSBram Moolenaar close 3138de04654dSBram Moolenaar " open right of the current window 3139de04654dSBram Moolenaar rightbelow copen 3140de04654dSBram Moolenaar call assert_equal(3, winnr()) 3141de04654dSBram Moolenaar close 3142de04654dSBram Moolenaarendfunc 3143e1bb879fSBram Moolenaar 3144e1bb879fSBram Moolenaar" Tests for quickfix/location lists changed by autocommands when 3145e1bb879fSBram Moolenaar" :vimgrep/:lvimgrep commands are running. 3146e1bb879fSBram Moolenaarfunc Test_vimgrep_autocmd() 3147e1bb879fSBram Moolenaar call setqflist([], 'f') 3148e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest1.txt') 3149e1bb879fSBram Moolenaar call writefile(['stars'], 'Xtest2.txt') 3150e1bb879fSBram Moolenaar 3151e1bb879fSBram Moolenaar " Test 1: 3152e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3153e1bb879fSBram Moolenaar " changed by an autocmd, the results should be added to the correct quickfix 3154e1bb879fSBram Moolenaar " list. 3155e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt cexpr '' | cexpr '' 3156e1bb879fSBram Moolenaar silent vimgrep stars Xtest*.txt 3157e1bb879fSBram Moolenaar call assert_equal(1, getqflist({'nr' : 0}).nr) 3158e1bb879fSBram Moolenaar call assert_equal(3, getqflist({'nr' : '$'}).nr) 3159e1bb879fSBram Moolenaar call assert_equal('Xtest2.txt', bufname(getqflist()[1].bufnr)) 3160e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3161e1bb879fSBram Moolenaar 3162e1bb879fSBram Moolenaar " Test 2: 3163e1bb879fSBram Moolenaar " When searching for a pattern using :vimgrep, if the quickfix list is 3164e1bb879fSBram Moolenaar " freed, then a error should be given. 3165e1bb879fSBram Moolenaar silent! %bwipe! 3166e1bb879fSBram Moolenaar call setqflist([], 'f') 3167e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt for i in range(10) | cexpr '' | endfor 3168e1bb879fSBram Moolenaar call assert_fails('vimgrep stars Xtest*.txt', 'E925:') 3169e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3170e1bb879fSBram Moolenaar 3171e1bb879fSBram Moolenaar " Test 3: 3172e1bb879fSBram Moolenaar " When searching for a pattern using :lvimgrep, if the location list is 3173e1bb879fSBram Moolenaar " freed, then the command should error out. 3174e1bb879fSBram Moolenaar silent! %bwipe! 3175e1bb879fSBram Moolenaar let g:save_winid = win_getid() 3176e1bb879fSBram Moolenaar autocmd BufRead Xtest2.txt call setloclist(g:save_winid, [], 'f') 3177e1bb879fSBram Moolenaar call assert_fails('lvimgrep stars Xtest*.txt', 'E926:') 3178e1bb879fSBram Moolenaar au! BufRead Xtest2.txt 3179e1bb879fSBram Moolenaar 3180e1bb879fSBram Moolenaar call delete('Xtest1.txt') 3181e1bb879fSBram Moolenaar call delete('Xtest2.txt') 3182e1bb879fSBram Moolenaar call setqflist([], 'f') 3183e1bb879fSBram Moolenaarendfunc 31843b9474b4SBram Moolenaar 31853b9474b4SBram Moolenaar" The following test used to crash Vim 31863b9474b4SBram Moolenaarfunc Test_lhelpgrep_autocmd() 31873b9474b4SBram Moolenaar lhelpgrep quickfix 31883b9474b4SBram Moolenaar autocmd QuickFixCmdPost * call setloclist(0, [], 'f') 31893b9474b4SBram Moolenaar lhelpgrep buffer 31903b9474b4SBram Moolenaar call assert_equal('help', &filetype) 31913b9474b4SBram Moolenaar call assert_equal(0, getloclist(0, {'nr' : '$'}).nr) 31923b9474b4SBram Moolenaar lhelpgrep tabpage 31933b9474b4SBram Moolenaar call assert_equal('help', &filetype) 31943b9474b4SBram Moolenaar call assert_equal(1, getloclist(0, {'nr' : '$'}).nr) 31953b9474b4SBram Moolenaar au! QuickFixCmdPost 31963b9474b4SBram Moolenaar new | only 31973b9474b4SBram Moolenaarendfunc 3198