blob: a7c3dc26de7777e8234f0966cfe844e929d5465c [file] [log] [blame]
Bram Moolenaared71ed32019-01-30 22:13:35 +01001" Test findfile() and finddir()
2
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +02003source check.vim
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +01004import './vim9.vim' as v9
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +02005
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +01006let s:files = [ 'Xfinddir1/foo',
7 \ 'Xfinddir1/bar',
8 \ 'Xfinddir1/Xdir2/foo',
9 \ 'Xfinddir1/Xdir2/foobar',
10 \ 'Xfinddir1/Xdir2/Xdir3/bar',
11 \ 'Xfinddir1/Xdir2/Xdir3/barfoo' ]
Bram Moolenaared71ed32019-01-30 22:13:35 +010012
13func CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010014 call mkdir('Xfinddir1/Xdir2/Xdir3/Xdir2', 'p')
Bram Moolenaared71ed32019-01-30 22:13:35 +010015 for f in s:files
16 call writefile([], f)
17 endfor
18endfunc
19
20func CleanFiles()
21 " Safer to delete each file even if it's more verbose
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010022 " than doing a recursive delete('Xfinddir1', 'rf').
Bram Moolenaared71ed32019-01-30 22:13:35 +010023 for f in s:files
24 call delete(f)
25 endfor
26
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010027 call delete('Xfinddir1/Xdir2/Xdir3/Xdir2', 'd')
28 call delete('Xfinddir1/Xdir2/Xdir3', 'd')
29 call delete('Xfinddir1/Xdir2', 'd')
30 call delete('Xfinddir1', 'd')
Bram Moolenaared71ed32019-01-30 22:13:35 +010031endfunc
32
33" Test findfile({name} [, {path} [, {count}]])
Bram Moolenaardc9a0812017-02-23 18:46:50 +010034func Test_findfile()
Bram Moolenaared71ed32019-01-30 22:13:35 +010035 let save_path = &path
36 let save_shellslash = &shellslash
37 let save_dir = getcwd()
38 set shellslash
39 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010040 cd Xfinddir1
Bram Moolenaared71ed32019-01-30 22:13:35 +010041 e Xdir2/foo
42
43 " With ,, in path, findfile() searches in current directory.
44 set path=,,
45 call assert_equal('foo', findfile('foo'))
46 call assert_equal('bar', findfile('bar'))
47 call assert_equal('', findfile('foobar'))
48
49 " Directories should not be found (finddir() finds them).
50 call assert_equal('', findfile('Xdir2'))
51
52 " With . in 'path', findfile() searches relatively to current file.
53 set path=.
54 call assert_equal('Xdir2/foo', findfile('foo'))
55 call assert_equal('', findfile('bar'))
Bram Moolenaara4208962019-08-24 20:50:19 +020056 call assert_equal('Xdir2/foobar', 'foobar'->findfile())
Bram Moolenaared71ed32019-01-30 22:13:35 +010057
58 " Empty {path} 2nd argument is the same as no 2nd argument.
59 call assert_equal('Xdir2/foo', findfile('foo', ''))
60 call assert_equal('', findfile('bar', ''))
61
62 " Test with *
63 call assert_equal('Xdir2/foo', findfile('foo', '*'))
64 call assert_equal('', findfile('bar', '*'))
65 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*/*'))
66 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/*'))
67 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir*/Xdir3'))
68 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*2/*3'))
69
70 " Test with **
71 call assert_equal('bar', findfile('bar', '**'))
72 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**/Xdir3'))
73 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/**'))
74
75 call assert_equal('Xdir2/Xdir3/barfoo', findfile('barfoo', '**2'))
76 call assert_equal('', findfile('barfoo', '**1'))
77 call assert_equal('Xdir2/foobar', findfile('foobar', '**1'))
78
79 " Test with {count} 3rd argument.
80 call assert_equal('bar', findfile('bar', '**', 0))
81 call assert_equal('bar', findfile('bar', '**', 1))
82 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**', 2))
83 call assert_equal('', findfile('bar', '**', 3))
84 call assert_equal(['bar', 'Xdir2/Xdir3/bar'], findfile('bar', '**', -1))
85
86 " Test upwards search.
87 cd Xdir2/Xdir3
88 call assert_equal('bar', findfile('bar', ';'))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010089 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', ';'))
90 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', ';', 1))
91 call assert_match('.*/Xfinddir1/foo', findfile('foo', ';', 2))
92 call assert_match('.*/Xfinddir1/foo', findfile('foo', ';', 2))
93 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', 'Xdir2;', 1))
Bram Moolenaared71ed32019-01-30 22:13:35 +010094 call assert_equal('', findfile('foo', 'Xdir2;', 2))
95
96 " List l should have at least 2 values (possibly more if foo file
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010097 " happens to be found upwards above Xfinddir1).
Bram Moolenaared71ed32019-01-30 22:13:35 +010098 let l = findfile('foo', ';', -1)
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010099 call assert_match('.*/Xfinddir1/Xdir2/foo', l[0])
100 call assert_match('.*/Xfinddir1/foo', l[1])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100101
102 " Test upwards search with stop-directory.
103 cd Xdir2
zeertzjq764526e2024-07-11 22:24:15 +0200104 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3/', -1)
105 call assert_equal(1, len(l))
106 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
107 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3', -1)
108 call assert_equal(1, len(l))
109 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
110 let l = findfile('bar', ';../', -1)
111 call assert_equal(1, len(l))
112 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq1ee74202024-07-12 07:29:14 +0200113 let l = findfile('bar', ';..', -1)
114 call assert_equal(1, len(l))
115 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq764526e2024-07-11 22:24:15 +0200116
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100117 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100118 call assert_equal(1, len(l))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100119 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjqe6ab23b2024-07-11 22:22:26 +0200120 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1)
121 call assert_equal(1, len(l))
122 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq764526e2024-07-11 22:24:15 +0200123 let l = findfile('bar', ';../../', -1)
124 call assert_equal(1, len(l))
125 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq1ee74202024-07-12 07:29:14 +0200126 let l = findfile('bar', ';../..', -1)
127 call assert_equal(1, len(l))
128 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100129
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100130 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100131 call assert_equal(2, len(l))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100132 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
133 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjqe6ab23b2024-07-11 22:22:26 +0200134 let l = findfile('bar', ';' . save_dir . '/Xfinddir1', -1)
135 call assert_equal(2, len(l))
136 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
137 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjq764526e2024-07-11 22:24:15 +0200138 let l = findfile('bar', ';../../../', -1)
139 call assert_equal(2, len(l))
140 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
141 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjq1ee74202024-07-12 07:29:14 +0200142 let l = findfile('bar', ';../../..', -1)
143 call assert_equal(2, len(l))
144 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
145 call assert_match('.*/Xfinddir1/bar', l[1])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100146
147 " Test combined downwards and upwards search from Xdir2/.
148 cd ../..
149 call assert_equal('Xdir3/bar', findfile('bar', '**;', 1))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100150 call assert_match('.*/Xfinddir1/bar', findfile('bar', '**;', 2))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100151
152 bwipe!
Bram Moolenaar3503d7c2019-11-09 20:10:17 +0100153 call chdir(save_dir)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100154 call CleanFiles()
155 let &path = save_path
156 let &shellslash = save_shellslash
157endfunc
158
Bram Moolenaar71b13e92019-02-04 21:14:45 +0100159func Test_findfile_error()
160 call assert_fails('call findfile([])', 'E730:')
161 call assert_fails('call findfile("x", [])', 'E730:')
162 call assert_fails('call findfile("x", "", [])', 'E745:')
163 call assert_fails('call findfile("x", "**x")', 'E343:')
164 call assert_fails('call findfile("x", repeat("x", 5000))', 'E854:')
165endfunc
166
Bram Moolenaared71ed32019-01-30 22:13:35 +0100167" Test finddir({name} [, {path} [, {count}]])
168func Test_finddir()
169 let save_path = &path
170 let save_shellslash = &shellslash
171 let save_dir = getcwd()
172 set path=,,
zeertzjqe7b98ab2024-07-11 21:48:09 +0200173 set shellslash
Bram Moolenaared71ed32019-01-30 22:13:35 +0100174 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100175 cd Xfinddir1
Bram Moolenaared71ed32019-01-30 22:13:35 +0100176
177 call assert_equal('Xdir2', finddir('Xdir2'))
Bram Moolenaara4208962019-08-24 20:50:19 +0200178 call assert_equal('', 'Xdir3'->finddir())
Bram Moolenaared71ed32019-01-30 22:13:35 +0100179
180 " Files should not be found (findfile() finds them).
181 call assert_equal('', finddir('foo'))
182
183 call assert_equal('Xdir2', finddir('Xdir2', '**'))
184 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**'))
185
186 call assert_equal('Xdir2', finddir('Xdir2', '**', 1))
187 call assert_equal('Xdir2/Xdir3/Xdir2', finddir('Xdir2', '**', 2))
188 call assert_equal(['Xdir2',
189 \ 'Xdir2/Xdir3/Xdir2'], finddir('Xdir2', '**', -1))
190
191 call assert_equal('Xdir2', finddir('Xdir2', '**1'))
192 call assert_equal('Xdir2', finddir('Xdir2', '**0'))
193 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**1'))
194 call assert_equal('', finddir('Xdir3', '**0'))
195
196 " Test upwards dir search.
197 cd Xdir2/Xdir3
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100198 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', ';'))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100199
200 " Test upwards search with stop-directory.
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100201 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', ';' . save_dir . '/'))
202 call assert_equal('', finddir('Xfinddir1', ';' . save_dir . '/Xfinddir1/'))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100203
204 " Test combined downwards and upwards dir search from Xdir2/.
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100205 cd ..
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100206 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', '**;', 1))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100207 call assert_equal('Xdir3/Xdir2', finddir('Xdir2', '**;', 1))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100208 call assert_match('.*/Xfinddir1/Xdir2', finddir('Xdir2', '**;', 2))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100209 call assert_equal('Xdir3', finddir('Xdir3', '**;', 1))
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100210
Bram Moolenaar3503d7c2019-11-09 20:10:17 +0100211 call chdir(save_dir)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100212 call CleanFiles()
213 let &path = save_path
214 let &shellslash = save_shellslash
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100215endfunc
Bram Moolenaar71b13e92019-02-04 21:14:45 +0100216
217func Test_finddir_error()
218 call assert_fails('call finddir([])', 'E730:')
219 call assert_fails('call finddir("x", [])', 'E730:')
220 call assert_fails('call finddir("x", "", [])', 'E745:')
221 call assert_fails('call finddir("x", "**x")', 'E343:')
222 call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:')
223endfunc
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100224
zeertzjqbf595ae2025-02-22 09:13:17 +0100225func Test_findfile_with_suffixesadd()
226 let save_path = &path
227 let save_dir = getcwd()
228 set path=,,
229 call mkdir('Xfinddir1', 'pR')
230 cd Xfinddir1
231
232 call writefile([], 'foo.c', 'D')
233 call writefile([], 'bar.cpp', 'D')
234 call writefile([], 'baz.cc', 'D')
235 call writefile([], 'foo.o', 'D')
236 call writefile([], 'bar.o', 'D')
237 call writefile([], 'baz.o', 'D')
238
239 set suffixesadd=.c,.cpp
240 call assert_equal('foo.c', findfile('foo'))
241 call assert_equal('./foo.c', findfile('./foo'))
242 call assert_equal('bar.cpp', findfile('bar'))
243 call assert_equal('./bar.cpp', findfile('./bar'))
244 call assert_equal('', findfile('baz'))
245 call assert_equal('', findfile('./baz'))
246 set suffixesadd+=.cc
247 call assert_equal('baz.cc', findfile('baz'))
248 call assert_equal('./baz.cc', findfile('./baz'))
249
250 set suffixesadd&
251 call chdir(save_dir)
252 let &path = save_path
253endfunc
254
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100255" Test for the :find, :sfind and :tabfind commands
256func Test_find_cmd()
257 new
258 let save_path = &path
259 let save_dir = getcwd()
260 set path=.,./**/*
261 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100262 cd Xfinddir1
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100263
264 " Test for :find
265 find foo
266 call assert_equal('foo', expand('%:.'))
267 2find foo
268 call assert_equal('Xdir2/foo', expand('%:.'))
269 call assert_fails('3find foo', 'E347:')
270
271 " Test for :sfind
272 enew
273 sfind barfoo
274 call assert_equal('Xdir2/Xdir3/barfoo', expand('%:.'))
275 call assert_equal(3, winnr('$'))
276 close
277 call assert_fails('sfind baz', 'E345:')
278 call assert_equal(2, winnr('$'))
279
280 " Test for :tabfind
281 enew
282 tabfind foobar
283 call assert_equal('Xdir2/foobar', expand('%:.'))
284 call assert_equal(2, tabpagenr('$'))
285 tabclose
286 call assert_fails('tabfind baz', 'E345:')
287 call assert_equal(1, tabpagenr('$'))
288
289 call chdir(save_dir)
290 call CleanFiles()
291 let &path = save_path
292 close
Bram Moolenaar2d10cd42020-03-19 14:37:30 +0100293
294 call assert_fails('find', 'E471:')
295 call assert_fails('sfind', 'E471:')
296 call assert_fails('tabfind', 'E471:')
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100297endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200298
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200299func Test_find_non_existing_path()
300 new
301 let save_path = &path
302 let save_dir = getcwd()
Bram Moolenaar70e67252022-09-27 19:34:35 +0100303 call mkdir('dir1/dir2', 'pR')
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200304 call writefile([], 'dir1/file.txt')
305 call writefile([], 'dir1/dir2/base.txt')
306 call chdir('dir1/dir2')
307 e base.txt
308 set path=../include
309
310 call assert_fails(':find file.txt', 'E345:')
311
312 call chdir(save_dir)
313 bw!
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200314 let &path = save_path
315endfunc
316
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100317" Test for 'findfunc'
318func Test_findfunc()
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200319 CheckUnix
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100320 call assert_equal('', &findfunc)
321 call writefile(['aFile'], 'Xfindfunc1.c', 'D')
322 call writefile(['bFile'], 'Xfindfunc2.c', 'D')
323 call writefile(['cFile'], 'Xfindfunc3.c', 'D')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200324
325 " basic tests
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100326 func FindFuncBasic(pat, cmdcomplete)
327 let fnames = ['Xfindfunc1.c', 'Xfindfunc2.c', 'Xfindfunc3.c']
328 return fnames->copy()->filter('v:val =~? a:pat')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200329 endfunc
330
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100331 set findfunc=FindFuncBasic
332 find Xfindfunc3
333 call assert_match('Xfindfunc3.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200334 bw!
335 2find Xfind
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100336 call assert_match('Xfindfunc2.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200337 bw!
338 call assert_fails('4find Xfind', 'E347: No more file "Xfind" found in path')
339 call assert_fails('find foobar', 'E345: Can''t find file "foobar" in path')
340
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100341 sfind Xfindfunc2.c
342 call assert_match('Xfindfunc2.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200343 call assert_equal(2, winnr('$'))
344 %bw!
345 call assert_fails('sfind foobar', 'E345: Can''t find file "foobar" in path')
346
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100347 tabfind Xfindfunc3.c
348 call assert_match('Xfindfunc3.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200349 call assert_equal(2, tabpagenr())
350 %bw!
351 call assert_fails('tabfind foobar', 'E345: Can''t find file "foobar" in path')
352
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100353 " Test garbage collection
354 call test_garbagecollect_now()
355 find Xfindfunc2
356 call assert_match('Xfindfunc2.c', @%)
357 bw!
358 delfunc FindFuncBasic
359 call test_garbagecollect_now()
360 call assert_fails('find Xfindfunc2', 'E117: Unknown function: FindFuncBasic')
361
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200362 " Buffer-local option
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100363 func GlobalFindFunc(pat, cmdcomplete)
364 return ['global']
365 endfunc
366 func LocalFindFunc(pat, cmdcomplete)
367 return ['local']
368 endfunc
369 set findfunc=GlobalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200370 new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100371 setlocal findfunc=LocalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200372 find xxxx
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100373 call assert_equal('local', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200374 wincmd w
375 find xxxx
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100376 call assert_equal('global', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200377 aboveleft new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100378 call assert_equal("GlobalFindFunc", &findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200379 wincmd k
380 aboveleft new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100381 call assert_equal("GlobalFindFunc", &findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200382 %bw!
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100383 delfunc GlobalFindFunc
384 delfunc LocalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200385
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100386 " Assign an expression
387 set findfunc=[]
388 call assert_fails('find xxxx', 'E117: Unknown function: []')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200389
390 " Error cases
391
zeertzjq6eda2692024-11-03 09:23:33 +0100392 " Function that doesn't take any arguments
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100393 func FindFuncNoArg()
394 endfunc
395 set findfunc=FindFuncNoArg
396 call assert_fails('find Xfindfunc1.c', 'E118: Too many arguments for function: FindFuncNoArg')
397 delfunc FindFuncNoArg
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200398
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100399 " Syntax error in the function
400 func FindFuncSyntaxError(pat, cmdcomplete)
401 return l
402 endfunc
403 set findfunc=FindFuncSyntaxError
404 call assert_fails('find Xfindfunc1.c', 'E121: Undefined variable: l')
405 delfunc FindFuncSyntaxError
406
407 " Find function throws an error
408 func FindFuncWithThrow(pat, cmdcomplete)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200409 throw 'find error'
410 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100411 set findfunc=FindFuncWithThrow
412 call assert_fails('find Xfindfunc1.c', 'find error')
413 delfunc FindFuncWithThrow
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200414
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100415 " Try using a null function
416 call assert_fails('let &findfunc = test_null_function()', 'E129: Function name required')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200417
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100418 " Try to create a new window from the find function
419 func FindFuncNewWindow(pat, cmdexpand)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200420 new
421 return ["foo"]
422 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100423 set findfunc=FindFuncNewWindow
424 call assert_fails('find Xfindfunc1.c', 'E565: Not allowed to change text or change window')
425 delfunc FindFuncNewWindow
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200426
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100427 " Try to modify the current buffer from the find function
428 func FindFuncModifyBuf(pat, cmdexpand)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200429 call setline(1, ['abc'])
430 return ["foo"]
431 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100432 set findfunc=FindFuncModifyBuf
433 call assert_fails('find Xfindfunc1.c', 'E565: Not allowed to change text or change window')
434 delfunc FindFuncModifyBuf
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200435
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100436 " Return the wrong type from the function
437 func FindFuncWrongRet(pat, cmdexpand)
438 return 'foo'
439 endfunc
440 set findfunc=FindFuncWrongRet
441 call assert_fails('find Xfindfunc1.c', "E1514: 'findfunc' did not return a List type")
442 delfunc FindFuncWrongRet
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200443
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100444 set findfunc&
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200445endfunc
446
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100447" Test for using a script-local function for 'findfunc'
448func Test_findfunc_scriptlocal_func()
449 func! s:FindFuncScript(pat, cmdexpand)
450 let g:FindFuncArg = a:pat
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200451 return ['xxx']
452 endfunc
453
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100454 set findfunc=s:FindFuncScript
455 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
456 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200457 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100458 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200459 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100460 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200461 bw!
462
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100463 set findfunc=<SID>FindFuncScript
464 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
465 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200466 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100467 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200468 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100469 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200470 bw!
471
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100472 let &findfunc = 's:FindFuncScript'
473 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200474 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100475 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200476 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100477 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200478 bw!
479
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100480 let &findfunc = '<SID>FindFuncScript'
481 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200482 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100483 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200484 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100485 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200486 bw!
487
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100488 set findfunc=
489 setglobal findfunc=s:FindFuncScript
490 setlocal findfunc=
491 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
492 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
493 call assert_equal('', &l:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200494 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100495 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200496 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100497 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200498 bw!
499
500 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100501 set findfunc=
502 setglobal findfunc=
503 setlocal findfunc=s:FindFuncScript
504 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
505 call assert_equal(expand('<SID>') .. 'FindFuncScript', &l:findfunc)
506 call assert_equal('', &g:findfunc)
507 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200508 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100509 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200510 bw!
511
zeertzjq6eda2692024-11-03 09:23:33 +0100512 new | only
513 set findfunc=
514 setlocal findfunc=NoSuchFunc
515 setglobal findfunc=s:FindFuncScript
516 call assert_equal('NoSuchFunc', &findfunc)
517 call assert_equal('NoSuchFunc', &l:findfunc)
518 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
519 new | only
520 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
521 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
522 call assert_equal('', &l:findfunc)
523 let g:FindFuncArg = ''
524 find abc
525 call assert_equal('abc', g:FindFuncArg)
526 bw!
527
528 new | only
529 set findfunc=
530 setlocal findfunc=NoSuchFunc
531 set findfunc=s:FindFuncScript
532 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
533 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
534 call assert_equal('', &l:findfunc)
535 let g:FindFuncArg = ''
536 find abc
537 call assert_equal('abc', g:FindFuncArg)
538 new | only
539 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
540 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
541 call assert_equal('', &l:findfunc)
542 let g:FindFuncArg = ''
543 find abc
544 call assert_equal('abc', g:FindFuncArg)
545 bw!
546
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100547 set findfunc=
548 delfunc s:FindFuncScript
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200549endfunc
550
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100551" Test for expanding the argument to the :find command using 'findfunc'
552func Test_findfunc_expand_arg()
553 let s:fnames = ['Xfindfunc1.c', 'Xfindfunc2.c', 'Xfindfunc3.c']
zeertzjq20e045f2024-10-28 22:05:26 +0100554
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100555 " 'findfunc' that accepts a regular expression
556 func FindFuncRegexp(pat, cmdcomplete)
557 return s:fnames->copy()->filter('v:val =~? a:pat')
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200558 endfunc
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200559
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100560 " 'findfunc' that accepts a glob
561 func FindFuncGlob(pat_arg, cmdcomplete)
562 let pat = glob2regpat(a:cmdcomplete ? $'*{a:pat_arg}*' : a:pat_arg)
zeertzjq20e045f2024-10-28 22:05:26 +0100563 return s:fnames->copy()->filter('v:val =~? pat')
564 endfunc
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200565
zeertzjq20e045f2024-10-28 22:05:26 +0100566 for regexp in [v:true, v:false]
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100567 let &findfunc = regexp ? 'FindFuncRegexp' : 'FindFuncGlob'
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200568
zeertzjq20e045f2024-10-28 22:05:26 +0100569 call feedkeys(":find \<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100570 call assert_equal('"find Xfindfunc1.c', @:)
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200571
zeertzjq20e045f2024-10-28 22:05:26 +0100572 call feedkeys(":find Xfind\<Tab>\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100573 call assert_equal('"find Xfindfunc2.c', @:)
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200574
zeertzjq20e045f2024-10-28 22:05:26 +0100575 call assert_equal(s:fnames, getcompletion('find ', 'cmdline'))
576 call assert_equal(s:fnames, getcompletion('find Xfind', 'cmdline'))
577
578 let pat = regexp ? 'X.*1\.c' : 'X*1.c'
579 call feedkeys($":find {pat}\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100580 call assert_equal('"find Xfindfunc1.c', @:)
581 call assert_equal(['Xfindfunc1.c'], getcompletion($'find {pat}', 'cmdline'))
zeertzjq20e045f2024-10-28 22:05:26 +0100582
583 call feedkeys(":find 3\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100584 call assert_equal('"find Xfindfunc3.c', @:)
585 call assert_equal(['Xfindfunc3.c'], getcompletion($'find 3', 'cmdline'))
zeertzjq20e045f2024-10-28 22:05:26 +0100586
587 call feedkeys(":find Xfind\<C-A>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100588 call assert_equal('"find Xfindfunc1.c Xfindfunc2.c Xfindfunc3.c', @:)
zeertzjq20e045f2024-10-28 22:05:26 +0100589
590 call feedkeys(":find abc\<Tab>\<C-B>\"\<CR>", "xt")
591 call assert_equal('"find abc', @:)
592 call assert_equal([], getcompletion('find abc', 'cmdline'))
593 endfor
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200594
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100595 set findfunc&
596 delfunc! FindFuncRegexp
597 delfunc! FindFuncGlob
zeertzjq20e045f2024-10-28 22:05:26 +0100598 unlet s:fnames
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200599endfunc
600
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100601" Test for different ways of setting the 'findfunc' option
602func Test_findfunc_callback()
603 new
604 func FindFunc1(pat, cmdexpand)
605 let g:FindFunc1Args = [a:pat, a:cmdexpand]
606 return ['findfunc1']
607 endfunc
608
609 let lines =<< trim END
610 #" Test for using a function name
611 LET &findfunc = 'g:FindFunc1'
612 LET g:FindFunc1Args = []
613 find abc1
614 call assert_equal(['abc1', v:false], g:FindFunc1Args)
615
616 #" Test for using a function()
617 set findfunc=function('g:FindFunc1')
618 LET g:FindFunc1Args = []
619 find abc2
620 call assert_equal(['abc2', v:false], g:FindFunc1Args)
621
622 #" Using a funcref variable to set 'findfunc'
623 VAR Fn = function('g:FindFunc1')
624 LET &findfunc = Fn
625 LET g:FindFunc1Args = []
626 find abc3
627 call assert_equal(['abc3', v:false], g:FindFunc1Args)
628
629 #" Using a string(funcref_variable) to set 'findfunc'
630 LET Fn = function('g:FindFunc1')
631 LET &findfunc = string(Fn)
632 LET g:FindFunc1Args = []
633 find abc4
634 call assert_equal(['abc4', v:false], g:FindFunc1Args)
635
636 #" Test for using a funcref()
637 set findfunc=funcref('g:FindFunc1')
638 LET g:FindFunc1Args = []
639 find abc5
640 call assert_equal(['abc5', v:false], g:FindFunc1Args)
641
642 #" Using a funcref variable to set 'findfunc'
643 LET Fn = funcref('g:FindFunc1')
644 LET &findfunc = Fn
645 LET g:FindFunc1Args = []
646 find abc6
647 call assert_equal(['abc6', v:false], g:FindFunc1Args)
648
649 #" Using a string(funcref_variable) to set 'findfunc'
650 LET Fn = funcref('g:FindFunc1')
651 LET &findfunc = string(Fn)
652 LET g:FindFunc1Args = []
653 find abc7
654 call assert_equal(['abc7', v:false], g:FindFunc1Args)
655
656 #" Test for using a lambda function using set
657 VAR optval = "LSTART pat, cmdexpand LMIDDLE FindFunc1(pat, cmdexpand) LEND"
658 LET optval = substitute(optval, ' ', '\\ ', 'g')
659 exe "set findfunc=" .. optval
660 LET g:FindFunc1Args = []
661 find abc8
662 call assert_equal(['abc8', v:false], g:FindFunc1Args)
663
664 #" Test for using a lambda function using LET
665 LET &findfunc = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
666 LET g:FindFunc1Args = []
667 find abc9
668 call assert_equal(['abc9', v:false], g:FindFunc1Args)
669
670 #" Set 'findfunc' to a string(lambda expression)
671 LET &findfunc = 'LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND'
672 LET g:FindFunc1Args = []
673 find abc10
674 call assert_equal(['abc10', v:false], g:FindFunc1Args)
675
676 #" Set 'findfunc' to a variable with a lambda expression
677 VAR Lambda = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
678 LET &findfunc = Lambda
679 LET g:FindFunc1Args = []
680 find abc11
681 call assert_equal(['abc11', v:false], g:FindFunc1Args)
682
683 #" Set 'findfunc' to a string(variable with a lambda expression)
684 LET Lambda = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
685 LET &findfunc = string(Lambda)
686 LET g:FindFunc1Args = []
687 find abc12
688 call assert_equal(['abc12', v:false], g:FindFunc1Args)
689
690 #" Try to use 'findfunc' after the function is deleted
691 func g:TmpFindFunc(pat, cmdexpand)
692 let g:TmpFindFunc1Args = [a:pat, a:cmdexpand]
693 endfunc
694 LET &findfunc = function('g:TmpFindFunc')
695 delfunc g:TmpFindFunc
696 call test_garbagecollect_now()
697 LET g:TmpFindFunc1Args = []
698 call assert_fails('find abc13', 'E117:')
699 call assert_equal([], g:TmpFindFunc1Args)
700
701 #" Try to use a function with three arguments for 'findfunc'
702 func g:TmpFindFunc2(x, y, z)
703 let g:TmpFindFunc2Args = [a:x, a:y, a:z]
704 endfunc
705 set findfunc=TmpFindFunc2
706 LET g:TmpFindFunc2Args = []
707 call assert_fails('find abc14', 'E119:')
708 call assert_equal([], g:TmpFindFunc2Args)
709 delfunc TmpFindFunc2
710
711 #" Try to use a function with zero arguments for 'findfunc'
712 func g:TmpFindFunc3()
713 let g:TmpFindFunc3Called = v:true
714 endfunc
715 set findfunc=TmpFindFunc3
716 LET g:TmpFindFunc3Called = v:false
717 call assert_fails('find abc15', 'E118:')
718 call assert_equal(v:false, g:TmpFindFunc3Called)
719 delfunc TmpFindFunc3
720
721 #" Try to use a lambda function with three arguments for 'findfunc'
722 LET &findfunc = LSTART a, b, c LMIDDLE FindFunc1(a, v:false) LEND
723 LET g:FindFunc1Args = []
724 call assert_fails('find abc16', 'E119:')
725 call assert_equal([], g:FindFunc1Args)
726
727 #" Test for clearing the 'findfunc' option
728 set findfunc=''
729 set findfunc&
730 call assert_fails("set findfunc=function('abc')", "E700:")
731 call assert_fails("set findfunc=funcref('abc')", "E700:")
732
733 #" set 'findfunc' to a non-existing function
734 LET &findfunc = function('g:FindFunc1')
735 call assert_fails("set findfunc=function('NonExistingFunc')", 'E700:')
736 call assert_fails("LET &findfunc = function('NonExistingFunc')", 'E700:')
737 LET g:FindFunc1Args = []
738 find abc17
739 call assert_equal(['abc17', v:false], g:FindFunc1Args)
740 END
741 call v9.CheckTransLegacySuccess(lines)
742
743 " Test for using a script-local function name
744 func s:FindFunc2(pat, cmdexpand)
745 let g:FindFunc2Args = [a:pat, a:cmdexpand]
746 return ['findfunc2']
747 endfunc
748 set findfunc=s:FindFunc2
749 let g:FindFunc2Args = []
750 find abc18
751 call assert_equal(['abc18', v:false], g:FindFunc2Args)
752
753 let &findfunc = 's:FindFunc2'
754 let g:FindFunc2Args = []
755 find abc19
756 call assert_equal(['abc19', v:false], g:FindFunc2Args)
757 delfunc s:FindFunc2
758
759 " Using Vim9 lambda expression in legacy context should fail
760 set findfunc=(pat,\ cmdexpand)\ =>\ FindFunc1(pat,\ v:false)
761 let g:FindFunc1Args = []
762 call assert_fails('find abc20', 'E117:')
763 call assert_equal([], g:FindFunc1Args)
764
765 " set 'findfunc' to a partial with dict.
766 func SetFindFunc()
767 let operator = {'execute': function('FindFuncExecute')}
768 let &findfunc = operator.execute
769 endfunc
770 func FindFuncExecute(pat, cmdexpand) dict
771 return ['findfuncexecute']
772 endfunc
773 call SetFindFunc()
774 call test_garbagecollect_now()
775 set findfunc=
776 delfunc SetFindFunc
777 delfunc FindFuncExecute
778
779 func FindFunc2(pat, cmdexpand)
780 let g:FindFunc2Args = [a:pat, a:cmdexpand]
781 return ['findfunc2']
782 endfunc
783
784 " Vim9 tests
785 let lines =<< trim END
786 vim9script
787
788 def g:Vim9findFunc(pat: string, cmdexpand: bool): list<string>
789 g:FindFunc1Args = [pat, cmdexpand]
790 return ['vim9findfunc']
791 enddef
792
793 # Test for using a def function with findfunc
794 set findfunc=function('g:Vim9findFunc')
795 g:FindFunc1Args = []
796 find abc21
797 assert_equal(['abc21', false], g:FindFunc1Args)
798
799 # Test for using a global function name
800 &findfunc = g:FindFunc2
801 g:FindFunc2Args = []
802 find abc22
803 assert_equal(['abc22', false], g:FindFunc2Args)
804 bw!
805
806 # Test for using a script-local function name
807 def LocalFindFunc(pat: string, cmdexpand: bool): list<string>
808 g:LocalFindFuncArgs = [pat, cmdexpand]
809 return ['localfindfunc']
810 enddef
811 &findfunc = LocalFindFunc
812 g:LocalFindFuncArgs = []
813 find abc23
814 assert_equal(['abc23', false], g:LocalFindFuncArgs)
815 bw!
816 END
817 call v9.CheckScriptSuccess(lines)
818
819 " setting 'findfunc' to a script local function outside of a script context
820 " should fail
821 let cleanup =<< trim END
822 call writefile([execute('messages')], 'Xtest.out')
823 qall
824 END
825 call writefile(cleanup, 'Xverify.vim', 'D')
826 call RunVim([], [], "-c \"set findfunc=s:abc\" -S Xverify.vim")
827 call assert_match('E81: Using <SID> not in a', readfile('Xtest.out')[0])
828 call delete('Xtest.out')
829
830 " cleanup
831 set findfunc&
832 delfunc FindFunc1
833 delfunc FindFunc2
834 unlet g:FindFunc1Args g:FindFunc2Args
835 %bw!
836endfunc
837
838
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200839" vim: shiftwidth=2 sts=2 expandtab