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