1" Test findfile() and finddir() 2 3let s:files = [ 'Xdir1/foo', 4 \ 'Xdir1/bar', 5 \ 'Xdir1/Xdir2/foo', 6 \ 'Xdir1/Xdir2/foobar', 7 \ 'Xdir1/Xdir2/Xdir3/bar', 8 \ 'Xdir1/Xdir2/Xdir3/barfoo' ] 9 10func CreateFiles() 11 call mkdir('Xdir1/Xdir2/Xdir3/Xdir2', 'p') 12 for f in s:files 13 call writefile([], f) 14 endfor 15endfunc 16 17func CleanFiles() 18 " Safer to delete each file even if it's more verbose 19 " than doing a recursive delete('Xdir1', 'rf'). 20 for f in s:files 21 call delete(f) 22 endfor 23 24 call delete('Xdir1/Xdir2/Xdir3/Xdir2', 'd') 25 call delete('Xdir1/Xdir2/Xdir3', 'd') 26 call delete('Xdir1/Xdir2', 'd') 27 call delete('Xdir1', 'd') 28endfunc 29 30" Test findfile({name} [, {path} [, {count}]]) 31func Test_findfile() 32 let save_path = &path 33 let save_shellslash = &shellslash 34 let save_dir = getcwd() 35 set shellslash 36 call CreateFiles() 37 cd Xdir1 38 e Xdir2/foo 39 40 " With ,, in path, findfile() searches in current directory. 41 set path=,, 42 call assert_equal('foo', findfile('foo')) 43 call assert_equal('bar', findfile('bar')) 44 call assert_equal('', findfile('foobar')) 45 46 " Directories should not be found (finddir() finds them). 47 call assert_equal('', findfile('Xdir2')) 48 49 " With . in 'path', findfile() searches relatively to current file. 50 set path=. 51 call assert_equal('Xdir2/foo', findfile('foo')) 52 call assert_equal('', findfile('bar')) 53 call assert_equal('Xdir2/foobar', findfile('foobar')) 54 55 " Empty {path} 2nd argument is the same as no 2nd argument. 56 call assert_equal('Xdir2/foo', findfile('foo', '')) 57 call assert_equal('', findfile('bar', '')) 58 59 " Test with * 60 call assert_equal('Xdir2/foo', findfile('foo', '*')) 61 call assert_equal('', findfile('bar', '*')) 62 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*/*')) 63 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/*')) 64 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir*/Xdir3')) 65 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*2/*3')) 66 67 " Test with ** 68 call assert_equal('bar', findfile('bar', '**')) 69 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**/Xdir3')) 70 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/**')) 71 72 call assert_equal('Xdir2/Xdir3/barfoo', findfile('barfoo', '**2')) 73 call assert_equal('', findfile('barfoo', '**1')) 74 call assert_equal('Xdir2/foobar', findfile('foobar', '**1')) 75 76 " Test with {count} 3rd argument. 77 call assert_equal('bar', findfile('bar', '**', 0)) 78 call assert_equal('bar', findfile('bar', '**', 1)) 79 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**', 2)) 80 call assert_equal('', findfile('bar', '**', 3)) 81 call assert_equal(['bar', 'Xdir2/Xdir3/bar'], findfile('bar', '**', -1)) 82 83 " Test upwards search. 84 cd Xdir2/Xdir3 85 call assert_equal('bar', findfile('bar', ';')) 86 call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', ';')) 87 call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', ';', 1)) 88 call assert_match('.*/Xdir1/foo', findfile('foo', ';', 2)) 89 call assert_match('.*/Xdir1/foo', findfile('foo', ';', 2)) 90 call assert_match('.*/Xdir1/Xdir2/foo', findfile('foo', 'Xdir2;', 1)) 91 call assert_equal('', findfile('foo', 'Xdir2;', 2)) 92 93 " List l should have at least 2 values (possibly more if foo file 94 " happens to be found upwards above Xdir1). 95 let l = findfile('foo', ';', -1) 96 call assert_match('.*/Xdir1/Xdir2/foo', l[0]) 97 call assert_match('.*/Xdir1/foo', l[1]) 98 99 " Test upwards search with stop-directory. 100 cd Xdir2 101 let l = findfile('bar', ';' . save_dir . '/Xdir1/Xdir2/', -1) 102 call assert_equal(1, len(l)) 103 call assert_match('.*/Xdir1/Xdir2/Xdir3/bar', l[0]) 104 105 let l = findfile('bar', ';' . save_dir . '/Xdir1/', -1) 106 call assert_equal(2, len(l)) 107 call assert_match('.*/Xdir1/Xdir2/Xdir3/bar', l[0]) 108 call assert_match('.*/Xdir1/bar', l[1]) 109 110 " Test combined downwards and upwards search from Xdir2/. 111 cd ../.. 112 call assert_equal('Xdir3/bar', findfile('bar', '**;', 1)) 113 call assert_match('.*/Xdir1/bar', findfile('bar', '**;', 2)) 114 115 bwipe! 116 exe 'cd ' . save_dir 117 call CleanFiles() 118 let &path = save_path 119 let &shellslash = save_shellslash 120endfunc 121 122" Test finddir({name} [, {path} [, {count}]]) 123func Test_finddir() 124 let save_path = &path 125 let save_shellslash = &shellslash 126 let save_dir = getcwd() 127 set path=,, 128 call CreateFiles() 129 cd Xdir1 130 131 call assert_equal('Xdir2', finddir('Xdir2')) 132 call assert_equal('', finddir('Xdir3')) 133 134 " Files should not be found (findfile() finds them). 135 call assert_equal('', finddir('foo')) 136 137 call assert_equal('Xdir2', finddir('Xdir2', '**')) 138 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**')) 139 140 call assert_equal('Xdir2', finddir('Xdir2', '**', 1)) 141 call assert_equal('Xdir2/Xdir3/Xdir2', finddir('Xdir2', '**', 2)) 142 call assert_equal(['Xdir2', 143 \ 'Xdir2/Xdir3/Xdir2'], finddir('Xdir2', '**', -1)) 144 145 call assert_equal('Xdir2', finddir('Xdir2', '**1')) 146 call assert_equal('Xdir2', finddir('Xdir2', '**0')) 147 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**1')) 148 call assert_equal('', finddir('Xdir3', '**0')) 149 150 " Test upwards dir search. 151 cd Xdir2/Xdir3 152 call assert_match('.*/Xdir1', finddir('Xdir1', ';')) 153 154 " Test upwards search with stop-directory. 155 call assert_match('.*/Xdir1', finddir('Xdir1', ';' . save_dir . '/')) 156 call assert_equal('', finddir('Xdir1', ';' . save_dir . '/Xdir1/')) 157 158 " Test combined downwards and upwards dir search from Xdir2/. 159 cd .. 160 call assert_match('.*/Xdir1', finddir('Xdir1', '**;', 1)) 161 call assert_equal('Xdir3/Xdir2', finddir('Xdir2', '**;', 1)) 162 call assert_match('.*/Xdir1/Xdir2', finddir('Xdir2', '**;', 2)) 163 call assert_equal('Xdir3', finddir('Xdir3', '**;', 1)) 164 165 exe 'cd ' . save_dir 166 call CleanFiles() 167 let &path = save_path 168 let &shellslash = save_shellslash 169endfunc 170