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 set isfname& 78 call delete('Xfile') 79 call delete('Xfile2') 80 bwipe Xfile 81 bwipe Xfile2 82endfunc 83 84" Test for invoking 'gf' on a ${VAR} variable 85func Test_gf() 86 if has("ebcdic") 87 set isfname=@,240-249,/,.,-,_,+,,,$,:,~,{,} 88 else 89 set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} 90 endif 91 92 call writefile(["Test for gf command"], "Xtest1") 93 if has("unix") 94 call writefile([" ${CDIR}/Xtest1"], "Xtestgf") 95 else 96 call writefile([" $TDIR/Xtest1"], "Xtestgf") 97 endif 98 new Xtestgf 99 if has("unix") 100 let $CDIR = "." 101 /CDIR 102 else 103 if has("amiga") 104 let $TDIR = "/testdir" 105 else 106 let $TDIR = "." 107 endif 108 /TDIR 109 endif 110 111 normal gf 112 call assert_equal('Xtest1', fnamemodify(bufname(''), ":t")) 113 close! 114 115 call delete('Xtest1') 116 call delete('Xtestgf') 117endfunc 118 119func Test_gf_visual() 120 call writefile([], "Xtest_gf_visual") 121 new 122 call setline(1, 'XXXtest_gf_visualXXX') 123 set hidden 124 125 " Visually select Xtest_gf_visual and use gf to go to that file 126 norm! ttvtXgf 127 call assert_equal('Xtest_gf_visual', bufname('%')) 128 129 " if multiple lines are selected, then gf should fail 130 call setline(1, ["one", "two"]) 131 normal VGgf 132 call assert_equal('Xtest_gf_visual', @%) 133 134 bwipe! 135 call delete('Xtest_gf_visual') 136 set hidden& 137endfunc 138 139func Test_gf_error() 140 new 141 call assert_fails('normal gf', 'E446:') 142 call assert_fails('normal gF', 'E446:') 143 call setline(1, '/doesnotexist') 144 call assert_fails('normal gf', 'E447:') 145 call assert_fails('normal gF', 'E447:') 146 call assert_fails('normal [f', 'E447:') 147 148 " gf is not allowed when text is locked 149 au InsertCharPre <buffer> normal! gF<CR> 150 let caught_e565 = 0 151 try 152 call feedkeys("ix\<esc>", 'xt') 153 catch /^Vim\%((\a\+)\)\=:E565/ " catch E565 154 let caught_e565 = 1 155 endtry 156 call assert_equal(1, caught_e565) 157 au! InsertCharPre 158 159 bwipe! 160endfunc 161 162" If a file is not found by 'gf', then 'includeexpr' should be used to locate 163" the file. 164func Test_gf_includeexpr() 165 new 166 let g:Inc_fname = '' 167 func IncFunc() 168 let g:Inc_fname = v:fname 169 return v:fname 170 endfunc 171 setlocal includeexpr=IncFunc() 172 call setline(1, 'somefile.java') 173 call assert_fails('normal gf', 'E447:') 174 call assert_equal('somefile.java', g:Inc_fname) 175 close! 176 delfunc IncFunc 177endfunc 178 179" vim: shiftwidth=2 sts=2 expandtab 180