blob: 2fbccf4a7167278300b2d494c4b6f772ec4badd9 [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!
Bram Moolenaarfad27422021-11-30 21:58:19 +0000209
210 var lines =<< trim END
211 g:val = 'value'
212 def Test()
213 folddoopen echo `=g:val`
214 enddef
215 call Test()
216 END
217 CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"')
Bram Moolenaarecac5912021-01-05 19:23:28 +0100218enddef
219
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200220def Test_hardcopy_wildcards()
221 CheckUnix
222 CheckFeature postscript
223
Bram Moolenaarac564082020-09-27 19:05:33 +0200224 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200225 hardcopy > X`=outfile`.ps
226 assert_true(filereadable('Xprint.ps'))
227
228 delete('Xprint.ps')
229enddef
230
231def Test_syn_include_wildcards()
232 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200233 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200234 &rtp = '.'
235
Bram Moolenaarac564082020-09-27 19:05:33 +0200236 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200237 syn include @Group Xthe`=fname`.vim
238 assert_match('Found.* contained found', execute('syn list Found'))
239
240 &rtp = save_rtp
241 delete('Xthemine.vim')
242enddef
243
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200244def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200245 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200246 vim9script
247 redir @a
248 echo 'one'
249 .. 'two'
250 redir END
251 assert_equal("\nonetwo", @a)
252 END
253 CheckScriptSuccess(lines)
254
255 lines =<< trim END
256 vim9script
257 redir @a
258 echo 11 +
259 77
260 - 22
261 redir END
262 assert_equal("\n66", @a)
263 END
264 CheckScriptSuccess(lines)
265enddef
266
Bram Moolenaar13106602020-10-04 16:06:05 +0200267def Test_condition_types()
268 var lines =<< trim END
269 if 'text'
270 endif
271 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100272 CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200273
274 lines =<< trim END
275 if [1]
276 endif
277 END
278 CheckDefFailure(lines, 'E1012:', 1)
279 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
280
281 lines =<< trim END
282 g:cond = 'text'
283 if g:cond
284 endif
285 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100286 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200287
288 lines =<< trim END
289 g:cond = 0
290 if g:cond
291 elseif 'text'
292 endif
293 END
Bram Moolenaar69535d82021-11-30 21:39:39 +0000294 CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200295
296 lines =<< trim END
297 if g:cond
298 elseif [1]
299 endif
300 END
301 CheckDefFailure(lines, 'E1012:', 2)
302 CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
303
304 lines =<< trim END
305 g:cond = 'text'
306 if 0
307 elseif g:cond
308 endif
309 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100310 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200311
312 lines =<< trim END
313 while 'text'
314 endwhile
315 END
316 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100317 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200318
319 lines =<< trim END
320 while [1]
321 endwhile
322 END
323 CheckDefFailure(lines, 'E1012:', 1)
324 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
325
326 lines =<< trim END
327 g:cond = 'text'
328 while g:cond
329 endwhile
330 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100331 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200332enddef
333
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200334def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200335 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200336 vim9script
337 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200338 true
339 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200340 g:res = 42
341 endif
342 assert_equal(42, g:res)
343 END
344 CheckScriptSuccess(lines)
345 unlet g:res
346
347 lines =<< trim END
348 vim9script
349 if 1 &&
350 0
351 g:res = 0
352 elseif 0 ||
353 0
354 || 1
355 g:res = 12
356 endif
357 assert_equal(12, g:res)
358 END
359 CheckScriptSuccess(lines)
360 unlet g:res
361enddef
362
363def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200364 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200365 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200366 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200367 while nr <
368 10 + 3
369 nr = nr
370 + 4
371 endwhile
372 assert_equal(16, nr)
373 END
374 CheckScriptSuccess(lines)
375
376 lines =<< trim END
377 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200378 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200379 while nr
380 <
381 10
382 +
383 3
384 nr = nr
385 +
386 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200387 endwhile
388 assert_equal(16, nr)
389 END
390 CheckScriptSuccess(lines)
391enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200392
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200393def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200394 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200395 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200396 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200397 for x
398 in
399 [1, 2, 3, 4]
400 nr = nr + x
401 endfor
402 assert_equal(10, nr)
403 END
404 CheckScriptSuccess(lines)
405
406 lines =<< trim END
407 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200408 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200409 for x
410 in
411 [1, 2,
412 3, 4
413 ]
414 nr = nr
415 +
416 x
417 endfor
418 assert_equal(10, nr)
419 END
420 CheckScriptSuccess(lines)
421enddef
422
Bram Moolenaare0890d62021-02-17 14:52:14 +0100423def MethodAfterLinebreak(arg: string)
424 arg
425 ->setline(1)
426enddef
427
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200428def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200429 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200430 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200431 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200432 func RetArg(
433 arg
434 )
435 let s:res = a:arg
436 endfunc
437 [1,
438 2,
439 3]->RetArg()
440 assert_equal([1, 2, 3], res)
441 END
442 CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100443
444 lines =<< trim END
445 new
446 var name = [1, 2]
447 name
448 ->copy()
449 ->setline(1)
450 assert_equal(['1', '2'], getline(1, 2))
451 bwipe!
452 END
453 CheckDefAndScriptSuccess(lines)
454
455 lines =<< trim END
456 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100457 def Foo(): string
458 return 'the text'
459 enddef
460 def Bar(F: func): string
461 return F()
462 enddef
463 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100464 Foo ->Bar()
465 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100466 enddef
467 Test()
468 assert_equal('the text', getline(1))
469 bwipe!
470 END
471 CheckDefAndScriptSuccess(lines)
472
473 lines =<< trim END
474 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100475 g:shortlist
476 ->copy()
477 ->setline(1)
478 assert_equal(['1', '2'], getline(1, 2))
479 bwipe!
480 END
481 g:shortlist = [1, 2]
482 CheckDefAndScriptSuccess(lines)
483 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100484
485 new
486 MethodAfterLinebreak('foobar')
487 assert_equal('foobar', getline(1))
488 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100489
490 lines =<< trim END
491 vim9script
492 def Foo(): string
493 return '# some text'
494 enddef
495
496 def Bar(F: func): string
497 return F()
498 enddef
499
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100500 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100501 ->setline(1)
502 END
503 CheckScriptSuccess(lines)
504 assert_equal('# some text', getline(1))
505 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200506enddef
507
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100508def Test_method_call_whitespace()
509 var lines =<< trim END
510 new
511 var yank = 'text'
512 yank->setline(1)
513 yank ->setline(2)
514 yank-> setline(3)
515 yank -> setline(4)
516 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
517 bwipe!
518 END
519 CheckDefAndScriptSuccess(lines)
520enddef
521
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100522def Test_method_and_user_command()
523 var lines =<< trim END
524 vim9script
525 def Cmd()
526 g:didFunc = 1
527 enddef
528 command Cmd g:didCmd = 1
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
536 def InDefFunc()
537 Cmd
538 assert_equal(1, g:didCmd)
539 Cmd()
540 assert_equal(1, g:didFunc)
541 unlet g:didFunc
542 unlet g:didCmd
543 enddef
544 InDefFunc()
545 END
546 CheckScriptSuccess(lines)
547enddef
548
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200549def Test_option_use_linebreak()
550 var lines =<< trim END
551 new
552 &matchpairs = '(:)'
553 &matchpairs->setline(1)
554 &matchpairs = '[:]'
555 &matchpairs ->setline(2)
556 &matchpairs = '{:}'
557 &matchpairs
558 ->setline(3)
559 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
560 bwipe!
561 END
562 CheckDefAndScriptSuccess(lines)
563enddef
564
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200565def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200566 var lines =<< trim END
567 new
568 @a = 'one'
569 @a->setline(1)
570 @b = 'two'
571 @b ->setline(2)
572 @c = 'three'
573 @c
574 ->setline(3)
575 assert_equal(['one', 'two', 'three'], getline(1, '$'))
576 bwipe!
577 END
578 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200579
580 lines =<< trim END
581 @a = 'echo "text"'
582 @a
583 END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000584 CheckDefAndScriptFailure(lines, 'E1207:', 2)
585
586 lines =<< trim END
587 @/ = 'pattern'
588 @/
589 END
590 CheckDefAndScriptFailure(lines, 'E1207:', 2)
591
592 lines =<< trim END
593 &opfunc = 'nothing'
594 &opfunc
595 END
596 CheckDefAndScriptFailure(lines, 'E1207:', 2)
597 &opfunc = ''
598
599 lines =<< trim END
600 &l:showbreak = 'nothing'
601 &l:showbreak
602 END
603 CheckDefAndScriptFailure(lines, 'E1207:', 2)
604 &l:showbreak = ''
605
606 lines =<< trim END
607 &g:showbreak = 'nothing'
608 &g:showbreak
609 END
610 CheckDefAndScriptFailure(lines, 'E1207:', 2)
611 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000612
613 lines =<< trim END
614 $SomeEnv = 'value'
615 $SomeEnv
616 END
617 CheckDefAndScriptFailure(lines, 'E1207:', 2)
618 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200619enddef
620
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200621def Test_environment_use_linebreak()
622 var lines =<< trim END
623 new
624 $TESTENV = 'one'
625 $TESTENV->setline(1)
626 $TESTENV = 'two'
627 $TESTENV ->setline(2)
628 $TESTENV = 'three'
629 $TESTENV
630 ->setline(3)
631 assert_equal(['one', 'two', 'three'], getline(1, '$'))
632 bwipe!
633 END
634 CheckDefAndScriptSuccess(lines)
635enddef
636
Bram Moolenaar683581e2020-10-22 21:22:58 +0200637def Test_skipped_expr_linebreak()
638 if 0
639 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100640 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200641 endif
642enddef
643
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200644def Test_dict_member()
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 test.data
649 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100650 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200651
Bram Moolenaarac564082020-09-27 19:05:33 +0200652 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200653 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100654 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200655 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100656 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200657 END
658 CheckScriptSuccess(lines)
659enddef
660
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200661def Test_bar_after_command()
662 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200663 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200664 redraw | echo x
665 enddef
666 RedrawAndEcho()
667 assert_match('did redraw', Screenline(&lines))
668
Bram Moolenaar788123c2020-07-05 15:32:17 +0200669 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200670 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200671 reg_executing() | echo x
672 enddef
673 CallAndEcho()
674 assert_match('did redraw', Screenline(&lines))
675
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200676 if has('unix')
677 # bar in filter write command does not start new command
678 def WriteToShell()
679 new
680 setline(1, 'some text')
681 w !cat | cat > Xoutfile
682 bwipe!
683 enddef
684 WriteToShell()
685 assert_equal(['some text'], readfile('Xoutfile'))
686 delete('Xoutfile')
687
688 # bar in filter read command does not start new command
689 def ReadFromShell()
690 new
691 r! echo hello there | cat > Xoutfile
692 r !echo again | cat >> Xoutfile
693 bwipe!
694 enddef
695 ReadFromShell()
696 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
697 delete('Xoutfile')
698 endif
699enddef
700
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200701def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100702 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100703 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100704 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200705enddef
706
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100707def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100708 var lines =<< trim END
709 final expected = "\nType Name Content\n c \"c piyo"
710 @a = 'hoge'
711 @b = 'fuga'
712 @c = 'piyo'
713
714 assert_equal(execute('filter /piyo/ registers abc'), expected)
715 END
716 CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200717
718 # also do this compiled
719 lines =<< trim END
720 @a = 'very specific z3d37dh234 string'
721 filter z3d37dh234 registers
722 assert_match('very specific z3d37dh234 string', Screenline(&lines))
723 END
724 CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000725
726 lines =<< trim END
727 edit foobar
728 redir => g:filter_out
729 filter #foobar# ls
730 redir END
731 assert_match('"foobar"', g:filter_out)
732 unlet g:filter_out
733 END
734 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100735enddef
736
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100737def Test_win_command_modifiers()
738 assert_equal(1, winnr('$'))
739
740 set splitright
741 vsplit
742 assert_equal(2, winnr())
743 close
744 aboveleft vsplit
745 assert_equal(1, winnr())
746 close
747 set splitright&
748
749 vsplit
750 assert_equal(1, winnr())
751 close
752 belowright vsplit
753 assert_equal(2, winnr())
754 close
755 rightbelow vsplit
756 assert_equal(2, winnr())
757 close
758
Bram Moolenaar97a19002020-11-01 22:15:44 +0100759 if has('browse')
760 browse set
761 assert_equal('option-window', expand('%'))
762 close
763 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100764
765 vsplit
766 botright split
767 assert_equal(3, winnr())
768 assert_equal(&columns, winwidth(0))
769 close
770 close
771
772 vsplit
773 topleft split
774 assert_equal(1, winnr())
775 assert_equal(&columns, winwidth(0))
776 close
777 close
778
779 gettabinfo()->len()->assert_equal(1)
780 tab split
781 gettabinfo()->len()->assert_equal(2)
782 tabclose
783
784 vertical new
785 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
786 close
787enddef
788
789func Test_command_modifier_confirm()
790 CheckNotGui
791 CheckRunVimInTerminal
792
793 " Test for saving all the modified buffers
794 let lines =<< trim END
795 call setline(1, 'changed')
796 def Getout()
797 confirm write Xfile
798 enddef
799 END
800 call writefile(lines, 'Xconfirmscript')
801 call writefile(['empty'], 'Xfile')
802 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
803 call term_sendkeys(buf, ":call Getout()\n")
804 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
805 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100806 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
807 call term_sendkeys(buf, "\<CR>")
808 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100809 call StopVimInTerminal(buf)
810
811 call assert_equal(['changed'], readfile('Xfile'))
812 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100813 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100814 call delete('Xconfirmscript')
815endfunc
816
817def Test_command_modifiers_keep()
818 if has('unix')
819 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
820 new
821 setline(1, ['one', 'two', 'three'])
822 normal 1Gma
823 normal 2Gmb
824 normal 3Gmc
825 if addRflag
826 set cpo+=R
827 else
828 set cpo-=R
829 endif
830 if keepMarks
831 keepmarks :%!cat
832 else
833 :%!cat
834 endif
835 if hasMarks
836 assert_equal(1, line("'a"))
837 assert_equal(2, line("'b"))
838 assert_equal(3, line("'c"))
839 else
840 assert_equal(0, line("'a"))
841 assert_equal(0, line("'b"))
842 assert_equal(0, line("'c"))
843 endif
844 quit!
845 enddef
846 DoTest(false, false, true)
847 DoTest(true, false, false)
848 DoTest(false, true, true)
849 DoTest(true, true, true)
850 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100851
852 new
853 setline(1, ['one', 'two', 'three', 'four'])
854 assert_equal(4, line("$"))
855 normal 1Gma
856 normal 2Gmb
857 normal 3Gmc
858 lockmarks :1,2!wc
859 # line is deleted, marks don't move
860 assert_equal(3, line("$"))
861 assert_equal('four', getline(3))
862 assert_equal(1, line("'a"))
863 assert_equal(2, line("'b"))
864 assert_equal(3, line("'c"))
865 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100866 endif
867
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100868 edit Xone
869 edit Xtwo
870 assert_equal('Xone', expand('#'))
871 keepalt edit Xthree
872 assert_equal('Xone', expand('#'))
873
874 normal /a*b*
875 assert_equal('a*b*', histget("search"))
876 keeppatterns normal /c*d*
877 assert_equal('a*b*', histget("search"))
878
879 new
880 setline(1, range(10))
881 :10
882 normal gg
883 assert_equal(10, getpos("''")[1])
884 keepjumps normal 5G
885 assert_equal(10, getpos("''")[1])
886 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100887enddef
888
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100889def Test_bar_line_continuation()
890 var lines =<< trim END
891 au BufNewFile Xfile g:readFile = 1
892 | g:readExtra = 2
893 g:readFile = 0
894 g:readExtra = 0
895 edit Xfile
896 assert_equal(1, g:readFile)
897 assert_equal(2, g:readExtra)
898 bwipe!
899 au! BufNewFile
900
901 au BufNewFile Xfile g:readFile = 1
902 | g:readExtra = 2
903 | g:readMore = 3
904 g:readFile = 0
905 g:readExtra = 0
906 g:readMore = 0
907 edit Xfile
908 assert_equal(1, g:readFile)
909 assert_equal(2, g:readExtra)
910 assert_equal(3, g:readMore)
911 bwipe!
912 au! BufNewFile
913 unlet g:readFile
914 unlet g:readExtra
915 unlet g:readMore
916 END
917 CheckDefAndScriptSuccess(lines)
918enddef
919
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100920def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100921 new Xsomefile
922 setline(1, 'changed')
923 var buf = bufnr()
924 hide edit Xotherfile
925 var info = getbufinfo(buf)
926 assert_equal(1, info[0].hidden)
927 assert_equal(1, info[0].changed)
928 edit Xsomefile
929 bwipe!
930
931 au BufNewFile Xfile g:readFile = 1
932 g:readFile = 0
933 edit Xfile
934 assert_equal(1, g:readFile)
935 bwipe!
936 g:readFile = 0
937 noautocmd edit Xfile
938 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100939 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100940 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100941
942 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100943 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100944 bwipe!
945
946 var caught = false
947 try
948 sandbox !ls
949 catch /E48:/
950 caught = true
951 endtry
952 assert_true(caught)
953
954 :8verbose g:verbose_now = &verbose
955 assert_equal(8, g:verbose_now)
956 unlet g:verbose_now
957enddef
958
959def EchoHere()
960 echomsg 'here'
961enddef
962def EchoThere()
963 unsilent echomsg 'there'
964enddef
965
966def Test_modifier_silent_unsilent()
967 echomsg 'last one'
968 silent echomsg "text"
969 assert_equal("\nlast one", execute(':1messages'))
970
971 silent! echoerr "error"
972
973 echomsg 'last one'
974 silent EchoHere()
975 assert_equal("\nlast one", execute(':1messages'))
976
977 silent EchoThere()
978 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100979
980 try
981 silent eval [][0]
982 catch
983 echomsg "caught"
984 endtry
985 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200986
987 var lines =<< trim END
988 vim9script
989 set history=11
990 silent! while 0
991 set history=22
992 silent! endwhile
993 assert_equal(11, &history)
994 set history&
995 END
996 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100997enddef
998
Bram Moolenaar36113e42020-11-02 21:08:47 +0100999def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +01001000 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +01001001 new
1002 setline(1, 'xxx')
1003 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
1004 assert_equal('', getline(1))
1005 bwipe!
1006enddef
1007
Bram Moolenaarece0b872021-01-08 20:40:45 +01001008def Test_silent_pattern()
1009 new
1010 silent! :/pat/put _
1011 bwipe!
1012enddef
1013
Bram Moolenaarfa984412021-03-25 22:15:28 +01001014def Test_useless_command_modifier()
1015 g:maybe = true
1016 var lines =<< trim END
1017 if g:maybe
1018 silent endif
1019 END
1020 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1021
1022 lines =<< trim END
1023 for i in [0]
1024 silent endfor
1025 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001026 CheckDefFailure(lines, 'E1176:', 2)
1027 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001028
1029 lines =<< trim END
1030 while g:maybe
1031 silent endwhile
1032 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001033 CheckDefFailure(lines, 'E1176:', 2)
1034 g:maybe = false
1035 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001036
1037 lines =<< trim END
1038 silent try
1039 finally
1040 endtry
1041 END
1042 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1043
1044 lines =<< trim END
1045 try
1046 silent catch
1047 endtry
1048 END
1049 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1050
1051 lines =<< trim END
1052 try
1053 silent finally
1054 endtry
1055 END
1056 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1057
1058 lines =<< trim END
1059 try
1060 finally
1061 silent endtry
1062 END
1063 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1064enddef
1065
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001066def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001067 var from = 3
1068 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001069 g:val = 111
1070 def Increment(nrs: list<number>)
1071 for nr in nrs
1072 g:val += nr
1073 endfor
1074 enddef
1075 eval range(from, to)
1076 ->Increment()
1077 assert_equal(111 + 3 + 4 + 5, g:val)
1078 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001079
1080 var lines =<< trim END
1081 vim9script
1082 g:caught = 'no'
1083 try
1084 eval 123 || 0
1085 catch
1086 g:caught = 'yes'
1087 endtry
1088 assert_equal('yes', g:caught)
1089 unlet g:caught
1090 END
1091 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001092enddef
1093
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001094def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001095 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001096 nnoremap <F3> :echo 'hit F3 #'<CR>
1097 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1098 END
1099 CheckDefSuccess(lines)
1100 CheckScriptSuccess(['vim9script'] + lines)
1101enddef
1102
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001103def Test_normal_command()
1104 new
1105 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001106 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001107 try
1108 exe "norm! \<C-]>"
1109 catch /E433/
1110 caught = 2
1111 endtry
1112 assert_equal(2, caught)
1113
1114 try
1115 exe "norm! 3\<C-]>"
1116 catch /E433/
1117 caught = 3
1118 endtry
1119 assert_equal(3, caught)
1120 bwipe!
1121enddef
1122
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001123def Test_put_command()
1124 new
1125 @p = 'ppp'
1126 put p
1127 assert_equal('ppp', getline(2))
1128
1129 put ='below'
1130 assert_equal('below', getline(3))
1131 put! ='above'
1132 assert_equal('above', getline(3))
1133 assert_equal('below', getline(4))
1134
Bram Moolenaar883cf972021-01-15 18:04:43 +01001135 :2put =['a', 'b', 'c']
1136 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1137
Bram Moolenaar08597872020-12-10 19:43:40 +01001138 # compute range at runtime
1139 setline(1, range(1, 8))
1140 @a = 'aaa'
1141 :$-2put a
1142 assert_equal('aaa', getline(7))
1143
1144 setline(1, range(1, 8))
1145 :2
1146 :+2put! a
1147 assert_equal('aaa', getline(4))
1148
Bram Moolenaara28639e2021-01-19 22:48:09 +01001149 []->mapnew(() => 0)
1150 :$put ='end'
1151 assert_equal('end', getline('$'))
1152
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001153 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001154
1155 CheckDefFailure(['put =xxx'], 'E1001:')
1156enddef
1157
1158def Test_put_with_linebreak()
1159 new
1160 var lines =<< trim END
1161 vim9script
1162 pu =split('abc', '\zs')
1163 ->join()
1164 END
1165 CheckScriptSuccess(lines)
1166 getline(2)->assert_equal('a b c')
1167 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001168enddef
1169
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001170def Test_command_star_range()
1171 new
1172 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1173 setpos("'<", [0, 1, 0, 0])
1174 setpos("'>", [0, 3, 0, 0])
1175 :*s/\(foo\|bar\)/baz/g
1176 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1177
1178 bwipe!
1179enddef
1180
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001181def Test_f_args()
1182 var lines =<< trim END
1183 vim9script
1184
1185 func SaveCmdArgs(...)
1186 let g:args = a:000
1187 endfunc
1188
1189 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1190
1191 TestFArgs
1192 assert_equal([], g:args)
1193
1194 TestFArgs one two three
1195 assert_equal(['one', 'two', 'three'], g:args)
1196 END
1197 CheckScriptSuccess(lines)
1198enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001199
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001200def Test_user_command_comment()
1201 command -nargs=1 Comd echom <q-args>
1202
1203 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001204 vim9script
1205 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001206 END
1207 CheckScriptSuccess(lines)
1208
1209 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001210 vim9script
1211 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001212 END
1213 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001214 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001215
1216 lines =<< trim END
1217 vim9script
1218 command Foo echo 'Foo'
1219 Foo3Bar
1220 END
1221 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1222
1223 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001224enddef
1225
Bram Moolenaar95388e32020-11-20 21:07:00 +01001226def Test_star_command()
1227 var lines =<< trim END
1228 vim9script
1229 @s = 'g:success = 8'
1230 set cpo+=*
1231 exe '*s'
1232 assert_equal(8, g:success)
1233 unlet g:success
1234 set cpo-=*
1235 assert_fails("exe '*s'", 'E1050:')
1236 END
1237 CheckScriptSuccess(lines)
1238enddef
1239
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001240def Test_cmd_argument_without_colon()
1241 new Xfile
1242 setline(1, ['a', 'b', 'c', 'd'])
1243 write
1244 edit +3 %
1245 assert_equal(3, getcurpos()[1])
1246 edit +/a %
1247 assert_equal(1, getcurpos()[1])
1248 bwipe
1249 delete('Xfile')
1250enddef
1251
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001252def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001253 command Cmd1 eval 0
1254 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001255 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001256 Cmd
1257 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001258 CheckDefAndScriptFailure(lines, 'E464:', 1)
1259 delcommand Cmd1
1260 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001261enddef
1262
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001263def Test_command_not_recognized()
1264 var lines =<< trim END
1265 d.key = 'asdf'
1266 END
1267 CheckDefFailure(lines, 'E1146:', 1)
1268
1269 lines =<< trim END
1270 d['key'] = 'asdf'
1271 END
1272 CheckDefFailure(lines, 'E1146:', 1)
1273enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001274
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001275def Test_magic_not_used()
1276 new
1277 for cmd in ['set magic', 'set nomagic']
1278 exe cmd
1279 setline(1, 'aaa')
1280 s/.../bbb/
1281 assert_equal('bbb', getline(1))
1282 endfor
1283
1284 set magic
1285 setline(1, 'aaa')
1286 assert_fails('s/.\M../bbb/', 'E486:')
1287 assert_fails('snomagic/.../bbb/', 'E486:')
1288 assert_equal('aaa', getline(1))
1289
1290 bwipe!
1291enddef
1292
Bram Moolenaar60f63102020-12-21 20:32:43 +01001293def Test_gdefault_not_used()
1294 new
1295 for cmd in ['set gdefault', 'set nogdefault']
1296 exe cmd
1297 setline(1, 'aaa')
1298 s/./b/
1299 assert_equal('baa', getline(1))
1300 endfor
1301
1302 set nogdefault
1303 bwipe!
1304enddef
1305
Bram Moolenaar179eb562020-12-27 18:03:22 +01001306def g:SomeComplFunc(findstart: number, base: string): any
1307 if findstart
1308 return 0
1309 else
1310 return ['aaa', 'bbb']
1311 endif
1312enddef
1313
1314def Test_insert_complete()
1315 # this was running into an error with the matchparen hack
1316 new
1317 set completefunc=SomeComplFunc
1318 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1319 assert_equal('aaa', getline(1))
1320
1321 set completefunc=
1322 bwipe!
1323enddef
1324
Bram Moolenaara11919f2021-01-02 19:44:56 +01001325def Test_wincmd()
1326 split
1327 var id1 = win_getid()
1328 if true
1329 try | wincmd w | catch | endtry
1330 endif
1331 assert_notequal(id1, win_getid())
1332 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001333
1334 split
1335 var id = win_getid()
1336 split
1337 :2wincmd o
1338 assert_equal(id, win_getid())
1339 only
1340
1341 split
1342 split
1343 assert_equal(3, winnr('$'))
1344 :2wincmd c
1345 assert_equal(2, winnr('$'))
1346 only
1347
1348 split
1349 split
1350 assert_equal(3, winnr('$'))
1351 :2wincmd q
1352 assert_equal(2, winnr('$'))
1353 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001354enddef
1355
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001356def Test_windo_missing_endif()
1357 var lines =<< trim END
1358 windo if 1
1359 END
1360 CheckDefExecFailure(lines, 'E171:', 1)
1361enddef
1362
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001363let s:theList = [1, 2, 3]
1364
1365def Test_lockvar()
1366 s:theList[1] = 22
1367 assert_equal([1, 22, 3], s:theList)
1368 lockvar s:theList
1369 assert_fails('theList[1] = 77', 'E741:')
1370 unlockvar s:theList
1371 s:theList[1] = 44
1372 assert_equal([1, 44, 3], s:theList)
1373
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001374 var d = {a: 1, b: 2}
1375 d.a = 3
1376 d.b = 4
1377 assert_equal({a: 3, b: 4}, d)
1378 lockvar d.a
1379 d.b = 5
1380 var ex = ''
1381 try
1382 d.a = 6
1383 catch
1384 ex = v:exception
1385 endtry
1386 assert_match('E1121:', ex)
1387 unlockvar d.a
1388 d.a = 7
1389 assert_equal({a: 7, b: 5}, d)
1390
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001391 var lines =<< trim END
1392 vim9script
1393 var theList = [1, 2, 3]
1394 def SetList()
1395 theList[1] = 22
1396 assert_equal([1, 22, 3], theList)
1397 lockvar theList
1398 theList[1] = 77
1399 enddef
1400 SetList()
1401 END
1402 CheckScriptFailure(lines, 'E1119', 4)
1403
1404 lines =<< trim END
1405 var theList = [1, 2, 3]
1406 lockvar theList
1407 END
1408 CheckDefFailure(lines, 'E1178', 2)
1409
1410 lines =<< trim END
1411 var theList = [1, 2, 3]
1412 unlockvar theList
1413 END
1414 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001415
1416 lines =<< trim END
1417 vim9script
1418 var name = 'john'
1419 lockvar nameX
1420 END
1421 CheckScriptFailure(lines, 'E1246', 3)
1422
1423 lines =<< trim END
1424 vim9script
1425 var name = 'john'
1426 def LockIt()
1427 lockvar nameX
1428 enddef
1429 LockIt()
1430 END
1431 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001432enddef
1433
Bram Moolenaar4c137212021-04-19 16:48:48 +02001434def Test_substitute_expr()
1435 var to = 'repl'
1436 new
1437 setline(1, 'one from two')
1438 s/from/\=to
1439 assert_equal('one repl two', getline(1))
1440
1441 setline(1, 'one from two')
1442 s/from/\=to .. '_x'
1443 assert_equal('one repl_x two', getline(1))
1444
1445 setline(1, 'one from two from three')
1446 var also = 'also'
1447 s/from/\=to .. '_' .. also/g#e
1448 assert_equal('one repl_also two repl_also three', getline(1))
1449
Bram Moolenaar8238f082021-04-20 21:10:48 +02001450 setline(1, 'abc abc abc')
1451 for choice in [true, false]
1452 :1s/abc/\=choice ? 'yes' : 'no'/
1453 endfor
1454 assert_equal('yes no abc', getline(1))
1455
Bram Moolenaard386e922021-04-25 14:48:49 +02001456 bwipe!
1457
Bram Moolenaar4c137212021-04-19 16:48:48 +02001458 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1459 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1460
Bram Moolenaard386e922021-04-25 14:48:49 +02001461 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001462 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001463 var lines =<< trim END
1464 vim9script
1465 def Foo()
1466 Bar([])
1467 enddef
1468 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001469 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001470 s/^/\=Rep()/
1471 for n in l[:]
1472 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001473 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001474 enddef
1475 def Rep(): string
1476 return 'rep'
1477 enddef
1478 new
1479 Foo()
1480 assert_equal('rep', getline(1))
1481 bwipe!
1482 END
1483 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001484 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001485
1486 # List results in multiple lines
1487 new
1488 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001489 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001490 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1491 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001492enddef
1493
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001494def Test_redir_to_var()
1495 var result: string
1496 redir => result
1497 echo 'something'
1498 redir END
1499 assert_equal("\nsomething", result)
1500
1501 redir =>> result
1502 echo 'more'
1503 redir END
1504 assert_equal("\nsomething\nmore", result)
1505
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001506 var d: dict<string>
1507 redir => d.redir
1508 echo 'dict'
1509 redir END
1510 assert_equal({redir: "\ndict"}, d)
1511
1512 var l = ['a', 'b', 'c']
1513 redir => l[1]
1514 echo 'list'
1515 redir END
1516 assert_equal(['a', "\nlist", 'c'], l)
1517
1518 var dl = {l: ['x']}
1519 redir => dl.l[0]
1520 echo 'dict-list'
1521 redir END
1522 assert_equal({l: ["\ndict-list"]}, dl)
1523
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001524 redir =>> d.redir
1525 echo 'more'
1526 redir END
1527 assert_equal({redir: "\ndict\nmore"}, d)
1528
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001529 var lines =<< trim END
1530 redir => notexist
1531 END
1532 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001533
1534 lines =<< trim END
1535 var ls = 'asdf'
1536 redir => ls[1]
1537 redir END
1538 END
1539 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001540enddef
1541
Bram Moolenaar68db9962021-05-09 23:19:22 +02001542def Test_echo_void()
1543 var lines =<< trim END
1544 vim9script
1545 def NoReturn()
1546 echo 'nothing'
1547 enddef
1548 echo NoReturn()
1549 END
1550 CheckScriptFailure(lines, 'E1186:', 5)
1551
1552 lines =<< trim END
1553 vim9script
1554 def NoReturn()
1555 echo 'nothing'
1556 enddef
1557 def Try()
1558 echo NoReturn()
1559 enddef
1560 defcompile
1561 END
1562 CheckScriptFailure(lines, 'E1186:', 1)
1563enddef
1564
Bram Moolenaar2c707112021-08-02 22:26:56 +02001565def Test_cmdwin_block()
1566 augroup justTesting
1567 autocmd BufEnter * {
1568 echomsg 'in block'
1569 }
1570 augroup END
1571 feedkeys('q:', 'xt')
1572 redraw
1573 feedkeys("aclose\<CR>", 'xt')
1574
1575 au! justTesting
1576enddef
1577
Bram Moolenaar7b829262021-10-13 15:04:34 +01001578def Test_var_not_cmd()
1579 var lines =<< trim END
1580 g:notexist:cmd
1581 END
1582 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
1583
1584 lines =<< trim END
1585 g-pat-cmd
1586 END
1587 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001588 lines =<< trim END
1589 g.pat.cmd
1590 END
1591 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001592
1593 lines =<< trim END
1594 s:notexist:repl
1595 END
1596 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
1597
1598 lines =<< trim END
1599 s-pat-repl
1600 END
1601 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001602 lines =<< trim END
1603 s.pat.repl
1604 END
1605 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001606
1607 lines =<< trim END
1608 w:notexist->len()
1609 END
1610 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1611
1612 lines =<< trim END
1613 b:notexist->len()
1614 END
1615 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1616
1617 lines =<< trim END
1618 t:notexist->len()
1619 END
1620 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1621enddef
1622
1623def Test_no_space_after_command()
1624 var lines =<< trim END
1625 g /pat/cmd
1626 END
1627 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001628 lines =<< trim END
1629 g #pat#cmd
1630 END
1631 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1632 lines =<< trim END
1633 g#pat#cmd
1634 END
1635 CheckDefAndScriptSuccess(lines)
1636 lines =<< trim END
1637 g# pat#cmd
1638 END
1639 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001640
1641 lines =<< trim END
1642 s /pat/repl
1643 END
1644 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001645 lines =<< trim END
1646 s #pat#repl
1647 END
1648 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1649 lines =<< trim END
1650 s#pat#repl
1651 END
1652 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1653 lines =<< trim END
1654 s# pat#repl
1655 END
1656 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001657enddef
1658
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001659" Test for the 'previewpopup' option
1660def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001661 set previewpopup=height:10,width:60
1662 pedit Xfile
1663 var id = popup_findpreview()
1664 assert_notequal(id, 0)
1665 assert_match('Xfile', popup_getoptions(id).title)
1666 popup_clear()
1667 set previewpopup&
1668enddef
1669
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001670def Test_syntax_enable_clear()
1671 syntax clear
1672 syntax enable
1673 highlight clear String
1674 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1675 syntax clear
1676enddef
1677
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001678
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001679" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker