1bdd2c290SBram Moolenaar" Test for the gf and gF (goto file) commands 253f1673cSBram Moolenaar 353f1673cSBram Moolenaar" This is a test if a URL is recognized by "gf", with the cursor before and 453f1673cSBram Moolenaar" after the "://". Also test ":\\". 52a79ed29SBram Moolenaarfunc Test_gf_url() 653f1673cSBram Moolenaar enew! 753f1673cSBram Moolenaar call append(0, [ 853f1673cSBram Moolenaar \ "first test for URL://machine.name/tmp/vimtest2a and other text", 953f1673cSBram Moolenaar \ "second test for URL://machine.name/tmp/vimtest2b. And other text", 1053f1673cSBram Moolenaar \ "third test for URL:\\\\machine.name\\vimtest2c and other text", 119e3dfc65SBram Moolenaar \ "fourth test for URL:\\\\machine.name\\tmp\\vimtest2d, and other text", 129e3dfc65SBram Moolenaar \ "fifth test for URL://machine.name/tmp?q=vim&opt=yes and other text", 13cbef8e1aSBram Moolenaar \ "sixth test for URL://machine.name:1234?q=vim and other text", 1453f1673cSBram Moolenaar \ ]) 1553f1673cSBram Moolenaar call cursor(1,1) 1653f1673cSBram Moolenaar call search("^first") 1753f1673cSBram Moolenaar call search("tmp") 1853f1673cSBram Moolenaar call assert_equal("URL://machine.name/tmp/vimtest2a", expand("<cfile>")) 1953f1673cSBram Moolenaar call search("^second") 2053f1673cSBram Moolenaar call search("URL") 2153f1673cSBram Moolenaar call assert_equal("URL://machine.name/tmp/vimtest2b", expand("<cfile>")) 2253f1673cSBram Moolenaar if has("ebcdic") 2353f1673cSBram Moolenaar set isf=@,240-249,/,.,-,_,+,,,$,:,~,\ 2453f1673cSBram Moolenaar else 25cbef8e1aSBram Moolenaar set isf=@,48-57,/,.,-,_,+,,,$,~,\ 2653f1673cSBram Moolenaar endif 2753f1673cSBram Moolenaar call search("^third") 2853f1673cSBram Moolenaar call search("name") 2953f1673cSBram Moolenaar call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("<cfile>")) 3053f1673cSBram Moolenaar call search("^fourth") 3153f1673cSBram Moolenaar call search("URL") 3253f1673cSBram Moolenaar call assert_equal("URL:\\\\machine.name\\tmp\\vimtest2d", expand("<cfile>")) 3353f1673cSBram Moolenaar 349e3dfc65SBram Moolenaar call search("^fifth") 359e3dfc65SBram Moolenaar call search("URL") 369e3dfc65SBram Moolenaar call assert_equal("URL://machine.name/tmp?q=vim&opt=yes", expand("<cfile>")) 379e3dfc65SBram Moolenaar 38cbef8e1aSBram Moolenaar call search("^sixth") 39cbef8e1aSBram Moolenaar call search("URL") 40cbef8e1aSBram Moolenaar call assert_equal("URL://machine.name:1234?q=vim", expand("<cfile>")) 41cbef8e1aSBram Moolenaar 42bdd2c290SBram Moolenaar %d 43bdd2c290SBram Moolenaar call setline(1, "demo://remote_file") 44bdd2c290SBram Moolenaar wincmd f 45bdd2c290SBram Moolenaar call assert_equal('demo://remote_file', @%) 46bdd2c290SBram Moolenaar call assert_equal(2, winnr('$')) 47bdd2c290SBram Moolenaar close! 48bdd2c290SBram Moolenaar 4953f1673cSBram Moolenaar set isf&vim 5053f1673cSBram Moolenaar enew! 512a79ed29SBram Moolenaarendfunc 522a79ed29SBram Moolenaar 532a79ed29SBram Moolenaarfunc Test_gF() 542a79ed29SBram Moolenaar new 552a79ed29SBram Moolenaar call setline(1, ['111', '222', '333', '444']) 562a79ed29SBram Moolenaar w! Xfile 572a79ed29SBram Moolenaar close 582a79ed29SBram Moolenaar new 59712598f2SBram Moolenaar set isfname-=: 60712598f2SBram Moolenaar call setline(1, ['one', 'Xfile:3', 'three']) 612a79ed29SBram Moolenaar 2 622a79ed29SBram Moolenaar call assert_fails('normal gF', 'E37:') 632a79ed29SBram Moolenaar call assert_equal(2, getcurpos()[1]) 642a79ed29SBram Moolenaar w! Xfile2 652a79ed29SBram Moolenaar normal gF 662a79ed29SBram Moolenaar call assert_equal('Xfile', bufname('%')) 672a79ed29SBram Moolenaar call assert_equal(3, getcurpos()[1]) 682a79ed29SBram Moolenaar 6964e74c9cSBram Moolenaar enew! 7064e74c9cSBram Moolenaar call setline(1, ['one', 'the Xfile line 2, and more', 'three']) 7164e74c9cSBram Moolenaar w! Xfile2 7264e74c9cSBram Moolenaar normal 2GfX 7364e74c9cSBram Moolenaar normal gF 7464e74c9cSBram Moolenaar call assert_equal('Xfile', bufname('%')) 7564e74c9cSBram Moolenaar call assert_equal(2, getcurpos()[1]) 7664e74c9cSBram Moolenaar 775d3c9f8cSBram Moolenaar " jumping to the file/line with CTRL-W_F 785d3c9f8cSBram Moolenaar %bw! 795d3c9f8cSBram Moolenaar edit Xfile1 805d3c9f8cSBram Moolenaar call setline(1, ['one', 'Xfile:4', 'three']) 815d3c9f8cSBram Moolenaar exe "normal 2G\<C-W>F" 825d3c9f8cSBram Moolenaar call assert_equal('Xfile', bufname('%')) 835d3c9f8cSBram Moolenaar call assert_equal(4, getcurpos()[1]) 845d3c9f8cSBram Moolenaar 85712598f2SBram Moolenaar set isfname& 862a79ed29SBram Moolenaar call delete('Xfile') 872a79ed29SBram Moolenaar call delete('Xfile2') 885d3c9f8cSBram Moolenaar %bw! 892a79ed29SBram Moolenaarendfunc 90f0ab01f6SBram Moolenaar 91f0ab01f6SBram Moolenaar" Test for invoking 'gf' on a ${VAR} variable 92f0ab01f6SBram Moolenaarfunc Test_gf() 93f0ab01f6SBram Moolenaar if has("ebcdic") 94f0ab01f6SBram Moolenaar set isfname=@,240-249,/,.,-,_,+,,,$,:,~,{,} 95f0ab01f6SBram Moolenaar else 96f0ab01f6SBram Moolenaar set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} 97f0ab01f6SBram Moolenaar endif 98f0ab01f6SBram Moolenaar 99f0ab01f6SBram Moolenaar call writefile(["Test for gf command"], "Xtest1") 100f0ab01f6SBram Moolenaar if has("unix") 101f0ab01f6SBram Moolenaar call writefile([" ${CDIR}/Xtest1"], "Xtestgf") 102f0ab01f6SBram Moolenaar else 103f0ab01f6SBram Moolenaar call writefile([" $TDIR/Xtest1"], "Xtestgf") 104f0ab01f6SBram Moolenaar endif 105f0ab01f6SBram Moolenaar new Xtestgf 106f0ab01f6SBram Moolenaar if has("unix") 107f0ab01f6SBram Moolenaar let $CDIR = "." 108f0ab01f6SBram Moolenaar /CDIR 109f0ab01f6SBram Moolenaar else 110f0ab01f6SBram Moolenaar if has("amiga") 111f0ab01f6SBram Moolenaar let $TDIR = "/testdir" 112f0ab01f6SBram Moolenaar else 113f0ab01f6SBram Moolenaar let $TDIR = "." 114f0ab01f6SBram Moolenaar endif 115f0ab01f6SBram Moolenaar /TDIR 116f0ab01f6SBram Moolenaar endif 117f0ab01f6SBram Moolenaar 118f0ab01f6SBram Moolenaar normal gf 119f0ab01f6SBram Moolenaar call assert_equal('Xtest1', fnamemodify(bufname(''), ":t")) 120f0ab01f6SBram Moolenaar close! 121f0ab01f6SBram Moolenaar 122f0ab01f6SBram Moolenaar call delete('Xtest1') 123f0ab01f6SBram Moolenaar call delete('Xtestgf') 124f0ab01f6SBram Moolenaarendfunc 1250208b6b7SBram Moolenaar 1260208b6b7SBram Moolenaarfunc Test_gf_visual() 127efd5d8a9SBram Moolenaar call writefile(['one', 'two', 'three', 'four'], "Xtest_gf_visual") 1280208b6b7SBram Moolenaar new 1290208b6b7SBram Moolenaar call setline(1, 'XXXtest_gf_visualXXX') 1300208b6b7SBram Moolenaar set hidden 1310208b6b7SBram Moolenaar 1320208b6b7SBram Moolenaar " Visually select Xtest_gf_visual and use gf to go to that file 1330208b6b7SBram Moolenaar norm! ttvtXgf 1340208b6b7SBram Moolenaar call assert_equal('Xtest_gf_visual', bufname('%')) 1350208b6b7SBram Moolenaar 136bdd2c290SBram Moolenaar " if multiple lines are selected, then gf should fail 137bdd2c290SBram Moolenaar call setline(1, ["one", "two"]) 138bdd2c290SBram Moolenaar normal VGgf 139bdd2c290SBram Moolenaar call assert_equal('Xtest_gf_visual', @%) 140bdd2c290SBram Moolenaar 141efd5d8a9SBram Moolenaar " following line number is used for gF 142efd5d8a9SBram Moolenaar bwipe! 143efd5d8a9SBram Moolenaar new 144efd5d8a9SBram Moolenaar call setline(1, 'XXXtest_gf_visual:3XXX') 145efd5d8a9SBram Moolenaar norm! 0ttvt:gF 146efd5d8a9SBram Moolenaar call assert_equal('Xtest_gf_visual', bufname('%')) 147efd5d8a9SBram Moolenaar call assert_equal(3, getcurpos()[1]) 148efd5d8a9SBram Moolenaar 149efd5d8a9SBram Moolenaar " line number in visual area is used for file name 150efd5d8a9SBram Moolenaar if has('unix') 151efd5d8a9SBram Moolenaar bwipe! 152efd5d8a9SBram Moolenaar call writefile([], "Xtest_gf_visual:3") 153efd5d8a9SBram Moolenaar new 154efd5d8a9SBram Moolenaar call setline(1, 'XXXtest_gf_visual:3XXX') 155efd5d8a9SBram Moolenaar norm! 0ttvtXgF 156efd5d8a9SBram Moolenaar call assert_equal('Xtest_gf_visual:3', bufname('%')) 157efd5d8a9SBram Moolenaar call delete('Xtest_gf_visual:3') 158efd5d8a9SBram Moolenaar endif 159efd5d8a9SBram Moolenaar 1600208b6b7SBram Moolenaar bwipe! 1610208b6b7SBram Moolenaar call delete('Xtest_gf_visual') 1620208b6b7SBram Moolenaar set hidden& 1630208b6b7SBram Moolenaarendfunc 1640208b6b7SBram Moolenaar 1650208b6b7SBram Moolenaarfunc Test_gf_error() 1660208b6b7SBram Moolenaar new 1670208b6b7SBram Moolenaar call assert_fails('normal gf', 'E446:') 1680208b6b7SBram Moolenaar call assert_fails('normal gF', 'E446:') 1690208b6b7SBram Moolenaar call setline(1, '/doesnotexist') 1700208b6b7SBram Moolenaar call assert_fails('normal gf', 'E447:') 1710208b6b7SBram Moolenaar call assert_fails('normal gF', 'E447:') 1721671f448SBram Moolenaar call assert_fails('normal [f', 'E447:') 1731671f448SBram Moolenaar 1741671f448SBram Moolenaar " gf is not allowed when text is locked 1751671f448SBram Moolenaar au InsertCharPre <buffer> normal! gF<CR> 176ff06f283SBram Moolenaar let caught_e565 = 0 1771671f448SBram Moolenaar try 1781671f448SBram Moolenaar call feedkeys("ix\<esc>", 'xt') 179ff06f283SBram Moolenaar catch /^Vim\%((\a\+)\)\=:E565/ " catch E565 180ff06f283SBram Moolenaar let caught_e565 = 1 1811671f448SBram Moolenaar endtry 182ff06f283SBram Moolenaar call assert_equal(1, caught_e565) 1831671f448SBram Moolenaar au! InsertCharPre 1841671f448SBram Moolenaar 1850208b6b7SBram Moolenaar bwipe! 186*d1ad99b6SBram Moolenaar 187*d1ad99b6SBram Moolenaar " gf is not allowed when buffer is locked 188*d1ad99b6SBram Moolenaar new 189*d1ad99b6SBram Moolenaar augroup Test_gf 190*d1ad99b6SBram Moolenaar au! 191*d1ad99b6SBram Moolenaar au OptionSet diff norm! gf 192*d1ad99b6SBram Moolenaar augroup END 193*d1ad99b6SBram Moolenaar call setline(1, ['Xfile1', 'line2', 'line3', 'line4']) 194*d1ad99b6SBram Moolenaar call test_override('starting', 1) 195*d1ad99b6SBram Moolenaar call assert_fails('diffthis', 'E788:') 196*d1ad99b6SBram Moolenaar call test_override('starting', 0) 197*d1ad99b6SBram Moolenaar augroup Test_gf 198*d1ad99b6SBram Moolenaar au! 199*d1ad99b6SBram Moolenaar augroup END 200*d1ad99b6SBram Moolenaar bw! 2010208b6b7SBram Moolenaarendfunc 2021671f448SBram Moolenaar 203bdd2c290SBram Moolenaar" If a file is not found by 'gf', then 'includeexpr' should be used to locate 204bdd2c290SBram Moolenaar" the file. 205bdd2c290SBram Moolenaarfunc Test_gf_includeexpr() 206bdd2c290SBram Moolenaar new 207bdd2c290SBram Moolenaar let g:Inc_fname = '' 208bdd2c290SBram Moolenaar func IncFunc() 209bdd2c290SBram Moolenaar let g:Inc_fname = v:fname 210bdd2c290SBram Moolenaar return v:fname 211bdd2c290SBram Moolenaar endfunc 212bdd2c290SBram Moolenaar setlocal includeexpr=IncFunc() 213bdd2c290SBram Moolenaar call setline(1, 'somefile.java') 214bdd2c290SBram Moolenaar call assert_fails('normal gf', 'E447:') 215bdd2c290SBram Moolenaar call assert_equal('somefile.java', g:Inc_fname) 216bdd2c290SBram Moolenaar close! 217bdd2c290SBram Moolenaar delfunc IncFunc 218bdd2c290SBram Moolenaarendfunc 219bdd2c290SBram Moolenaar 2201671f448SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 221