blob: acb26e0e5e642a0153129cef7149fdd484514e80 [file] [log] [blame]
Bram Moolenaared71ed32019-01-30 22:13:35 +01001" Test findfile() and finddir()
2
Christian Brabandteb380b92025-07-07 20:53:55 +02003import './util/vim9.vim' as v9
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +02004
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +01005let s:files = [ 'Xfinddir1/foo',
6 \ 'Xfinddir1/bar',
7 \ 'Xfinddir1/Xdir2/foo',
8 \ 'Xfinddir1/Xdir2/foobar',
9 \ 'Xfinddir1/Xdir2/Xdir3/bar',
10 \ 'Xfinddir1/Xdir2/Xdir3/barfoo' ]
Bram Moolenaared71ed32019-01-30 22:13:35 +010011
12func CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010013 call mkdir('Xfinddir1/Xdir2/Xdir3/Xdir2', 'p')
Bram Moolenaared71ed32019-01-30 22:13:35 +010014 for f in s:files
15 call writefile([], f)
16 endfor
17endfunc
18
19func CleanFiles()
20 " Safer to delete each file even if it's more verbose
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010021 " than doing a recursive delete('Xfinddir1', 'rf').
Bram Moolenaared71ed32019-01-30 22:13:35 +010022 for f in s:files
23 call delete(f)
24 endfor
25
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010026 call delete('Xfinddir1/Xdir2/Xdir3/Xdir2', 'd')
27 call delete('Xfinddir1/Xdir2/Xdir3', 'd')
28 call delete('Xfinddir1/Xdir2', 'd')
29 call delete('Xfinddir1', 'd')
Bram Moolenaared71ed32019-01-30 22:13:35 +010030endfunc
31
32" Test findfile({name} [, {path} [, {count}]])
Bram Moolenaardc9a0812017-02-23 18:46:50 +010033func Test_findfile()
Bram Moolenaared71ed32019-01-30 22:13:35 +010034 let save_path = &path
35 let save_shellslash = &shellslash
36 let save_dir = getcwd()
37 set shellslash
38 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010039 cd Xfinddir1
Bram Moolenaared71ed32019-01-30 22:13:35 +010040 e Xdir2/foo
41
42 " With ,, in path, findfile() searches in current directory.
43 set path=,,
44 call assert_equal('foo', findfile('foo'))
45 call assert_equal('bar', findfile('bar'))
46 call assert_equal('', findfile('foobar'))
47
48 " Directories should not be found (finddir() finds them).
49 call assert_equal('', findfile('Xdir2'))
50
51 " With . in 'path', findfile() searches relatively to current file.
52 set path=.
53 call assert_equal('Xdir2/foo', findfile('foo'))
54 call assert_equal('', findfile('bar'))
Bram Moolenaara4208962019-08-24 20:50:19 +020055 call assert_equal('Xdir2/foobar', 'foobar'->findfile())
Bram Moolenaared71ed32019-01-30 22:13:35 +010056
57 " Empty {path} 2nd argument is the same as no 2nd argument.
58 call assert_equal('Xdir2/foo', findfile('foo', ''))
59 call assert_equal('', findfile('bar', ''))
60
61 " Test with *
62 call assert_equal('Xdir2/foo', findfile('foo', '*'))
63 call assert_equal('', findfile('bar', '*'))
64 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*/*'))
65 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/*'))
66 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir*/Xdir3'))
67 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '*2/*3'))
68
69 " Test with **
70 call assert_equal('bar', findfile('bar', '**'))
71 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**/Xdir3'))
72 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', 'Xdir2/**'))
73
74 call assert_equal('Xdir2/Xdir3/barfoo', findfile('barfoo', '**2'))
75 call assert_equal('', findfile('barfoo', '**1'))
76 call assert_equal('Xdir2/foobar', findfile('foobar', '**1'))
77
78 " Test with {count} 3rd argument.
79 call assert_equal('bar', findfile('bar', '**', 0))
80 call assert_equal('bar', findfile('bar', '**', 1))
81 call assert_equal('Xdir2/Xdir3/bar', findfile('bar', '**', 2))
82 call assert_equal('', findfile('bar', '**', 3))
83 call assert_equal(['bar', 'Xdir2/Xdir3/bar'], findfile('bar', '**', -1))
84
85 " Test upwards search.
86 cd Xdir2/Xdir3
87 call assert_equal('bar', findfile('bar', ';'))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010088 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', ';'))
89 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', ';', 1))
90 call assert_match('.*/Xfinddir1/foo', findfile('foo', ';', 2))
91 call assert_match('.*/Xfinddir1/foo', findfile('foo', ';', 2))
92 call assert_match('.*/Xfinddir1/Xdir2/foo', findfile('foo', 'Xdir2;', 1))
Bram Moolenaared71ed32019-01-30 22:13:35 +010093 call assert_equal('', findfile('foo', 'Xdir2;', 2))
94
95 " List l should have at least 2 values (possibly more if foo file
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010096 " happens to be found upwards above Xfinddir1).
Bram Moolenaared71ed32019-01-30 22:13:35 +010097 let l = findfile('foo', ';', -1)
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010098 call assert_match('.*/Xfinddir1/Xdir2/foo', l[0])
99 call assert_match('.*/Xfinddir1/foo', l[1])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100100
101 " Test upwards search with stop-directory.
102 cd Xdir2
zeertzjq764526e2024-07-11 22:24:15 +0200103 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3/', -1)
104 call assert_equal(1, len(l))
105 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
106 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3', -1)
107 call assert_equal(1, len(l))
108 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
109 let l = findfile('bar', ';../', -1)
110 call assert_equal(1, len(l))
111 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq1ee74202024-07-12 07:29:14 +0200112 let l = findfile('bar', ';..', -1)
113 call assert_equal(1, len(l))
114 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq764526e2024-07-11 22:24:15 +0200115
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100116 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100117 call assert_equal(1, len(l))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100118 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjqe6ab23b2024-07-11 22:22:26 +0200119 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1)
120 call assert_equal(1, len(l))
121 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq764526e2024-07-11 22:24:15 +0200122 let l = findfile('bar', ';../../', -1)
123 call assert_equal(1, len(l))
124 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
zeertzjq1ee74202024-07-12 07:29:14 +0200125 let l = findfile('bar', ';../..', -1)
126 call assert_equal(1, len(l))
127 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100128
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100129 let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100130 call assert_equal(2, len(l))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100131 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
132 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjqe6ab23b2024-07-11 22:22:26 +0200133 let l = findfile('bar', ';' . save_dir . '/Xfinddir1', -1)
134 call assert_equal(2, len(l))
135 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
136 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjq764526e2024-07-11 22:24:15 +0200137 let l = findfile('bar', ';../../../', -1)
138 call assert_equal(2, len(l))
139 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
140 call assert_match('.*/Xfinddir1/bar', l[1])
zeertzjq1ee74202024-07-12 07:29:14 +0200141 let l = findfile('bar', ';../../..', -1)
142 call assert_equal(2, len(l))
143 call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0])
144 call assert_match('.*/Xfinddir1/bar', l[1])
Bram Moolenaared71ed32019-01-30 22:13:35 +0100145
146 " Test combined downwards and upwards search from Xdir2/.
147 cd ../..
148 call assert_equal('Xdir3/bar', findfile('bar', '**;', 1))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100149 call assert_match('.*/Xfinddir1/bar', findfile('bar', '**;', 2))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100150
151 bwipe!
Bram Moolenaar3503d7c2019-11-09 20:10:17 +0100152 call chdir(save_dir)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100153 call CleanFiles()
154 let &path = save_path
155 let &shellslash = save_shellslash
156endfunc
157
Bram Moolenaar71b13e92019-02-04 21:14:45 +0100158func Test_findfile_error()
159 call assert_fails('call findfile([])', 'E730:')
160 call assert_fails('call findfile("x", [])', 'E730:')
161 call assert_fails('call findfile("x", "", [])', 'E745:')
162 call assert_fails('call findfile("x", "**x")', 'E343:')
163 call assert_fails('call findfile("x", repeat("x", 5000))', 'E854:')
164endfunc
165
Bram Moolenaared71ed32019-01-30 22:13:35 +0100166" Test finddir({name} [, {path} [, {count}]])
167func Test_finddir()
168 let save_path = &path
169 let save_shellslash = &shellslash
170 let save_dir = getcwd()
171 set path=,,
zeertzjqe7b98ab2024-07-11 21:48:09 +0200172 set shellslash
Bram Moolenaared71ed32019-01-30 22:13:35 +0100173 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100174 cd Xfinddir1
Bram Moolenaared71ed32019-01-30 22:13:35 +0100175
176 call assert_equal('Xdir2', finddir('Xdir2'))
Bram Moolenaara4208962019-08-24 20:50:19 +0200177 call assert_equal('', 'Xdir3'->finddir())
Bram Moolenaared71ed32019-01-30 22:13:35 +0100178
179 " Files should not be found (findfile() finds them).
180 call assert_equal('', finddir('foo'))
181
182 call assert_equal('Xdir2', finddir('Xdir2', '**'))
183 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**'))
184
185 call assert_equal('Xdir2', finddir('Xdir2', '**', 1))
186 call assert_equal('Xdir2/Xdir3/Xdir2', finddir('Xdir2', '**', 2))
187 call assert_equal(['Xdir2',
188 \ 'Xdir2/Xdir3/Xdir2'], finddir('Xdir2', '**', -1))
189
190 call assert_equal('Xdir2', finddir('Xdir2', '**1'))
191 call assert_equal('Xdir2', finddir('Xdir2', '**0'))
192 call assert_equal('Xdir2/Xdir3', finddir('Xdir3', '**1'))
193 call assert_equal('', finddir('Xdir3', '**0'))
194
195 " Test upwards dir search.
196 cd Xdir2/Xdir3
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100197 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', ';'))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100198
199 " Test upwards search with stop-directory.
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100200 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', ';' . save_dir . '/'))
201 call assert_equal('', finddir('Xfinddir1', ';' . save_dir . '/Xfinddir1/'))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100202
203 " Test combined downwards and upwards dir search from Xdir2/.
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100204 cd ..
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100205 call assert_match('.*/Xfinddir1', finddir('Xfinddir1', '**;', 1))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100206 call assert_equal('Xdir3/Xdir2', finddir('Xdir2', '**;', 1))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100207 call assert_match('.*/Xfinddir1/Xdir2', finddir('Xdir2', '**;', 2))
Bram Moolenaared71ed32019-01-30 22:13:35 +0100208 call assert_equal('Xdir3', finddir('Xdir3', '**;', 1))
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100209
Bram Moolenaar3503d7c2019-11-09 20:10:17 +0100210 call chdir(save_dir)
Bram Moolenaared71ed32019-01-30 22:13:35 +0100211 call CleanFiles()
212 let &path = save_path
213 let &shellslash = save_shellslash
Bram Moolenaardc9a0812017-02-23 18:46:50 +0100214endfunc
Bram Moolenaar71b13e92019-02-04 21:14:45 +0100215
216func Test_finddir_error()
217 call assert_fails('call finddir([])', 'E730:')
218 call assert_fails('call finddir("x", [])', 'E730:')
219 call assert_fails('call finddir("x", "", [])', 'E745:')
220 call assert_fails('call finddir("x", "**x")', 'E343:')
221 call assert_fails('call finddir("x", repeat("x", 5000))', 'E854:')
222endfunc
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100223
zeertzjqbf595ae2025-02-22 09:13:17 +0100224func Test_findfile_with_suffixesadd()
225 let save_path = &path
226 let save_dir = getcwd()
227 set path=,,
228 call mkdir('Xfinddir1', 'pR')
229 cd Xfinddir1
230
231 call writefile([], 'foo.c', 'D')
232 call writefile([], 'bar.cpp', 'D')
233 call writefile([], 'baz.cc', 'D')
234 call writefile([], 'foo.o', 'D')
235 call writefile([], 'bar.o', 'D')
236 call writefile([], 'baz.o', 'D')
237
238 set suffixesadd=.c,.cpp
239 call assert_equal('foo.c', findfile('foo'))
240 call assert_equal('./foo.c', findfile('./foo'))
241 call assert_equal('bar.cpp', findfile('bar'))
242 call assert_equal('./bar.cpp', findfile('./bar'))
243 call assert_equal('', findfile('baz'))
244 call assert_equal('', findfile('./baz'))
245 set suffixesadd+=.cc
246 call assert_equal('baz.cc', findfile('baz'))
247 call assert_equal('./baz.cc', findfile('./baz'))
248
249 set suffixesadd&
250 call chdir(save_dir)
251 let &path = save_path
252endfunc
253
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100254" Test for the :find, :sfind and :tabfind commands
255func Test_find_cmd()
256 new
257 let save_path = &path
258 let save_dir = getcwd()
259 set path=.,./**/*
260 call CreateFiles()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100261 cd Xfinddir1
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100262
263 " Test for :find
264 find foo
265 call assert_equal('foo', expand('%:.'))
266 2find foo
267 call assert_equal('Xdir2/foo', expand('%:.'))
268 call assert_fails('3find foo', 'E347:')
269
270 " Test for :sfind
271 enew
272 sfind barfoo
273 call assert_equal('Xdir2/Xdir3/barfoo', expand('%:.'))
274 call assert_equal(3, winnr('$'))
275 close
276 call assert_fails('sfind baz', 'E345:')
277 call assert_equal(2, winnr('$'))
278
279 " Test for :tabfind
280 enew
281 tabfind foobar
282 call assert_equal('Xdir2/foobar', expand('%:.'))
283 call assert_equal(2, tabpagenr('$'))
284 tabclose
285 call assert_fails('tabfind baz', 'E345:')
286 call assert_equal(1, tabpagenr('$'))
287
288 call chdir(save_dir)
289 call CleanFiles()
290 let &path = save_path
291 close
Bram Moolenaar2d10cd42020-03-19 14:37:30 +0100292
293 call assert_fails('find', 'E471:')
294 call assert_fails('sfind', 'E471:')
295 call assert_fails('tabfind', 'E471:')
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +0100296endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200297
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200298func Test_find_non_existing_path()
299 new
300 let save_path = &path
301 let save_dir = getcwd()
Bram Moolenaar70e67252022-09-27 19:34:35 +0100302 call mkdir('dir1/dir2', 'pR')
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200303 call writefile([], 'dir1/file.txt')
304 call writefile([], 'dir1/dir2/base.txt')
305 call chdir('dir1/dir2')
306 e base.txt
307 set path=../include
308
309 call assert_fails(':find file.txt', 'E345:')
310
311 call chdir(save_dir)
312 bw!
Christian Brabandt7a4ca322021-07-25 15:08:05 +0200313 let &path = save_path
314endfunc
315
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100316" Test for 'findfunc'
317func Test_findfunc()
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200318 CheckUnix
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100319 call assert_equal('', &findfunc)
320 call writefile(['aFile'], 'Xfindfunc1.c', 'D')
321 call writefile(['bFile'], 'Xfindfunc2.c', 'D')
322 call writefile(['cFile'], 'Xfindfunc3.c', 'D')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200323
324 " basic tests
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100325 func FindFuncBasic(pat, cmdcomplete)
326 let fnames = ['Xfindfunc1.c', 'Xfindfunc2.c', 'Xfindfunc3.c']
327 return fnames->copy()->filter('v:val =~? a:pat')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200328 endfunc
329
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100330 set findfunc=FindFuncBasic
331 find Xfindfunc3
332 call assert_match('Xfindfunc3.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200333 bw!
334 2find Xfind
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100335 call assert_match('Xfindfunc2.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200336 bw!
337 call assert_fails('4find Xfind', 'E347: No more file "Xfind" found in path')
338 call assert_fails('find foobar', 'E345: Can''t find file "foobar" in path')
339
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100340 sfind Xfindfunc2.c
341 call assert_match('Xfindfunc2.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200342 call assert_equal(2, winnr('$'))
343 %bw!
344 call assert_fails('sfind foobar', 'E345: Can''t find file "foobar" in path')
345
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100346 tabfind Xfindfunc3.c
347 call assert_match('Xfindfunc3.c', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200348 call assert_equal(2, tabpagenr())
349 %bw!
350 call assert_fails('tabfind foobar', 'E345: Can''t find file "foobar" in path')
351
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100352 " Test garbage collection
353 call test_garbagecollect_now()
354 find Xfindfunc2
355 call assert_match('Xfindfunc2.c', @%)
356 bw!
357 delfunc FindFuncBasic
358 call test_garbagecollect_now()
359 call assert_fails('find Xfindfunc2', 'E117: Unknown function: FindFuncBasic')
360
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200361 " Buffer-local option
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100362 func GlobalFindFunc(pat, cmdcomplete)
363 return ['global']
364 endfunc
365 func LocalFindFunc(pat, cmdcomplete)
366 return ['local']
367 endfunc
368 set findfunc=GlobalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200369 new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100370 setlocal findfunc=LocalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200371 find xxxx
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100372 call assert_equal('local', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200373 wincmd w
374 find xxxx
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100375 call assert_equal('global', @%)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200376 aboveleft new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100377 call assert_equal("GlobalFindFunc", &findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200378 wincmd k
379 aboveleft new
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100380 call assert_equal("GlobalFindFunc", &findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200381 %bw!
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100382 delfunc GlobalFindFunc
383 delfunc LocalFindFunc
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200384
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100385 " Assign an expression
386 set findfunc=[]
387 call assert_fails('find xxxx', 'E117: Unknown function: []')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200388
389 " Error cases
390
zeertzjq6eda2692024-11-03 09:23:33 +0100391 " Function that doesn't take any arguments
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100392 func FindFuncNoArg()
393 endfunc
394 set findfunc=FindFuncNoArg
395 call assert_fails('find Xfindfunc1.c', 'E118: Too many arguments for function: FindFuncNoArg')
396 delfunc FindFuncNoArg
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200397
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100398 " Syntax error in the function
399 func FindFuncSyntaxError(pat, cmdcomplete)
400 return l
401 endfunc
402 set findfunc=FindFuncSyntaxError
403 call assert_fails('find Xfindfunc1.c', 'E121: Undefined variable: l')
404 delfunc FindFuncSyntaxError
405
406 " Find function throws an error
407 func FindFuncWithThrow(pat, cmdcomplete)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200408 throw 'find error'
409 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100410 set findfunc=FindFuncWithThrow
411 call assert_fails('find Xfindfunc1.c', 'find error')
412 delfunc FindFuncWithThrow
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200413
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100414 " Try using a null function
415 call assert_fails('let &findfunc = test_null_function()', 'E129: Function name required')
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200416
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100417 " Try to create a new window from the find function
418 func FindFuncNewWindow(pat, cmdexpand)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200419 new
420 return ["foo"]
421 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100422 set findfunc=FindFuncNewWindow
423 call assert_fails('find Xfindfunc1.c', 'E565: Not allowed to change text or change window')
424 delfunc FindFuncNewWindow
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200425
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100426 " Try to modify the current buffer from the find function
427 func FindFuncModifyBuf(pat, cmdexpand)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200428 call setline(1, ['abc'])
429 return ["foo"]
430 endfunc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100431 set findfunc=FindFuncModifyBuf
432 call assert_fails('find Xfindfunc1.c', 'E565: Not allowed to change text or change window')
433 delfunc FindFuncModifyBuf
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200434
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100435 " Return the wrong type from the function
436 func FindFuncWrongRet(pat, cmdexpand)
437 return 'foo'
438 endfunc
439 set findfunc=FindFuncWrongRet
440 call assert_fails('find Xfindfunc1.c', "E1514: 'findfunc' did not return a List type")
441 delfunc FindFuncWrongRet
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200442
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100443 set findfunc&
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200444endfunc
445
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100446" Test for using a script-local function for 'findfunc'
447func Test_findfunc_scriptlocal_func()
448 func! s:FindFuncScript(pat, cmdexpand)
449 let g:FindFuncArg = a:pat
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200450 return ['xxx']
451 endfunc
452
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100453 set findfunc=s:FindFuncScript
454 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
455 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200456 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100457 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200458 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100459 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200460 bw!
461
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100462 set findfunc=<SID>FindFuncScript
463 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
464 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200465 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100466 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200467 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100468 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200469 bw!
470
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100471 let &findfunc = 's:FindFuncScript'
472 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200473 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100474 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200475 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100476 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200477 bw!
478
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100479 let &findfunc = '<SID>FindFuncScript'
480 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200481 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100482 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200483 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100484 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200485 bw!
486
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100487 set findfunc=
488 setglobal findfunc=s:FindFuncScript
489 setlocal findfunc=
490 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
491 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
492 call assert_equal('', &l:findfunc)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200493 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100494 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200495 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100496 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200497 bw!
498
499 new | only
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100500 set findfunc=
501 setglobal findfunc=
502 setlocal findfunc=s:FindFuncScript
503 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
504 call assert_equal(expand('<SID>') .. 'FindFuncScript', &l:findfunc)
505 call assert_equal('', &g:findfunc)
506 let g:FindFuncArg = ''
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200507 find abc
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100508 call assert_equal('abc', g:FindFuncArg)
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200509 bw!
510
zeertzjq6eda2692024-11-03 09:23:33 +0100511 new | only
512 set findfunc=
513 setlocal findfunc=NoSuchFunc
514 setglobal findfunc=s:FindFuncScript
515 call assert_equal('NoSuchFunc', &findfunc)
516 call assert_equal('NoSuchFunc', &l:findfunc)
517 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
518 new | only
519 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
520 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
521 call assert_equal('', &l:findfunc)
522 let g:FindFuncArg = ''
523 find abc
524 call assert_equal('abc', g:FindFuncArg)
525 bw!
526
527 new | only
528 set findfunc=
529 setlocal findfunc=NoSuchFunc
530 set findfunc=s:FindFuncScript
531 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
532 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
533 call assert_equal('', &l:findfunc)
534 let g:FindFuncArg = ''
535 find abc
536 call assert_equal('abc', g:FindFuncArg)
537 new | only
538 call assert_equal(expand('<SID>') .. 'FindFuncScript', &findfunc)
539 call assert_equal(expand('<SID>') .. 'FindFuncScript', &g:findfunc)
540 call assert_equal('', &l:findfunc)
541 let g:FindFuncArg = ''
542 find abc
543 call assert_equal('abc', g:FindFuncArg)
544 bw!
545
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100546 set findfunc=
547 delfunc s:FindFuncScript
Yegappan Lakshmananaeb1c972024-10-22 23:42:20 +0200548endfunc
549
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100550" Test for expanding the argument to the :find command using 'findfunc'
551func Test_findfunc_expand_arg()
552 let s:fnames = ['Xfindfunc1.c', 'Xfindfunc2.c', 'Xfindfunc3.c']
zeertzjq20e045f2024-10-28 22:05:26 +0100553
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100554 " 'findfunc' that accepts a regular expression
555 func FindFuncRegexp(pat, cmdcomplete)
556 return s:fnames->copy()->filter('v:val =~? a:pat')
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200557 endfunc
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200558
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100559 " 'findfunc' that accepts a glob
560 func FindFuncGlob(pat_arg, cmdcomplete)
561 let pat = glob2regpat(a:cmdcomplete ? $'*{a:pat_arg}*' : a:pat_arg)
zeertzjq20e045f2024-10-28 22:05:26 +0100562 return s:fnames->copy()->filter('v:val =~? pat')
563 endfunc
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200564
zeertzjq20e045f2024-10-28 22:05:26 +0100565 for regexp in [v:true, v:false]
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100566 let &findfunc = regexp ? 'FindFuncRegexp' : 'FindFuncGlob'
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200567
zeertzjq20e045f2024-10-28 22:05:26 +0100568 call feedkeys(":find \<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100569 call assert_equal('"find Xfindfunc1.c', @:)
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200570
zeertzjq20e045f2024-10-28 22:05:26 +0100571 call feedkeys(":find Xfind\<Tab>\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100572 call assert_equal('"find Xfindfunc2.c', @:)
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200573
zeertzjq20e045f2024-10-28 22:05:26 +0100574 call assert_equal(s:fnames, getcompletion('find ', 'cmdline'))
575 call assert_equal(s:fnames, getcompletion('find Xfind', 'cmdline'))
576
577 let pat = regexp ? 'X.*1\.c' : 'X*1.c'
578 call feedkeys($":find {pat}\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100579 call assert_equal('"find Xfindfunc1.c', @:)
580 call assert_equal(['Xfindfunc1.c'], getcompletion($'find {pat}', 'cmdline'))
zeertzjq20e045f2024-10-28 22:05:26 +0100581
582 call feedkeys(":find 3\<Tab>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100583 call assert_equal('"find Xfindfunc3.c', @:)
584 call assert_equal(['Xfindfunc3.c'], getcompletion($'find 3', 'cmdline'))
zeertzjq20e045f2024-10-28 22:05:26 +0100585
586 call feedkeys(":find Xfind\<C-A>\<C-B>\"\<CR>", "xt")
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100587 call assert_equal('"find Xfindfunc1.c Xfindfunc2.c Xfindfunc3.c', @:)
zeertzjq20e045f2024-10-28 22:05:26 +0100588
589 call feedkeys(":find abc\<Tab>\<C-B>\"\<CR>", "xt")
590 call assert_equal('"find abc', @:)
591 call assert_equal([], getcompletion('find abc', 'cmdline'))
592 endfor
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200593
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100594 set findfunc&
595 delfunc! FindFuncRegexp
596 delfunc! FindFuncGlob
zeertzjq20e045f2024-10-28 22:05:26 +0100597 unlet s:fnames
Yegappan Lakshmanan2f6efac2024-10-23 21:06:10 +0200598endfunc
599
Yegappan Lakshmanana13f3a42024-11-02 18:40:10 +0100600" Test for different ways of setting the 'findfunc' option
601func Test_findfunc_callback()
602 new
603 func FindFunc1(pat, cmdexpand)
604 let g:FindFunc1Args = [a:pat, a:cmdexpand]
605 return ['findfunc1']
606 endfunc
607
608 let lines =<< trim END
609 #" Test for using a function name
610 LET &findfunc = 'g:FindFunc1'
611 LET g:FindFunc1Args = []
612 find abc1
613 call assert_equal(['abc1', v:false], g:FindFunc1Args)
614
615 #" Test for using a function()
616 set findfunc=function('g:FindFunc1')
617 LET g:FindFunc1Args = []
618 find abc2
619 call assert_equal(['abc2', v:false], g:FindFunc1Args)
620
621 #" Using a funcref variable to set 'findfunc'
622 VAR Fn = function('g:FindFunc1')
623 LET &findfunc = Fn
624 LET g:FindFunc1Args = []
625 find abc3
626 call assert_equal(['abc3', v:false], g:FindFunc1Args)
627
628 #" Using a string(funcref_variable) to set 'findfunc'
629 LET Fn = function('g:FindFunc1')
630 LET &findfunc = string(Fn)
631 LET g:FindFunc1Args = []
632 find abc4
633 call assert_equal(['abc4', v:false], g:FindFunc1Args)
634
635 #" Test for using a funcref()
636 set findfunc=funcref('g:FindFunc1')
637 LET g:FindFunc1Args = []
638 find abc5
639 call assert_equal(['abc5', v:false], g:FindFunc1Args)
640
641 #" Using a funcref variable to set 'findfunc'
642 LET Fn = funcref('g:FindFunc1')
643 LET &findfunc = Fn
644 LET g:FindFunc1Args = []
645 find abc6
646 call assert_equal(['abc6', v:false], g:FindFunc1Args)
647
648 #" Using a string(funcref_variable) to set 'findfunc'
649 LET Fn = funcref('g:FindFunc1')
650 LET &findfunc = string(Fn)
651 LET g:FindFunc1Args = []
652 find abc7
653 call assert_equal(['abc7', v:false], g:FindFunc1Args)
654
655 #" Test for using a lambda function using set
656 VAR optval = "LSTART pat, cmdexpand LMIDDLE FindFunc1(pat, cmdexpand) LEND"
657 LET optval = substitute(optval, ' ', '\\ ', 'g')
658 exe "set findfunc=" .. optval
659 LET g:FindFunc1Args = []
660 find abc8
661 call assert_equal(['abc8', v:false], g:FindFunc1Args)
662
663 #" Test for using a lambda function using LET
664 LET &findfunc = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
665 LET g:FindFunc1Args = []
666 find abc9
667 call assert_equal(['abc9', v:false], g:FindFunc1Args)
668
669 #" Set 'findfunc' to a string(lambda expression)
670 LET &findfunc = 'LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND'
671 LET g:FindFunc1Args = []
672 find abc10
673 call assert_equal(['abc10', v:false], g:FindFunc1Args)
674
675 #" Set 'findfunc' to a variable with a lambda expression
676 VAR Lambda = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
677 LET &findfunc = Lambda
678 LET g:FindFunc1Args = []
679 find abc11
680 call assert_equal(['abc11', v:false], g:FindFunc1Args)
681
682 #" Set 'findfunc' to a string(variable with a lambda expression)
683 LET Lambda = LSTART pat, _ LMIDDLE FindFunc1(pat, v:false) LEND
684 LET &findfunc = string(Lambda)
685 LET g:FindFunc1Args = []
686 find abc12
687 call assert_equal(['abc12', v:false], g:FindFunc1Args)
688
689 #" Try to use 'findfunc' after the function is deleted
690 func g:TmpFindFunc(pat, cmdexpand)
691 let g:TmpFindFunc1Args = [a:pat, a:cmdexpand]
692 endfunc
693 LET &findfunc = function('g:TmpFindFunc')
694 delfunc g:TmpFindFunc
695 call test_garbagecollect_now()
696 LET g:TmpFindFunc1Args = []
697 call assert_fails('find abc13', 'E117:')
698 call assert_equal([], g:TmpFindFunc1Args)
699
700 #" Try to use a function with three arguments for 'findfunc'
701 func g:TmpFindFunc2(x, y, z)
702 let g:TmpFindFunc2Args = [a:x, a:y, a:z]
703 endfunc
704 set findfunc=TmpFindFunc2
705 LET g:TmpFindFunc2Args = []
706 call assert_fails('find abc14', 'E119:')
707 call assert_equal([], g:TmpFindFunc2Args)
708 delfunc TmpFindFunc2
709
710 #" Try to use a function with zero arguments for 'findfunc'
711 func g:TmpFindFunc3()
712 let g:TmpFindFunc3Called = v:true
713 endfunc
714 set findfunc=TmpFindFunc3
715 LET g:TmpFindFunc3Called = v:false
716 call assert_fails('find abc15', 'E118:')
717 call assert_equal(v:false, g:TmpFindFunc3Called)
718 delfunc TmpFindFunc3
719
720 #" Try to use a lambda function with three arguments for 'findfunc'
721 LET &findfunc = LSTART a, b, c LMIDDLE FindFunc1(a, v:false) LEND
722 LET g:FindFunc1Args = []
723 call assert_fails('find abc16', 'E119:')
724 call assert_equal([], g:FindFunc1Args)
725
726 #" Test for clearing the 'findfunc' option
727 set findfunc=''
728 set findfunc&
729 call assert_fails("set findfunc=function('abc')", "E700:")
730 call assert_fails("set findfunc=funcref('abc')", "E700:")
731
732 #" set 'findfunc' to a non-existing function
733 LET &findfunc = function('g:FindFunc1')
734 call assert_fails("set findfunc=function('NonExistingFunc')", 'E700:')
735 call assert_fails("LET &findfunc = function('NonExistingFunc')", 'E700:')
736 LET g:FindFunc1Args = []
737 find abc17
738 call assert_equal(['abc17', v:false], g:FindFunc1Args)
739 END
740 call v9.CheckTransLegacySuccess(lines)
741
742 " Test for using a script-local function name
743 func s:FindFunc2(pat, cmdexpand)
744 let g:FindFunc2Args = [a:pat, a:cmdexpand]
745 return ['findfunc2']
746 endfunc
747 set findfunc=s:FindFunc2
748 let g:FindFunc2Args = []
749 find abc18
750 call assert_equal(['abc18', v:false], g:FindFunc2Args)
751
752 let &findfunc = 's:FindFunc2'
753 let g:FindFunc2Args = []
754 find abc19
755 call assert_equal(['abc19', v:false], g:FindFunc2Args)
756 delfunc s:FindFunc2
757
758 " Using Vim9 lambda expression in legacy context should fail
759 set findfunc=(pat,\ cmdexpand)\ =>\ FindFunc1(pat,\ v:false)
760 let g:FindFunc1Args = []
761 call assert_fails('find abc20', 'E117:')
762 call assert_equal([], g:FindFunc1Args)
763
764 " set 'findfunc' to a partial with dict.
765 func SetFindFunc()
766 let operator = {'execute': function('FindFuncExecute')}
767 let &findfunc = operator.execute
768 endfunc
769 func FindFuncExecute(pat, cmdexpand) dict
770 return ['findfuncexecute']
771 endfunc
772 call SetFindFunc()
773 call test_garbagecollect_now()
774 set findfunc=
775 delfunc SetFindFunc
776 delfunc FindFuncExecute
777
778 func FindFunc2(pat, cmdexpand)
779 let g:FindFunc2Args = [a:pat, a:cmdexpand]
780 return ['findfunc2']
781 endfunc
782
783 " Vim9 tests
784 let lines =<< trim END
785 vim9script
786
787 def g:Vim9findFunc(pat: string, cmdexpand: bool): list<string>
788 g:FindFunc1Args = [pat, cmdexpand]
789 return ['vim9findfunc']
790 enddef
791
792 # Test for using a def function with findfunc
793 set findfunc=function('g:Vim9findFunc')
794 g:FindFunc1Args = []
795 find abc21
796 assert_equal(['abc21', false], g:FindFunc1Args)
797
798 # Test for using a global function name
799 &findfunc = g:FindFunc2
800 g:FindFunc2Args = []
801 find abc22
802 assert_equal(['abc22', false], g:FindFunc2Args)
803 bw!
804
805 # Test for using a script-local function name
806 def LocalFindFunc(pat: string, cmdexpand: bool): list<string>
807 g:LocalFindFuncArgs = [pat, cmdexpand]
808 return ['localfindfunc']
809 enddef
810 &findfunc = LocalFindFunc
811 g:LocalFindFuncArgs = []
812 find abc23
813 assert_equal(['abc23', false], g:LocalFindFuncArgs)
814 bw!
815 END
816 call v9.CheckScriptSuccess(lines)
817
818 " setting 'findfunc' to a script local function outside of a script context
819 " should fail
820 let cleanup =<< trim END
821 call writefile([execute('messages')], 'Xtest.out')
822 qall
823 END
824 call writefile(cleanup, 'Xverify.vim', 'D')
825 call RunVim([], [], "-c \"set findfunc=s:abc\" -S Xverify.vim")
826 call assert_match('E81: Using <SID> not in a', readfile('Xtest.out')[0])
827 call delete('Xtest.out')
828
829 " cleanup
830 set findfunc&
831 delfunc FindFunc1
832 delfunc FindFunc2
833 unlet g:FindFunc1Args g:FindFunc2Args
834 %bw!
835endfunc
836
837
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200838" vim: shiftwidth=2 sts=2 expandtab