blob: d36467996f13d92299839159ff141c27337d22b0 [file] [log] [blame]
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +02001" Test various aspects of the Vim9 script language.
2
3source check.vim
4source view_util.vim
5
6" Check that "lines" inside ":def" results in an "error" message.
7func CheckDefFailure(lines, error)
8 call writefile(['def Func()'] + a:lines + ['enddef'], 'Xdef')
9 call assert_fails('so Xdef', a:error, a:lines)
10 call delete('Xdef')
11endfunc
12
13func CheckScriptFailure(lines, error)
14 call writefile(a:lines, 'Xdef')
15 call assert_fails('so Xdef', a:error, a:lines)
16 call delete('Xdef')
17endfunc
18
19func Test_def_basic()
20 def SomeFunc(): string
21 return 'yes'
22 enddef
23 call assert_equal('yes', SomeFunc())
24endfunc
25
26def ReturnString(): string
27 return 'string'
28enddef
29
30def ReturnNumber(): number
31 return 123
32enddef
33
34let g:notNumber = 'string'
35
36def ReturnGlobal(): number
37 return g:notNumber
38enddef
39
40def Test_return_something()
41 assert_equal('string', ReturnString())
42 assert_equal(123, ReturnNumber())
43 assert_fails('call ReturnGlobal()', 'E1029: Expected number but got string')
44enddef
45
46let s:nothing = 0
47def ReturnNothing()
48 s:nothing = 1
49 if true
50 return
51 endif
52 s:nothing = 2
53enddef
54
55def Test_return_nothing()
56 ReturnNothing()
57 assert_equal(1, s:nothing)
58enddef
59
60func Increment()
61 let g:counter += 1
62endfunc
63
64def Test_call_ufunc_count()
65 g:counter = 1
66 Increment()
67 Increment()
68 Increment()
69 " works with and without :call
70 assert_equal(4, g:counter)
71 call assert_equal(4, g:counter)
72 unlet g:counter
73enddef
74
75def MyVarargs(arg: string, ...rest: list<string>): string
76 let res = arg
77 for s in rest
78 res ..= ',' .. s
79 endfor
80 return res
81enddef
82
83def Test_call_varargs()
84 assert_equal('one', MyVarargs('one'))
85 assert_equal('one,two', MyVarargs('one', 'two'))
86 assert_equal('one,two,three', MyVarargs('one', 'two', 'three'))
87enddef
88
89def MyDefaultArgs(name = 'string'): string
90 return name
91enddef
92
93def Test_call_default_args()
94 assert_equal('string', MyDefaultArgs())
95 assert_equal('one', MyDefaultArgs('one'))
96 assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
97
98 call CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef'], 'E1001:')
Bram Moolenaar99aaf0c2020-04-12 14:39:53 +020099 call CheckScriptFailure(['def Func(arg: number = "text")', 'enddef'], 'E1013: argument 1: type mismatch, expected number but got string')
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200100enddef
101
102func Test_call_default_args_from_func()
103 call assert_equal('string', MyDefaultArgs())
104 call assert_equal('one', MyDefaultArgs('one'))
105 call assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
106endfunc
107
108func TakesOneArg(arg)
109 echo a:arg
110endfunc
111
112def Test_call_wrong_args()
113 call CheckDefFailure(['TakesOneArg()'], 'E119:')
114 call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:')
115 call CheckDefFailure(['bufnr(xxx)'], 'E1001:')
116enddef
117
118" Default arg and varargs
119def MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string
120 let res = one .. ',' .. two
121 for s in rest
122 res ..= ',' .. s
123 endfor
124 return res
125enddef
126
127def Test_call_def_varargs()
128 call assert_fails('call MyDefVarargs()', 'E119:')
129 assert_equal('one,foo', MyDefVarargs('one'))
130 assert_equal('one,two', MyDefVarargs('one', 'two'))
131 assert_equal('one,two,three', MyDefVarargs('one', 'two', 'three'))
Bram Moolenaar49cf7cc2020-04-07 22:45:00 +0200132 call CheckDefFailure(['MyDefVarargs("one", 22)'], 'E1013: argument 2: type mismatch, expected string but got number')
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200133enddef
134
Bram Moolenaar1378fbc2020-04-11 20:50:33 +0200135let s:value = ''
136
137def FuncOneDefArg(opt = 'text')
138 s:value = opt
139enddef
140
141def FuncTwoDefArg(nr = 123, opt = 'text'): string
142 return nr .. opt
143enddef
144
145def FuncVarargs(...arg: list<string>): string
146 return join(arg, ',')
147enddef
148
149def Test_func_type_varargs()
150 let RefDefArg: func(?string)
151 RefDefArg = FuncOneDefArg
152 RefDefArg()
153 assert_equal('text', s:value)
154 RefDefArg('some')
155 assert_equal('some', s:value)
156
157 let RefDef2Arg: func(?number, ?string): string
158 RefDef2Arg = FuncTwoDefArg
159 assert_equal('123text', RefDef2Arg())
160 assert_equal('99text', RefDef2Arg(99))
161 assert_equal('77some', RefDef2Arg(77, 'some'))
162
163 call CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:')
164 call CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:')
165
166 let RefVarargs: func(...list<string>): string
167 RefVarargs = FuncVarargs
168 assert_equal('', RefVarargs())
169 assert_equal('one', RefVarargs('one'))
170 assert_equal('one,two', RefVarargs('one', 'two'))
171
172 call CheckDefFailure(['let RefWrong: func(...list<string>, string)'], 'E110:')
173 call CheckDefFailure(['let RefWrong: func(...list<string>, ?string)'], 'E110:')
174enddef
175
Bram Moolenaar0b76b422020-04-07 22:05:08 +0200176" Only varargs
177def MyVarargsOnly(...args: list<string>): string
178 return join(args, ',')
179enddef
180
181def Test_call_varargs_only()
182 assert_equal('', MyVarargsOnly())
183 assert_equal('one', MyVarargsOnly('one'))
184 assert_equal('one,two', MyVarargsOnly('one', 'two'))
185 call CheckDefFailure(['MyVarargsOnly(1)'], 'E1013: argument 1: type mismatch, expected string but got number')
186 call CheckDefFailure(['MyVarargsOnly("one", 2)'], 'E1013: argument 2: type mismatch, expected string but got number')
187enddef
188
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200189def Test_using_var_as_arg()
190 call writefile(['def Func(x: number)', 'let x = 234', 'enddef'], 'Xdef')
191 call assert_fails('so Xdef', 'E1006:')
192 call delete('Xdef')
193enddef
194
195def Test_call_func_defined_later()
Bram Moolenaar1df8b3f2020-04-23 18:13:23 +0200196 call assert_equal('one', g:DefinedLater('one'))
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200197 call assert_fails('call NotDefined("one")', 'E117:')
198enddef
199
Bram Moolenaar1df8b3f2020-04-23 18:13:23 +0200200func DefinedLater(arg)
201 return a:arg
202endfunc
203
204def Test_call_funcref()
205 assert_equal(3, g:SomeFunc('abc'))
206 assert_fails('NotAFunc()', 'E117:')
207 assert_fails('g:NotAFunc()', 'E117:')
208enddef
209
210let SomeFunc = function('len')
211let NotAFunc = 'text'
212
Bram Moolenaar99aaf0c2020-04-12 14:39:53 +0200213def CombineFuncrefTypes()
214 " same arguments, different return type
215 let Ref1: func(bool): string
216 let Ref2: func(bool): number
217 let Ref3: func(bool): any
218 Ref3 = g:cond ? Ref1 : Ref2
219
220 " different number of arguments
221 let Refa1: func(bool): number
222 let Refa2: func(bool, number): number
223 let Refa3: func: number
224 Refa3 = g:cond ? Refa1 : Refa2
225
226 " different argument types
227 let Refb1: func(bool, string): number
228 let Refb2: func(string, number): number
229 let Refb3: func(any, any): number
230 Refb3 = g:cond ? Refb1 : Refb2
231enddef
232
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200233def FuncWithForwardCall()
Bram Moolenaar1df8b3f2020-04-23 18:13:23 +0200234 return g:DefinedEvenLater("yes")
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200235enddef
236
237def DefinedEvenLater(arg: string): string
238 return arg
239enddef
240
241def Test_error_in_nested_function()
242 " Error in called function requires unwinding the call stack.
243 assert_fails('call FuncWithForwardCall()', 'E1029')
244enddef
245
246def Test_return_type_wrong()
247 CheckScriptFailure(['def Func(): number', 'return "a"', 'enddef'], 'expected number but got string')
248 CheckScriptFailure(['def Func(): string', 'return 1', 'enddef'], 'expected string but got number')
249 CheckScriptFailure(['def Func(): void', 'return "a"', 'enddef'], 'expected void but got string')
250 CheckScriptFailure(['def Func()', 'return "a"', 'enddef'], 'expected void but got string')
251
252 CheckScriptFailure(['def Func(): number', 'return', 'enddef'], 'E1003:')
253
254 CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:')
255 CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200256 CheckScriptFailure(['def Func()', 'return 1'], 'E1057:')
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200257enddef
258
259def Test_arg_type_wrong()
260 CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>')
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200261 CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...')
Bram Moolenaar6e949782020-04-13 17:21:00 +0200262 CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:')
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200263enddef
264
265def Test_vim9script_call()
266 let lines =<< trim END
267 vim9script
268 let var = ''
269 def MyFunc(arg: string)
270 var = arg
271 enddef
272 MyFunc('foobar')
273 assert_equal('foobar', var)
274
275 let str = 'barfoo'
276 str->MyFunc()
277 assert_equal('barfoo', var)
278
279 let g:value = 'value'
280 g:value->MyFunc()
281 assert_equal('value', var)
282
283 let listvar = []
284 def ListFunc(arg: list<number>)
285 listvar = arg
286 enddef
287 [1, 2, 3]->ListFunc()
288 assert_equal([1, 2, 3], listvar)
289
290 let dictvar = {}
291 def DictFunc(arg: dict<number>)
292 dictvar = arg
293 enddef
294 {'a': 1, 'b': 2}->DictFunc()
295 assert_equal(#{a: 1, b: 2}, dictvar)
296 def CompiledDict()
297 {'a': 3, 'b': 4}->DictFunc()
298 enddef
299 CompiledDict()
300 assert_equal(#{a: 3, b: 4}, dictvar)
301
302 #{a: 3, b: 4}->DictFunc()
303 assert_equal(#{a: 3, b: 4}, dictvar)
304
305 ('text')->MyFunc()
306 assert_equal('text', var)
307 ("some")->MyFunc()
308 assert_equal('some', var)
309 END
310 writefile(lines, 'Xcall.vim')
311 source Xcall.vim
312 delete('Xcall.vim')
313enddef
314
315def Test_vim9script_call_fail_decl()
316 let lines =<< trim END
317 vim9script
318 let var = ''
319 def MyFunc(arg: string)
320 let var = 123
321 enddef
322 END
323 writefile(lines, 'Xcall_decl.vim')
324 assert_fails('source Xcall_decl.vim', 'E1054:')
325 delete('Xcall_decl.vim')
326enddef
327
328def Test_vim9script_call_fail_const()
329 let lines =<< trim END
330 vim9script
331 const var = ''
332 def MyFunc(arg: string)
333 var = 'asdf'
334 enddef
335 END
336 writefile(lines, 'Xcall_const.vim')
337 assert_fails('source Xcall_const.vim', 'E46:')
338 delete('Xcall_const.vim')
339enddef
340
341" Test that inside :function a Python function can be defined, :def is not
342" recognized.
343func Test_function_python()
344 CheckFeature python3
345 let py = 'python3'
346 execute py "<< EOF"
347def do_something():
348 return 1
349EOF
350endfunc
351
352def Test_delfunc()
353 let lines =<< trim END
354 vim9script
355 def GoneSoon()
356 echo 'hello'
357 enddef
358
359 def CallGoneSoon()
360 GoneSoon()
361 enddef
362
363 delfunc GoneSoon
364 CallGoneSoon()
365 END
366 writefile(lines, 'XToDelFunc')
367 assert_fails('so XToDelFunc', 'E933')
368 assert_fails('so XToDelFunc', 'E933')
369
370 delete('XToDelFunc')
371enddef
372
373def Test_redef_failure()
374 call writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef')
375 so Xdef
376 call writefile(['def Func1(): string', 'return "Func1"', 'enddef'], 'Xdef')
377 so Xdef
378 call writefile(['def! Func0(): string', 'enddef'], 'Xdef')
379 call assert_fails('so Xdef', 'E1027:')
380 call writefile(['def Func2(): string', 'return "Func2"', 'enddef'], 'Xdef')
381 so Xdef
382 call delete('Xdef')
383
Bram Moolenaar1df8b3f2020-04-23 18:13:23 +0200384 call assert_equal(0, g:Func0())
385 call assert_equal('Func1', g:Func1())
386 call assert_equal('Func2', g:Func2())
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200387
388 delfunc! Func0
389 delfunc! Func1
390 delfunc! Func2
391enddef
392
393" Test for internal functions returning different types
394func Test_InternalFuncRetType()
395 let lines =<< trim END
396 def RetFloat(): float
397 return ceil(1.456)
398 enddef
399
400 def RetListAny(): list<any>
401 return items({'k' : 'v'})
402 enddef
403
404 def RetListString(): list<string>
405 return split('a:b:c', ':')
406 enddef
407
408 def RetListDictAny(): list<dict<any>>
409 return getbufinfo()
410 enddef
411
412 def RetDictNumber(): dict<number>
413 return wordcount()
414 enddef
415
416 def RetDictString(): dict<string>
417 return environ()
418 enddef
419 END
420 call writefile(lines, 'Xscript')
421 source Xscript
422
423 call assert_equal(2.0, RetFloat())
424 call assert_equal([['k', 'v']], RetListAny())
425 call assert_equal(['a', 'b', 'c'], RetListString())
426 call assert_notequal([], RetListDictAny())
427 call assert_notequal({}, RetDictNumber())
428 call assert_notequal({}, RetDictString())
429 call delete('Xscript')
430endfunc
431
432" Test for passing too many or too few arguments to internal functions
433func Test_internalfunc_arg_error()
434 let l =<< trim END
435 def! FArgErr(): float
436 return ceil(1.1, 2)
437 enddef
438 END
439 call writefile(l, 'Xinvalidarg')
440 call assert_fails('so Xinvalidarg', 'E118:')
441 let l =<< trim END
442 def! FArgErr(): float
443 return ceil()
444 enddef
445 END
446 call writefile(l, 'Xinvalidarg')
447 call assert_fails('so Xinvalidarg', 'E119:')
448 call delete('Xinvalidarg')
449endfunc
450
451let s:funcResult = 0
452
453def FuncNoArgNoRet()
454 funcResult = 11
455enddef
456
457def FuncNoArgRetNumber(): number
458 funcResult = 22
459 return 1234
460enddef
461
Bram Moolenaarec5929d2020-04-07 20:53:39 +0200462def FuncNoArgRetString(): string
463 funcResult = 45
464 return 'text'
465enddef
466
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200467def FuncOneArgNoRet(arg: number)
468 funcResult = arg
469enddef
470
471def FuncOneArgRetNumber(arg: number): number
472 funcResult = arg
473 return arg
474enddef
475
Bram Moolenaar08938ee2020-04-11 23:17:17 +0200476def FuncTwoArgNoRet(one: bool, two: number)
477 funcResult = two
478enddef
479
Bram Moolenaarec5929d2020-04-07 20:53:39 +0200480def FuncOneArgRetString(arg: string): string
481 return arg
482enddef
483
Bram Moolenaar89228602020-04-05 22:14:54 +0200484def FuncOneArgRetAny(arg: any): any
485 return arg
486enddef
487
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200488def Test_func_type()
489 let Ref1: func()
490 funcResult = 0
491 Ref1 = FuncNoArgNoRet
492 Ref1()
493 assert_equal(11, funcResult)
Bram Moolenaar4c683752020-04-05 21:38:23 +0200494
495 let Ref2: func
496 funcResult = 0
497 Ref2 = FuncNoArgNoRet
498 Ref2()
499 assert_equal(11, funcResult)
500
501 funcResult = 0
502 Ref2 = FuncOneArgNoRet
503 Ref2(12)
504 assert_equal(12, funcResult)
505
506 funcResult = 0
507 Ref2 = FuncNoArgRetNumber
508 assert_equal(1234, Ref2())
509 assert_equal(22, funcResult)
510
511 funcResult = 0
512 Ref2 = FuncOneArgRetNumber
513 assert_equal(13, Ref2(13))
514 assert_equal(13, funcResult)
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200515enddef
516
Bram Moolenaarec5929d2020-04-07 20:53:39 +0200517def Test_func_type_part()
518 let RefVoid: func: void
519 RefVoid = FuncNoArgNoRet
520 RefVoid = FuncOneArgNoRet
521 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1013: type mismatch, expected func() but got func(): number')
522 CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1013: type mismatch, expected func() but got func(): string')
523
524 let RefAny: func(): any
525 RefAny = FuncNoArgRetNumber
526 RefAny = FuncNoArgRetString
527 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1013: type mismatch, expected func(): any but got func()')
528 CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1013: type mismatch, expected func(): any but got func(number)')
529
530 let RefNr: func: number
531 RefNr = FuncNoArgRetNumber
532 RefNr = FuncOneArgRetNumber
533 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1013: type mismatch, expected func(): number but got func()')
534 CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1013: type mismatch, expected func(): number but got func(): string')
535
536 let RefStr: func: string
537 RefStr = FuncNoArgRetString
538 RefStr = FuncOneArgRetString
539 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1013: type mismatch, expected func(): string but got func()')
540 CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1013: type mismatch, expected func(): string but got func(): number')
541enddef
542
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200543def Test_func_type_fails()
544 CheckDefFailure(['let ref1: func()'], 'E704:')
545
546 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1013: type mismatch, expected func() but got func(): number')
547 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1013: type mismatch, expected func() but got func(number)')
548 CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1013: type mismatch, expected func() but got func(number): number')
Bram Moolenaar08938ee2020-04-11 23:17:17 +0200549 CheckDefFailure(['let Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1013: type mismatch, expected func(bool) but got func(bool, number)')
550 CheckDefFailure(['let Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1013: type mismatch, expected func(?bool) but got func(bool, number)')
551 CheckDefFailure(['let Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1013: type mismatch, expected func(...bool) but got func(bool, number)')
552
553 call CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:')
554 call CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:')
555 call CheckDefFailure(['let RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E740:')
556 call CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:')
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200557enddef
558
Bram Moolenaar89228602020-04-05 22:14:54 +0200559def Test_func_return_type()
560 let nr: number
561 nr = FuncNoArgRetNumber()
562 assert_equal(1234, nr)
563
564 nr = FuncOneArgRetAny(122)
565 assert_equal(122, nr)
566
567 let str: string
568 str = FuncOneArgRetAny('yes')
569 assert_equal('yes', str)
570
571 CheckDefFailure(['let str: string', 'str = FuncNoArgRetNumber()'], 'E1013: type mismatch, expected string but got number')
572enddef
573
Bram Moolenaar5e774c72020-04-12 21:53:00 +0200574def MultiLine(
575 arg1: string,
576 arg2 = 1234,
577 ...rest: list<string>
578 ): string
579 return arg1 .. arg2 .. join(rest, '-')
580enddef
581
Bram Moolenaar2c330432020-04-13 14:41:35 +0200582def MultiLineComment(
583 arg1: string, # comment
584 arg2 = 1234, # comment
585 ...rest: list<string> # comment
586 ): string # comment
587 return arg1 .. arg2 .. join(rest, '-')
588enddef
589
Bram Moolenaar5e774c72020-04-12 21:53:00 +0200590def Test_multiline()
591 assert_equal('text1234', MultiLine('text'))
592 assert_equal('text777', MultiLine('text', 777))
593 assert_equal('text777one', MultiLine('text', 777, 'one'))
594 assert_equal('text777one-two', MultiLine('text', 777, 'one', 'two'))
595enddef
596
Bram Moolenaar23e03252020-04-12 22:22:31 +0200597func Test_multiline_not_vim9()
598 call assert_equal('text1234', MultiLine('text'))
599 call assert_equal('text777', MultiLine('text', 777))
600 call assert_equal('text777one', MultiLine('text', 777, 'one'))
601 call assert_equal('text777one-two', MultiLine('text', 777, 'one', 'two'))
602endfunc
603
Bram Moolenaar5e774c72020-04-12 21:53:00 +0200604
Bram Moolenaaree4e0c12020-04-06 21:35:05 +0200605" When using CheckScriptFailure() for the below test, E1010 is generated instead
606" of E1056.
607func Test_E1056_1059()
608 let caught_1056 = 0
609 try
610 def F():
611 return 1
612 enddef
613 catch /E1056:/
614 let caught_1056 = 1
615 endtry
616 call assert_equal(1, caught_1056)
617
618 let caught_1059 = 0
619 try
620 def F5(items : list)
621 echo 'a'
622 enddef
623 catch /E1059:/
624 let caught_1059 = 1
625 endtry
626 call assert_equal(1, caught_1059)
627endfunc
Bram Moolenaar5deeb3f2020-04-05 17:08:17 +0200628
629" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker