Mercurial > vim
view src/testdir/test_find_complete.vim @ 32266:769df9d385e0 v9.0.1464
patch 9.0.1464: strace filetype detection is expensive
Commit: https://github.com/vim/vim/commit/6e5a9f948221b52caaaf106079cb3430c4dd7c77
Author: Federico Mengozzi <19249682+fedemengo@users.noreply.github.com>
Date: Mon Apr 17 22:31:38 2023 +0100
patch 9.0.1464: strace filetype detection is expensive
Problem: Strace filetype detection is expensive.
Solution: Match with a cheap pattern first. (Federico Mengozzi,
closes #12220)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 17 Apr 2023 23:45:03 +0200 |
parents | a7a9e8b9af89 |
children |
line wrap: on
line source
" 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', 'R') 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) set path& endfunc " vim: shiftwidth=2 sts=2 expandtab