Mercurial > vim
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 |