1da59dd5dSBram Moolenaar" Test for the quickfix commands. 2da59dd5dSBram Moolenaar 3da59dd5dSBram Moolenaarif !has('quickfix') 4da59dd5dSBram Moolenaar finish 5da59dd5dSBram Moolenaarendif 6da59dd5dSBram Moolenaar 7da59dd5dSBram Moolenaar" Tests for the :clist and :llist commands 8da59dd5dSBram Moolenaarfunction XlistTests(cchar) 9da59dd5dSBram Moolenaar let Xlist = a:cchar . 'list' 10da59dd5dSBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 11da59dd5dSBram Moolenaar 12da59dd5dSBram Moolenaar " With an empty list, command should return error 13da59dd5dSBram Moolenaar exe Xgetexpr . ' []' 14da59dd5dSBram Moolenaar exe 'silent! ' . Xlist 15da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E42: No Errors') 16da59dd5dSBram Moolenaar 17da59dd5dSBram Moolenaar " Populate the list and then try 18da59dd5dSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1', 19da59dd5dSBram Moolenaar \ 'non-error 2', 'Xtestfile2:2:2:Line2', 20da59dd5dSBram Moolenaar \ 'non-error 3', 'Xtestfile3:3:1:Line3']" 21da59dd5dSBram Moolenaar 22da59dd5dSBram Moolenaar " List only valid entries 23da59dd5dSBram Moolenaar redir => result 24da59dd5dSBram Moolenaar exe Xlist 25da59dd5dSBram Moolenaar redir END 26da59dd5dSBram Moolenaar let l = split(result, "\n") 27da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 28da59dd5dSBram Moolenaar \ ' 4 Xtestfile2:2 col 2: Line2', 29da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 30da59dd5dSBram Moolenaar 31da59dd5dSBram Moolenaar " List all the entries 32da59dd5dSBram Moolenaar redir => result 33da59dd5dSBram Moolenaar exe Xlist . "!" 34da59dd5dSBram Moolenaar redir END 35da59dd5dSBram Moolenaar let l = split(result, "\n") 36da59dd5dSBram Moolenaar call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1', 37da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2', 38da59dd5dSBram Moolenaar \ ' 5: non-error 3', ' 6 Xtestfile3:3 col 1: Line3'], l) 39da59dd5dSBram Moolenaar 40da59dd5dSBram Moolenaar " List a range of errors 41da59dd5dSBram Moolenaar redir => result 42da59dd5dSBram Moolenaar exe Xlist . " 3,6" 43da59dd5dSBram Moolenaar redir END 44da59dd5dSBram Moolenaar let l = split(result, "\n") 45da59dd5dSBram Moolenaar call assert_equal([' 4 Xtestfile2:2 col 2: Line2', 46da59dd5dSBram Moolenaar \ ' 6 Xtestfile3:3 col 1: Line3'], l) 47da59dd5dSBram Moolenaar 48da59dd5dSBram Moolenaar redir => result 49da59dd5dSBram Moolenaar exe Xlist . "! 3,4" 50da59dd5dSBram Moolenaar redir END 51da59dd5dSBram Moolenaar let l = split(result, "\n") 52da59dd5dSBram Moolenaar call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 53da59dd5dSBram Moolenaar 54da59dd5dSBram Moolenaar redir => result 55da59dd5dSBram Moolenaar exe Xlist . " -6,-4" 56da59dd5dSBram Moolenaar redir END 57da59dd5dSBram Moolenaar let l = split(result, "\n") 58da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l) 59da59dd5dSBram Moolenaar 60da59dd5dSBram Moolenaar redir => result 61da59dd5dSBram Moolenaar exe Xlist . "! -5,-3" 62da59dd5dSBram Moolenaar redir END 63da59dd5dSBram Moolenaar let l = split(result, "\n") 64da59dd5dSBram Moolenaar call assert_equal([' 2 Xtestfile1:1 col 3: Line1', 65da59dd5dSBram Moolenaar \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l) 66da59dd5dSBram Moolenaarendfunction 67da59dd5dSBram Moolenaar 68da59dd5dSBram Moolenaarfunction Test_clist() 69da59dd5dSBram Moolenaar call XlistTests('c') 70da59dd5dSBram Moolenaar call XlistTests('l') 71da59dd5dSBram Moolenaarendfunction 72da59dd5dSBram Moolenaar 73da59dd5dSBram Moolenaar" Tests for the :colder, :cnewer, :lolder and :lnewer commands 74da59dd5dSBram Moolenaar" Note that this test assumes that a quickfix/location list is 75cfc0a350SBram Moolenaar" already set by the caller. 76da59dd5dSBram Moolenaarfunction XageTests(cchar) 77da59dd5dSBram Moolenaar let Xolder = a:cchar . 'older' 78da59dd5dSBram Moolenaar let Xnewer = a:cchar . 'newer' 79da59dd5dSBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 80da59dd5dSBram Moolenaar if a:cchar == 'c' 81da59dd5dSBram Moolenaar let Xgetlist = 'getqflist()' 82da59dd5dSBram Moolenaar else 83da59dd5dSBram Moolenaar let Xgetlist = 'getloclist(0)' 84da59dd5dSBram Moolenaar endif 85da59dd5dSBram Moolenaar 86da59dd5dSBram Moolenaar " Jumping to a non existent list should return error 87da59dd5dSBram Moolenaar exe 'silent! ' . Xolder . ' 99' 88da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack') 89da59dd5dSBram Moolenaar 90da59dd5dSBram Moolenaar exe 'silent! ' . Xnewer . ' 99' 91da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E381: At top of quickfix stack') 92da59dd5dSBram Moolenaar 93da59dd5dSBram Moolenaar " Add three quickfix/location lists 94da59dd5dSBram Moolenaar exe Xgetexpr . " ['Xtestfile1:1:3:Line1']" 95da59dd5dSBram Moolenaar exe Xgetexpr . " ['Xtestfile2:2:2:Line2']" 96da59dd5dSBram Moolenaar exe Xgetexpr . " ['Xtestfile3:3:1:Line3']" 97da59dd5dSBram Moolenaar 98da59dd5dSBram Moolenaar " Go back two lists 99da59dd5dSBram Moolenaar exe Xolder 100da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 101da59dd5dSBram Moolenaar call assert_equal('Line2', l[0].text) 102da59dd5dSBram Moolenaar 103da59dd5dSBram Moolenaar " Go forward two lists 104da59dd5dSBram Moolenaar exe Xnewer 105da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 106da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 107da59dd5dSBram Moolenaar 108da59dd5dSBram Moolenaar " Test for the optional count argument 109da59dd5dSBram Moolenaar exe Xolder . ' 2' 110da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 111da59dd5dSBram Moolenaar call assert_equal('Line1', l[0].text) 112da59dd5dSBram Moolenaar 113da59dd5dSBram Moolenaar exe Xnewer . ' 2' 114da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 115da59dd5dSBram Moolenaar call assert_equal('Line3', l[0].text) 116da59dd5dSBram Moolenaarendfunction 117da59dd5dSBram Moolenaar 118da59dd5dSBram Moolenaarfunction Test_cage() 119cfc0a350SBram Moolenaar let list = [{'bufnr': 1, 'lnum': 1}] 120cfc0a350SBram Moolenaar call setqflist(list) 121da59dd5dSBram Moolenaar call XageTests('c') 122cfc0a350SBram Moolenaar 123cfc0a350SBram Moolenaar call setloclist(0, list) 124da59dd5dSBram Moolenaar call XageTests('l') 125da59dd5dSBram Moolenaarendfunction 126da59dd5dSBram Moolenaar 127da59dd5dSBram Moolenaar" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen 128da59dd5dSBram Moolenaar" commands 129da59dd5dSBram Moolenaarfunction XwindowTests(cchar) 130da59dd5dSBram Moolenaar let Xwindow = a:cchar . 'window' 131da59dd5dSBram Moolenaar let Xclose = a:cchar . 'close' 132da59dd5dSBram Moolenaar let Xopen = a:cchar . 'open' 133da59dd5dSBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 134da59dd5dSBram Moolenaar 135da59dd5dSBram Moolenaar " Create a list with no valid entries 136da59dd5dSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']" 137da59dd5dSBram Moolenaar 138da59dd5dSBram Moolenaar " Quickfix/Location window should not open with no valid errors 139da59dd5dSBram Moolenaar exe Xwindow 140da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 141da59dd5dSBram Moolenaar 142da59dd5dSBram Moolenaar " Create a list with valid entries 143da59dd5dSBram Moolenaar exe Xgetexpr . " ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2', 144da59dd5dSBram Moolenaar \ 'Xtestfile3:3:1:Line3']" 145da59dd5dSBram Moolenaar 146da59dd5dSBram Moolenaar " Open the window 147da59dd5dSBram Moolenaar exe Xwindow 148da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 149da59dd5dSBram Moolenaar \ getline('.') ==# 'Xtestfile1|1 col 3| Line1') 150da59dd5dSBram Moolenaar 151da59dd5dSBram Moolenaar " Close the window 152da59dd5dSBram Moolenaar exe Xclose 153da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 154da59dd5dSBram Moolenaar 155da59dd5dSBram Moolenaar " Create a list with no valid entries 156da59dd5dSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']" 157da59dd5dSBram Moolenaar 158da59dd5dSBram Moolenaar " Open the window 159da59dd5dSBram Moolenaar exe Xopen . ' 5' 160da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1' 161da59dd5dSBram Moolenaar \ && winheight('.') == 5) 162da59dd5dSBram Moolenaar 163da59dd5dSBram Moolenaar " Opening the window again, should move the cursor to that window 164da59dd5dSBram Moolenaar wincmd t 165da59dd5dSBram Moolenaar exe Xopen . ' 7' 166da59dd5dSBram Moolenaar call assert_true(winnr('$') == 2 && winnr() == 2 && 167da59dd5dSBram Moolenaar \ winheight('.') == 7 && 168da59dd5dSBram Moolenaar \ getline('.') ==# '|| non-error 1') 169da59dd5dSBram Moolenaar 170da59dd5dSBram Moolenaar 171da59dd5dSBram Moolenaar " Calling cwindow should close the quickfix window with no valid errors 172da59dd5dSBram Moolenaar exe Xwindow 173da59dd5dSBram Moolenaar call assert_true(winnr('$') == 1) 174da59dd5dSBram Moolenaarendfunction 175da59dd5dSBram Moolenaar 176da59dd5dSBram Moolenaarfunction Test_cwindow() 177da59dd5dSBram Moolenaar call XwindowTests('c') 178da59dd5dSBram Moolenaar call XwindowTests('l') 179da59dd5dSBram Moolenaarendfunction 180da59dd5dSBram Moolenaar 181da59dd5dSBram Moolenaar" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile 182da59dd5dSBram Moolenaar" commands. 183da59dd5dSBram Moolenaarfunction XfileTests(cchar) 184da59dd5dSBram Moolenaar let Xfile = a:cchar . 'file' 185da59dd5dSBram Moolenaar let Xgetfile = a:cchar . 'getfile' 186da59dd5dSBram Moolenaar let Xaddfile = a:cchar . 'addfile' 187da59dd5dSBram Moolenaar if a:cchar == 'c' 188da59dd5dSBram Moolenaar let Xgetlist = 'getqflist()' 189da59dd5dSBram Moolenaar else 190da59dd5dSBram Moolenaar let Xgetlist = 'getloclist(0)' 191da59dd5dSBram Moolenaar endif 192da59dd5dSBram Moolenaar 193da59dd5dSBram Moolenaar call writefile(['Xtestfile1:700:10:Line 700', 194da59dd5dSBram Moolenaar \ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1') 195da59dd5dSBram Moolenaar 196da59dd5dSBram Moolenaar enew! 197da59dd5dSBram Moolenaar exe Xfile . ' Xqftestfile1' 198da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 199da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 200da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 201da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 202da59dd5dSBram Moolenaar 203da59dd5dSBram Moolenaar " Run cfile/lfile from a modified buffer 204da59dd5dSBram Moolenaar enew! 205da59dd5dSBram Moolenaar silent! put ='Quickfix' 206da59dd5dSBram Moolenaar exe 'silent! ' . Xfile . ' Xqftestfile1' 207da59dd5dSBram Moolenaar call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)') 208da59dd5dSBram Moolenaar 209da59dd5dSBram Moolenaar call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1') 210da59dd5dSBram Moolenaar exe Xaddfile . ' Xqftestfile1' 211da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 212da59dd5dSBram Moolenaar call assert_true(len(l) == 3 && 213da59dd5dSBram Moolenaar \ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900') 214da59dd5dSBram Moolenaar 215da59dd5dSBram Moolenaar call writefile(['Xtestfile1:222:77:Line 222', 216da59dd5dSBram Moolenaar \ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1') 217da59dd5dSBram Moolenaar 218da59dd5dSBram Moolenaar enew! 219da59dd5dSBram Moolenaar exe Xgetfile . ' Xqftestfile1' 220da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 221da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 222da59dd5dSBram Moolenaar \ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' && 223da59dd5dSBram Moolenaar \ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333') 224da59dd5dSBram Moolenaar 225da59dd5dSBram Moolenaar call delete('Xqftestfile1') 226da59dd5dSBram Moolenaarendfunction 227da59dd5dSBram Moolenaar 228da59dd5dSBram Moolenaarfunction Test_cfile() 229da59dd5dSBram Moolenaar call XfileTests('c') 230da59dd5dSBram Moolenaar call XfileTests('l') 231da59dd5dSBram Moolenaarendfunction 232da59dd5dSBram Moolenaar 233da59dd5dSBram Moolenaar" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and 234da59dd5dSBram Moolenaar" :lgetbuffer commands. 235da59dd5dSBram Moolenaarfunction XbufferTests(cchar) 236da59dd5dSBram Moolenaar let Xbuffer = a:cchar . 'buffer' 237da59dd5dSBram Moolenaar let Xgetbuffer = a:cchar . 'getbuffer' 238da59dd5dSBram Moolenaar let Xaddbuffer = a:cchar . 'addbuffer' 239da59dd5dSBram Moolenaar if a:cchar == 'c' 240da59dd5dSBram Moolenaar let Xgetlist = 'getqflist()' 241da59dd5dSBram Moolenaar else 242da59dd5dSBram Moolenaar let Xgetlist = 'getloclist(0)' 243da59dd5dSBram Moolenaar endif 244da59dd5dSBram Moolenaar 245da59dd5dSBram Moolenaar enew! 246da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile7:700:10:Line 700', 247da59dd5dSBram Moolenaar \ 'Xtestfile8:800:15:Line 800']) 248da59dd5dSBram Moolenaar exe Xbuffer . "!" 249da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 250da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 251da59dd5dSBram Moolenaar \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' && 252da59dd5dSBram Moolenaar \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800') 253da59dd5dSBram Moolenaar 254da59dd5dSBram Moolenaar enew! 255da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile9:900:55:Line 900', 256da59dd5dSBram Moolenaar \ 'Xtestfile10:950:66:Line 950']) 257da59dd5dSBram Moolenaar exe Xgetbuffer 258da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 259da59dd5dSBram Moolenaar call assert_true(len(l) == 2 && 260da59dd5dSBram Moolenaar \ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' && 261da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950') 262da59dd5dSBram Moolenaar 263da59dd5dSBram Moolenaar enew! 264da59dd5dSBram Moolenaar silent! call setline(1, ['Xtestfile11:700:20:Line 700', 265da59dd5dSBram Moolenaar \ 'Xtestfile12:750:25:Line 750']) 266da59dd5dSBram Moolenaar exe Xaddbuffer 267da59dd5dSBram Moolenaar exe 'let l = ' . Xgetlist 268da59dd5dSBram Moolenaar call assert_true(len(l) == 4 && 269da59dd5dSBram Moolenaar \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' && 270da59dd5dSBram Moolenaar \ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' && 271da59dd5dSBram Moolenaar \ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750') 272da59dd5dSBram Moolenaar 273da59dd5dSBram Moolenaarendfunction 274da59dd5dSBram Moolenaar 275da59dd5dSBram Moolenaarfunction Test_cbuffer() 276da59dd5dSBram Moolenaar call XbufferTests('c') 277da59dd5dSBram Moolenaar call XbufferTests('l') 278da59dd5dSBram Moolenaarendfunction 279da59dd5dSBram Moolenaar 28075bdf6aaSBram Moolenaarfunction Test_nomem() 28128fb79dbSBram Moolenaar call alloc_fail(GetAllocId('qf_dirname_start'), 0, 0) 282a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 28375bdf6aaSBram Moolenaar 28428fb79dbSBram Moolenaar call alloc_fail(GetAllocId('qf_dirname_now'), 0, 0) 285a260b87dSBram Moolenaar call assert_fails('vimgrep vim runtest.vim', 'E342:') 28675bdf6aaSBram Moolenaar 28728fb79dbSBram Moolenaar call alloc_fail(GetAllocId('qf_namebuf'), 0, 0) 288a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 28975bdf6aaSBram Moolenaar 29028fb79dbSBram Moolenaar call alloc_fail(GetAllocId('qf_errmsg'), 0, 0) 291a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 29275bdf6aaSBram Moolenaar 29328fb79dbSBram Moolenaar call alloc_fail(GetAllocId('qf_pattern'), 0, 0) 294a260b87dSBram Moolenaar call assert_fails('cfile runtest.vim', 'E342:') 29575bdf6aaSBram Moolenaar 29675bdf6aaSBram Moolenaarendfunc 29775bdf6aaSBram Moolenaar 29862ef7974SBram Moolenaarfunction Test_helpgrep() 29962ef7974SBram Moolenaar helpgrep quickfix 30062ef7974SBram Moolenaar copen 30162ef7974SBram Moolenaar " This wipes out the buffer, make sure that doesn't cause trouble. 30262ef7974SBram Moolenaar cclose 30362ef7974SBram Moolenaarendfunc 30475bdf6aaSBram Moolenaar 3056920c72dSBram Moolenaarfunc Test_errortitle() 3066920c72dSBram Moolenaar augroup QfBufWinEnter 3076920c72dSBram Moolenaar au! 3086920c72dSBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 3096920c72dSBram Moolenaar augroup END 3106920c72dSBram Moolenaar copen 3116920c72dSBram 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'')'}] 3126920c72dSBram Moolenaar call setqflist(a) 3136920c72dSBram Moolenaar call assert_equal(':setqflist()', g:a) 3146920c72dSBram Moolenaar augroup QfBufWinEnter 3156920c72dSBram Moolenaar au! 3166920c72dSBram Moolenaar augroup END 3176920c72dSBram Moolenaar augroup! QfBufWinEnter 3186920c72dSBram Moolenaarendfunc 319e27dba49SBram Moolenaar 320*5584df65SBram Moolenaarfunc Test_vimgreptitle() 321*5584df65SBram Moolenaar augroup QfBufWinEnter 322*5584df65SBram Moolenaar au! 323*5584df65SBram Moolenaar au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE') 324*5584df65SBram Moolenaar augroup END 325*5584df65SBram Moolenaar try 326*5584df65SBram Moolenaar vimgrep /pattern/j file 327*5584df65SBram Moolenaar catch /E480/ 328*5584df65SBram Moolenaar endtry 329*5584df65SBram Moolenaar copen 330*5584df65SBram Moolenaar call assert_equal(': vimgrep /pattern/j file', g:a) 331*5584df65SBram Moolenaar augroup QfBufWinEnter 332*5584df65SBram Moolenaar au! 333*5584df65SBram Moolenaar augroup END 334*5584df65SBram Moolenaar augroup! QfBufWinEnter 335*5584df65SBram Moolenaarendfunc 336*5584df65SBram Moolenaar 337e27dba49SBram Moolenaarfunction XqfTitleTests(cchar) 338e27dba49SBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 339e27dba49SBram Moolenaar if a:cchar == 'c' 340e27dba49SBram Moolenaar let Xgetlist = 'getqflist()' 341e27dba49SBram Moolenaar else 342e27dba49SBram Moolenaar let Xgetlist = 'getloclist(0)' 343e27dba49SBram Moolenaar endif 344e27dba49SBram Moolenaar let Xopen = a:cchar . 'open' 345e27dba49SBram Moolenaar let Xclose = a:cchar . 'close' 346e27dba49SBram Moolenaar 347e27dba49SBram Moolenaar exe Xgetexpr . " ['file:1:1:message']" 348e27dba49SBram Moolenaar exe 'let l = ' . Xgetlist 349e27dba49SBram Moolenaar if a:cchar == 'c' 350e27dba49SBram Moolenaar call setqflist(l, 'r') 351e27dba49SBram Moolenaar else 352e27dba49SBram Moolenaar call setloclist(0, l, 'r') 353e27dba49SBram Moolenaar endif 354e27dba49SBram Moolenaar 355e27dba49SBram Moolenaar exe Xopen 356e27dba49SBram Moolenaar if a:cchar == 'c' 357e27dba49SBram Moolenaar let title = ':setqflist()' 358e27dba49SBram Moolenaar else 359e27dba49SBram Moolenaar let title = ':setloclist()' 360e27dba49SBram Moolenaar endif 361e27dba49SBram Moolenaar call assert_equal(title, w:quickfix_title) 362e27dba49SBram Moolenaar exe Xclose 363e27dba49SBram Moolenaarendfunction 364e27dba49SBram Moolenaar 365e27dba49SBram Moolenaar" Tests for quickfix window's title 366e27dba49SBram Moolenaarfunction Test_qf_title() 367e27dba49SBram Moolenaar call XqfTitleTests('c') 368e27dba49SBram Moolenaar call XqfTitleTests('l') 369e27dba49SBram Moolenaarendfunction 370e27dba49SBram Moolenaar 371e27dba49SBram Moolenaar" Tests for 'errorformat' 372e27dba49SBram Moolenaarfunction Test_efm() 373e27dba49SBram Moolenaar let save_efm = &efm 374e27dba49SBram Moolenaar set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%# 375e27dba49SBram Moolenaar cgetexpr ['WWWW', 'EEEE', 'CCCC'] 376e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 377e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 378e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC'] 379e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 380e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l) 381e27dba49SBram Moolenaar cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY'] 382e27dba49SBram Moolenaar let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]'))) 383e27dba49SBram Moolenaar call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l) 384e27dba49SBram Moolenaar let &efm = save_efm 385e27dba49SBram Moolenaarendfunction 3861ff2b64bSBram Moolenaar 3871ff2b64bSBram Moolenaar" This will test for problems in quickfix: 3881ff2b64bSBram Moolenaar" A. incorrectly copying location lists which caused the location list to show 3891ff2b64bSBram Moolenaar" a different name than the file that was actually being displayed. 3901ff2b64bSBram Moolenaar" B. not reusing the window for which the location list window is opened but 3911ff2b64bSBram Moolenaar" instead creating new windows. 3921ff2b64bSBram Moolenaar" C. make sure that the location list window is not reused instead of the 3931ff2b64bSBram Moolenaar" window it belongs to. 3941ff2b64bSBram Moolenaar" 3951ff2b64bSBram Moolenaar" Set up the test environment: 3961ff2b64bSBram Moolenaarfunction! ReadTestProtocol(name) 3971ff2b64bSBram Moolenaar let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '') 3981ff2b64bSBram Moolenaar let word = substitute(base, '\v(.*)\..*', '\1', '') 3991ff2b64bSBram Moolenaar 4001ff2b64bSBram Moolenaar setl modifiable 4011ff2b64bSBram Moolenaar setl noreadonly 4021ff2b64bSBram Moolenaar setl noswapfile 4031ff2b64bSBram Moolenaar setl bufhidden=delete 4041ff2b64bSBram Moolenaar %del _ 4051ff2b64bSBram Moolenaar " For problem 2: 4061ff2b64bSBram Moolenaar " 'buftype' has to be set to reproduce the constant opening of new windows 4071ff2b64bSBram Moolenaar setl buftype=nofile 4081ff2b64bSBram Moolenaar 4091ff2b64bSBram Moolenaar call setline(1, word) 4101ff2b64bSBram Moolenaar 4111ff2b64bSBram Moolenaar setl nomodified 4121ff2b64bSBram Moolenaar setl nomodifiable 4131ff2b64bSBram Moolenaar setl readonly 4141ff2b64bSBram Moolenaar exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '') 4151ff2b64bSBram Moolenaarendfunction 4161ff2b64bSBram Moolenaar 4171ff2b64bSBram Moolenaarfunction Test_locationlist() 4181ff2b64bSBram Moolenaar enew 4191ff2b64bSBram Moolenaar 4201ff2b64bSBram Moolenaar augroup testgroup 4211ff2b64bSBram Moolenaar au! 4221ff2b64bSBram Moolenaar autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>")) 4231ff2b64bSBram Moolenaar augroup END 4241ff2b64bSBram Moolenaar 4251ff2b64bSBram Moolenaar let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ] 4261ff2b64bSBram Moolenaar 4271ff2b64bSBram Moolenaar let qflist = [] 4281ff2b64bSBram Moolenaar for word in words 4291ff2b64bSBram Moolenaar call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', }) 4301ff2b64bSBram Moolenaar " NOTE: problem 1: 4311ff2b64bSBram Moolenaar " intentionally not setting 'lnum' so that the quickfix entries are not 4321ff2b64bSBram Moolenaar " valid 4331ff2b64bSBram Moolenaar call setloclist(0, qflist, ' ') 4341ff2b64bSBram Moolenaar endfor 4351ff2b64bSBram Moolenaar 4361ff2b64bSBram Moolenaar " Test A 4371ff2b64bSBram Moolenaar lrewind 4381ff2b64bSBram Moolenaar enew 4391ff2b64bSBram Moolenaar lopen 4401ff2b64bSBram Moolenaar lnext 4411ff2b64bSBram Moolenaar lnext 4421ff2b64bSBram Moolenaar lnext 4431ff2b64bSBram Moolenaar lnext 4441ff2b64bSBram Moolenaar vert split 4451ff2b64bSBram Moolenaar wincmd L 4461ff2b64bSBram Moolenaar lopen 4471ff2b64bSBram Moolenaar wincmd p 4481ff2b64bSBram Moolenaar lnext 4491ff2b64bSBram Moolenaar let fileName = expand("%") 4501ff2b64bSBram Moolenaar wincmd p 4511ff2b64bSBram Moolenaar let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '') 4521ff2b64bSBram Moolenaar let fileName = substitute(fileName, '\\', '/', 'g') 4531ff2b64bSBram Moolenaar let locationListFileName = substitute(locationListFileName, '\\', '/', 'g') 4541ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", fileName) 4551ff2b64bSBram Moolenaar call assert_equal("test://bar.txt", locationListFileName) 4561ff2b64bSBram Moolenaar 4571ff2b64bSBram Moolenaar wincmd n | only 4581ff2b64bSBram Moolenaar 4591ff2b64bSBram Moolenaar " Test B: 4601ff2b64bSBram Moolenaar lrewind 4611ff2b64bSBram Moolenaar lopen 4621ff2b64bSBram Moolenaar 2 4631ff2b64bSBram Moolenaar exe "normal \<CR>" 4641ff2b64bSBram Moolenaar wincmd p 4651ff2b64bSBram Moolenaar 3 4661ff2b64bSBram Moolenaar exe "normal \<CR>" 4671ff2b64bSBram Moolenaar wincmd p 4681ff2b64bSBram Moolenaar 4 4691ff2b64bSBram Moolenaar exe "normal \<CR>" 4701ff2b64bSBram Moolenaar call assert_equal(2, winnr('$')) 4711ff2b64bSBram Moolenaar wincmd n | only 4721ff2b64bSBram Moolenaar 4731ff2b64bSBram Moolenaar " Test C: 4741ff2b64bSBram Moolenaar lrewind 4751ff2b64bSBram Moolenaar lopen 4761ff2b64bSBram Moolenaar " Let's move the location list window to the top to check whether it (the 4771ff2b64bSBram Moolenaar " first window found) will be reused when we try to open new windows: 4781ff2b64bSBram Moolenaar wincmd K 4791ff2b64bSBram Moolenaar 2 4801ff2b64bSBram Moolenaar exe "normal \<CR>" 4811ff2b64bSBram Moolenaar wincmd p 4821ff2b64bSBram Moolenaar 3 4831ff2b64bSBram Moolenaar exe "normal \<CR>" 4841ff2b64bSBram Moolenaar wincmd p 4851ff2b64bSBram Moolenaar 4 4861ff2b64bSBram Moolenaar exe "normal \<CR>" 4871ff2b64bSBram Moolenaar 1wincmd w 4881ff2b64bSBram Moolenaar call assert_equal('quickfix', &buftype) 4891ff2b64bSBram Moolenaar 2wincmd w 4901ff2b64bSBram Moolenaar let bufferName = expand("%") 4911ff2b64bSBram Moolenaar let bufferName = substitute(bufferName, '\\', '/', 'g') 4921ff2b64bSBram Moolenaar call assert_equal('test://quux.txt', bufferName) 4931ff2b64bSBram Moolenaar 4941ff2b64bSBram Moolenaar wincmd n | only 4951ff2b64bSBram Moolenaar 4961ff2b64bSBram Moolenaar augroup! testgroup 4971ff2b64bSBram Moolenaarendfunction 498