Skip to content

Commit ed71ed3

Browse files
committed
patch 8.1.0852: findfile() and finddir() are not properly tested
Problem: findfile() and finddir() are not properly tested. Solution: Extend the test and add more. (Dominique Pelle, closes #3880)
1 parent 8d4ce56 commit ed71ed3

2 files changed

Lines changed: 166 additions & 20 deletions

File tree

src/testdir/test_findfile.vim

Lines changed: 164 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,169 @@
1-
" Test for findfile()
2-
"
1+
" Test findfile() and finddir()
2+
3+
let 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+
10+
func CreateFiles()
11+
call mkdir('Xdir1/Xdir2/Xdir3/Xdir2', 'p')
12+
for f in s:files
13+
call writefile([], f)
14+
endfor
15+
endfunc
16+
17+
func 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')
28+
endfunc
29+
30+
" Test findfile({name} [, {path} [, {count}]])
331
func Test_findfile()
4-
new
5-
let cwd=getcwd()
6-
cd ..
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
120+
endfunc
121+
122+
" Test finddir({name} [, {path} [, {count}]])
123+
func 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/'))
7157

8-
" Tests may be run from a shadow directory, so an extra cd needs to be done to
9-
" get above src/
10-
if fnamemodify(getcwd(), ':t') != 'src'
11-
cd ../..
12-
else
13-
cd ..
14-
endif
15-
set ssl
16-
17-
call assert_equal('src/testdir/test_findfile.vim', findfile('test_findfile.vim','src/test*'))
18-
exe "cd" cwd
158+
" Test combined downwards and upwards dir search from Xdir2/.
19159
cd ..
20-
call assert_equal('testdir/test_findfile.vim', findfile('test_findfile.vim','test*'))
21-
call assert_equal('testdir/test_findfile.vim', findfile('test_findfile.vim','testdir'))
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))
22164

23-
exe "cd" cwd
24-
q!
165+
exe 'cd ' . save_dir
166+
call CleanFiles()
167+
let &path = save_path
168+
let &shellslash = save_shellslash
25169
endfunc

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,8 @@ static char *(features[]) =
783783

784784
static int included_patches[] =
785785
{ /* Add new patch number below this line */
786+
/**/
787+
852,
786788
/**/
787789
851,
788790
/**/

0 commit comments

Comments
 (0)