xref: /vim-8.2.3635/src/testdir/test_gf.vim (revision bdd2c290)
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