1" Test for the gf and gF (goto file) commands 2 3" This is a test if a URL is recognized by "gf", with the cursor before and 4" after the "://". Also test ":\\". 5func Test_gf_url() 6 enew! 7 call append(0, [ 8 \ "first test for URL://machine.name/tmp/vimtest2a and other text", 9 \ "second test for URL://machine.name/tmp/vimtest2b. And other text", 10 \ "third test for URL:\\\\machine.name\\vimtest2c and other text", 11 \ "fourth test for URL:\\\\machine.name\\tmp\\vimtest2d, and other text", 12 \ "fifth test for URL://machine.name/tmp?q=vim&opt=yes and other text", 13 \ "sixth test for URL://machine.name:1234?q=vim and other text", 14 \ ]) 15 call cursor(1,1) 16 call search("^first") 17 call search("tmp") 18 call assert_equal("URL://machine.name/tmp/vimtest2a", expand("<cfile>")) 19 call search("^second") 20 call search("URL") 21 call assert_equal("URL://machine.name/tmp/vimtest2b", expand("<cfile>")) 22 if has("ebcdic") 23 set isf=@,240-249,/,.,-,_,+,,,$,:,~,\ 24 else 25 set isf=@,48-57,/,.,-,_,+,,,$,~,\ 26 endif 27 call search("^third") 28 call search("name") 29 call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("<cfile>")) 30 call search("^fourth") 31 call search("URL") 32 call assert_equal("URL:\\\\machine.name\\tmp\\vimtest2d", expand("<cfile>")) 33 34 call search("^fifth") 35 call search("URL") 36 call assert_equal("URL://machine.name/tmp?q=vim&opt=yes", expand("<cfile>")) 37 38 call search("^sixth") 39 call search("URL") 40 call assert_equal("URL://machine.name:1234?q=vim", expand("<cfile>")) 41 42 %d 43 call setline(1, "demo://remote_file") 44 wincmd f 45 call assert_equal('demo://remote_file', @%) 46 call assert_equal(2, winnr('$')) 47 close! 48 49 set isf&vim 50 enew! 51endfunc 52 53func Test_gF() 54 new 55 call setline(1, ['111', '222', '333', '444']) 56 w! Xfile 57 close 58 new 59 set isfname-=: 60 call setline(1, ['one', 'Xfile:3', 'three']) 61 2 62 call assert_fails('normal gF', 'E37:') 63 call assert_equal(2, getcurpos()[1]) 64 w! Xfile2 65 normal gF 66 call assert_equal('Xfile', bufname('%')) 67 call assert_equal(3, getcurpos()[1]) 68 69 enew! 70 call setline(1, ['one', 'the Xfile line 2, and more', 'three']) 71 w! Xfile2 72 normal 2GfX 73 normal gF 74 call assert_equal('Xfile', bufname('%')) 75 call assert_equal(2, getcurpos()[1]) 76 77 " jumping to the file/line with CTRL-W_F 78 %bw! 79 edit Xfile1 80 call setline(1, ['one', 'Xfile:4', 'three']) 81 exe "normal 2G\<C-W>F" 82 call assert_equal('Xfile', bufname('%')) 83 call assert_equal(4, getcurpos()[1]) 84 85 set isfname& 86 call delete('Xfile') 87 call delete('Xfile2') 88 %bw! 89endfunc 90 91" Test for invoking 'gf' on a ${VAR} variable 92func Test_gf() 93 if has("ebcdic") 94 set isfname=@,240-249,/,.,-,_,+,,,$,:,~,{,} 95 else 96 set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} 97 endif 98 99 call writefile(["Test for gf command"], "Xtest1") 100 if has("unix") 101 call writefile([" ${CDIR}/Xtest1"], "Xtestgf") 102 else 103 call writefile([" $TDIR/Xtest1"], "Xtestgf") 104 endif 105 new Xtestgf 106 if has("unix") 107 let $CDIR = "." 108 /CDIR 109 else 110 if has("amiga") 111 let $TDIR = "/testdir" 112 else 113 let $TDIR = "." 114 endif 115 /TDIR 116 endif 117 118 normal gf 119 call assert_equal('Xtest1', fnamemodify(bufname(''), ":t")) 120 close! 121 122 call delete('Xtest1') 123 call delete('Xtestgf') 124endfunc 125 126func Test_gf_visual() 127 call writefile([], "Xtest_gf_visual") 128 new 129 call setline(1, 'XXXtest_gf_visualXXX') 130 set hidden 131 132 " Visually select Xtest_gf_visual and use gf to go to that file 133 norm! ttvtXgf 134 call assert_equal('Xtest_gf_visual', bufname('%')) 135 136 " if multiple lines are selected, then gf should fail 137 call setline(1, ["one", "two"]) 138 normal VGgf 139 call assert_equal('Xtest_gf_visual', @%) 140 141 bwipe! 142 call delete('Xtest_gf_visual') 143 set hidden& 144endfunc 145 146func Test_gf_error() 147 new 148 call assert_fails('normal gf', 'E446:') 149 call assert_fails('normal gF', 'E446:') 150 call setline(1, '/doesnotexist') 151 call assert_fails('normal gf', 'E447:') 152 call assert_fails('normal gF', 'E447:') 153 call assert_fails('normal [f', 'E447:') 154 155 " gf is not allowed when text is locked 156 au InsertCharPre <buffer> normal! gF<CR> 157 let caught_e565 = 0 158 try 159 call feedkeys("ix\<esc>", 'xt') 160 catch /^Vim\%((\a\+)\)\=:E565/ " catch E565 161 let caught_e565 = 1 162 endtry 163 call assert_equal(1, caught_e565) 164 au! InsertCharPre 165 166 bwipe! 167endfunc 168 169" If a file is not found by 'gf', then 'includeexpr' should be used to locate 170" the file. 171func Test_gf_includeexpr() 172 new 173 let g:Inc_fname = '' 174 func IncFunc() 175 let g:Inc_fname = v:fname 176 return v:fname 177 endfunc 178 setlocal includeexpr=IncFunc() 179 call setline(1, 'somefile.java') 180 call assert_fails('normal gf', 'E447:') 181 call assert_equal('somefile.java', g:Inc_fname) 182 close! 183 delfunc IncFunc 184endfunc 185 186" vim: shiftwidth=2 sts=2 expandtab 187