neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

test_find_complete.vim (5056B)


      1 " Tests for the 'find' command completion.
      2 
      3 " Do all the tests in a separate window to avoid E211 when we recursively
      4 " delete the Xfind directory during cleanup
      5 func Test_find_complete()
      6  set belloff=all
      7 
      8  " On windows a stale "Xfind" directory may exist, remove it so that
      9  " we start from a clean state.
     10  call delete("Xfind", "rf")
     11  let cwd = getcwd()
     12  let test_out = cwd . '/test.out'
     13  call mkdir('Xfind')
     14  cd Xfind
     15 
     16  new
     17  set path=
     18  call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
     19  close
     20 
     21  new
     22  set path=.
     23  call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
     24  close
     25 
     26  new
     27  set path=.,,
     28  call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
     29  close
     30 
     31  new
     32  set path=./**
     33  call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:')
     34  close
     35 
     36  " We shouldn't find any file till this point
     37 
     38  call mkdir('in/path', 'p')
     39  call chdir(cwd)
     40  call writefile(['Holy Grail'], 'Xfind/file.txt')
     41  call writefile(['Jimmy Hoffa'], 'Xfind/in/file.txt')
     42  call writefile(['Another Holy Grail'], 'Xfind/in/stuff.txt')
     43  call writefile(['E.T.'], 'Xfind/in/path/file.txt')
     44 
     45  new
     46  set path=Xfind/**
     47  call feedkeys(":find file\t\n", "xt")
     48  call assert_equal('Holy Grail', getline(1))
     49  call feedkeys(":find file\t\t\n", "xt")
     50  call assert_equal('Jimmy Hoffa', getline(1))
     51  call feedkeys(":find file\t\t\t\n", "xt")
     52  call assert_equal('E.T.', getline(1))
     53 
     54  " Rerun the previous three find completions, using fullpath in 'path'
     55  exec "set path=" . cwd . "/Xfind/**"
     56 
     57  call feedkeys(":find file\t\n", "xt")
     58  call assert_equal('Holy Grail', getline(1))
     59  call feedkeys(":find file\t\t\n", "xt")
     60  call assert_equal('Jimmy Hoffa', getline(1))
     61  call feedkeys(":find file\t\t\t\n", "xt")
     62  call assert_equal('E.T.', getline(1))
     63 
     64  " Same steps again, using relative and fullpath items that point to the same
     65  " recursive location.
     66  " This is to test that there are no duplicates in the completion list.
     67  set path+=Xfind/**
     68  call feedkeys(":find file\t\n", "xt")
     69  call assert_equal('Holy Grail', getline(1))
     70  call feedkeys(":find file\t\t\n", "xt")
     71  call assert_equal('Jimmy Hoffa', getline(1))
     72  call feedkeys(":find file\t\t\t\n", "xt")
     73  call assert_equal('E.T.', getline(1))
     74  call feedkeys(":find file\t\t\n", "xt")
     75 
     76  " Test find completion for directory of current buffer, which at this point
     77  " is Xfind/in/file.txt.
     78  set path=.
     79  call feedkeys(":find st\t\n", "xt")
     80  call assert_equal('Another Holy Grail', getline(1))
     81 
     82  " Test find completion for empty path item ",," which is the current
     83  " directory
     84  cd Xfind
     85  set path=,,
     86  call feedkeys(":find f\t\n", "xt")
     87  call assert_equal('Holy Grail', getline(1))
     88 
     89  " Test that find completion on directory appends a slash
     90  call feedkeys(":find in/pa\tfile.txt\n", "xt")
     91  call assert_equal('E.T.', getline(1))
     92  call feedkeys(":find ./i\tstuff.txt\n", "xt")
     93  call assert_equal('Another Holy Grail', getline(1))
     94 
     95  " Test shortening of
     96  "
     97  "    foo/x/bar/voyager.txt
     98  "    foo/y/bar/voyager.txt
     99  "
    100  " When current directory is above foo/ they should be shortened to (in order
    101  " of appearance):
    102  "
    103  "    x/bar/voyager.txt
    104  "    y/bar/voyager.txt
    105  call mkdir('foo/x/bar', 'p')
    106  call mkdir('foo/y/bar', 'p')
    107  call writefile(['Voyager 1'], 'foo/x/bar/voyager.txt')
    108  call writefile(['Voyager 2'], 'foo/y/bar/voyager.txt')
    109 
    110  exec "set path=" . cwd . "/Xfind/**"
    111  call feedkeys(":find voyager\t\n", "xt")
    112  call assert_equal('Voyager 1', getline(1))
    113  call feedkeys(":find voyager\t\t\n", "xt")
    114  call assert_equal('Voyager 2', getline(1))
    115 
    116  "
    117  " When current directory is .../foo/y/bar they should be shortened to (in
    118  " order of appearance):
    119  "
    120  "    ./voyager.txt
    121  "    x/bar/voyager.txt
    122  cd foo/y/bar
    123  call feedkeys(":find voyager\t\n", "xt")
    124  call assert_equal('Voyager 2', getline(1))
    125  call feedkeys(":find voyager\t\t\n", "xt")
    126  call assert_equal('Voyager 1', getline(1))
    127 
    128  " Check the opposite too:
    129  cd ../../x/bar
    130  call feedkeys(":find voyager\t\n", "xt")
    131  call assert_equal('Voyager 1', getline(1))
    132  call feedkeys(":find voyager\t\t\n", "xt")
    133  call assert_equal('Voyager 2', getline(1))
    134 
    135  " Check for correct handling of shorten_fname()'s behavior on windows
    136  call chdir(cwd .. "/Xfind/in")
    137  call feedkeys(":find file\t\n", "xt")
    138  call assert_equal('Jimmy Hoffa', getline(1))
    139 
    140  " Test for relative to current buffer 'path' item
    141  call chdir(cwd . "/Xfind/")
    142  set path=./path
    143  " Open the file where Jimmy Hoffa is found
    144  e in/file.txt
    145  " Find the file containing 'E.T.' in the Xfind/in/path directory
    146  call feedkeys(":find file\t\n", "xt")
    147  call assert_equal('E.T.', getline(1))
    148 
    149  " Test that completion works when path=.,,
    150  set path=.,,
    151  " Open Jimmy Hoffa file
    152  e in/file.txt
    153  call assert_equal('Jimmy Hoffa', getline(1))
    154 
    155  " Search for the file containing Holy Grail in same directory as in/path.txt
    156  call feedkeys(":find stu\t\n", "xt")
    157  call assert_equal('Another Holy Grail', getline(1))
    158 
    159  enew | only
    160  call chdir(cwd)
    161  call delete('Xfind', 'rf')
    162  set path&
    163 endfunc