diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 08:50:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 08:50:31 +0000 |
commit | aed8ce9da277f5ecffe968b324f242c41c3b752a (patch) | |
tree | d2e538394cb7a8a7c42a4aac6ccf1a8e3256999b /src/testdir/test_gf.vim | |
parent | Initial commit. (diff) | |
download | vim-upstream.tar.xz vim-upstream.zip |
Adding upstream version 2:9.0.1378.upstream/2%9.0.1378upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/testdir/test_gf.vim | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/src/testdir/test_gf.vim b/src/testdir/test_gf.vim new file mode 100644 index 0000000..8317cb5 --- /dev/null +++ b/src/testdir/test_gf.vim @@ -0,0 +1,295 @@ +" Test for the gf and gF (goto file) commands + +" This is a test if a URL is recognized by "gf", with the cursor before and +" after the "://". Also test ":\\". +func Test_gf_url() + enew! + call append(0, [ + \ "first test for URL://machine.name/tmp/vimtest2a and other text", + \ "second test for URL://machine.name/tmp/vimtest2b. And other text", + \ "third test for URL:\\\\machine.name\\vimtest2c and other text", + \ "fourth test for URL:\\\\machine.name\\tmp\\vimtest2d, and other text", + \ "fifth test for URL://machine.name/tmp?q=vim&opt=yes and other text", + \ "sixth test for URL://machine.name:1234?q=vim and other text", + \ ]) + call cursor(1,1) + call search("^first") + call search("tmp") + call assert_equal("URL://machine.name/tmp/vimtest2a", expand("<cfile>")) + call search("^second") + call search("URL") + call assert_equal("URL://machine.name/tmp/vimtest2b", expand("<cfile>")) + set isf=@,48-57,/,.,-,_,+,,,$,~,\ + call search("^third") + call search("name") + call assert_equal("URL:\\\\machine.name\\vimtest2c", expand("<cfile>")) + call search("^fourth") + call search("URL") + call assert_equal("URL:\\\\machine.name\\tmp\\vimtest2d", expand("<cfile>")) + + call search("^fifth") + call search("URL") + call assert_equal("URL://machine.name/tmp?q=vim&opt=yes", expand("<cfile>")) + + call search("^sixth") + call search("URL") + call assert_equal("URL://machine.name:1234?q=vim", expand("<cfile>")) + + %d + call setline(1, "demo://remote_file") + wincmd f + call assert_equal('demo://remote_file', @%) + call assert_equal(2, winnr('$')) + close! + + set isf&vim + enew! +endfunc + +func Test_gF() + new + call setline(1, ['111', '222', '333', '444']) + w! Xgffile + close + new + set isfname-=: + call setline(1, ['one', 'Xgffile:3', 'three']) + 2 + call assert_fails('normal gF', 'E37:') + call assert_equal(2, getcurpos()[1]) + w! Xgffile2 + normal gF + call assert_equal('Xgffile', bufname('%')) + call assert_equal(3, getcurpos()[1]) + + enew! + call setline(1, ['one', 'the Xgffile line 2, and more', 'three']) + w! Xgffile2 + normal 2GfX + normal gF + call assert_equal('Xgffile', bufname('%')) + call assert_equal(2, getcurpos()[1]) + + " jumping to the file/line with CTRL-W_F + %bw! + edit Xfile1 + call setline(1, ['one', 'Xgffile:4', 'three']) + exe "normal 2G\<C-W>F" + call assert_equal('Xgffile', bufname('%')) + call assert_equal(4, getcurpos()[1]) + + set isfname& + call delete('Xgffile') + call delete('Xgffile2') + %bw! +endfunc + +" Test for invoking 'gf' on a ${VAR} variable +func Test_gf() + set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,} + + call writefile(["Test for gf command"], "Xtest1", 'D') + if has("unix") + call writefile([" ${CDIR}/Xtest1"], "Xtestgf", 'D') + else + call writefile([" $TDIR/Xtest1"], "Xtestgf", 'D') + endif + new Xtestgf + if has("unix") + let $CDIR = "." + /CDIR + else + if has("amiga") + let $TDIR = "/testdir" + else + let $TDIR = "." + endif + /TDIR + endif + + normal gf + call assert_equal('Xtest1', fnamemodify(bufname(''), ":t")) + + close! +endfunc + +func Test_gf_visual() + call writefile(['one', 'two', 'three', 'four'], "Xtest_gf_visual", 'D') + new + call setline(1, 'XXXtest_gf_visualXXX') + set hidden + + " Visually select Xtest_gf_visual and use gf to go to that file + norm! ttvtXgf + call assert_equal('Xtest_gf_visual', bufname('%')) + + " if multiple lines are selected, then gf should fail + call setline(1, ["one", "two"]) + normal VGgf + call assert_equal('Xtest_gf_visual', @%) + + " following line number is used for gF + bwipe! + new + call setline(1, 'XXXtest_gf_visual:3XXX') + norm! 0ttvt:gF + call assert_equal('Xtest_gf_visual', bufname('%')) + call assert_equal(3, getcurpos()[1]) + + " do not include the NUL at the end + call writefile(['x'], 'Xvisual', 'D') + let save_enc = &enc + for enc in ['latin1', 'utf-8'] + exe "set enc=" .. enc + new + call setline(1, 'Xvisual') + set nomodified + exe "normal \<C-V>$gf" + call assert_equal('Xvisual', bufname()) + bwipe! + endfor + let &enc = save_enc + + " line number in visual area is used for file name + if has('unix') + bwipe! + call writefile([], "Xtest_gf_visual:3", 'D') + new + call setline(1, 'XXXtest_gf_visual:3XXX') + norm! 0ttvtXgF + call assert_equal('Xtest_gf_visual:3', bufname('%')) + endif + + bwipe! + set hidden& +endfunc + +func Test_gf_error() + new + call assert_fails('normal gf', 'E446:') + call assert_fails('normal gF', 'E446:') + call setline(1, '/doesnotexist') + call assert_fails('normal gf', 'E447:') + call assert_fails('normal gF', 'E447:') + call assert_fails('normal [f', 'E447:') + + " gf is not allowed when text is locked + au InsertCharPre <buffer> normal! gF<CR> + let caught_e565 = 0 + try + call feedkeys("ix\<esc>", 'xt') + catch /^Vim\%((\a\+)\)\=:E565/ " catch E565 + let caught_e565 = 1 + endtry + call assert_equal(1, caught_e565) + au! InsertCharPre + + bwipe! + + " gf is not allowed when buffer is locked + new + augroup Test_gf + au! + au OptionSet diff norm! gf + augroup END + call setline(1, ['Xfile1', 'line2', 'line3', 'line4']) + call test_override('starting', 1) + call assert_fails('diffthis', 'E788:') + call test_override('starting', 0) + augroup Test_gf + au! + augroup END + bw! +endfunc + +" If a file is not found by 'gf', then 'includeexpr' should be used to locate +" the file. +func Test_gf_includeexpr() + new + let g:Inc_fname = '' + func IncFunc() + let g:Inc_fname = v:fname + return v:fname + endfunc + setlocal includeexpr=IncFunc() + call setline(1, 'somefile.java') + call assert_fails('normal gf', 'E447:') + call assert_equal('somefile.java', g:Inc_fname) + close! + delfunc IncFunc +endfunc + +" Test for using a script-local function for 'includeexpr' +func Test_includeexpr_scriptlocal_func() + func! s:IncludeFunc() + let g:IncludeFname = v:fname + return '' + endfunc + set includeexpr=s:IncludeFunc() + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &includeexpr) + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &g:includeexpr) + new | only + call setline(1, 'TestFile1') + let g:IncludeFname = '' + call assert_fails('normal! gf', 'E447:') + call assert_equal('TestFile1', g:IncludeFname) + bw! + set includeexpr=<SID>IncludeFunc() + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &includeexpr) + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &g:includeexpr) + new | only + call setline(1, 'TestFile2') + let g:IncludeFname = '' + call assert_fails('normal! gf', 'E447:') + call assert_equal('TestFile2', g:IncludeFname) + bw! + setlocal includeexpr= + setglobal includeexpr=s:IncludeFunc() + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &g:includeexpr) + call assert_equal('', &includeexpr) + new + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &includeexpr) + call setline(1, 'TestFile3') + let g:IncludeFname = '' + call assert_fails('normal! gf', 'E447:') + call assert_equal('TestFile3', g:IncludeFname) + bw! + setlocal includeexpr= + setglobal includeexpr=<SID>IncludeFunc() + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &g:includeexpr) + call assert_equal('', &includeexpr) + new + call assert_equal(expand('<SID>') .. 'IncludeFunc()', &includeexpr) + call setline(1, 'TestFile4') + let g:IncludeFname = '' + call assert_fails('normal! gf', 'E447:') + call assert_equal('TestFile4', g:IncludeFname) + bw! + set includeexpr& + delfunc s:IncludeFunc + bw! +endfunc + +" Check that expanding directories can handle more than 255 entries. +func Test_gf_subdirs_wildcard() + let cwd = getcwd() + let dir = 'Xtestgf_dir' + call mkdir(dir, 'R') + call chdir(dir) + for i in range(300) + call mkdir(i) + call writefile([], i .. '/' .. i, 'S') + endfor + set path=./** + + new | only + call setline(1, '99') + w! Xtest1 + normal gf + call assert_equal('99', fnamemodify(bufname(''), ":t")) + + call chdir(cwd) + set path& +endfunc + +" vim: shiftwidth=2 sts=2 expandtab |