xref: /vim-8.2.3635/src/testdir/test_gf.vim (revision d1ad99b6)
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(['one', 'two', 'three', 'four'], "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  " following line number is used for gF
142  bwipe!
143  new
144  call setline(1, 'XXXtest_gf_visual:3XXX')
145  norm! 0ttvt:gF
146  call assert_equal('Xtest_gf_visual', bufname('%'))
147  call assert_equal(3, getcurpos()[1])
148
149  " line number in visual area is used for file name
150  if has('unix')
151    bwipe!
152    call writefile([], "Xtest_gf_visual:3")
153    new
154    call setline(1, 'XXXtest_gf_visual:3XXX')
155    norm! 0ttvtXgF
156    call assert_equal('Xtest_gf_visual:3', bufname('%'))
157  call delete('Xtest_gf_visual:3')
158  endif
159
160  bwipe!
161  call delete('Xtest_gf_visual')
162  set hidden&
163endfunc
164
165func Test_gf_error()
166  new
167  call assert_fails('normal gf', 'E446:')
168  call assert_fails('normal gF', 'E446:')
169  call setline(1, '/doesnotexist')
170  call assert_fails('normal gf', 'E447:')
171  call assert_fails('normal gF', 'E447:')
172  call assert_fails('normal [f', 'E447:')
173
174  " gf is not allowed when text is locked
175  au InsertCharPre <buffer> normal! gF<CR>
176  let caught_e565 = 0
177  try
178    call feedkeys("ix\<esc>", 'xt')
179  catch /^Vim\%((\a\+)\)\=:E565/ " catch E565
180    let caught_e565 = 1
181  endtry
182  call assert_equal(1, caught_e565)
183  au! InsertCharPre
184
185  bwipe!
186
187  " gf is not allowed when buffer is locked
188  new
189  augroup Test_gf
190    au!
191    au OptionSet diff norm! gf
192  augroup END
193  call setline(1, ['Xfile1', 'line2', 'line3', 'line4'])
194  call test_override('starting', 1)
195  call assert_fails('diffthis', 'E788:')
196  call test_override('starting', 0)
197  augroup Test_gf
198    au!
199  augroup END
200  bw!
201endfunc
202
203" If a file is not found by 'gf', then 'includeexpr' should be used to locate
204" the file.
205func Test_gf_includeexpr()
206  new
207  let g:Inc_fname = ''
208  func IncFunc()
209    let g:Inc_fname = v:fname
210    return v:fname
211  endfunc
212  setlocal includeexpr=IncFunc()
213  call setline(1, 'somefile.java')
214  call assert_fails('normal gf', 'E447:')
215  call assert_equal('somefile.java', g:Inc_fname)
216  close!
217  delfunc IncFunc
218endfunc
219
220" vim: shiftwidth=2 sts=2 expandtab
221