blob: 45e4fb048a3b5065849c4da5c116ff48f013e975 [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
Bram Moolenaar69535d82021-11-30 21:39:39 +0000285 CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200286
287 lines =<< trim END
288 if g:cond
289 elseif [1]
290 endif
291 END
292 CheckDefFailure(lines, 'E1012:', 2)
293 CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
294
295 lines =<< trim END
296 g:cond = 'text'
297 if 0
298 elseif g:cond
299 endif
300 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100301 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200302
303 lines =<< trim END
304 while 'text'
305 endwhile
306 END
307 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100308 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200309
310 lines =<< trim END
311 while [1]
312 endwhile
313 END
314 CheckDefFailure(lines, 'E1012:', 1)
315 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
316
317 lines =<< trim END
318 g:cond = 'text'
319 while g:cond
320 endwhile
321 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100322 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200323enddef
324
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200325def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200326 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200327 vim9script
328 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200329 true
330 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200331 g:res = 42
332 endif
333 assert_equal(42, g:res)
334 END
335 CheckScriptSuccess(lines)
336 unlet g:res
337
338 lines =<< trim END
339 vim9script
340 if 1 &&
341 0
342 g:res = 0
343 elseif 0 ||
344 0
345 || 1
346 g:res = 12
347 endif
348 assert_equal(12, g:res)
349 END
350 CheckScriptSuccess(lines)
351 unlet g:res
352enddef
353
354def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200355 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200356 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200357 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200358 while nr <
359 10 + 3
360 nr = nr
361 + 4
362 endwhile
363 assert_equal(16, nr)
364 END
365 CheckScriptSuccess(lines)
366
367 lines =<< trim END
368 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200369 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200370 while nr
371 <
372 10
373 +
374 3
375 nr = nr
376 +
377 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200378 endwhile
379 assert_equal(16, nr)
380 END
381 CheckScriptSuccess(lines)
382enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200383
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200384def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200385 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200386 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200387 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200388 for x
389 in
390 [1, 2, 3, 4]
391 nr = nr + x
392 endfor
393 assert_equal(10, nr)
394 END
395 CheckScriptSuccess(lines)
396
397 lines =<< trim END
398 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200399 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200400 for x
401 in
402 [1, 2,
403 3, 4
404 ]
405 nr = nr
406 +
407 x
408 endfor
409 assert_equal(10, nr)
410 END
411 CheckScriptSuccess(lines)
412enddef
413
Bram Moolenaare0890d62021-02-17 14:52:14 +0100414def MethodAfterLinebreak(arg: string)
415 arg
416 ->setline(1)
417enddef
418
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200419def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200420 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200421 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200422 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200423 func RetArg(
424 arg
425 )
426 let s:res = a:arg
427 endfunc
428 [1,
429 2,
430 3]->RetArg()
431 assert_equal([1, 2, 3], res)
432 END
433 CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100434
435 lines =<< trim END
436 new
437 var name = [1, 2]
438 name
439 ->copy()
440 ->setline(1)
441 assert_equal(['1', '2'], getline(1, 2))
442 bwipe!
443 END
444 CheckDefAndScriptSuccess(lines)
445
446 lines =<< trim END
447 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100448 def Foo(): string
449 return 'the text'
450 enddef
451 def Bar(F: func): string
452 return F()
453 enddef
454 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100455 Foo ->Bar()
456 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100457 enddef
458 Test()
459 assert_equal('the text', getline(1))
460 bwipe!
461 END
462 CheckDefAndScriptSuccess(lines)
463
464 lines =<< trim END
465 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100466 g:shortlist
467 ->copy()
468 ->setline(1)
469 assert_equal(['1', '2'], getline(1, 2))
470 bwipe!
471 END
472 g:shortlist = [1, 2]
473 CheckDefAndScriptSuccess(lines)
474 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100475
476 new
477 MethodAfterLinebreak('foobar')
478 assert_equal('foobar', getline(1))
479 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100480
481 lines =<< trim END
482 vim9script
483 def Foo(): string
484 return '# some text'
485 enddef
486
487 def Bar(F: func): string
488 return F()
489 enddef
490
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100491 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100492 ->setline(1)
493 END
494 CheckScriptSuccess(lines)
495 assert_equal('# some text', getline(1))
496 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200497enddef
498
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100499def Test_method_call_whitespace()
500 var lines =<< trim END
501 new
502 var yank = 'text'
503 yank->setline(1)
504 yank ->setline(2)
505 yank-> setline(3)
506 yank -> setline(4)
507 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
508 bwipe!
509 END
510 CheckDefAndScriptSuccess(lines)
511enddef
512
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100513def Test_method_and_user_command()
514 var lines =<< trim END
515 vim9script
516 def Cmd()
517 g:didFunc = 1
518 enddef
519 command Cmd g:didCmd = 1
520 Cmd
521 assert_equal(1, g:didCmd)
522 Cmd()
523 assert_equal(1, g:didFunc)
524 unlet g:didFunc
525 unlet g:didCmd
526
527 def InDefFunc()
528 Cmd
529 assert_equal(1, g:didCmd)
530 Cmd()
531 assert_equal(1, g:didFunc)
532 unlet g:didFunc
533 unlet g:didCmd
534 enddef
535 InDefFunc()
536 END
537 CheckScriptSuccess(lines)
538enddef
539
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200540def Test_option_use_linebreak()
541 var lines =<< trim END
542 new
543 &matchpairs = '(:)'
544 &matchpairs->setline(1)
545 &matchpairs = '[:]'
546 &matchpairs ->setline(2)
547 &matchpairs = '{:}'
548 &matchpairs
549 ->setline(3)
550 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
551 bwipe!
552 END
553 CheckDefAndScriptSuccess(lines)
554enddef
555
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200556def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200557 var lines =<< trim END
558 new
559 @a = 'one'
560 @a->setline(1)
561 @b = 'two'
562 @b ->setline(2)
563 @c = 'three'
564 @c
565 ->setline(3)
566 assert_equal(['one', 'two', 'three'], getline(1, '$'))
567 bwipe!
568 END
569 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200570
571 lines =<< trim END
572 @a = 'echo "text"'
573 @a
574 END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000575 CheckDefAndScriptFailure(lines, 'E1207:', 2)
576
577 lines =<< trim END
578 @/ = 'pattern'
579 @/
580 END
581 CheckDefAndScriptFailure(lines, 'E1207:', 2)
582
583 lines =<< trim END
584 &opfunc = 'nothing'
585 &opfunc
586 END
587 CheckDefAndScriptFailure(lines, 'E1207:', 2)
588 &opfunc = ''
589
590 lines =<< trim END
591 &l:showbreak = 'nothing'
592 &l:showbreak
593 END
594 CheckDefAndScriptFailure(lines, 'E1207:', 2)
595 &l:showbreak = ''
596
597 lines =<< trim END
598 &g:showbreak = 'nothing'
599 &g:showbreak
600 END
601 CheckDefAndScriptFailure(lines, 'E1207:', 2)
602 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000603
604 lines =<< trim END
605 $SomeEnv = 'value'
606 $SomeEnv
607 END
608 CheckDefAndScriptFailure(lines, 'E1207:', 2)
609 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200610enddef
611
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200612def Test_environment_use_linebreak()
613 var lines =<< trim END
614 new
615 $TESTENV = 'one'
616 $TESTENV->setline(1)
617 $TESTENV = 'two'
618 $TESTENV ->setline(2)
619 $TESTENV = 'three'
620 $TESTENV
621 ->setline(3)
622 assert_equal(['one', 'two', 'three'], getline(1, '$'))
623 bwipe!
624 END
625 CheckDefAndScriptSuccess(lines)
626enddef
627
Bram Moolenaar683581e2020-10-22 21:22:58 +0200628def Test_skipped_expr_linebreak()
629 if 0
630 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100631 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200632 endif
633enddef
634
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200635def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100636 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200637 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100638 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200639 test.data
640 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100641 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200642
Bram Moolenaarac564082020-09-27 19:05:33 +0200643 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200644 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100645 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200646 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100647 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200648 END
649 CheckScriptSuccess(lines)
650enddef
651
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200652def Test_bar_after_command()
653 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200654 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200655 redraw | echo x
656 enddef
657 RedrawAndEcho()
658 assert_match('did redraw', Screenline(&lines))
659
Bram Moolenaar788123c2020-07-05 15:32:17 +0200660 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200661 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200662 reg_executing() | echo x
663 enddef
664 CallAndEcho()
665 assert_match('did redraw', Screenline(&lines))
666
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200667 if has('unix')
668 # bar in filter write command does not start new command
669 def WriteToShell()
670 new
671 setline(1, 'some text')
672 w !cat | cat > Xoutfile
673 bwipe!
674 enddef
675 WriteToShell()
676 assert_equal(['some text'], readfile('Xoutfile'))
677 delete('Xoutfile')
678
679 # bar in filter read command does not start new command
680 def ReadFromShell()
681 new
682 r! echo hello there | cat > Xoutfile
683 r !echo again | cat >> Xoutfile
684 bwipe!
685 enddef
686 ReadFromShell()
687 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
688 delete('Xoutfile')
689 endif
690enddef
691
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200692def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100693 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100694 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100695 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200696enddef
697
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100698def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100699 var lines =<< trim END
700 final expected = "\nType Name Content\n c \"c piyo"
701 @a = 'hoge'
702 @b = 'fuga'
703 @c = 'piyo'
704
705 assert_equal(execute('filter /piyo/ registers abc'), expected)
706 END
707 CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200708
709 # also do this compiled
710 lines =<< trim END
711 @a = 'very specific z3d37dh234 string'
712 filter z3d37dh234 registers
713 assert_match('very specific z3d37dh234 string', Screenline(&lines))
714 END
715 CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000716
717 lines =<< trim END
718 edit foobar
719 redir => g:filter_out
720 filter #foobar# ls
721 redir END
722 assert_match('"foobar"', g:filter_out)
723 unlet g:filter_out
724 END
725 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100726enddef
727
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100728def Test_win_command_modifiers()
729 assert_equal(1, winnr('$'))
730
731 set splitright
732 vsplit
733 assert_equal(2, winnr())
734 close
735 aboveleft vsplit
736 assert_equal(1, winnr())
737 close
738 set splitright&
739
740 vsplit
741 assert_equal(1, winnr())
742 close
743 belowright vsplit
744 assert_equal(2, winnr())
745 close
746 rightbelow vsplit
747 assert_equal(2, winnr())
748 close
749
Bram Moolenaar97a19002020-11-01 22:15:44 +0100750 if has('browse')
751 browse set
752 assert_equal('option-window', expand('%'))
753 close
754 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100755
756 vsplit
757 botright split
758 assert_equal(3, winnr())
759 assert_equal(&columns, winwidth(0))
760 close
761 close
762
763 vsplit
764 topleft split
765 assert_equal(1, winnr())
766 assert_equal(&columns, winwidth(0))
767 close
768 close
769
770 gettabinfo()->len()->assert_equal(1)
771 tab split
772 gettabinfo()->len()->assert_equal(2)
773 tabclose
774
775 vertical new
776 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
777 close
778enddef
779
780func Test_command_modifier_confirm()
781 CheckNotGui
782 CheckRunVimInTerminal
783
784 " Test for saving all the modified buffers
785 let lines =<< trim END
786 call setline(1, 'changed')
787 def Getout()
788 confirm write Xfile
789 enddef
790 END
791 call writefile(lines, 'Xconfirmscript')
792 call writefile(['empty'], 'Xfile')
793 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
794 call term_sendkeys(buf, ":call Getout()\n")
795 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
796 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100797 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
798 call term_sendkeys(buf, "\<CR>")
799 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100800 call StopVimInTerminal(buf)
801
802 call assert_equal(['changed'], readfile('Xfile'))
803 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100804 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100805 call delete('Xconfirmscript')
806endfunc
807
808def Test_command_modifiers_keep()
809 if has('unix')
810 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
811 new
812 setline(1, ['one', 'two', 'three'])
813 normal 1Gma
814 normal 2Gmb
815 normal 3Gmc
816 if addRflag
817 set cpo+=R
818 else
819 set cpo-=R
820 endif
821 if keepMarks
822 keepmarks :%!cat
823 else
824 :%!cat
825 endif
826 if hasMarks
827 assert_equal(1, line("'a"))
828 assert_equal(2, line("'b"))
829 assert_equal(3, line("'c"))
830 else
831 assert_equal(0, line("'a"))
832 assert_equal(0, line("'b"))
833 assert_equal(0, line("'c"))
834 endif
835 quit!
836 enddef
837 DoTest(false, false, true)
838 DoTest(true, false, false)
839 DoTest(false, true, true)
840 DoTest(true, true, true)
841 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100842
843 new
844 setline(1, ['one', 'two', 'three', 'four'])
845 assert_equal(4, line("$"))
846 normal 1Gma
847 normal 2Gmb
848 normal 3Gmc
849 lockmarks :1,2!wc
850 # line is deleted, marks don't move
851 assert_equal(3, line("$"))
852 assert_equal('four', getline(3))
853 assert_equal(1, line("'a"))
854 assert_equal(2, line("'b"))
855 assert_equal(3, line("'c"))
856 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100857 endif
858
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100859 edit Xone
860 edit Xtwo
861 assert_equal('Xone', expand('#'))
862 keepalt edit Xthree
863 assert_equal('Xone', expand('#'))
864
865 normal /a*b*
866 assert_equal('a*b*', histget("search"))
867 keeppatterns normal /c*d*
868 assert_equal('a*b*', histget("search"))
869
870 new
871 setline(1, range(10))
872 :10
873 normal gg
874 assert_equal(10, getpos("''")[1])
875 keepjumps normal 5G
876 assert_equal(10, getpos("''")[1])
877 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100878enddef
879
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100880def Test_bar_line_continuation()
881 var lines =<< trim END
882 au BufNewFile Xfile g:readFile = 1
883 | g:readExtra = 2
884 g:readFile = 0
885 g:readExtra = 0
886 edit Xfile
887 assert_equal(1, g:readFile)
888 assert_equal(2, g:readExtra)
889 bwipe!
890 au! BufNewFile
891
892 au BufNewFile Xfile g:readFile = 1
893 | g:readExtra = 2
894 | g:readMore = 3
895 g:readFile = 0
896 g:readExtra = 0
897 g:readMore = 0
898 edit Xfile
899 assert_equal(1, g:readFile)
900 assert_equal(2, g:readExtra)
901 assert_equal(3, g:readMore)
902 bwipe!
903 au! BufNewFile
904 unlet g:readFile
905 unlet g:readExtra
906 unlet g:readMore
907 END
908 CheckDefAndScriptSuccess(lines)
909enddef
910
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100911def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100912 new Xsomefile
913 setline(1, 'changed')
914 var buf = bufnr()
915 hide edit Xotherfile
916 var info = getbufinfo(buf)
917 assert_equal(1, info[0].hidden)
918 assert_equal(1, info[0].changed)
919 edit Xsomefile
920 bwipe!
921
922 au BufNewFile Xfile g:readFile = 1
923 g:readFile = 0
924 edit Xfile
925 assert_equal(1, g:readFile)
926 bwipe!
927 g:readFile = 0
928 noautocmd edit Xfile
929 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100930 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100931 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100932
933 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100934 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100935 bwipe!
936
937 var caught = false
938 try
939 sandbox !ls
940 catch /E48:/
941 caught = true
942 endtry
943 assert_true(caught)
944
945 :8verbose g:verbose_now = &verbose
946 assert_equal(8, g:verbose_now)
947 unlet g:verbose_now
948enddef
949
950def EchoHere()
951 echomsg 'here'
952enddef
953def EchoThere()
954 unsilent echomsg 'there'
955enddef
956
957def Test_modifier_silent_unsilent()
958 echomsg 'last one'
959 silent echomsg "text"
960 assert_equal("\nlast one", execute(':1messages'))
961
962 silent! echoerr "error"
963
964 echomsg 'last one'
965 silent EchoHere()
966 assert_equal("\nlast one", execute(':1messages'))
967
968 silent EchoThere()
969 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100970
971 try
972 silent eval [][0]
973 catch
974 echomsg "caught"
975 endtry
976 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200977
978 var lines =<< trim END
979 vim9script
980 set history=11
981 silent! while 0
982 set history=22
983 silent! endwhile
984 assert_equal(11, &history)
985 set history&
986 END
987 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100988enddef
989
Bram Moolenaar36113e42020-11-02 21:08:47 +0100990def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +0100991 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +0100992 new
993 setline(1, 'xxx')
994 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
995 assert_equal('', getline(1))
996 bwipe!
997enddef
998
Bram Moolenaarece0b872021-01-08 20:40:45 +0100999def Test_silent_pattern()
1000 new
1001 silent! :/pat/put _
1002 bwipe!
1003enddef
1004
Bram Moolenaarfa984412021-03-25 22:15:28 +01001005def Test_useless_command_modifier()
1006 g:maybe = true
1007 var lines =<< trim END
1008 if g:maybe
1009 silent endif
1010 END
1011 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1012
1013 lines =<< trim END
1014 for i in [0]
1015 silent endfor
1016 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001017 CheckDefFailure(lines, 'E1176:', 2)
1018 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001019
1020 lines =<< trim END
1021 while g:maybe
1022 silent endwhile
1023 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001024 CheckDefFailure(lines, 'E1176:', 2)
1025 g:maybe = false
1026 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001027
1028 lines =<< trim END
1029 silent try
1030 finally
1031 endtry
1032 END
1033 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1034
1035 lines =<< trim END
1036 try
1037 silent catch
1038 endtry
1039 END
1040 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1041
1042 lines =<< trim END
1043 try
1044 silent finally
1045 endtry
1046 END
1047 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1048
1049 lines =<< trim END
1050 try
1051 finally
1052 silent endtry
1053 END
1054 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1055enddef
1056
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001057def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001058 var from = 3
1059 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001060 g:val = 111
1061 def Increment(nrs: list<number>)
1062 for nr in nrs
1063 g:val += nr
1064 endfor
1065 enddef
1066 eval range(from, to)
1067 ->Increment()
1068 assert_equal(111 + 3 + 4 + 5, g:val)
1069 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001070
1071 var lines =<< trim END
1072 vim9script
1073 g:caught = 'no'
1074 try
1075 eval 123 || 0
1076 catch
1077 g:caught = 'yes'
1078 endtry
1079 assert_equal('yes', g:caught)
1080 unlet g:caught
1081 END
1082 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001083enddef
1084
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001085def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001086 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001087 nnoremap <F3> :echo 'hit F3 #'<CR>
1088 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1089 END
1090 CheckDefSuccess(lines)
1091 CheckScriptSuccess(['vim9script'] + lines)
1092enddef
1093
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001094def Test_normal_command()
1095 new
1096 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001097 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001098 try
1099 exe "norm! \<C-]>"
1100 catch /E433/
1101 caught = 2
1102 endtry
1103 assert_equal(2, caught)
1104
1105 try
1106 exe "norm! 3\<C-]>"
1107 catch /E433/
1108 caught = 3
1109 endtry
1110 assert_equal(3, caught)
1111 bwipe!
1112enddef
1113
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001114def Test_put_command()
1115 new
1116 @p = 'ppp'
1117 put p
1118 assert_equal('ppp', getline(2))
1119
1120 put ='below'
1121 assert_equal('below', getline(3))
1122 put! ='above'
1123 assert_equal('above', getline(3))
1124 assert_equal('below', getline(4))
1125
Bram Moolenaar883cf972021-01-15 18:04:43 +01001126 :2put =['a', 'b', 'c']
1127 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1128
Bram Moolenaar08597872020-12-10 19:43:40 +01001129 # compute range at runtime
1130 setline(1, range(1, 8))
1131 @a = 'aaa'
1132 :$-2put a
1133 assert_equal('aaa', getline(7))
1134
1135 setline(1, range(1, 8))
1136 :2
1137 :+2put! a
1138 assert_equal('aaa', getline(4))
1139
Bram Moolenaara28639e2021-01-19 22:48:09 +01001140 []->mapnew(() => 0)
1141 :$put ='end'
1142 assert_equal('end', getline('$'))
1143
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001144 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001145
1146 CheckDefFailure(['put =xxx'], 'E1001:')
1147enddef
1148
1149def Test_put_with_linebreak()
1150 new
1151 var lines =<< trim END
1152 vim9script
1153 pu =split('abc', '\zs')
1154 ->join()
1155 END
1156 CheckScriptSuccess(lines)
1157 getline(2)->assert_equal('a b c')
1158 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001159enddef
1160
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001161def Test_command_star_range()
1162 new
1163 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1164 setpos("'<", [0, 1, 0, 0])
1165 setpos("'>", [0, 3, 0, 0])
1166 :*s/\(foo\|bar\)/baz/g
1167 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1168
1169 bwipe!
1170enddef
1171
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001172def Test_f_args()
1173 var lines =<< trim END
1174 vim9script
1175
1176 func SaveCmdArgs(...)
1177 let g:args = a:000
1178 endfunc
1179
1180 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1181
1182 TestFArgs
1183 assert_equal([], g:args)
1184
1185 TestFArgs one two three
1186 assert_equal(['one', 'two', 'three'], g:args)
1187 END
1188 CheckScriptSuccess(lines)
1189enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001190
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001191def Test_user_command_comment()
1192 command -nargs=1 Comd echom <q-args>
1193
1194 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001195 vim9script
1196 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001197 END
1198 CheckScriptSuccess(lines)
1199
1200 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001201 vim9script
1202 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001203 END
1204 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001205 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001206
1207 lines =<< trim END
1208 vim9script
1209 command Foo echo 'Foo'
1210 Foo3Bar
1211 END
1212 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1213
1214 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001215enddef
1216
Bram Moolenaar95388e32020-11-20 21:07:00 +01001217def Test_star_command()
1218 var lines =<< trim END
1219 vim9script
1220 @s = 'g:success = 8'
1221 set cpo+=*
1222 exe '*s'
1223 assert_equal(8, g:success)
1224 unlet g:success
1225 set cpo-=*
1226 assert_fails("exe '*s'", 'E1050:')
1227 END
1228 CheckScriptSuccess(lines)
1229enddef
1230
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001231def Test_cmd_argument_without_colon()
1232 new Xfile
1233 setline(1, ['a', 'b', 'c', 'd'])
1234 write
1235 edit +3 %
1236 assert_equal(3, getcurpos()[1])
1237 edit +/a %
1238 assert_equal(1, getcurpos()[1])
1239 bwipe
1240 delete('Xfile')
1241enddef
1242
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001243def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001244 command Cmd1 eval 0
1245 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001246 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001247 Cmd
1248 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001249 CheckDefAndScriptFailure(lines, 'E464:', 1)
1250 delcommand Cmd1
1251 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001252enddef
1253
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001254def Test_command_not_recognized()
1255 var lines =<< trim END
1256 d.key = 'asdf'
1257 END
1258 CheckDefFailure(lines, 'E1146:', 1)
1259
1260 lines =<< trim END
1261 d['key'] = 'asdf'
1262 END
1263 CheckDefFailure(lines, 'E1146:', 1)
1264enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001265
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001266def Test_magic_not_used()
1267 new
1268 for cmd in ['set magic', 'set nomagic']
1269 exe cmd
1270 setline(1, 'aaa')
1271 s/.../bbb/
1272 assert_equal('bbb', getline(1))
1273 endfor
1274
1275 set magic
1276 setline(1, 'aaa')
1277 assert_fails('s/.\M../bbb/', 'E486:')
1278 assert_fails('snomagic/.../bbb/', 'E486:')
1279 assert_equal('aaa', getline(1))
1280
1281 bwipe!
1282enddef
1283
Bram Moolenaar60f63102020-12-21 20:32:43 +01001284def Test_gdefault_not_used()
1285 new
1286 for cmd in ['set gdefault', 'set nogdefault']
1287 exe cmd
1288 setline(1, 'aaa')
1289 s/./b/
1290 assert_equal('baa', getline(1))
1291 endfor
1292
1293 set nogdefault
1294 bwipe!
1295enddef
1296
Bram Moolenaar179eb562020-12-27 18:03:22 +01001297def g:SomeComplFunc(findstart: number, base: string): any
1298 if findstart
1299 return 0
1300 else
1301 return ['aaa', 'bbb']
1302 endif
1303enddef
1304
1305def Test_insert_complete()
1306 # this was running into an error with the matchparen hack
1307 new
1308 set completefunc=SomeComplFunc
1309 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1310 assert_equal('aaa', getline(1))
1311
1312 set completefunc=
1313 bwipe!
1314enddef
1315
Bram Moolenaara11919f2021-01-02 19:44:56 +01001316def Test_wincmd()
1317 split
1318 var id1 = win_getid()
1319 if true
1320 try | wincmd w | catch | endtry
1321 endif
1322 assert_notequal(id1, win_getid())
1323 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001324
1325 split
1326 var id = win_getid()
1327 split
1328 :2wincmd o
1329 assert_equal(id, win_getid())
1330 only
1331
1332 split
1333 split
1334 assert_equal(3, winnr('$'))
1335 :2wincmd c
1336 assert_equal(2, winnr('$'))
1337 only
1338
1339 split
1340 split
1341 assert_equal(3, winnr('$'))
1342 :2wincmd q
1343 assert_equal(2, winnr('$'))
1344 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001345enddef
1346
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001347def Test_windo_missing_endif()
1348 var lines =<< trim END
1349 windo if 1
1350 END
1351 CheckDefExecFailure(lines, 'E171:', 1)
1352enddef
1353
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001354let s:theList = [1, 2, 3]
1355
1356def Test_lockvar()
1357 s:theList[1] = 22
1358 assert_equal([1, 22, 3], s:theList)
1359 lockvar s:theList
1360 assert_fails('theList[1] = 77', 'E741:')
1361 unlockvar s:theList
1362 s:theList[1] = 44
1363 assert_equal([1, 44, 3], s:theList)
1364
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001365 var d = {a: 1, b: 2}
1366 d.a = 3
1367 d.b = 4
1368 assert_equal({a: 3, b: 4}, d)
1369 lockvar d.a
1370 d.b = 5
1371 var ex = ''
1372 try
1373 d.a = 6
1374 catch
1375 ex = v:exception
1376 endtry
1377 assert_match('E1121:', ex)
1378 unlockvar d.a
1379 d.a = 7
1380 assert_equal({a: 7, b: 5}, d)
1381
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001382 var lines =<< trim END
1383 vim9script
1384 var theList = [1, 2, 3]
1385 def SetList()
1386 theList[1] = 22
1387 assert_equal([1, 22, 3], theList)
1388 lockvar theList
1389 theList[1] = 77
1390 enddef
1391 SetList()
1392 END
1393 CheckScriptFailure(lines, 'E1119', 4)
1394
1395 lines =<< trim END
1396 var theList = [1, 2, 3]
1397 lockvar theList
1398 END
1399 CheckDefFailure(lines, 'E1178', 2)
1400
1401 lines =<< trim END
1402 var theList = [1, 2, 3]
1403 unlockvar theList
1404 END
1405 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001406
1407 lines =<< trim END
1408 vim9script
1409 var name = 'john'
1410 lockvar nameX
1411 END
1412 CheckScriptFailure(lines, 'E1246', 3)
1413
1414 lines =<< trim END
1415 vim9script
1416 var name = 'john'
1417 def LockIt()
1418 lockvar nameX
1419 enddef
1420 LockIt()
1421 END
1422 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001423enddef
1424
Bram Moolenaar4c137212021-04-19 16:48:48 +02001425def Test_substitute_expr()
1426 var to = 'repl'
1427 new
1428 setline(1, 'one from two')
1429 s/from/\=to
1430 assert_equal('one repl two', getline(1))
1431
1432 setline(1, 'one from two')
1433 s/from/\=to .. '_x'
1434 assert_equal('one repl_x two', getline(1))
1435
1436 setline(1, 'one from two from three')
1437 var also = 'also'
1438 s/from/\=to .. '_' .. also/g#e
1439 assert_equal('one repl_also two repl_also three', getline(1))
1440
Bram Moolenaar8238f082021-04-20 21:10:48 +02001441 setline(1, 'abc abc abc')
1442 for choice in [true, false]
1443 :1s/abc/\=choice ? 'yes' : 'no'/
1444 endfor
1445 assert_equal('yes no abc', getline(1))
1446
Bram Moolenaard386e922021-04-25 14:48:49 +02001447 bwipe!
1448
Bram Moolenaar4c137212021-04-19 16:48:48 +02001449 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1450 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1451
Bram Moolenaard386e922021-04-25 14:48:49 +02001452 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001453 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001454 var lines =<< trim END
1455 vim9script
1456 def Foo()
1457 Bar([])
1458 enddef
1459 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001460 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001461 s/^/\=Rep()/
1462 for n in l[:]
1463 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001464 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001465 enddef
1466 def Rep(): string
1467 return 'rep'
1468 enddef
1469 new
1470 Foo()
1471 assert_equal('rep', getline(1))
1472 bwipe!
1473 END
1474 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001475 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001476
1477 # List results in multiple lines
1478 new
1479 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001480 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001481 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1482 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001483enddef
1484
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001485def Test_redir_to_var()
1486 var result: string
1487 redir => result
1488 echo 'something'
1489 redir END
1490 assert_equal("\nsomething", result)
1491
1492 redir =>> result
1493 echo 'more'
1494 redir END
1495 assert_equal("\nsomething\nmore", result)
1496
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001497 var d: dict<string>
1498 redir => d.redir
1499 echo 'dict'
1500 redir END
1501 assert_equal({redir: "\ndict"}, d)
1502
1503 var l = ['a', 'b', 'c']
1504 redir => l[1]
1505 echo 'list'
1506 redir END
1507 assert_equal(['a', "\nlist", 'c'], l)
1508
1509 var dl = {l: ['x']}
1510 redir => dl.l[0]
1511 echo 'dict-list'
1512 redir END
1513 assert_equal({l: ["\ndict-list"]}, dl)
1514
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001515 redir =>> d.redir
1516 echo 'more'
1517 redir END
1518 assert_equal({redir: "\ndict\nmore"}, d)
1519
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001520 var lines =<< trim END
1521 redir => notexist
1522 END
1523 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001524
1525 lines =<< trim END
1526 var ls = 'asdf'
1527 redir => ls[1]
1528 redir END
1529 END
1530 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001531enddef
1532
Bram Moolenaar68db9962021-05-09 23:19:22 +02001533def Test_echo_void()
1534 var lines =<< trim END
1535 vim9script
1536 def NoReturn()
1537 echo 'nothing'
1538 enddef
1539 echo NoReturn()
1540 END
1541 CheckScriptFailure(lines, 'E1186:', 5)
1542
1543 lines =<< trim END
1544 vim9script
1545 def NoReturn()
1546 echo 'nothing'
1547 enddef
1548 def Try()
1549 echo NoReturn()
1550 enddef
1551 defcompile
1552 END
1553 CheckScriptFailure(lines, 'E1186:', 1)
1554enddef
1555
Bram Moolenaar2c707112021-08-02 22:26:56 +02001556def Test_cmdwin_block()
1557 augroup justTesting
1558 autocmd BufEnter * {
1559 echomsg 'in block'
1560 }
1561 augroup END
1562 feedkeys('q:', 'xt')
1563 redraw
1564 feedkeys("aclose\<CR>", 'xt')
1565
1566 au! justTesting
1567enddef
1568
Bram Moolenaar7b829262021-10-13 15:04:34 +01001569def Test_var_not_cmd()
1570 var lines =<< trim END
1571 g:notexist:cmd
1572 END
1573 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
1574
1575 lines =<< trim END
1576 g-pat-cmd
1577 END
1578 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001579 lines =<< trim END
1580 g.pat.cmd
1581 END
1582 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001583
1584 lines =<< trim END
1585 s:notexist:repl
1586 END
1587 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
1588
1589 lines =<< trim END
1590 s-pat-repl
1591 END
1592 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001593 lines =<< trim END
1594 s.pat.repl
1595 END
1596 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001597
1598 lines =<< trim END
1599 w:notexist->len()
1600 END
1601 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1602
1603 lines =<< trim END
1604 b:notexist->len()
1605 END
1606 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1607
1608 lines =<< trim END
1609 t:notexist->len()
1610 END
1611 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1612enddef
1613
1614def Test_no_space_after_command()
1615 var lines =<< trim END
1616 g /pat/cmd
1617 END
1618 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001619 lines =<< trim END
1620 g #pat#cmd
1621 END
1622 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1623 lines =<< trim END
1624 g#pat#cmd
1625 END
1626 CheckDefAndScriptSuccess(lines)
1627 lines =<< trim END
1628 g# pat#cmd
1629 END
1630 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001631
1632 lines =<< trim END
1633 s /pat/repl
1634 END
1635 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001636 lines =<< trim END
1637 s #pat#repl
1638 END
1639 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1640 lines =<< trim END
1641 s#pat#repl
1642 END
1643 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1644 lines =<< trim END
1645 s# pat#repl
1646 END
1647 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001648enddef
1649
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001650" Test for the 'previewpopup' option
1651def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001652 set previewpopup=height:10,width:60
1653 pedit Xfile
1654 var id = popup_findpreview()
1655 assert_notequal(id, 0)
1656 assert_match('Xfile', popup_getoptions(id).title)
1657 popup_clear()
1658 set previewpopup&
1659enddef
1660
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001661def Test_syntax_enable_clear()
1662 syntax clear
1663 syntax enable
1664 highlight clear String
1665 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1666 syntax clear
1667enddef
1668
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001669
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001670" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker