comparison src/testdir/test_findfile.vim @ 15689:977a05589b65 v8.1.0852

patch 8.1.0852: findfile() and finddir() are not properly tested commit https://github.com/vim/vim/commit/ed71ed37bcd44bcbfcf59beee1248799de3315ec Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jan 30 22:13:35 2019 +0100 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 https://github.com/vim/vim/issues/3880)
author Bram Moolenaar <Bram@vim.org>
date Wed, 30 Jan 2019 22:15:07 +0100
parents a479b7064550
children 6839f99d2269
comparison
equal deleted inserted replaced
15688:f8fc6ce2563e 15689:977a05589b65
1 " Test for findfile() 1 " Test findfile() and finddir()
2 " 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}]])
3 func Test_findfile() 31 func Test_findfile()
4 new 32 let save_path = &path
5 let cwd=getcwd() 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/'))
157
158 " Test combined downwards and upwards dir search from Xdir2/.
6 cd .. 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))
7 164
8 " Tests may be run from a shadow directory, so an extra cd needs to be done to 165 exe 'cd ' . save_dir
9 " get above src/ 166 call CleanFiles()
10 if fnamemodify(getcwd(), ':t') != 'src' 167 let &path = save_path
11 cd ../.. 168 let &shellslash = save_shellslash
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
19 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'))
22
23 exe "cd" cwd
24 q!
25 endfunc 169 endfunc