blob: 7a05189db8816c91a3f0f52aaacc9530f3813b6f [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 Moolenaar4f6b6ed2020-10-29 20:24:34 +0100717enddef
718
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100719def Test_win_command_modifiers()
720 assert_equal(1, winnr('$'))
721
722 set splitright
723 vsplit
724 assert_equal(2, winnr())
725 close
726 aboveleft vsplit
727 assert_equal(1, winnr())
728 close
729 set splitright&
730
731 vsplit
732 assert_equal(1, winnr())
733 close
734 belowright vsplit
735 assert_equal(2, winnr())
736 close
737 rightbelow vsplit
738 assert_equal(2, winnr())
739 close
740
Bram Moolenaar97a19002020-11-01 22:15:44 +0100741 if has('browse')
742 browse set
743 assert_equal('option-window', expand('%'))
744 close
745 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100746
747 vsplit
748 botright split
749 assert_equal(3, winnr())
750 assert_equal(&columns, winwidth(0))
751 close
752 close
753
754 vsplit
755 topleft split
756 assert_equal(1, winnr())
757 assert_equal(&columns, winwidth(0))
758 close
759 close
760
761 gettabinfo()->len()->assert_equal(1)
762 tab split
763 gettabinfo()->len()->assert_equal(2)
764 tabclose
765
766 vertical new
767 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
768 close
769enddef
770
771func Test_command_modifier_confirm()
772 CheckNotGui
773 CheckRunVimInTerminal
774
775 " Test for saving all the modified buffers
776 let lines =<< trim END
777 call setline(1, 'changed')
778 def Getout()
779 confirm write Xfile
780 enddef
781 END
782 call writefile(lines, 'Xconfirmscript')
783 call writefile(['empty'], 'Xfile')
784 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
785 call term_sendkeys(buf, ":call Getout()\n")
786 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
787 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100788 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
789 call term_sendkeys(buf, "\<CR>")
790 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100791 call StopVimInTerminal(buf)
792
793 call assert_equal(['changed'], readfile('Xfile'))
794 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100795 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100796 call delete('Xconfirmscript')
797endfunc
798
799def Test_command_modifiers_keep()
800 if has('unix')
801 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
802 new
803 setline(1, ['one', 'two', 'three'])
804 normal 1Gma
805 normal 2Gmb
806 normal 3Gmc
807 if addRflag
808 set cpo+=R
809 else
810 set cpo-=R
811 endif
812 if keepMarks
813 keepmarks :%!cat
814 else
815 :%!cat
816 endif
817 if hasMarks
818 assert_equal(1, line("'a"))
819 assert_equal(2, line("'b"))
820 assert_equal(3, line("'c"))
821 else
822 assert_equal(0, line("'a"))
823 assert_equal(0, line("'b"))
824 assert_equal(0, line("'c"))
825 endif
826 quit!
827 enddef
828 DoTest(false, false, true)
829 DoTest(true, false, false)
830 DoTest(false, true, true)
831 DoTest(true, true, true)
832 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100833
834 new
835 setline(1, ['one', 'two', 'three', 'four'])
836 assert_equal(4, line("$"))
837 normal 1Gma
838 normal 2Gmb
839 normal 3Gmc
840 lockmarks :1,2!wc
841 # line is deleted, marks don't move
842 assert_equal(3, line("$"))
843 assert_equal('four', getline(3))
844 assert_equal(1, line("'a"))
845 assert_equal(2, line("'b"))
846 assert_equal(3, line("'c"))
847 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100848 endif
849
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100850 edit Xone
851 edit Xtwo
852 assert_equal('Xone', expand('#'))
853 keepalt edit Xthree
854 assert_equal('Xone', expand('#'))
855
856 normal /a*b*
857 assert_equal('a*b*', histget("search"))
858 keeppatterns normal /c*d*
859 assert_equal('a*b*', histget("search"))
860
861 new
862 setline(1, range(10))
863 :10
864 normal gg
865 assert_equal(10, getpos("''")[1])
866 keepjumps normal 5G
867 assert_equal(10, getpos("''")[1])
868 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100869enddef
870
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100871def Test_bar_line_continuation()
872 var lines =<< trim END
873 au BufNewFile Xfile g:readFile = 1
874 | g:readExtra = 2
875 g:readFile = 0
876 g:readExtra = 0
877 edit Xfile
878 assert_equal(1, g:readFile)
879 assert_equal(2, g:readExtra)
880 bwipe!
881 au! BufNewFile
882
883 au BufNewFile Xfile g:readFile = 1
884 | g:readExtra = 2
885 | g:readMore = 3
886 g:readFile = 0
887 g:readExtra = 0
888 g:readMore = 0
889 edit Xfile
890 assert_equal(1, g:readFile)
891 assert_equal(2, g:readExtra)
892 assert_equal(3, g:readMore)
893 bwipe!
894 au! BufNewFile
895 unlet g:readFile
896 unlet g:readExtra
897 unlet g:readMore
898 END
899 CheckDefAndScriptSuccess(lines)
900enddef
901
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100902def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100903 new Xsomefile
904 setline(1, 'changed')
905 var buf = bufnr()
906 hide edit Xotherfile
907 var info = getbufinfo(buf)
908 assert_equal(1, info[0].hidden)
909 assert_equal(1, info[0].changed)
910 edit Xsomefile
911 bwipe!
912
913 au BufNewFile Xfile g:readFile = 1
914 g:readFile = 0
915 edit Xfile
916 assert_equal(1, g:readFile)
917 bwipe!
918 g:readFile = 0
919 noautocmd edit Xfile
920 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100921 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100922 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100923
924 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100925 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100926 bwipe!
927
928 var caught = false
929 try
930 sandbox !ls
931 catch /E48:/
932 caught = true
933 endtry
934 assert_true(caught)
935
936 :8verbose g:verbose_now = &verbose
937 assert_equal(8, g:verbose_now)
938 unlet g:verbose_now
939enddef
940
941def EchoHere()
942 echomsg 'here'
943enddef
944def EchoThere()
945 unsilent echomsg 'there'
946enddef
947
948def Test_modifier_silent_unsilent()
949 echomsg 'last one'
950 silent echomsg "text"
951 assert_equal("\nlast one", execute(':1messages'))
952
953 silent! echoerr "error"
954
955 echomsg 'last one'
956 silent EchoHere()
957 assert_equal("\nlast one", execute(':1messages'))
958
959 silent EchoThere()
960 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100961
962 try
963 silent eval [][0]
964 catch
965 echomsg "caught"
966 endtry
967 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200968
969 var lines =<< trim END
970 vim9script
971 set history=11
972 silent! while 0
973 set history=22
974 silent! endwhile
975 assert_equal(11, &history)
976 set history&
977 END
978 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100979enddef
980
Bram Moolenaar36113e42020-11-02 21:08:47 +0100981def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +0100982 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +0100983 new
984 setline(1, 'xxx')
985 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
986 assert_equal('', getline(1))
987 bwipe!
988enddef
989
Bram Moolenaarece0b872021-01-08 20:40:45 +0100990def Test_silent_pattern()
991 new
992 silent! :/pat/put _
993 bwipe!
994enddef
995
Bram Moolenaarfa984412021-03-25 22:15:28 +0100996def Test_useless_command_modifier()
997 g:maybe = true
998 var lines =<< trim END
999 if g:maybe
1000 silent endif
1001 END
1002 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1003
1004 lines =<< trim END
1005 for i in [0]
1006 silent endfor
1007 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001008 CheckDefFailure(lines, 'E1176:', 2)
1009 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001010
1011 lines =<< trim END
1012 while g:maybe
1013 silent endwhile
1014 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001015 CheckDefFailure(lines, 'E1176:', 2)
1016 g:maybe = false
1017 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001018
1019 lines =<< trim END
1020 silent try
1021 finally
1022 endtry
1023 END
1024 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1025
1026 lines =<< trim END
1027 try
1028 silent catch
1029 endtry
1030 END
1031 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1032
1033 lines =<< trim END
1034 try
1035 silent finally
1036 endtry
1037 END
1038 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1039
1040 lines =<< trim END
1041 try
1042 finally
1043 silent endtry
1044 END
1045 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1046enddef
1047
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001048def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001049 var from = 3
1050 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001051 g:val = 111
1052 def Increment(nrs: list<number>)
1053 for nr in nrs
1054 g:val += nr
1055 endfor
1056 enddef
1057 eval range(from, to)
1058 ->Increment()
1059 assert_equal(111 + 3 + 4 + 5, g:val)
1060 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001061
1062 var lines =<< trim END
1063 vim9script
1064 g:caught = 'no'
1065 try
1066 eval 123 || 0
1067 catch
1068 g:caught = 'yes'
1069 endtry
1070 assert_equal('yes', g:caught)
1071 unlet g:caught
1072 END
1073 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001074enddef
1075
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001076def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001077 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001078 nnoremap <F3> :echo 'hit F3 #'<CR>
1079 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1080 END
1081 CheckDefSuccess(lines)
1082 CheckScriptSuccess(['vim9script'] + lines)
1083enddef
1084
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001085def Test_normal_command()
1086 new
1087 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001088 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001089 try
1090 exe "norm! \<C-]>"
1091 catch /E433/
1092 caught = 2
1093 endtry
1094 assert_equal(2, caught)
1095
1096 try
1097 exe "norm! 3\<C-]>"
1098 catch /E433/
1099 caught = 3
1100 endtry
1101 assert_equal(3, caught)
1102 bwipe!
1103enddef
1104
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001105def Test_put_command()
1106 new
1107 @p = 'ppp'
1108 put p
1109 assert_equal('ppp', getline(2))
1110
1111 put ='below'
1112 assert_equal('below', getline(3))
1113 put! ='above'
1114 assert_equal('above', getline(3))
1115 assert_equal('below', getline(4))
1116
Bram Moolenaar883cf972021-01-15 18:04:43 +01001117 :2put =['a', 'b', 'c']
1118 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1119
Bram Moolenaar08597872020-12-10 19:43:40 +01001120 # compute range at runtime
1121 setline(1, range(1, 8))
1122 @a = 'aaa'
1123 :$-2put a
1124 assert_equal('aaa', getline(7))
1125
1126 setline(1, range(1, 8))
1127 :2
1128 :+2put! a
1129 assert_equal('aaa', getline(4))
1130
Bram Moolenaara28639e2021-01-19 22:48:09 +01001131 []->mapnew(() => 0)
1132 :$put ='end'
1133 assert_equal('end', getline('$'))
1134
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001135 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001136
1137 CheckDefFailure(['put =xxx'], 'E1001:')
1138enddef
1139
1140def Test_put_with_linebreak()
1141 new
1142 var lines =<< trim END
1143 vim9script
1144 pu =split('abc', '\zs')
1145 ->join()
1146 END
1147 CheckScriptSuccess(lines)
1148 getline(2)->assert_equal('a b c')
1149 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001150enddef
1151
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001152def Test_command_star_range()
1153 new
1154 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1155 setpos("'<", [0, 1, 0, 0])
1156 setpos("'>", [0, 3, 0, 0])
1157 :*s/\(foo\|bar\)/baz/g
1158 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1159
1160 bwipe!
1161enddef
1162
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001163def Test_f_args()
1164 var lines =<< trim END
1165 vim9script
1166
1167 func SaveCmdArgs(...)
1168 let g:args = a:000
1169 endfunc
1170
1171 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1172
1173 TestFArgs
1174 assert_equal([], g:args)
1175
1176 TestFArgs one two three
1177 assert_equal(['one', 'two', 'three'], g:args)
1178 END
1179 CheckScriptSuccess(lines)
1180enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001181
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001182def Test_user_command_comment()
1183 command -nargs=1 Comd echom <q-args>
1184
1185 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001186 vim9script
1187 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001188 END
1189 CheckScriptSuccess(lines)
1190
1191 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001192 vim9script
1193 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001194 END
1195 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001196 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001197
1198 lines =<< trim END
1199 vim9script
1200 command Foo echo 'Foo'
1201 Foo3Bar
1202 END
1203 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1204
1205 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001206enddef
1207
Bram Moolenaar95388e32020-11-20 21:07:00 +01001208def Test_star_command()
1209 var lines =<< trim END
1210 vim9script
1211 @s = 'g:success = 8'
1212 set cpo+=*
1213 exe '*s'
1214 assert_equal(8, g:success)
1215 unlet g:success
1216 set cpo-=*
1217 assert_fails("exe '*s'", 'E1050:')
1218 END
1219 CheckScriptSuccess(lines)
1220enddef
1221
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001222def Test_cmd_argument_without_colon()
1223 new Xfile
1224 setline(1, ['a', 'b', 'c', 'd'])
1225 write
1226 edit +3 %
1227 assert_equal(3, getcurpos()[1])
1228 edit +/a %
1229 assert_equal(1, getcurpos()[1])
1230 bwipe
1231 delete('Xfile')
1232enddef
1233
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001234def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001235 command Cmd1 eval 0
1236 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001237 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001238 Cmd
1239 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001240 CheckDefAndScriptFailure(lines, 'E464:', 1)
1241 delcommand Cmd1
1242 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001243enddef
1244
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001245def Test_command_not_recognized()
1246 var lines =<< trim END
1247 d.key = 'asdf'
1248 END
1249 CheckDefFailure(lines, 'E1146:', 1)
1250
1251 lines =<< trim END
1252 d['key'] = 'asdf'
1253 END
1254 CheckDefFailure(lines, 'E1146:', 1)
1255enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001256
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001257def Test_magic_not_used()
1258 new
1259 for cmd in ['set magic', 'set nomagic']
1260 exe cmd
1261 setline(1, 'aaa')
1262 s/.../bbb/
1263 assert_equal('bbb', getline(1))
1264 endfor
1265
1266 set magic
1267 setline(1, 'aaa')
1268 assert_fails('s/.\M../bbb/', 'E486:')
1269 assert_fails('snomagic/.../bbb/', 'E486:')
1270 assert_equal('aaa', getline(1))
1271
1272 bwipe!
1273enddef
1274
Bram Moolenaar60f63102020-12-21 20:32:43 +01001275def Test_gdefault_not_used()
1276 new
1277 for cmd in ['set gdefault', 'set nogdefault']
1278 exe cmd
1279 setline(1, 'aaa')
1280 s/./b/
1281 assert_equal('baa', getline(1))
1282 endfor
1283
1284 set nogdefault
1285 bwipe!
1286enddef
1287
Bram Moolenaar179eb562020-12-27 18:03:22 +01001288def g:SomeComplFunc(findstart: number, base: string): any
1289 if findstart
1290 return 0
1291 else
1292 return ['aaa', 'bbb']
1293 endif
1294enddef
1295
1296def Test_insert_complete()
1297 # this was running into an error with the matchparen hack
1298 new
1299 set completefunc=SomeComplFunc
1300 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1301 assert_equal('aaa', getline(1))
1302
1303 set completefunc=
1304 bwipe!
1305enddef
1306
Bram Moolenaara11919f2021-01-02 19:44:56 +01001307def Test_wincmd()
1308 split
1309 var id1 = win_getid()
1310 if true
1311 try | wincmd w | catch | endtry
1312 endif
1313 assert_notequal(id1, win_getid())
1314 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001315
1316 split
1317 var id = win_getid()
1318 split
1319 :2wincmd o
1320 assert_equal(id, win_getid())
1321 only
1322
1323 split
1324 split
1325 assert_equal(3, winnr('$'))
1326 :2wincmd c
1327 assert_equal(2, winnr('$'))
1328 only
1329
1330 split
1331 split
1332 assert_equal(3, winnr('$'))
1333 :2wincmd q
1334 assert_equal(2, winnr('$'))
1335 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001336enddef
1337
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001338def Test_windo_missing_endif()
1339 var lines =<< trim END
1340 windo if 1
1341 END
1342 CheckDefExecFailure(lines, 'E171:', 1)
1343enddef
1344
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001345let s:theList = [1, 2, 3]
1346
1347def Test_lockvar()
1348 s:theList[1] = 22
1349 assert_equal([1, 22, 3], s:theList)
1350 lockvar s:theList
1351 assert_fails('theList[1] = 77', 'E741:')
1352 unlockvar s:theList
1353 s:theList[1] = 44
1354 assert_equal([1, 44, 3], s:theList)
1355
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001356 var d = {a: 1, b: 2}
1357 d.a = 3
1358 d.b = 4
1359 assert_equal({a: 3, b: 4}, d)
1360 lockvar d.a
1361 d.b = 5
1362 var ex = ''
1363 try
1364 d.a = 6
1365 catch
1366 ex = v:exception
1367 endtry
1368 assert_match('E1121:', ex)
1369 unlockvar d.a
1370 d.a = 7
1371 assert_equal({a: 7, b: 5}, d)
1372
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001373 var lines =<< trim END
1374 vim9script
1375 var theList = [1, 2, 3]
1376 def SetList()
1377 theList[1] = 22
1378 assert_equal([1, 22, 3], theList)
1379 lockvar theList
1380 theList[1] = 77
1381 enddef
1382 SetList()
1383 END
1384 CheckScriptFailure(lines, 'E1119', 4)
1385
1386 lines =<< trim END
1387 var theList = [1, 2, 3]
1388 lockvar theList
1389 END
1390 CheckDefFailure(lines, 'E1178', 2)
1391
1392 lines =<< trim END
1393 var theList = [1, 2, 3]
1394 unlockvar theList
1395 END
1396 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001397
1398 lines =<< trim END
1399 vim9script
1400 var name = 'john'
1401 lockvar nameX
1402 END
1403 CheckScriptFailure(lines, 'E1246', 3)
1404
1405 lines =<< trim END
1406 vim9script
1407 var name = 'john'
1408 def LockIt()
1409 lockvar nameX
1410 enddef
1411 LockIt()
1412 END
1413 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001414enddef
1415
Bram Moolenaar4c137212021-04-19 16:48:48 +02001416def Test_substitute_expr()
1417 var to = 'repl'
1418 new
1419 setline(1, 'one from two')
1420 s/from/\=to
1421 assert_equal('one repl two', getline(1))
1422
1423 setline(1, 'one from two')
1424 s/from/\=to .. '_x'
1425 assert_equal('one repl_x two', getline(1))
1426
1427 setline(1, 'one from two from three')
1428 var also = 'also'
1429 s/from/\=to .. '_' .. also/g#e
1430 assert_equal('one repl_also two repl_also three', getline(1))
1431
Bram Moolenaar8238f082021-04-20 21:10:48 +02001432 setline(1, 'abc abc abc')
1433 for choice in [true, false]
1434 :1s/abc/\=choice ? 'yes' : 'no'/
1435 endfor
1436 assert_equal('yes no abc', getline(1))
1437
Bram Moolenaard386e922021-04-25 14:48:49 +02001438 bwipe!
1439
Bram Moolenaar4c137212021-04-19 16:48:48 +02001440 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1441 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1442
Bram Moolenaard386e922021-04-25 14:48:49 +02001443 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001444 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001445 var lines =<< trim END
1446 vim9script
1447 def Foo()
1448 Bar([])
1449 enddef
1450 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001451 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001452 s/^/\=Rep()/
1453 for n in l[:]
1454 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001455 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001456 enddef
1457 def Rep(): string
1458 return 'rep'
1459 enddef
1460 new
1461 Foo()
1462 assert_equal('rep', getline(1))
1463 bwipe!
1464 END
1465 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001466 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001467
1468 # List results in multiple lines
1469 new
1470 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001471 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001472 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1473 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001474enddef
1475
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001476def Test_redir_to_var()
1477 var result: string
1478 redir => result
1479 echo 'something'
1480 redir END
1481 assert_equal("\nsomething", result)
1482
1483 redir =>> result
1484 echo 'more'
1485 redir END
1486 assert_equal("\nsomething\nmore", result)
1487
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001488 var d: dict<string>
1489 redir => d.redir
1490 echo 'dict'
1491 redir END
1492 assert_equal({redir: "\ndict"}, d)
1493
1494 var l = ['a', 'b', 'c']
1495 redir => l[1]
1496 echo 'list'
1497 redir END
1498 assert_equal(['a', "\nlist", 'c'], l)
1499
1500 var dl = {l: ['x']}
1501 redir => dl.l[0]
1502 echo 'dict-list'
1503 redir END
1504 assert_equal({l: ["\ndict-list"]}, dl)
1505
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001506 redir =>> d.redir
1507 echo 'more'
1508 redir END
1509 assert_equal({redir: "\ndict\nmore"}, d)
1510
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001511 var lines =<< trim END
1512 redir => notexist
1513 END
1514 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001515
1516 lines =<< trim END
1517 var ls = 'asdf'
1518 redir => ls[1]
1519 redir END
1520 END
1521 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001522enddef
1523
Bram Moolenaar68db9962021-05-09 23:19:22 +02001524def Test_echo_void()
1525 var lines =<< trim END
1526 vim9script
1527 def NoReturn()
1528 echo 'nothing'
1529 enddef
1530 echo NoReturn()
1531 END
1532 CheckScriptFailure(lines, 'E1186:', 5)
1533
1534 lines =<< trim END
1535 vim9script
1536 def NoReturn()
1537 echo 'nothing'
1538 enddef
1539 def Try()
1540 echo NoReturn()
1541 enddef
1542 defcompile
1543 END
1544 CheckScriptFailure(lines, 'E1186:', 1)
1545enddef
1546
Bram Moolenaar2c707112021-08-02 22:26:56 +02001547def Test_cmdwin_block()
1548 augroup justTesting
1549 autocmd BufEnter * {
1550 echomsg 'in block'
1551 }
1552 augroup END
1553 feedkeys('q:', 'xt')
1554 redraw
1555 feedkeys("aclose\<CR>", 'xt')
1556
1557 au! justTesting
1558enddef
1559
Bram Moolenaar7b829262021-10-13 15:04:34 +01001560def Test_var_not_cmd()
1561 var lines =<< trim END
1562 g:notexist:cmd
1563 END
1564 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
1565
1566 lines =<< trim END
1567 g-pat-cmd
1568 END
1569 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001570 lines =<< trim END
1571 g.pat.cmd
1572 END
1573 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001574
1575 lines =<< trim END
1576 s:notexist:repl
1577 END
1578 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
1579
1580 lines =<< trim END
1581 s-pat-repl
1582 END
1583 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001584 lines =<< trim END
1585 s.pat.repl
1586 END
1587 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001588
1589 lines =<< trim END
1590 w:notexist->len()
1591 END
1592 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1593
1594 lines =<< trim END
1595 b:notexist->len()
1596 END
1597 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1598
1599 lines =<< trim END
1600 t:notexist->len()
1601 END
1602 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1603enddef
1604
1605def Test_no_space_after_command()
1606 var lines =<< trim END
1607 g /pat/cmd
1608 END
1609 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001610 lines =<< trim END
1611 g #pat#cmd
1612 END
1613 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1614 lines =<< trim END
1615 g#pat#cmd
1616 END
1617 CheckDefAndScriptSuccess(lines)
1618 lines =<< trim END
1619 g# pat#cmd
1620 END
1621 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001622
1623 lines =<< trim END
1624 s /pat/repl
1625 END
1626 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001627 lines =<< trim END
1628 s #pat#repl
1629 END
1630 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1631 lines =<< trim END
1632 s#pat#repl
1633 END
1634 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1635 lines =<< trim END
1636 s# pat#repl
1637 END
1638 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001639enddef
1640
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001641" Test for the 'previewpopup' option
1642def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001643 set previewpopup=height:10,width:60
1644 pedit Xfile
1645 var id = popup_findpreview()
1646 assert_notequal(id, 0)
1647 assert_match('Xfile', popup_getoptions(id).title)
1648 popup_clear()
1649 set previewpopup&
1650enddef
1651
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001652def Test_syntax_enable_clear()
1653 syntax clear
1654 syntax enable
1655 highlight clear String
1656 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1657 syntax clear
1658enddef
1659
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001660
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001661" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker