1ed71ed37SBram Moolenaar" Test findfile() and finddir() 2ed71ed37SBram Moolenaar 3ed71ed37SBram Moolenaarlet s:files = [ 'Xdir1/foo', 4ed71ed37SBram Moolenaar \ 'Xdir1/bar', 5ed71ed37SBram Moolenaar \ 'Xdir1/Xdir2/foo', 6ed71ed37SBram Moolenaar \ 'Xdir1/Xdir2/foobar', 7ed71ed37SBram Moolenaar \ 'Xdir1/Xdir2/Xdir3/bar', 8ed71ed37SBram Moolenaar \ 'Xdir1/Xdir2/Xdir3/barfoo' ] 9ed71ed37SBram Moolenaar 10ed71ed37SBram Moolenaarfunc CreateFiles() 11ed71ed37SBram Moolenaar call mkdir('Xdir1/Xdir2/Xdir3/Xdir2', 'p') 12ed71ed37SBram Moolenaar for f in s:files 13ed71ed37SBram Moolenaar call writefile([], f) 14ed71ed37SBram Moolenaar endfor 15ed71ed37SBram Moolenaarendfunc 16ed71ed37SBram Moolenaar 17ed71ed37SBram Moolenaarfunc CleanFiles() 18ed71ed37SBram Moolenaar " Safer to delete each file even if it's more verbose 19ed71ed37SBram Moolenaar " than doing a recursive delete('Xdir1', 'rf'). 20ed71ed37SBram Moolenaar for f in s:files 21ed71ed37SBram Moolenaar call delete(f) 22ed71ed37SBram Moolenaar endfor 23ed71ed37SBram Moolenaar 24ed71ed37SBram Moolenaar call delete('Xdir1/Xdir2/Xdir3/Xdir2', 'd') 25ed71ed37SBram Moolenaar call delete('Xdir1/Xdir2/Xdir3', 'd') 26ed71ed37SBram Moolenaar call delete('Xdir1/Xdir2', 'd') 27ed71ed37SBram Moolenaar call delete('Xdir1', 'd') 28ed71ed37SBram Moolenaarendfunc 29ed71ed37SBram Moolenaar 30ed71ed37SBram Moolenaar" Test findfile({name} [, {path} [, {count}]]) 31dc9a0817SBram Moolenaarfunc Test_findfile() 32ed71ed37SBram Moolenaar let save_path = &path 33ed71ed37SBram Moolenaar let save_shellslash = &shellslash 34ed71ed37SBram Moolenaar let save_dir = getcwd() 35ed71ed37SBram Moolenaar set shellslash 36ed71ed37SBram Moolenaar call CreateFiles() 37ed71ed37SBram Moolenaar cd Xdir1 38ed71ed37SBram Moolenaar e Xdir2/foo 39dc9a0817SBram Moolenaar 40ed71ed37SBram Moolenaar " With ,, in path, findfile() searches in current directory. 41ed71ed37SBram Moolenaar set path=,, 42ed71ed37SBram Moolenaar call assert_equal('foo', findfile('foo')) 43ed71ed37SBram Moolenaar call assert_equal('bar', findfile('bar')) 44ed71ed37SBram Moolenaar call assert_equal('', findfile('foobar')) 45ed71ed37SBram Moolenaar 46ed71ed37SBram Moolenaar " Directories should not be found (finddir() finds them). 47ed71ed37SBram Moolenaar call assert_equal('', findfile('Xdir2')) 48ed71ed37SBram Moolenaar 49ed71ed37SBram Moolenaar " With . in 'path', findfile() searches relatively to current file. 50ed71ed37SBram Moolenaar set path=. 51ed71ed37SBram Moolenaar call assert_equal('Xdir2/foo', findfile('foo')) 52ed71ed37SBram Moolenaar call assert_equal('', findfile('bar')) 53a4208966SBram Moolenaar call assert_equal('Xdir2/foobar', 'foobar'->findfile()) 54ed71ed37SBram Moolenaar 55ed71ed37SBram Moolenaar " Empty {path} 2nd argument is the same as no 2nd argument. 56ed71ed37SBram Moolenaar call assert_equal('Xdir2/foo', findfile('foo', '')) 57ed71ed37SBram Moolenaar call assert_equal('', findfile('bar', '')) 58ed71ed37SBram Moolenaar 59ed71ed37SBram Moolenaar " Test with * 60ed71ed37SBram Moolenaar call assert_equal('Xdir2/foo', findfile('foo', '*')) 61ed71ed37SBram Moolenaar call assert_equal('', findfile('bar', '*')) 62ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*/*')) 63ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/*')) 64ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir*/Xdir3')) 65ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*2/*3')) 66ed71ed37SBram Moolenaar 67ed71ed37SBram Moolenaar " Test with ** 68ed71ed37SBram Moolenaar call assert_equal('bar', findfile('bar', '**')) 69ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**/Xdir3')) 70ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/**')) 71ed71ed37SBram Moolenaar 72ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/barfoo', findfile('barfoo', '**2')) 73ed71ed37SBram Moolenaar call assert_equal('', findfile('barfoo', '**1')) 74ed71ed37SBram Moolenaar call assert_equal('Xdir2/foobar', findfile('foobar', '**1')) 75ed71ed37SBram Moolenaar 76ed71ed37SBram Moolenaar " Test with {count} 3rd argument. 77ed71ed37SBram Moolenaar call assert_equal('bar', findfile('bar', '**', 0)) 78ed71ed37SBram Moolenaar call assert_equal('bar', findfile('bar', '**', 1)) 79ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**', 2)) 80ed71ed37SBram Moolenaar call assert_equal('', findfile('bar', '**', 3)) 81ed71ed37SBram Moolenaar call assert_equal(['bar', 'Xdir2/Xdir3/bar'], findfile('bar', '**', -1)) 82ed71ed37SBram Moolenaar 83ed71ed37SBram Moolenaar " Test upwards search. 84ed71ed37SBram Moolenaar cd Xdir2/Xdir3 85ed71ed37SBram Moolenaar call assert_equal('bar', findfile('bar', ';')) 86ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', ';')) 87ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', ';', 1)) 88ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/foo', findfile('foo', ';', 2)) 89ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/foo', findfile('foo', ';', 2)) 90ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', 'Xdir2;', 1)) 91ed71ed37SBram Moolenaar call assert_equal('', findfile('foo', 'Xdir2;', 2)) 92ed71ed37SBram Moolenaar 93ed71ed37SBram Moolenaar " List l should have at least 2 values (possibly more if foo file 94ed71ed37SBram Moolenaar " happens to be found upwards above Xdir1). 95ed71ed37SBram Moolenaar let l = findfile('foo', ';', -1) 96ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/foo', l[0]) 97ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/foo', l[1]) 98ed71ed37SBram Moolenaar 99ed71ed37SBram Moolenaar " Test upwards search with stop-directory. 100ed71ed37SBram Moolenaar cd Xdir2 101ed71ed37SBram Moolenaar let l = findfile('bar', ';' . save_dir . '/Xdir1/Xdir2/', -1) 102ed71ed37SBram Moolenaar call assert_equal(1, len(l)) 103ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/Xdir3/bar', l[0]) 104ed71ed37SBram Moolenaar 105ed71ed37SBram Moolenaar let l = findfile('bar', ';' . save_dir . '/Xdir1/', -1) 106ed71ed37SBram Moolenaar call assert_equal(2, len(l)) 107ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2/Xdir3/bar', l[0]) 108ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/bar', l[1]) 109ed71ed37SBram Moolenaar 110ed71ed37SBram Moolenaar " Test combined downwards and upwards search from Xdir2/. 111dc9a0817SBram Moolenaar cd ../.. 112ed71ed37SBram Moolenaar call assert_equal('Xdir3/bar', findfile('bar', '**;', 1)) 113ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/bar', findfile('bar', '**;', 2)) 114dc9a0817SBram Moolenaar 115ed71ed37SBram Moolenaar bwipe! 1163503d7c9SBram Moolenaar call chdir(save_dir) 117ed71ed37SBram Moolenaar call CleanFiles() 118ed71ed37SBram Moolenaar let &path = save_path 119ed71ed37SBram Moolenaar let &shellslash = save_shellslash 120ed71ed37SBram Moolenaarendfunc 121dc9a0817SBram Moolenaar 12271b13e92SBram Moolenaarfunc Test_findfile_error() 12371b13e92SBram Moolenaar call assert_fails('call findfile([])', 'E730:') 12471b13e92SBram Moolenaar call assert_fails('call findfile("x", [])', 'E730:') 12571b13e92SBram Moolenaar call assert_fails('call findfile("x", "", [])', 'E745:') 12671b13e92SBram Moolenaar call assert_fails('call findfile("x", "**x")', 'E343:') 12771b13e92SBram Moolenaar call assert_fails('call findfile("x", repeat("x", 5000))', 'E854:') 12871b13e92SBram Moolenaarendfunc 12971b13e92SBram Moolenaar 130ed71ed37SBram Moolenaar" Test finddir({name} [, {path} [, {count}]]) 131ed71ed37SBram Moolenaarfunc Test_finddir() 132ed71ed37SBram Moolenaar let save_path = &path 133ed71ed37SBram Moolenaar let save_shellslash = &shellslash 134ed71ed37SBram Moolenaar let save_dir = getcwd() 135ed71ed37SBram Moolenaar set path=,, 136ed71ed37SBram Moolenaar call CreateFiles() 137ed71ed37SBram Moolenaar cd Xdir1 138ed71ed37SBram Moolenaar 139ed71ed37SBram Moolenaar call assert_equal('Xdir2', finddir('Xdir2')) 140a4208966SBram Moolenaar call assert_equal('', 'Xdir3'->finddir()) 141ed71ed37SBram Moolenaar 142ed71ed37SBram Moolenaar " Files should not be found (findfile() finds them). 143ed71ed37SBram Moolenaar call assert_equal('', finddir('foo')) 144ed71ed37SBram Moolenaar 145ed71ed37SBram Moolenaar call assert_equal('Xdir2', finddir('Xdir2', '**')) 146ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**')) 147ed71ed37SBram Moolenaar 148ed71ed37SBram Moolenaar call assert_equal('Xdir2', finddir('Xdir2', '**', 1)) 149ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3/Xdir2', finddir('Xdir2', '**', 2)) 150ed71ed37SBram Moolenaar call assert_equal(['Xdir2', 151ed71ed37SBram Moolenaar \ 'Xdir2/Xdir3/Xdir2'], finddir('Xdir2', '**', -1)) 152ed71ed37SBram Moolenaar 153ed71ed37SBram Moolenaar call assert_equal('Xdir2', finddir('Xdir2', '**1')) 154ed71ed37SBram Moolenaar call assert_equal('Xdir2', finddir('Xdir2', '**0')) 155ed71ed37SBram Moolenaar call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**1')) 156ed71ed37SBram Moolenaar call assert_equal('', finddir('Xdir3', '**0')) 157ed71ed37SBram Moolenaar 158ed71ed37SBram Moolenaar " Test upwards dir search. 159ed71ed37SBram Moolenaar cd Xdir2/Xdir3 160ed71ed37SBram Moolenaar call assert_match('.*/Xdir1', finddir('Xdir1', ';')) 161ed71ed37SBram Moolenaar 162ed71ed37SBram Moolenaar " Test upwards search with stop-directory. 163ed71ed37SBram Moolenaar call assert_match('.*/Xdir1', finddir('Xdir1', ';' . save_dir . '/')) 164ed71ed37SBram Moolenaar call assert_equal('', finddir('Xdir1', ';' . save_dir . '/Xdir1/')) 165ed71ed37SBram Moolenaar 166ed71ed37SBram Moolenaar " Test combined downwards and upwards dir search from Xdir2/. 167ed71ed37SBram Moolenaar cd .. 168ed71ed37SBram Moolenaar call assert_match('.*/Xdir1', finddir('Xdir1', '**;', 1)) 169ed71ed37SBram Moolenaar call assert_equal('Xdir3/Xdir2', finddir('Xdir2', '**;', 1)) 170ed71ed37SBram Moolenaar call assert_match('.*/Xdir1/Xdir2', finddir('Xdir2', '**;', 2)) 171ed71ed37SBram Moolenaar call assert_equal('Xdir3', finddir('Xdir3', '**;', 1)) 172ed71ed37SBram Moolenaar 1733503d7c9SBram Moolenaar call chdir(save_dir) 174ed71ed37SBram Moolenaar call CleanFiles() 175ed71ed37SBram Moolenaar let &path = save_path 176ed71ed37SBram Moolenaar let &shellslash = save_shellslash 177dc9a0817SBram Moolenaarendfunc 17871b13e92SBram Moolenaar 17971b13e92SBram Moolenaarfunc Test_finddir_error() 18071b13e92SBram Moolenaar call assert_fails('call finddir([])', 'E730:') 18171b13e92SBram Moolenaar call assert_fails('call finddir("x", [])', 'E730:') 18271b13e92SBram Moolenaar call assert_fails('call finddir("x", "", [])', 'E745:') 18371b13e92SBram Moolenaar call assert_fails('call finddir("x", "**x")', 'E343:') 18471b13e92SBram Moolenaar call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:') 18571b13e92SBram Moolenaarendfunc 186bc2b71d4SBram Moolenaar 187bc2b71d4SBram Moolenaar" Test for the :find, :sfind and :tabfind commands 188bc2b71d4SBram Moolenaarfunc Test_find_cmd() 189bc2b71d4SBram Moolenaar new 190bc2b71d4SBram Moolenaar let save_path = &path 191bc2b71d4SBram Moolenaar let save_dir = getcwd() 192bc2b71d4SBram Moolenaar set path=.,./**/* 193bc2b71d4SBram Moolenaar call CreateFiles() 194bc2b71d4SBram Moolenaar cd Xdir1 195bc2b71d4SBram Moolenaar 196bc2b71d4SBram Moolenaar " Test for :find 197bc2b71d4SBram Moolenaar find foo 198bc2b71d4SBram Moolenaar call assert_equal('foo', expand('%:.')) 199bc2b71d4SBram Moolenaar 2find foo 200bc2b71d4SBram Moolenaar call assert_equal('Xdir2/foo', expand('%:.')) 201bc2b71d4SBram Moolenaar call assert_fails('3find foo', 'E347:') 202bc2b71d4SBram Moolenaar 203bc2b71d4SBram Moolenaar " Test for :sfind 204bc2b71d4SBram Moolenaar enew 205bc2b71d4SBram Moolenaar sfind barfoo 206bc2b71d4SBram Moolenaar call assert_equal('Xdir2/Xdir3/barfoo', expand('%:.')) 207bc2b71d4SBram Moolenaar call assert_equal(3, winnr('$')) 208bc2b71d4SBram Moolenaar close 209bc2b71d4SBram Moolenaar call assert_fails('sfind baz', 'E345:') 210bc2b71d4SBram Moolenaar call assert_equal(2, winnr('$')) 211bc2b71d4SBram Moolenaar 212bc2b71d4SBram Moolenaar " Test for :tabfind 213bc2b71d4SBram Moolenaar enew 214bc2b71d4SBram Moolenaar tabfind foobar 215bc2b71d4SBram Moolenaar call assert_equal('Xdir2/foobar', expand('%:.')) 216bc2b71d4SBram Moolenaar call assert_equal(2, tabpagenr('$')) 217bc2b71d4SBram Moolenaar tabclose 218bc2b71d4SBram Moolenaar call assert_fails('tabfind baz', 'E345:') 219bc2b71d4SBram Moolenaar call assert_equal(1, tabpagenr('$')) 220bc2b71d4SBram Moolenaar 221bc2b71d4SBram Moolenaar call chdir(save_dir) 222bc2b71d4SBram Moolenaar call CleanFiles() 223bc2b71d4SBram Moolenaar let &path = save_path 224bc2b71d4SBram Moolenaar close 2252d10cd47SBram Moolenaar 2262d10cd47SBram Moolenaar call assert_fails('find', 'E471:') 2272d10cd47SBram Moolenaar call assert_fails('sfind', 'E471:') 2282d10cd47SBram Moolenaar call assert_fails('tabfind', 'E471:') 229bc2b71d4SBram Moolenaarendfunc 2306d91bcb4SBram Moolenaar 231*7a4ca321SChristian Brabandtfunc Test_find_non_existing_path() 232*7a4ca321SChristian Brabandt new 233*7a4ca321SChristian Brabandt let save_path = &path 234*7a4ca321SChristian Brabandt let save_dir = getcwd() 235*7a4ca321SChristian Brabandt call mkdir('dir1/dir2', 'p') 236*7a4ca321SChristian Brabandt call writefile([], 'dir1/file.txt') 237*7a4ca321SChristian Brabandt call writefile([], 'dir1/dir2/base.txt') 238*7a4ca321SChristian Brabandt call chdir('dir1/dir2') 239*7a4ca321SChristian Brabandt e base.txt 240*7a4ca321SChristian Brabandt set path=../include 241*7a4ca321SChristian Brabandt 242*7a4ca321SChristian Brabandt call assert_fails(':find file.txt', 'E345:') 243*7a4ca321SChristian Brabandt 244*7a4ca321SChristian Brabandt call chdir(save_dir) 245*7a4ca321SChristian Brabandt bw! 246*7a4ca321SChristian Brabandt call delete('dir1/dir2/base.txt', 'rf') 247*7a4ca321SChristian Brabandt call delete('dir1/dir2', 'rf') 248*7a4ca321SChristian Brabandt call delete('dir1/file.txt', 'rf') 249*7a4ca321SChristian Brabandt call delete('dir1', 'rf') 250*7a4ca321SChristian Brabandt let &path = save_path 251*7a4ca321SChristian Brabandtendfunc 252*7a4ca321SChristian Brabandt 2536d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 254