1209d3874SBram Moolenaar" Tests for the 'find' command completion. 2209d3874SBram Moolenaar 3209d3874SBram Moolenaar" Do all the tests in a separate window to avoid E211 when we recursively 4209d3874SBram Moolenaar" delete the Xfind directory during cleanup 5209d3874SBram Moolenaarfunc Test_find_complete() 6209d3874SBram Moolenaar set belloff=all 7209d3874SBram Moolenaar 8209d3874SBram Moolenaar " On windows a stale "Xfind" directory may exist, remove it so that 9209d3874SBram Moolenaar " we start from a clean state. 10209d3874SBram Moolenaar call delete("Xfind", "rf") 11209d3874SBram Moolenaar let cwd = getcwd() 12209d3874SBram Moolenaar let test_out = cwd . '/test.out' 13209d3874SBram Moolenaar call mkdir('Xfind') 14209d3874SBram Moolenaar cd Xfind 15209d3874SBram Moolenaar 16209d3874SBram Moolenaar new 17209d3874SBram Moolenaar set path= 182d10cd47SBram Moolenaar call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:') 19209d3874SBram Moolenaar close 20209d3874SBram Moolenaar 21209d3874SBram Moolenaar new 22209d3874SBram Moolenaar set path=. 232d10cd47SBram Moolenaar call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:') 24209d3874SBram Moolenaar close 25209d3874SBram Moolenaar 26209d3874SBram Moolenaar new 27209d3874SBram Moolenaar set path=.,, 282d10cd47SBram Moolenaar call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:') 29209d3874SBram Moolenaar close 30209d3874SBram Moolenaar 31209d3874SBram Moolenaar new 32209d3874SBram Moolenaar set path=./** 332d10cd47SBram Moolenaar call assert_fails('call feedkeys(":find \t\n", "xt")', 'E471:') 34209d3874SBram Moolenaar close 35209d3874SBram Moolenaar 36209d3874SBram Moolenaar " We shouldn't find any file till this point 37209d3874SBram Moolenaar 38209d3874SBram Moolenaar call mkdir('in/path', 'p') 393503d7c9SBram Moolenaar call chdir(cwd) 40209d3874SBram Moolenaar call writefile(['Holy Grail'], 'Xfind/file.txt') 41209d3874SBram Moolenaar call writefile(['Jimmy Hoffa'], 'Xfind/in/file.txt') 42209d3874SBram Moolenaar call writefile(['Another Holy Grail'], 'Xfind/in/stuff.txt') 43209d3874SBram Moolenaar call writefile(['E.T.'], 'Xfind/in/path/file.txt') 44209d3874SBram Moolenaar 45209d3874SBram Moolenaar new 46209d3874SBram Moolenaar set path=Xfind/** 47209d3874SBram Moolenaar call feedkeys(":find file\t\n", "xt") 48209d3874SBram Moolenaar call assert_equal('Holy Grail', getline(1)) 49209d3874SBram Moolenaar call feedkeys(":find file\t\t\n", "xt") 50209d3874SBram Moolenaar call assert_equal('Jimmy Hoffa', getline(1)) 51209d3874SBram Moolenaar call feedkeys(":find file\t\t\t\n", "xt") 52209d3874SBram Moolenaar call assert_equal('E.T.', getline(1)) 53209d3874SBram Moolenaar 54209d3874SBram Moolenaar " Rerun the previous three find completions, using fullpath in 'path' 55209d3874SBram Moolenaar exec "set path=" . cwd . "/Xfind/**" 56209d3874SBram Moolenaar 57209d3874SBram Moolenaar call feedkeys(":find file\t\n", "xt") 58209d3874SBram Moolenaar call assert_equal('Holy Grail', getline(1)) 59209d3874SBram Moolenaar call feedkeys(":find file\t\t\n", "xt") 60209d3874SBram Moolenaar call assert_equal('Jimmy Hoffa', getline(1)) 61209d3874SBram Moolenaar call feedkeys(":find file\t\t\t\n", "xt") 62209d3874SBram Moolenaar call assert_equal('E.T.', getline(1)) 63209d3874SBram Moolenaar 64209d3874SBram Moolenaar " Same steps again, using relative and fullpath items that point to the same 65209d3874SBram Moolenaar " recursive location. 66209d3874SBram Moolenaar " This is to test that there are no duplicates in the completion list. 67209d3874SBram Moolenaar set path+=Xfind/** 68209d3874SBram Moolenaar call feedkeys(":find file\t\n", "xt") 69209d3874SBram Moolenaar call assert_equal('Holy Grail', getline(1)) 70209d3874SBram Moolenaar call feedkeys(":find file\t\t\n", "xt") 71209d3874SBram Moolenaar call assert_equal('Jimmy Hoffa', getline(1)) 72209d3874SBram Moolenaar call feedkeys(":find file\t\t\t\n", "xt") 73209d3874SBram Moolenaar call assert_equal('E.T.', getline(1)) 74209d3874SBram Moolenaar call feedkeys(":find file\t\t\n", "xt") 75209d3874SBram Moolenaar 76209d3874SBram Moolenaar " Test find completion for directory of current buffer, which at this point 77209d3874SBram Moolenaar " is Xfind/in/file.txt. 78209d3874SBram Moolenaar set path=. 79209d3874SBram Moolenaar call feedkeys(":find st\t\n", "xt") 80209d3874SBram Moolenaar call assert_equal('Another Holy Grail', getline(1)) 81209d3874SBram Moolenaar 82209d3874SBram Moolenaar " Test find completion for empty path item ",," which is the current 83209d3874SBram Moolenaar " directory 84209d3874SBram Moolenaar cd Xfind 85209d3874SBram Moolenaar set path=,, 86209d3874SBram Moolenaar call feedkeys(":find f\t\n", "xt") 87209d3874SBram Moolenaar call assert_equal('Holy Grail', getline(1)) 88209d3874SBram Moolenaar 898a37b032SBram Moolenaar " Test that find completion on directory appends a slash 908a37b032SBram Moolenaar call feedkeys(":find in/pa\tfile.txt\n", "xt") 918a37b032SBram Moolenaar call assert_equal('E.T.', getline(1)) 928a37b032SBram Moolenaar call feedkeys(":find ./i\tstuff.txt\n", "xt") 938a37b032SBram Moolenaar call assert_equal('Another Holy Grail', getline(1)) 948a37b032SBram Moolenaar 95209d3874SBram Moolenaar " Test shortening of 96209d3874SBram Moolenaar " 97209d3874SBram Moolenaar " foo/x/bar/voyager.txt 98209d3874SBram Moolenaar " foo/y/bar/voyager.txt 99209d3874SBram Moolenaar " 100209d3874SBram Moolenaar " When current directory is above foo/ they should be shortened to (in order 101209d3874SBram Moolenaar " of appearance): 102209d3874SBram Moolenaar " 103209d3874SBram Moolenaar " x/bar/voyager.txt 104209d3874SBram Moolenaar " y/bar/voyager.txt 105209d3874SBram Moolenaar call mkdir('foo/x/bar', 'p') 106209d3874SBram Moolenaar call mkdir('foo/y/bar', 'p') 107209d3874SBram Moolenaar call writefile(['Voyager 1'], 'foo/x/bar/voyager.txt') 108209d3874SBram Moolenaar call writefile(['Voyager 2'], 'foo/y/bar/voyager.txt') 109209d3874SBram Moolenaar 110209d3874SBram Moolenaar exec "set path=" . cwd . "/Xfind/**" 111209d3874SBram Moolenaar call feedkeys(":find voyager\t\n", "xt") 112209d3874SBram Moolenaar call assert_equal('Voyager 1', getline(1)) 113209d3874SBram Moolenaar call feedkeys(":find voyager\t\t\n", "xt") 114209d3874SBram Moolenaar call assert_equal('Voyager 2', getline(1)) 115209d3874SBram Moolenaar 116209d3874SBram Moolenaar " 117209d3874SBram Moolenaar " When current directory is .../foo/y/bar they should be shortened to (in 118209d3874SBram Moolenaar " order of appearance): 119209d3874SBram Moolenaar " 120209d3874SBram Moolenaar " ./voyager.txt 121209d3874SBram Moolenaar " x/bar/voyager.txt 122209d3874SBram Moolenaar cd foo/y/bar 123209d3874SBram Moolenaar call feedkeys(":find voyager\t\n", "xt") 124209d3874SBram Moolenaar call assert_equal('Voyager 2', getline(1)) 125209d3874SBram Moolenaar call feedkeys(":find voyager\t\t\n", "xt") 126209d3874SBram Moolenaar call assert_equal('Voyager 1', getline(1)) 127209d3874SBram Moolenaar 128209d3874SBram Moolenaar " Check the opposite too: 129209d3874SBram Moolenaar cd ../../x/bar 130209d3874SBram Moolenaar call feedkeys(":find voyager\t\n", "xt") 131209d3874SBram Moolenaar call assert_equal('Voyager 1', getline(1)) 132209d3874SBram Moolenaar call feedkeys(":find voyager\t\t\n", "xt") 133209d3874SBram Moolenaar call assert_equal('Voyager 2', getline(1)) 134209d3874SBram Moolenaar 135209d3874SBram Moolenaar " Check for correct handling of shorten_fname()'s behavior on windows 1363503d7c9SBram Moolenaar call chdir(cwd .. "/Xfind/in") 137209d3874SBram Moolenaar call feedkeys(":find file\t\n", "xt") 138209d3874SBram Moolenaar call assert_equal('Jimmy Hoffa', getline(1)) 139209d3874SBram Moolenaar 140209d3874SBram Moolenaar " Test for relative to current buffer 'path' item 1413503d7c9SBram Moolenaar call chdir(cwd . "/Xfind/") 142209d3874SBram Moolenaar set path=./path 143209d3874SBram Moolenaar " Open the file where Jimmy Hoffa is found 144209d3874SBram Moolenaar e in/file.txt 145209d3874SBram Moolenaar " Find the file containing 'E.T.' in the Xfind/in/path directory 146209d3874SBram Moolenaar call feedkeys(":find file\t\n", "xt") 147209d3874SBram Moolenaar call assert_equal('E.T.', getline(1)) 148209d3874SBram Moolenaar 149209d3874SBram Moolenaar " Test that completion works when path=.,, 150209d3874SBram Moolenaar set path=.,, 151209d3874SBram Moolenaar " Open Jimmy Hoffa file 152209d3874SBram Moolenaar e in/file.txt 153209d3874SBram Moolenaar call assert_equal('Jimmy Hoffa', getline(1)) 154209d3874SBram Moolenaar 155209d3874SBram Moolenaar " Search for the file containing Holy Grail in same directory as in/path.txt 156209d3874SBram Moolenaar call feedkeys(":find stu\t\n", "xt") 157209d3874SBram Moolenaar call assert_equal('Another Holy Grail', getline(1)) 158209d3874SBram Moolenaar 159209d3874SBram Moolenaar enew | only 1603503d7c9SBram Moolenaar call chdir(cwd) 161209d3874SBram Moolenaar call delete('Xfind', 'rf') 162209d3874SBram Moolenaar set path& 163209d3874SBram Moolenaarendfunc 164*6d91bcb4SBram Moolenaar 165*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 166