neovim/test/old/testdir/test_find_complete.vim
dundargoc af23d17388
test: move oldtests to test directory (#22536)
The new oldtest directory is in test/old/testdir. The reason for this is
that many tests have hardcoded the parent directory name to be
'testdir'.
2023-03-07 11:13:04 +08:00

164 lines
4.9 KiB
VimL

" Tests for the 'find' command completion.
" Do all the tests in a separate window to avoid E211 when we recursively
" delete the Xfind directory during cleanup
func Test_find_complete()
set belloff=all
" On windows a stale "Xfind" directory may exist, remove it so that
" we start from a clean state.
call delete("Xfind", "rf")
let cwd = getcwd()
let test_out = cwd . '/test.out'
call mkdir('Xfind')
cd Xfind
new
set path=
call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
close
new
set path=.
call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
close
new
set path=.,,
call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
close
new
set path=./**
call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
close
" We shouldn't find any file till this point
call mkdir('in/path', 'p')
call chdir(cwd)
call writefile(['Holy Grail'], 'Xfind/file.txt')
call writefile(['Jimmy Hoffa'], 'Xfind/in/file.txt')
call writefile(['Another Holy Grail'], 'Xfind/in/stuff.txt')
call writefile(['E.T.'], 'Xfind/in/path/file.txt')
new
set path=Xfind/**
call feedkeys(":find file\t\n", "xt")
call assert_equal('Holy Grail', getline(1))
call feedkeys(":find file\t\t\n", "xt")
call assert_equal('Jimmy Hoffa', getline(1))
call feedkeys(":find file\t\t\t\n", "xt")
call assert_equal('E.T.', getline(1))
" Rerun the previous three find completions, using fullpath in 'path'
exec "set path=" . cwd . "/Xfind/**"
call feedkeys(":find file\t\n", "xt")
call assert_equal('Holy Grail', getline(1))
call feedkeys(":find file\t\t\n", "xt")
call assert_equal('Jimmy Hoffa', getline(1))
call feedkeys(":find file\t\t\t\n", "xt")
call assert_equal('E.T.', getline(1))
" Same steps again, using relative and fullpath items that point to the same
" recursive location.
" This is to test that there are no duplicates in the completion list.
set path+=Xfind/**
call feedkeys(":find file\t\n", "xt")
call assert_equal('Holy Grail', getline(1))
call feedkeys(":find file\t\t\n", "xt")
call assert_equal('Jimmy Hoffa', getline(1))
call feedkeys(":find file\t\t\t\n", "xt")
call assert_equal('E.T.', getline(1))
call feedkeys(":find file\t\t\n", "xt")
" Test find completion for directory of current buffer, which at this point
" is Xfind/in/file.txt.
set path=.
call feedkeys(":find st\t\n", "xt")
call assert_equal('Another Holy Grail', getline(1))
" Test find completion for empty path item ",," which is the current
" directory
cd Xfind
set path=,,
call feedkeys(":find f\t\n", "xt")
call assert_equal('Holy Grail', getline(1))
" Test that find completion on directory appends a slash
call feedkeys(":find in/pa\tfile.txt\n", "xt")
call assert_equal('E.T.', getline(1))
call feedkeys(":find ./i\tstuff.txt\n", "xt")
call assert_equal('Another Holy Grail', getline(1))
" Test shortening of
"
" foo/x/bar/voyager.txt
" foo/y/bar/voyager.txt
"
" When current directory is above foo/ they should be shortened to (in order
" of appearance):
"
" x/bar/voyager.txt
" y/bar/voyager.txt
call mkdir('foo/x/bar', 'p')
call mkdir('foo/y/bar', 'p')
call writefile(['Voyager 1'], 'foo/x/bar/voyager.txt')
call writefile(['Voyager 2'], 'foo/y/bar/voyager.txt')
exec "set path=" . cwd . "/Xfind/**"
call feedkeys(":find voyager\t\n", "xt")
call assert_equal('Voyager 1', getline(1))
call feedkeys(":find voyager\t\t\n", "xt")
call assert_equal('Voyager 2', getline(1))
"
" When current directory is .../foo/y/bar they should be shortened to (in
" order of appearance):
"
" ./voyager.txt
" x/bar/voyager.txt
cd foo/y/bar
call feedkeys(":find voyager\t\n", "xt")
call assert_equal('Voyager 2', getline(1))
call feedkeys(":find voyager\t\t\n", "xt")
call assert_equal('Voyager 1', getline(1))
" Check the opposite too:
cd ../../x/bar
call feedkeys(":find voyager\t\n", "xt")
call assert_equal('Voyager 1', getline(1))
call feedkeys(":find voyager\t\t\n", "xt")
call assert_equal('Voyager 2', getline(1))
" Check for correct handling of shorten_fname()'s behavior on windows
call chdir(cwd .. "/Xfind/in")
call feedkeys(":find file\t\n", "xt")
call assert_equal('Jimmy Hoffa', getline(1))
" Test for relative to current buffer 'path' item
call chdir(cwd . "/Xfind/")
set path=./path
" Open the file where Jimmy Hoffa is found
e in/file.txt
" Find the file containing 'E.T.' in the Xfind/in/path directory
call feedkeys(":find file\t\n", "xt")
call assert_equal('E.T.', getline(1))
" Test that completion works when path=.,,
set path=.,,
" Open Jimmy Hoffa file
e in/file.txt
call assert_equal('Jimmy Hoffa', getline(1))
" Search for the file containing Holy Grail in same directory as in/path.txt
call feedkeys(":find stu\t\n", "xt")
call assert_equal('Another Holy Grail', getline(1))
enew | only
call chdir(cwd)
call delete('Xfind', 'rf')
set path&
endfunc