blob: 57796b69beee17e8246b7857ca89ba39a8a3b724 [file] [log] [blame]
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001" Test commands that are not compiled in a :def function
2
Bram Moolenaar6378c4f2020-04-26 13:50:41 +02003source check.vim
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02004source vim9.vim
Bram Moolenaare88c8e82020-11-01 17:03:37 +01005source term_util.vim
Bram Moolenaare9f262b2020-07-05 14:57:51 +02006source view_util.vim
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02007
Bram Moolenaar39f3b142021-02-14 12:57:36 +01008def Test_vim9cmd()
9 var lines =<< trim END
10 vim9cmd var x = 123
11 let s:y = 'yes'
12 vim9c assert_equal(123, x)
13 vim9cm assert_equal('yes', y)
14 END
15 CheckScriptSuccess(lines)
Bram Moolenaardd9de502021-08-15 13:49:42 +020016
Dominique Pelle6d37e8e2021-05-06 17:36:55 +020017 assert_fails('vim9cmd', 'E1164:')
Bram Moolenaardd9de502021-08-15 13:49:42 +020018 assert_fails('legacy', 'E1234:')
Bram Moolenaar2596a4e2021-08-14 21:35:40 +020019 assert_fails('vim9cmd echo "con" . "cat"', 'E15:')
Bram Moolenaar678b2072021-07-26 21:10:11 +020020
21 lines =<< trim END
Bram Moolenaardd9de502021-08-15 13:49:42 +020022 let str = 'con'
23 vim9cmd str .= 'cat'
24 END
25 CheckScriptFailure(lines, 'E492:')
26
27 lines =<< trim END
28 vim9script
29 legacy echo "con" . "cat"
30 legacy let str = 'con'
31 legacy let str .= 'cat'
32 END
33 CheckScriptSuccess(lines)
34
35 lines =<< trim END
Bram Moolenaar678b2072021-07-26 21:10:11 +020036 vim9script
37 def Foo()
38 g:found_bar = "bar"
39 enddef
40 nmap ,; :vim9cmd <SID>Foo()<CR>
41 END
42 CheckScriptSuccess(lines)
Bram Moolenaardd9de502021-08-15 13:49:42 +020043
Bram Moolenaar678b2072021-07-26 21:10:11 +020044 feedkeys(',;', 'xt')
45 assert_equal("bar", g:found_bar)
Bram Moolenaar678b2072021-07-26 21:10:11 +020046 nunmap ,;
47 unlet g:found_bar
Bram Moolenaardd9de502021-08-15 13:49:42 +020048
49 lines =<< trim END
50 vim9script
51 legacy echo 1'000
52 END
53 CheckScriptFailure(lines, 'E115:')
54
55 if has('float')
56 lines =<< trim END
57 vim9script
58 echo .10
59 END
60 CheckScriptSuccess(lines)
61 lines =<< trim END
62 vim9cmd echo .10
63 END
64 CheckScriptSuccess(lines)
65 lines =<< trim END
66 vim9script
67 legacy echo .10
68 END
69 CheckScriptFailure(lines, 'E15:')
70 endif
71
72 echo v:version
73 assert_fails('vim9cmd echo version', 'E121:')
74 lines =<< trim END
75 vim9script
76 echo version
77 END
78 CheckScriptFailure(lines, 'E121:')
79 lines =<< trim END
80 vim9script
81 legacy echo version
82 END
83 CheckScriptSuccess(lines)
Bram Moolenaar39f3b142021-02-14 12:57:36 +010084enddef
85
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020086def Test_edit_wildcards()
Bram Moolenaarac564082020-09-27 19:05:33 +020087 var filename = 'Xtest'
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020088 edit `=filename`
89 assert_equal('Xtest', bufname())
90
Bram Moolenaarac564082020-09-27 19:05:33 +020091 var filenr = 123
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020092 edit Xtest`=filenr`
93 assert_equal('Xtest123', bufname())
94
95 filenr = 77
96 edit `=filename``=filenr`
97 assert_equal('Xtest77', bufname())
98
99 edit X`=filename`xx`=filenr`yy
100 assert_equal('XXtestxx77yy', bufname())
Bram Moolenaar025cb1c2020-12-14 18:31:27 +0100101
102 CheckDefFailure(['edit `=xxx`'], 'E1001:')
103 CheckDefFailure(['edit `="foo"'], 'E1083:')
Bram Moolenaarb288ba92021-06-05 17:10:55 +0200104
105 var files = ['file 1', 'file%2', 'file# 3']
106 args `=files`
107 assert_equal(files, argv())
Bram Moolenaar279d7332021-11-27 11:42:50 +0000108
109 filename = 'Xwindo'
110 windo edit `=filename`
111 assert_equal('Xwindo', bufname())
112
113 filename = 'Xtabdo'
114 tabdo edit `=filename`
115 assert_equal('Xtabdo', bufname())
116
117 filename = 'Xargdo'
118 argdo edit `=filename`
119 assert_equal('Xargdo', bufname())
120
121 :%bwipe!
122 filename = 'Xbufdo'
123 bufdo file `=filename`
124 assert_equal('Xbufdo', bufname())
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200125enddef
126
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100127def Test_expand_alternate_file()
128 var lines =<< trim END
129 edit Xfileone
130 var bone = bufnr()
131 edit Xfiletwo
132 var btwo = bufnr()
133 edit Xfilethree
134 var bthree = bufnr()
135
136 edit #
137 assert_equal(bthree, bufnr())
138 edit %%
139 assert_equal(btwo, bufnr())
140 edit %% # comment
141 assert_equal(bthree, bufnr())
142 edit %%yy
143 assert_equal('Xfiletwoyy', bufname())
144
145 exe "edit %%" .. bone
146 assert_equal(bone, bufnr())
147 exe "edit %%" .. btwo .. "xx"
148 assert_equal('Xfiletwoxx', bufname())
149
150 next Xfileone Xfiletwo Xfilethree
151 assert_equal('Xfileone', argv(0))
152 assert_equal('Xfiletwo', argv(1))
153 assert_equal('Xfilethree', argv(2))
154 next %%%zz
155 assert_equal('Xfileone', argv(0))
156 assert_equal('Xfiletwo', argv(1))
157 assert_equal('Xfilethreezz', argv(2))
158
159 v:oldfiles = ['Xonefile', 'Xtwofile']
160 edit %%<1
161 assert_equal('Xonefile', bufname())
162 edit %%<2
163 assert_equal('Xtwofile', bufname())
164 assert_fails('edit %%<3', 'E684:')
165
166 edit Xfileone.vim
167 edit Xfiletwo
168 edit %%:r
169 assert_equal('Xfileone', bufname())
Bram Moolenaardfbc5fd2021-01-23 15:15:01 +0100170
171 assert_false(bufexists('altfoo'))
172 edit altfoo
173 edit bar
174 assert_true(bufexists('altfoo'))
175 assert_true(buflisted('altfoo'))
176 bdel %%
177 assert_true(bufexists('altfoo'))
178 assert_false(buflisted('altfoo'))
179 bwipe! altfoo
180 bwipe! bar
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100181 END
182 CheckDefAndScriptSuccess(lines)
183enddef
184
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100185def Test_global_backtick_expansion()
186 new
187 setline(1, 'xx')
188 var name = 'foobar'
189 g/^xx/s/.*/`=name`
190 assert_equal('foobar', getline(1))
191 bwipe!
192enddef
193
Bram Moolenaarecac5912021-01-05 19:23:28 +0100194def Test_folddo_backtick_expansion()
195 new
196 var name = 'xxx'
197 folddoopen edit `=name`
198 assert_equal('xxx', bufname())
199 bwipe!
200
201 new
202 setline(1, ['one', 'two'])
203 set nomodified
204 :1,2fold
205 foldclose
206 folddoclose edit `=name`
207 assert_equal('xxx', bufname())
208 bwipe!
209enddef
210
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200211def Test_hardcopy_wildcards()
212 CheckUnix
213 CheckFeature postscript
214
Bram Moolenaarac564082020-09-27 19:05:33 +0200215 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200216 hardcopy > X`=outfile`.ps
217 assert_true(filereadable('Xprint.ps'))
218
219 delete('Xprint.ps')
220enddef
221
222def Test_syn_include_wildcards()
223 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200224 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200225 &rtp = '.'
226
Bram Moolenaarac564082020-09-27 19:05:33 +0200227 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200228 syn include @Group Xthe`=fname`.vim
229 assert_match('Found.* contained found', execute('syn list Found'))
230
231 &rtp = save_rtp
232 delete('Xthemine.vim')
233enddef
234
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200235def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200236 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200237 vim9script
238 redir @a
239 echo 'one'
240 .. 'two'
241 redir END
242 assert_equal("\nonetwo", @a)
243 END
244 CheckScriptSuccess(lines)
245
246 lines =<< trim END
247 vim9script
248 redir @a
249 echo 11 +
250 77
251 - 22
252 redir END
253 assert_equal("\n66", @a)
254 END
255 CheckScriptSuccess(lines)
256enddef
257
Bram Moolenaar13106602020-10-04 16:06:05 +0200258def Test_condition_types()
259 var lines =<< trim END
260 if 'text'
261 endif
262 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100263 CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200264
265 lines =<< trim END
266 if [1]
267 endif
268 END
269 CheckDefFailure(lines, 'E1012:', 1)
270 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
271
272 lines =<< trim END
273 g:cond = 'text'
274 if g:cond
275 endif
276 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100277 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200278
279 lines =<< trim END
280 g:cond = 0
281 if g:cond
282 elseif 'text'
283 endif
284 END
285 CheckDefFailure(lines, 'E1012:', 3)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100286 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200287
288 lines =<< trim END
289 if g:cond
290 elseif [1]
291 endif
292 END
293 CheckDefFailure(lines, 'E1012:', 2)
294 CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
295
296 lines =<< trim END
297 g:cond = 'text'
298 if 0
299 elseif g:cond
300 endif
301 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100302 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200303
304 lines =<< trim END
305 while 'text'
306 endwhile
307 END
308 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100309 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200310
311 lines =<< trim END
312 while [1]
313 endwhile
314 END
315 CheckDefFailure(lines, 'E1012:', 1)
316 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
317
318 lines =<< trim END
319 g:cond = 'text'
320 while g:cond
321 endwhile
322 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100323 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200324enddef
325
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200326def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200327 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200328 vim9script
329 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200330 true
331 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200332 g:res = 42
333 endif
334 assert_equal(42, g:res)
335 END
336 CheckScriptSuccess(lines)
337 unlet g:res
338
339 lines =<< trim END
340 vim9script
341 if 1 &&
342 0
343 g:res = 0
344 elseif 0 ||
345 0
346 || 1
347 g:res = 12
348 endif
349 assert_equal(12, g:res)
350 END
351 CheckScriptSuccess(lines)
352 unlet g:res
353enddef
354
355def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200356 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200357 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200358 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200359 while nr <
360 10 + 3
361 nr = nr
362 + 4
363 endwhile
364 assert_equal(16, nr)
365 END
366 CheckScriptSuccess(lines)
367
368 lines =<< trim END
369 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200370 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200371 while nr
372 <
373 10
374 +
375 3
376 nr = nr
377 +
378 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200379 endwhile
380 assert_equal(16, nr)
381 END
382 CheckScriptSuccess(lines)
383enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200384
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200385def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200386 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200387 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200388 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200389 for x
390 in
391 [1, 2, 3, 4]
392 nr = nr + x
393 endfor
394 assert_equal(10, nr)
395 END
396 CheckScriptSuccess(lines)
397
398 lines =<< trim END
399 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200400 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200401 for x
402 in
403 [1, 2,
404 3, 4
405 ]
406 nr = nr
407 +
408 x
409 endfor
410 assert_equal(10, nr)
411 END
412 CheckScriptSuccess(lines)
413enddef
414
Bram Moolenaare0890d62021-02-17 14:52:14 +0100415def MethodAfterLinebreak(arg: string)
416 arg
417 ->setline(1)
418enddef
419
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200420def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200421 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200422 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200423 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200424 func RetArg(
425 arg
426 )
427 let s:res = a:arg
428 endfunc
429 [1,
430 2,
431 3]->RetArg()
432 assert_equal([1, 2, 3], res)
433 END
434 CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100435
436 lines =<< trim END
437 new
438 var name = [1, 2]
439 name
440 ->copy()
441 ->setline(1)
442 assert_equal(['1', '2'], getline(1, 2))
443 bwipe!
444 END
445 CheckDefAndScriptSuccess(lines)
446
447 lines =<< trim END
448 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100449 def Foo(): string
450 return 'the text'
451 enddef
452 def Bar(F: func): string
453 return F()
454 enddef
455 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100456 Foo ->Bar()
457 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100458 enddef
459 Test()
460 assert_equal('the text', getline(1))
461 bwipe!
462 END
463 CheckDefAndScriptSuccess(lines)
464
465 lines =<< trim END
466 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100467 g:shortlist
468 ->copy()
469 ->setline(1)
470 assert_equal(['1', '2'], getline(1, 2))
471 bwipe!
472 END
473 g:shortlist = [1, 2]
474 CheckDefAndScriptSuccess(lines)
475 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100476
477 new
478 MethodAfterLinebreak('foobar')
479 assert_equal('foobar', getline(1))
480 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100481
482 lines =<< trim END
483 vim9script
484 def Foo(): string
485 return '# some text'
486 enddef
487
488 def Bar(F: func): string
489 return F()
490 enddef
491
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100492 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100493 ->setline(1)
494 END
495 CheckScriptSuccess(lines)
496 assert_equal('# some text', getline(1))
497 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200498enddef
499
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100500def Test_method_call_whitespace()
501 var lines =<< trim END
502 new
503 var yank = 'text'
504 yank->setline(1)
505 yank ->setline(2)
506 yank-> setline(3)
507 yank -> setline(4)
508 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
509 bwipe!
510 END
511 CheckDefAndScriptSuccess(lines)
512enddef
513
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100514def Test_method_and_user_command()
515 var lines =<< trim END
516 vim9script
517 def Cmd()
518 g:didFunc = 1
519 enddef
520 command Cmd g:didCmd = 1
521 Cmd
522 assert_equal(1, g:didCmd)
523 Cmd()
524 assert_equal(1, g:didFunc)
525 unlet g:didFunc
526 unlet g:didCmd
527
528 def InDefFunc()
529 Cmd
530 assert_equal(1, g:didCmd)
531 Cmd()
532 assert_equal(1, g:didFunc)
533 unlet g:didFunc
534 unlet g:didCmd
535 enddef
536 InDefFunc()
537 END
538 CheckScriptSuccess(lines)
539enddef
540
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200541def Test_option_use_linebreak()
542 var lines =<< trim END
543 new
544 &matchpairs = '(:)'
545 &matchpairs->setline(1)
546 &matchpairs = '[:]'
547 &matchpairs ->setline(2)
548 &matchpairs = '{:}'
549 &matchpairs
550 ->setline(3)
551 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
552 bwipe!
553 END
554 CheckDefAndScriptSuccess(lines)
555enddef
556
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200557def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200558 var lines =<< trim END
559 new
560 @a = 'one'
561 @a->setline(1)
562 @b = 'two'
563 @b ->setline(2)
564 @c = 'three'
565 @c
566 ->setline(3)
567 assert_equal(['one', 'two', 'three'], getline(1, '$'))
568 bwipe!
569 END
570 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200571
572 lines =<< trim END
573 @a = 'echo "text"'
574 @a
575 END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000576 CheckDefAndScriptFailure(lines, 'E1207:', 2)
577
578 lines =<< trim END
579 @/ = 'pattern'
580 @/
581 END
582 CheckDefAndScriptFailure(lines, 'E1207:', 2)
583
584 lines =<< trim END
585 &opfunc = 'nothing'
586 &opfunc
587 END
588 CheckDefAndScriptFailure(lines, 'E1207:', 2)
589 &opfunc = ''
590
591 lines =<< trim END
592 &l:showbreak = 'nothing'
593 &l:showbreak
594 END
595 CheckDefAndScriptFailure(lines, 'E1207:', 2)
596 &l:showbreak = ''
597
598 lines =<< trim END
599 &g:showbreak = 'nothing'
600 &g:showbreak
601 END
602 CheckDefAndScriptFailure(lines, 'E1207:', 2)
603 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000604
605 lines =<< trim END
606 $SomeEnv = 'value'
607 $SomeEnv
608 END
609 CheckDefAndScriptFailure(lines, 'E1207:', 2)
610 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200611enddef
612
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200613def Test_environment_use_linebreak()
614 var lines =<< trim END
615 new
616 $TESTENV = 'one'
617 $TESTENV->setline(1)
618 $TESTENV = 'two'
619 $TESTENV ->setline(2)
620 $TESTENV = 'three'
621 $TESTENV
622 ->setline(3)
623 assert_equal(['one', 'two', 'three'], getline(1, '$'))
624 bwipe!
625 END
626 CheckDefAndScriptSuccess(lines)
627enddef
628
Bram Moolenaar683581e2020-10-22 21:22:58 +0200629def Test_skipped_expr_linebreak()
630 if 0
631 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100632 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200633 endif
634enddef
635
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200636def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100637 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200638 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100639 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200640 test.data
641 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100642 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200643
Bram Moolenaarac564082020-09-27 19:05:33 +0200644 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200645 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100646 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200647 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100648 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200649 END
650 CheckScriptSuccess(lines)
651enddef
652
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200653def Test_bar_after_command()
654 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200655 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200656 redraw | echo x
657 enddef
658 RedrawAndEcho()
659 assert_match('did redraw', Screenline(&lines))
660
Bram Moolenaar788123c2020-07-05 15:32:17 +0200661 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200662 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200663 reg_executing() | echo x
664 enddef
665 CallAndEcho()
666 assert_match('did redraw', Screenline(&lines))
667
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200668 if has('unix')
669 # bar in filter write command does not start new command
670 def WriteToShell()
671 new
672 setline(1, 'some text')
673 w !cat | cat > Xoutfile
674 bwipe!
675 enddef
676 WriteToShell()
677 assert_equal(['some text'], readfile('Xoutfile'))
678 delete('Xoutfile')
679
680 # bar in filter read command does not start new command
681 def ReadFromShell()
682 new
683 r! echo hello there | cat > Xoutfile
684 r !echo again | cat >> Xoutfile
685 bwipe!
686 enddef
687 ReadFromShell()
688 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
689 delete('Xoutfile')
690 endif
691enddef
692
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200693def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100694 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100695 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100696 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200697enddef
698
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100699def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100700 var lines =<< trim END
701 final expected = "\nType Name Content\n c \"c piyo"
702 @a = 'hoge'
703 @b = 'fuga'
704 @c = 'piyo'
705
706 assert_equal(execute('filter /piyo/ registers abc'), expected)
707 END
708 CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200709
710 # also do this compiled
711 lines =<< trim END
712 @a = 'very specific z3d37dh234 string'
713 filter z3d37dh234 registers
714 assert_match('very specific z3d37dh234 string', Screenline(&lines))
715 END
716 CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000717
718 lines =<< trim END
719 edit foobar
720 redir => g:filter_out
721 filter #foobar# ls
722 redir END
723 assert_match('"foobar"', g:filter_out)
724 unlet g:filter_out
725 END
726 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100727enddef
728
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100729def Test_win_command_modifiers()
730 assert_equal(1, winnr('$'))
731
732 set splitright
733 vsplit
734 assert_equal(2, winnr())
735 close
736 aboveleft vsplit
737 assert_equal(1, winnr())
738 close
739 set splitright&
740
741 vsplit
742 assert_equal(1, winnr())
743 close
744 belowright vsplit
745 assert_equal(2, winnr())
746 close
747 rightbelow vsplit
748 assert_equal(2, winnr())
749 close
750
Bram Moolenaar97a19002020-11-01 22:15:44 +0100751 if has('browse')
752 browse set
753 assert_equal('option-window', expand('%'))
754 close
755 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100756
757 vsplit
758 botright split
759 assert_equal(3, winnr())
760 assert_equal(&columns, winwidth(0))
761 close
762 close
763
764 vsplit
765 topleft split
766 assert_equal(1, winnr())
767 assert_equal(&columns, winwidth(0))
768 close
769 close
770
771 gettabinfo()->len()->assert_equal(1)
772 tab split
773 gettabinfo()->len()->assert_equal(2)
774 tabclose
775
776 vertical new
777 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
778 close
779enddef
780
781func Test_command_modifier_confirm()
782 CheckNotGui
783 CheckRunVimInTerminal
784
785 " Test for saving all the modified buffers
786 let lines =<< trim END
787 call setline(1, 'changed')
788 def Getout()
789 confirm write Xfile
790 enddef
791 END
792 call writefile(lines, 'Xconfirmscript')
793 call writefile(['empty'], 'Xfile')
794 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
795 call term_sendkeys(buf, ":call Getout()\n")
796 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
797 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100798 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
799 call term_sendkeys(buf, "\<CR>")
800 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100801 call StopVimInTerminal(buf)
802
803 call assert_equal(['changed'], readfile('Xfile'))
804 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100805 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100806 call delete('Xconfirmscript')
807endfunc
808
809def Test_command_modifiers_keep()
810 if has('unix')
811 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
812 new
813 setline(1, ['one', 'two', 'three'])
814 normal 1Gma
815 normal 2Gmb
816 normal 3Gmc
817 if addRflag
818 set cpo+=R
819 else
820 set cpo-=R
821 endif
822 if keepMarks
823 keepmarks :%!cat
824 else
825 :%!cat
826 endif
827 if hasMarks
828 assert_equal(1, line("'a"))
829 assert_equal(2, line("'b"))
830 assert_equal(3, line("'c"))
831 else
832 assert_equal(0, line("'a"))
833 assert_equal(0, line("'b"))
834 assert_equal(0, line("'c"))
835 endif
836 quit!
837 enddef
838 DoTest(false, false, true)
839 DoTest(true, false, false)
840 DoTest(false, true, true)
841 DoTest(true, true, true)
842 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100843
844 new
845 setline(1, ['one', 'two', 'three', 'four'])
846 assert_equal(4, line("$"))
847 normal 1Gma
848 normal 2Gmb
849 normal 3Gmc
850 lockmarks :1,2!wc
851 # line is deleted, marks don't move
852 assert_equal(3, line("$"))
853 assert_equal('four', getline(3))
854 assert_equal(1, line("'a"))
855 assert_equal(2, line("'b"))
856 assert_equal(3, line("'c"))
857 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100858 endif
859
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100860 edit Xone
861 edit Xtwo
862 assert_equal('Xone', expand('#'))
863 keepalt edit Xthree
864 assert_equal('Xone', expand('#'))
865
866 normal /a*b*
867 assert_equal('a*b*', histget("search"))
868 keeppatterns normal /c*d*
869 assert_equal('a*b*', histget("search"))
870
871 new
872 setline(1, range(10))
873 :10
874 normal gg
875 assert_equal(10, getpos("''")[1])
876 keepjumps normal 5G
877 assert_equal(10, getpos("''")[1])
878 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100879enddef
880
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100881def Test_bar_line_continuation()
882 var lines =<< trim END
883 au BufNewFile Xfile g:readFile = 1
884 | g:readExtra = 2
885 g:readFile = 0
886 g:readExtra = 0
887 edit Xfile
888 assert_equal(1, g:readFile)
889 assert_equal(2, g:readExtra)
890 bwipe!
891 au! BufNewFile
892
893 au BufNewFile Xfile g:readFile = 1
894 | g:readExtra = 2
895 | g:readMore = 3
896 g:readFile = 0
897 g:readExtra = 0
898 g:readMore = 0
899 edit Xfile
900 assert_equal(1, g:readFile)
901 assert_equal(2, g:readExtra)
902 assert_equal(3, g:readMore)
903 bwipe!
904 au! BufNewFile
905 unlet g:readFile
906 unlet g:readExtra
907 unlet g:readMore
908 END
909 CheckDefAndScriptSuccess(lines)
910enddef
911
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100912def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100913 new Xsomefile
914 setline(1, 'changed')
915 var buf = bufnr()
916 hide edit Xotherfile
917 var info = getbufinfo(buf)
918 assert_equal(1, info[0].hidden)
919 assert_equal(1, info[0].changed)
920 edit Xsomefile
921 bwipe!
922
923 au BufNewFile Xfile g:readFile = 1
924 g:readFile = 0
925 edit Xfile
926 assert_equal(1, g:readFile)
927 bwipe!
928 g:readFile = 0
929 noautocmd edit Xfile
930 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100931 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100932 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100933
934 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100935 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100936 bwipe!
937
938 var caught = false
939 try
940 sandbox !ls
941 catch /E48:/
942 caught = true
943 endtry
944 assert_true(caught)
945
946 :8verbose g:verbose_now = &verbose
947 assert_equal(8, g:verbose_now)
948 unlet g:verbose_now
949enddef
950
951def EchoHere()
952 echomsg 'here'
953enddef
954def EchoThere()
955 unsilent echomsg 'there'
956enddef
957
958def Test_modifier_silent_unsilent()
959 echomsg 'last one'
960 silent echomsg "text"
961 assert_equal("\nlast one", execute(':1messages'))
962
963 silent! echoerr "error"
964
965 echomsg 'last one'
966 silent EchoHere()
967 assert_equal("\nlast one", execute(':1messages'))
968
969 silent EchoThere()
970 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100971
972 try
973 silent eval [][0]
974 catch
975 echomsg "caught"
976 endtry
977 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200978
979 var lines =<< trim END
980 vim9script
981 set history=11
982 silent! while 0
983 set history=22
984 silent! endwhile
985 assert_equal(11, &history)
986 set history&
987 END
988 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100989enddef
990
Bram Moolenaar36113e42020-11-02 21:08:47 +0100991def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +0100992 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +0100993 new
994 setline(1, 'xxx')
995 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
996 assert_equal('', getline(1))
997 bwipe!
998enddef
999
Bram Moolenaarece0b872021-01-08 20:40:45 +01001000def Test_silent_pattern()
1001 new
1002 silent! :/pat/put _
1003 bwipe!
1004enddef
1005
Bram Moolenaarfa984412021-03-25 22:15:28 +01001006def Test_useless_command_modifier()
1007 g:maybe = true
1008 var lines =<< trim END
1009 if g:maybe
1010 silent endif
1011 END
1012 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1013
1014 lines =<< trim END
1015 for i in [0]
1016 silent endfor
1017 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001018 CheckDefFailure(lines, 'E1176:', 2)
1019 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001020
1021 lines =<< trim END
1022 while g:maybe
1023 silent endwhile
1024 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001025 CheckDefFailure(lines, 'E1176:', 2)
1026 g:maybe = false
1027 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001028
1029 lines =<< trim END
1030 silent try
1031 finally
1032 endtry
1033 END
1034 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1035
1036 lines =<< trim END
1037 try
1038 silent catch
1039 endtry
1040 END
1041 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1042
1043 lines =<< trim END
1044 try
1045 silent finally
1046 endtry
1047 END
1048 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1049
1050 lines =<< trim END
1051 try
1052 finally
1053 silent endtry
1054 END
1055 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1056enddef
1057
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001058def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001059 var from = 3
1060 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001061 g:val = 111
1062 def Increment(nrs: list<number>)
1063 for nr in nrs
1064 g:val += nr
1065 endfor
1066 enddef
1067 eval range(from, to)
1068 ->Increment()
1069 assert_equal(111 + 3 + 4 + 5, g:val)
1070 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001071
1072 var lines =<< trim END
1073 vim9script
1074 g:caught = 'no'
1075 try
1076 eval 123 || 0
1077 catch
1078 g:caught = 'yes'
1079 endtry
1080 assert_equal('yes', g:caught)
1081 unlet g:caught
1082 END
1083 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001084enddef
1085
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001086def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001087 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001088 nnoremap <F3> :echo 'hit F3 #'<CR>
1089 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1090 END
1091 CheckDefSuccess(lines)
1092 CheckScriptSuccess(['vim9script'] + lines)
1093enddef
1094
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001095def Test_normal_command()
1096 new
1097 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001098 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001099 try
1100 exe "norm! \<C-]>"
1101 catch /E433/
1102 caught = 2
1103 endtry
1104 assert_equal(2, caught)
1105
1106 try
1107 exe "norm! 3\<C-]>"
1108 catch /E433/
1109 caught = 3
1110 endtry
1111 assert_equal(3, caught)
1112 bwipe!
1113enddef
1114
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001115def Test_put_command()
1116 new
1117 @p = 'ppp'
1118 put p
1119 assert_equal('ppp', getline(2))
1120
1121 put ='below'
1122 assert_equal('below', getline(3))
1123 put! ='above'
1124 assert_equal('above', getline(3))
1125 assert_equal('below', getline(4))
1126
Bram Moolenaar883cf972021-01-15 18:04:43 +01001127 :2put =['a', 'b', 'c']
1128 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1129
Bram Moolenaar08597872020-12-10 19:43:40 +01001130 # compute range at runtime
1131 setline(1, range(1, 8))
1132 @a = 'aaa'
1133 :$-2put a
1134 assert_equal('aaa', getline(7))
1135
1136 setline(1, range(1, 8))
1137 :2
1138 :+2put! a
1139 assert_equal('aaa', getline(4))
1140
Bram Moolenaara28639e2021-01-19 22:48:09 +01001141 []->mapnew(() => 0)
1142 :$put ='end'
1143 assert_equal('end', getline('$'))
1144
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001145 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001146
1147 CheckDefFailure(['put =xxx'], 'E1001:')
1148enddef
1149
1150def Test_put_with_linebreak()
1151 new
1152 var lines =<< trim END
1153 vim9script
1154 pu =split('abc', '\zs')
1155 ->join()
1156 END
1157 CheckScriptSuccess(lines)
1158 getline(2)->assert_equal('a b c')
1159 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001160enddef
1161
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001162def Test_command_star_range()
1163 new
1164 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1165 setpos("'<", [0, 1, 0, 0])
1166 setpos("'>", [0, 3, 0, 0])
1167 :*s/\(foo\|bar\)/baz/g
1168 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1169
1170 bwipe!
1171enddef
1172
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001173def Test_f_args()
1174 var lines =<< trim END
1175 vim9script
1176
1177 func SaveCmdArgs(...)
1178 let g:args = a:000
1179 endfunc
1180
1181 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1182
1183 TestFArgs
1184 assert_equal([], g:args)
1185
1186 TestFArgs one two three
1187 assert_equal(['one', 'two', 'three'], g:args)
1188 END
1189 CheckScriptSuccess(lines)
1190enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001191
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001192def Test_user_command_comment()
1193 command -nargs=1 Comd echom <q-args>
1194
1195 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001196 vim9script
1197 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001198 END
1199 CheckScriptSuccess(lines)
1200
1201 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001202 vim9script
1203 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001204 END
1205 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001206 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001207
1208 lines =<< trim END
1209 vim9script
1210 command Foo echo 'Foo'
1211 Foo3Bar
1212 END
1213 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1214
1215 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001216enddef
1217
Bram Moolenaar95388e32020-11-20 21:07:00 +01001218def Test_star_command()
1219 var lines =<< trim END
1220 vim9script
1221 @s = 'g:success = 8'
1222 set cpo+=*
1223 exe '*s'
1224 assert_equal(8, g:success)
1225 unlet g:success
1226 set cpo-=*
1227 assert_fails("exe '*s'", 'E1050:')
1228 END
1229 CheckScriptSuccess(lines)
1230enddef
1231
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001232def Test_cmd_argument_without_colon()
1233 new Xfile
1234 setline(1, ['a', 'b', 'c', 'd'])
1235 write
1236 edit +3 %
1237 assert_equal(3, getcurpos()[1])
1238 edit +/a %
1239 assert_equal(1, getcurpos()[1])
1240 bwipe
1241 delete('Xfile')
1242enddef
1243
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001244def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001245 command Cmd1 eval 0
1246 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001247 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001248 Cmd
1249 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001250 CheckDefAndScriptFailure(lines, 'E464:', 1)
1251 delcommand Cmd1
1252 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001253enddef
1254
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001255def Test_command_not_recognized()
1256 var lines =<< trim END
1257 d.key = 'asdf'
1258 END
1259 CheckDefFailure(lines, 'E1146:', 1)
1260
1261 lines =<< trim END
1262 d['key'] = 'asdf'
1263 END
1264 CheckDefFailure(lines, 'E1146:', 1)
1265enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001266
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001267def Test_magic_not_used()
1268 new
1269 for cmd in ['set magic', 'set nomagic']
1270 exe cmd
1271 setline(1, 'aaa')
1272 s/.../bbb/
1273 assert_equal('bbb', getline(1))
1274 endfor
1275
1276 set magic
1277 setline(1, 'aaa')
1278 assert_fails('s/.\M../bbb/', 'E486:')
1279 assert_fails('snomagic/.../bbb/', 'E486:')
1280 assert_equal('aaa', getline(1))
1281
1282 bwipe!
1283enddef
1284
Bram Moolenaar60f63102020-12-21 20:32:43 +01001285def Test_gdefault_not_used()
1286 new
1287 for cmd in ['set gdefault', 'set nogdefault']
1288 exe cmd
1289 setline(1, 'aaa')
1290 s/./b/
1291 assert_equal('baa', getline(1))
1292 endfor
1293
1294 set nogdefault
1295 bwipe!
1296enddef
1297
Bram Moolenaar179eb562020-12-27 18:03:22 +01001298def g:SomeComplFunc(findstart: number, base: string): any
1299 if findstart
1300 return 0
1301 else
1302 return ['aaa', 'bbb']
1303 endif
1304enddef
1305
1306def Test_insert_complete()
1307 # this was running into an error with the matchparen hack
1308 new
1309 set completefunc=SomeComplFunc
1310 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1311 assert_equal('aaa', getline(1))
1312
1313 set completefunc=
1314 bwipe!
1315enddef
1316
Bram Moolenaara11919f2021-01-02 19:44:56 +01001317def Test_wincmd()
1318 split
1319 var id1 = win_getid()
1320 if true
1321 try | wincmd w | catch | endtry
1322 endif
1323 assert_notequal(id1, win_getid())
1324 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001325
1326 split
1327 var id = win_getid()
1328 split
1329 :2wincmd o
1330 assert_equal(id, win_getid())
1331 only
1332
1333 split
1334 split
1335 assert_equal(3, winnr('$'))
1336 :2wincmd c
1337 assert_equal(2, winnr('$'))
1338 only
1339
1340 split
1341 split
1342 assert_equal(3, winnr('$'))
1343 :2wincmd q
1344 assert_equal(2, winnr('$'))
1345 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001346enddef
1347
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001348def Test_windo_missing_endif()
1349 var lines =<< trim END
1350 windo if 1
1351 END
1352 CheckDefExecFailure(lines, 'E171:', 1)
1353enddef
1354
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001355let s:theList = [1, 2, 3]
1356
1357def Test_lockvar()
1358 s:theList[1] = 22
1359 assert_equal([1, 22, 3], s:theList)
1360 lockvar s:theList
1361 assert_fails('theList[1] = 77', 'E741:')
1362 unlockvar s:theList
1363 s:theList[1] = 44
1364 assert_equal([1, 44, 3], s:theList)
1365
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001366 var d = {a: 1, b: 2}
1367 d.a = 3
1368 d.b = 4
1369 assert_equal({a: 3, b: 4}, d)
1370 lockvar d.a
1371 d.b = 5
1372 var ex = ''
1373 try
1374 d.a = 6
1375 catch
1376 ex = v:exception
1377 endtry
1378 assert_match('E1121:', ex)
1379 unlockvar d.a
1380 d.a = 7
1381 assert_equal({a: 7, b: 5}, d)
1382
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001383 var lines =<< trim END
1384 vim9script
1385 var theList = [1, 2, 3]
1386 def SetList()
1387 theList[1] = 22
1388 assert_equal([1, 22, 3], theList)
1389 lockvar theList
1390 theList[1] = 77
1391 enddef
1392 SetList()
1393 END
1394 CheckScriptFailure(lines, 'E1119', 4)
1395
1396 lines =<< trim END
1397 var theList = [1, 2, 3]
1398 lockvar theList
1399 END
1400 CheckDefFailure(lines, 'E1178', 2)
1401
1402 lines =<< trim END
1403 var theList = [1, 2, 3]
1404 unlockvar theList
1405 END
1406 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001407
1408 lines =<< trim END
1409 vim9script
1410 var name = 'john'
1411 lockvar nameX
1412 END
1413 CheckScriptFailure(lines, 'E1246', 3)
1414
1415 lines =<< trim END
1416 vim9script
1417 var name = 'john'
1418 def LockIt()
1419 lockvar nameX
1420 enddef
1421 LockIt()
1422 END
1423 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001424enddef
1425
Bram Moolenaar4c137212021-04-19 16:48:48 +02001426def Test_substitute_expr()
1427 var to = 'repl'
1428 new
1429 setline(1, 'one from two')
1430 s/from/\=to
1431 assert_equal('one repl two', getline(1))
1432
1433 setline(1, 'one from two')
1434 s/from/\=to .. '_x'
1435 assert_equal('one repl_x two', getline(1))
1436
1437 setline(1, 'one from two from three')
1438 var also = 'also'
1439 s/from/\=to .. '_' .. also/g#e
1440 assert_equal('one repl_also two repl_also three', getline(1))
1441
Bram Moolenaar8238f082021-04-20 21:10:48 +02001442 setline(1, 'abc abc abc')
1443 for choice in [true, false]
1444 :1s/abc/\=choice ? 'yes' : 'no'/
1445 endfor
1446 assert_equal('yes no abc', getline(1))
1447
Bram Moolenaard386e922021-04-25 14:48:49 +02001448 bwipe!
1449
Bram Moolenaar4c137212021-04-19 16:48:48 +02001450 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1451 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1452
Bram Moolenaard386e922021-04-25 14:48:49 +02001453 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001454 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001455 var lines =<< trim END
1456 vim9script
1457 def Foo()
1458 Bar([])
1459 enddef
1460 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001461 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001462 s/^/\=Rep()/
1463 for n in l[:]
1464 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001465 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001466 enddef
1467 def Rep(): string
1468 return 'rep'
1469 enddef
1470 new
1471 Foo()
1472 assert_equal('rep', getline(1))
1473 bwipe!
1474 END
1475 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001476 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001477
1478 # List results in multiple lines
1479 new
1480 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001481 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001482 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1483 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001484enddef
1485
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001486def Test_redir_to_var()
1487 var result: string
1488 redir => result
1489 echo 'something'
1490 redir END
1491 assert_equal("\nsomething", result)
1492
1493 redir =>> result
1494 echo 'more'
1495 redir END
1496 assert_equal("\nsomething\nmore", result)
1497
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001498 var d: dict<string>
1499 redir => d.redir
1500 echo 'dict'
1501 redir END
1502 assert_equal({redir: "\ndict"}, d)
1503
1504 var l = ['a', 'b', 'c']
1505 redir => l[1]
1506 echo 'list'
1507 redir END
1508 assert_equal(['a', "\nlist", 'c'], l)
1509
1510 var dl = {l: ['x']}
1511 redir => dl.l[0]
1512 echo 'dict-list'
1513 redir END
1514 assert_equal({l: ["\ndict-list"]}, dl)
1515
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001516 redir =>> d.redir
1517 echo 'more'
1518 redir END
1519 assert_equal({redir: "\ndict\nmore"}, d)
1520
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001521 var lines =<< trim END
1522 redir => notexist
1523 END
1524 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001525
1526 lines =<< trim END
1527 var ls = 'asdf'
1528 redir => ls[1]
1529 redir END
1530 END
1531 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001532enddef
1533
Bram Moolenaar68db9962021-05-09 23:19:22 +02001534def Test_echo_void()
1535 var lines =<< trim END
1536 vim9script
1537 def NoReturn()
1538 echo 'nothing'
1539 enddef
1540 echo NoReturn()
1541 END
1542 CheckScriptFailure(lines, 'E1186:', 5)
1543
1544 lines =<< trim END
1545 vim9script
1546 def NoReturn()
1547 echo 'nothing'
1548 enddef
1549 def Try()
1550 echo NoReturn()
1551 enddef
1552 defcompile
1553 END
1554 CheckScriptFailure(lines, 'E1186:', 1)
1555enddef
1556
Bram Moolenaar2c707112021-08-02 22:26:56 +02001557def Test_cmdwin_block()
1558 augroup justTesting
1559 autocmd BufEnter * {
1560 echomsg 'in block'
1561 }
1562 augroup END
1563 feedkeys('q:', 'xt')
1564 redraw
1565 feedkeys("aclose\<CR>", 'xt')
1566
1567 au! justTesting
1568enddef
1569
Bram Moolenaar7b829262021-10-13 15:04:34 +01001570def Test_var_not_cmd()
1571 var lines =<< trim END
1572 g:notexist:cmd
1573 END
1574 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
1575
1576 lines =<< trim END
1577 g-pat-cmd
1578 END
1579 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001580 lines =<< trim END
1581 g.pat.cmd
1582 END
1583 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001584
1585 lines =<< trim END
1586 s:notexist:repl
1587 END
1588 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
1589
1590 lines =<< trim END
1591 s-pat-repl
1592 END
1593 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001594 lines =<< trim END
1595 s.pat.repl
1596 END
1597 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001598
1599 lines =<< trim END
1600 w:notexist->len()
1601 END
1602 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1603
1604 lines =<< trim END
1605 b:notexist->len()
1606 END
1607 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1608
1609 lines =<< trim END
1610 t:notexist->len()
1611 END
1612 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1613enddef
1614
1615def Test_no_space_after_command()
1616 var lines =<< trim END
1617 g /pat/cmd
1618 END
1619 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001620 lines =<< trim END
1621 g #pat#cmd
1622 END
1623 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1624 lines =<< trim END
1625 g#pat#cmd
1626 END
1627 CheckDefAndScriptSuccess(lines)
1628 lines =<< trim END
1629 g# pat#cmd
1630 END
1631 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001632
1633 lines =<< trim END
1634 s /pat/repl
1635 END
1636 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001637 lines =<< trim END
1638 s #pat#repl
1639 END
1640 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1641 lines =<< trim END
1642 s#pat#repl
1643 END
1644 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1645 lines =<< trim END
1646 s# pat#repl
1647 END
1648 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001649enddef
1650
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001651" Test for the 'previewpopup' option
1652def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001653 set previewpopup=height:10,width:60
1654 pedit Xfile
1655 var id = popup_findpreview()
1656 assert_notequal(id, 0)
1657 assert_match('Xfile', popup_getoptions(id).title)
1658 popup_clear()
1659 set previewpopup&
1660enddef
1661
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001662def Test_syntax_enable_clear()
1663 syntax clear
1664 syntax enable
1665 highlight clear String
1666 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1667 syntax clear
1668enddef
1669
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001670
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001671" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker