blob: 2d86b6ba3b6e03db024d31c97ae1d76b819239af [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()
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000186 var name = 'xxx'
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100187 new
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000188 setline(1, ['one', 'two', 'three'])
189 set nomod
190 g/two/edit `=name`
191 assert_equal('xxx', bufname())
192 bwipe!
193
194 new
195 setline(1, ['one', 'two', 'three'])
196 g/two/s/^/`=name`/
197 assert_equal('`=name`two', getline(2))
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100198 bwipe!
199enddef
200
Bram Moolenaarecac5912021-01-05 19:23:28 +0100201def Test_folddo_backtick_expansion()
202 new
203 var name = 'xxx'
204 folddoopen edit `=name`
205 assert_equal('xxx', bufname())
206 bwipe!
207
208 new
209 setline(1, ['one', 'two'])
210 set nomodified
211 :1,2fold
212 foldclose
213 folddoclose edit `=name`
214 assert_equal('xxx', bufname())
215 bwipe!
Bram Moolenaarfad27422021-11-30 21:58:19 +0000216
217 var lines =<< trim END
218 g:val = 'value'
219 def Test()
220 folddoopen echo `=g:val`
221 enddef
222 call Test()
223 END
224 CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"')
Bram Moolenaarecac5912021-01-05 19:23:28 +0100225enddef
226
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200227def Test_hardcopy_wildcards()
228 CheckUnix
229 CheckFeature postscript
230
Bram Moolenaarac564082020-09-27 19:05:33 +0200231 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200232 hardcopy > X`=outfile`.ps
233 assert_true(filereadable('Xprint.ps'))
234
235 delete('Xprint.ps')
236enddef
237
238def Test_syn_include_wildcards()
239 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200240 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200241 &rtp = '.'
242
Bram Moolenaarac564082020-09-27 19:05:33 +0200243 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200244 syn include @Group Xthe`=fname`.vim
245 assert_match('Found.* contained found', execute('syn list Found'))
246
247 &rtp = save_rtp
248 delete('Xthemine.vim')
249enddef
250
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200251def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200252 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200253 vim9script
254 redir @a
255 echo 'one'
256 .. 'two'
257 redir END
258 assert_equal("\nonetwo", @a)
259 END
260 CheckScriptSuccess(lines)
261
262 lines =<< trim END
263 vim9script
264 redir @a
265 echo 11 +
266 77
267 - 22
268 redir END
269 assert_equal("\n66", @a)
270 END
271 CheckScriptSuccess(lines)
272enddef
273
Bram Moolenaar13106602020-10-04 16:06:05 +0200274def Test_condition_types()
275 var lines =<< trim END
276 if 'text'
277 endif
278 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100279 CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200280
281 lines =<< trim END
282 if [1]
283 endif
284 END
285 CheckDefFailure(lines, 'E1012:', 1)
286 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
287
288 lines =<< trim END
289 g:cond = 'text'
290 if g:cond
291 endif
292 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100293 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200294
295 lines =<< trim END
296 g:cond = 0
297 if g:cond
298 elseif 'text'
299 endif
300 END
Bram Moolenaar69535d82021-11-30 21:39:39 +0000301 CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200302
303 lines =<< trim END
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000304 g:cond = 0
305 if g:cond
306 elseif 'text' garbage
307 endif
308 END
309 CheckDefAndScriptFailure(lines, 'E488:', 3)
310
311 lines =<< trim END
312 g:cond = 0
Bram Moolenaar13106602020-10-04 16:06:05 +0200313 if g:cond
314 elseif [1]
315 endif
316 END
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000317 CheckDefFailure(lines, 'E1012:', 3)
318 CheckScriptFailure(['vim9script'] + lines, 'E745:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200319
320 lines =<< trim END
321 g:cond = 'text'
322 if 0
323 elseif g:cond
324 endif
325 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100326 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200327
328 lines =<< trim END
329 while 'text'
330 endwhile
331 END
332 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100333 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200334
335 lines =<< trim END
336 while [1]
337 endwhile
338 END
339 CheckDefFailure(lines, 'E1012:', 1)
340 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
341
342 lines =<< trim END
343 g:cond = 'text'
344 while g:cond
345 endwhile
346 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100347 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200348enddef
349
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200350def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200351 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200352 vim9script
353 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200354 true
355 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200356 g:res = 42
357 endif
358 assert_equal(42, g:res)
359 END
360 CheckScriptSuccess(lines)
361 unlet g:res
362
363 lines =<< trim END
364 vim9script
365 if 1 &&
366 0
367 g:res = 0
368 elseif 0 ||
369 0
370 || 1
371 g:res = 12
372 endif
373 assert_equal(12, g:res)
374 END
375 CheckScriptSuccess(lines)
376 unlet g:res
377enddef
378
379def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200380 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200381 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200382 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200383 while nr <
384 10 + 3
385 nr = nr
386 + 4
387 endwhile
388 assert_equal(16, nr)
389 END
390 CheckScriptSuccess(lines)
391
392 lines =<< trim END
393 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200394 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200395 while nr
396 <
397 10
398 +
399 3
400 nr = nr
401 +
402 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200403 endwhile
404 assert_equal(16, nr)
405 END
406 CheckScriptSuccess(lines)
407enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200408
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200409def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200410 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200411 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200412 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200413 for x
414 in
415 [1, 2, 3, 4]
416 nr = nr + x
417 endfor
418 assert_equal(10, nr)
419 END
420 CheckScriptSuccess(lines)
421
422 lines =<< trim END
423 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200424 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200425 for x
426 in
427 [1, 2,
428 3, 4
429 ]
430 nr = nr
431 +
432 x
433 endfor
434 assert_equal(10, nr)
435 END
436 CheckScriptSuccess(lines)
437enddef
438
Bram Moolenaare0890d62021-02-17 14:52:14 +0100439def MethodAfterLinebreak(arg: string)
440 arg
441 ->setline(1)
442enddef
443
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200444def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200445 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200446 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200447 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200448 func RetArg(
449 arg
450 )
451 let s:res = a:arg
452 endfunc
453 [1,
454 2,
455 3]->RetArg()
456 assert_equal([1, 2, 3], res)
457 END
458 CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100459
460 lines =<< trim END
461 new
462 var name = [1, 2]
463 name
464 ->copy()
465 ->setline(1)
466 assert_equal(['1', '2'], getline(1, 2))
467 bwipe!
468 END
469 CheckDefAndScriptSuccess(lines)
470
471 lines =<< trim END
472 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100473 def Foo(): string
474 return 'the text'
475 enddef
476 def Bar(F: func): string
477 return F()
478 enddef
479 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100480 Foo ->Bar()
481 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100482 enddef
483 Test()
484 assert_equal('the text', getline(1))
485 bwipe!
486 END
487 CheckDefAndScriptSuccess(lines)
488
489 lines =<< trim END
490 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100491 g:shortlist
492 ->copy()
493 ->setline(1)
494 assert_equal(['1', '2'], getline(1, 2))
495 bwipe!
496 END
497 g:shortlist = [1, 2]
498 CheckDefAndScriptSuccess(lines)
499 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100500
501 new
502 MethodAfterLinebreak('foobar')
503 assert_equal('foobar', getline(1))
504 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100505
506 lines =<< trim END
507 vim9script
508 def Foo(): string
509 return '# some text'
510 enddef
511
512 def Bar(F: func): string
513 return F()
514 enddef
515
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100516 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100517 ->setline(1)
518 END
519 CheckScriptSuccess(lines)
520 assert_equal('# some text', getline(1))
521 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200522enddef
523
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100524def Test_method_call_whitespace()
525 var lines =<< trim END
526 new
527 var yank = 'text'
528 yank->setline(1)
529 yank ->setline(2)
530 yank-> setline(3)
531 yank -> setline(4)
532 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
533 bwipe!
534 END
535 CheckDefAndScriptSuccess(lines)
536enddef
537
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100538def Test_method_and_user_command()
539 var lines =<< trim END
540 vim9script
541 def Cmd()
542 g:didFunc = 1
543 enddef
544 command Cmd g:didCmd = 1
545 Cmd
546 assert_equal(1, g:didCmd)
547 Cmd()
548 assert_equal(1, g:didFunc)
549 unlet g:didFunc
550 unlet g:didCmd
551
552 def InDefFunc()
553 Cmd
554 assert_equal(1, g:didCmd)
555 Cmd()
556 assert_equal(1, g:didFunc)
557 unlet g:didFunc
558 unlet g:didCmd
559 enddef
560 InDefFunc()
561 END
562 CheckScriptSuccess(lines)
563enddef
564
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200565def Test_option_use_linebreak()
566 var lines =<< trim END
567 new
568 &matchpairs = '(:)'
569 &matchpairs->setline(1)
570 &matchpairs = '[:]'
571 &matchpairs ->setline(2)
572 &matchpairs = '{:}'
573 &matchpairs
574 ->setline(3)
575 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
576 bwipe!
577 END
578 CheckDefAndScriptSuccess(lines)
579enddef
580
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200581def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200582 var lines =<< trim END
583 new
584 @a = 'one'
585 @a->setline(1)
586 @b = 'two'
587 @b ->setline(2)
588 @c = 'three'
589 @c
590 ->setline(3)
591 assert_equal(['one', 'two', 'three'], getline(1, '$'))
592 bwipe!
593 END
594 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200595
596 lines =<< trim END
597 @a = 'echo "text"'
598 @a
599 END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000600 CheckDefAndScriptFailure(lines, 'E1207:', 2)
601
602 lines =<< trim END
603 @/ = 'pattern'
604 @/
605 END
606 CheckDefAndScriptFailure(lines, 'E1207:', 2)
607
608 lines =<< trim END
609 &opfunc = 'nothing'
610 &opfunc
611 END
612 CheckDefAndScriptFailure(lines, 'E1207:', 2)
613 &opfunc = ''
614
615 lines =<< trim END
616 &l:showbreak = 'nothing'
617 &l:showbreak
618 END
619 CheckDefAndScriptFailure(lines, 'E1207:', 2)
620 &l:showbreak = ''
621
622 lines =<< trim END
623 &g:showbreak = 'nothing'
624 &g:showbreak
625 END
626 CheckDefAndScriptFailure(lines, 'E1207:', 2)
627 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000628
629 lines =<< trim END
630 $SomeEnv = 'value'
631 $SomeEnv
632 END
633 CheckDefAndScriptFailure(lines, 'E1207:', 2)
634 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200635enddef
636
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200637def Test_environment_use_linebreak()
638 var lines =<< trim END
639 new
640 $TESTENV = 'one'
641 $TESTENV->setline(1)
642 $TESTENV = 'two'
643 $TESTENV ->setline(2)
644 $TESTENV = 'three'
645 $TESTENV
646 ->setline(3)
647 assert_equal(['one', 'two', 'three'], getline(1, '$'))
648 bwipe!
649 END
650 CheckDefAndScriptSuccess(lines)
651enddef
652
Bram Moolenaar683581e2020-10-22 21:22:58 +0200653def Test_skipped_expr_linebreak()
654 if 0
655 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100656 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200657 endif
658enddef
659
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200660def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100661 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200662 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100663 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200664 test.data
665 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100666 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200667
Bram Moolenaarac564082020-09-27 19:05:33 +0200668 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200669 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100670 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200671 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100672 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200673 END
674 CheckScriptSuccess(lines)
675enddef
676
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200677def Test_bar_after_command()
678 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200679 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200680 redraw | echo x
681 enddef
682 RedrawAndEcho()
683 assert_match('did redraw', Screenline(&lines))
684
Bram Moolenaar788123c2020-07-05 15:32:17 +0200685 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200686 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200687 reg_executing() | echo x
688 enddef
689 CallAndEcho()
690 assert_match('did redraw', Screenline(&lines))
691
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200692 if has('unix')
693 # bar in filter write command does not start new command
694 def WriteToShell()
695 new
696 setline(1, 'some text')
697 w !cat | cat > Xoutfile
698 bwipe!
699 enddef
700 WriteToShell()
701 assert_equal(['some text'], readfile('Xoutfile'))
702 delete('Xoutfile')
703
704 # bar in filter read command does not start new command
705 def ReadFromShell()
706 new
707 r! echo hello there | cat > Xoutfile
708 r !echo again | cat >> Xoutfile
709 bwipe!
710 enddef
711 ReadFromShell()
712 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
713 delete('Xoutfile')
714 endif
715enddef
716
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200717def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100718 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100719 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100720 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200721enddef
722
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100723def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100724 var lines =<< trim END
725 final expected = "\nType Name Content\n c \"c piyo"
726 @a = 'hoge'
727 @b = 'fuga'
728 @c = 'piyo'
729
730 assert_equal(execute('filter /piyo/ registers abc'), expected)
731 END
732 CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200733
734 # also do this compiled
735 lines =<< trim END
736 @a = 'very specific z3d37dh234 string'
737 filter z3d37dh234 registers
738 assert_match('very specific z3d37dh234 string', Screenline(&lines))
739 END
740 CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000741
742 lines =<< trim END
743 edit foobar
744 redir => g:filter_out
745 filter #foobar# ls
746 redir END
747 assert_match('"foobar"', g:filter_out)
748 unlet g:filter_out
749 END
750 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100751enddef
752
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100753def Test_win_command_modifiers()
754 assert_equal(1, winnr('$'))
755
756 set splitright
757 vsplit
758 assert_equal(2, winnr())
759 close
760 aboveleft vsplit
761 assert_equal(1, winnr())
762 close
763 set splitright&
764
765 vsplit
766 assert_equal(1, winnr())
767 close
768 belowright vsplit
769 assert_equal(2, winnr())
770 close
771 rightbelow vsplit
772 assert_equal(2, winnr())
773 close
774
Bram Moolenaar97a19002020-11-01 22:15:44 +0100775 if has('browse')
776 browse set
777 assert_equal('option-window', expand('%'))
778 close
779 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100780
781 vsplit
782 botright split
783 assert_equal(3, winnr())
784 assert_equal(&columns, winwidth(0))
785 close
786 close
787
788 vsplit
789 topleft split
790 assert_equal(1, winnr())
791 assert_equal(&columns, winwidth(0))
792 close
793 close
794
795 gettabinfo()->len()->assert_equal(1)
796 tab split
797 gettabinfo()->len()->assert_equal(2)
798 tabclose
799
800 vertical new
801 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
802 close
803enddef
804
805func Test_command_modifier_confirm()
806 CheckNotGui
807 CheckRunVimInTerminal
808
809 " Test for saving all the modified buffers
810 let lines =<< trim END
811 call setline(1, 'changed')
812 def Getout()
813 confirm write Xfile
814 enddef
815 END
816 call writefile(lines, 'Xconfirmscript')
817 call writefile(['empty'], 'Xfile')
818 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
819 call term_sendkeys(buf, ":call Getout()\n")
820 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
821 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100822 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
823 call term_sendkeys(buf, "\<CR>")
824 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100825 call StopVimInTerminal(buf)
826
827 call assert_equal(['changed'], readfile('Xfile'))
828 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100829 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100830 call delete('Xconfirmscript')
831endfunc
832
833def Test_command_modifiers_keep()
834 if has('unix')
835 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
836 new
837 setline(1, ['one', 'two', 'three'])
838 normal 1Gma
839 normal 2Gmb
840 normal 3Gmc
841 if addRflag
842 set cpo+=R
843 else
844 set cpo-=R
845 endif
846 if keepMarks
847 keepmarks :%!cat
848 else
849 :%!cat
850 endif
851 if hasMarks
852 assert_equal(1, line("'a"))
853 assert_equal(2, line("'b"))
854 assert_equal(3, line("'c"))
855 else
856 assert_equal(0, line("'a"))
857 assert_equal(0, line("'b"))
858 assert_equal(0, line("'c"))
859 endif
860 quit!
861 enddef
862 DoTest(false, false, true)
863 DoTest(true, false, false)
864 DoTest(false, true, true)
865 DoTest(true, true, true)
866 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100867
868 new
869 setline(1, ['one', 'two', 'three', 'four'])
870 assert_equal(4, line("$"))
871 normal 1Gma
872 normal 2Gmb
873 normal 3Gmc
874 lockmarks :1,2!wc
875 # line is deleted, marks don't move
876 assert_equal(3, line("$"))
877 assert_equal('four', getline(3))
878 assert_equal(1, line("'a"))
879 assert_equal(2, line("'b"))
880 assert_equal(3, line("'c"))
881 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100882 endif
883
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100884 edit Xone
885 edit Xtwo
886 assert_equal('Xone', expand('#'))
887 keepalt edit Xthree
888 assert_equal('Xone', expand('#'))
889
890 normal /a*b*
891 assert_equal('a*b*', histget("search"))
892 keeppatterns normal /c*d*
893 assert_equal('a*b*', histget("search"))
894
895 new
896 setline(1, range(10))
897 :10
898 normal gg
899 assert_equal(10, getpos("''")[1])
900 keepjumps normal 5G
901 assert_equal(10, getpos("''")[1])
902 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100903enddef
904
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100905def Test_bar_line_continuation()
906 var lines =<< trim END
907 au BufNewFile Xfile g:readFile = 1
908 | g:readExtra = 2
909 g:readFile = 0
910 g:readExtra = 0
911 edit Xfile
912 assert_equal(1, g:readFile)
913 assert_equal(2, g:readExtra)
914 bwipe!
915 au! BufNewFile
916
917 au BufNewFile Xfile g:readFile = 1
918 | g:readExtra = 2
919 | g:readMore = 3
920 g:readFile = 0
921 g:readExtra = 0
922 g:readMore = 0
923 edit Xfile
924 assert_equal(1, g:readFile)
925 assert_equal(2, g:readExtra)
926 assert_equal(3, g:readMore)
927 bwipe!
928 au! BufNewFile
929 unlet g:readFile
930 unlet g:readExtra
931 unlet g:readMore
932 END
933 CheckDefAndScriptSuccess(lines)
934enddef
935
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100936def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100937 new Xsomefile
938 setline(1, 'changed')
939 var buf = bufnr()
940 hide edit Xotherfile
941 var info = getbufinfo(buf)
942 assert_equal(1, info[0].hidden)
943 assert_equal(1, info[0].changed)
944 edit Xsomefile
945 bwipe!
946
947 au BufNewFile Xfile g:readFile = 1
948 g:readFile = 0
949 edit Xfile
950 assert_equal(1, g:readFile)
951 bwipe!
952 g:readFile = 0
953 noautocmd edit Xfile
954 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100955 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100956 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100957
958 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100959 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100960 bwipe!
961
962 var caught = false
963 try
964 sandbox !ls
965 catch /E48:/
966 caught = true
967 endtry
968 assert_true(caught)
969
970 :8verbose g:verbose_now = &verbose
971 assert_equal(8, g:verbose_now)
972 unlet g:verbose_now
973enddef
974
975def EchoHere()
976 echomsg 'here'
977enddef
978def EchoThere()
979 unsilent echomsg 'there'
980enddef
981
982def Test_modifier_silent_unsilent()
983 echomsg 'last one'
984 silent echomsg "text"
985 assert_equal("\nlast one", execute(':1messages'))
986
987 silent! echoerr "error"
988
989 echomsg 'last one'
990 silent EchoHere()
991 assert_equal("\nlast one", execute(':1messages'))
992
993 silent EchoThere()
994 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100995
996 try
997 silent eval [][0]
998 catch
999 echomsg "caught"
1000 endtry
1001 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001002
1003 var lines =<< trim END
1004 vim9script
1005 set history=11
1006 silent! while 0
1007 set history=22
1008 silent! endwhile
1009 assert_equal(11, &history)
1010 set history&
1011 END
1012 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +01001013enddef
1014
Bram Moolenaar36113e42020-11-02 21:08:47 +01001015def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +01001016 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +01001017 new
1018 setline(1, 'xxx')
1019 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
1020 assert_equal('', getline(1))
1021 bwipe!
Bram Moolenaarb579f6e2021-12-04 11:57:00 +00001022
1023 var lines =<< trim END
1024 legacy /pat/
1025 END
1026 CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat')
Bram Moolenaar36113e42020-11-02 21:08:47 +01001027enddef
1028
Bram Moolenaarece0b872021-01-08 20:40:45 +01001029def Test_silent_pattern()
1030 new
1031 silent! :/pat/put _
1032 bwipe!
1033enddef
1034
Bram Moolenaarfa984412021-03-25 22:15:28 +01001035def Test_useless_command_modifier()
1036 g:maybe = true
1037 var lines =<< trim END
1038 if g:maybe
1039 silent endif
1040 END
1041 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1042
1043 lines =<< trim END
1044 for i in [0]
1045 silent endfor
1046 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001047 CheckDefFailure(lines, 'E1176:', 2)
1048 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001049
1050 lines =<< trim END
1051 while g:maybe
1052 silent endwhile
1053 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001054 CheckDefFailure(lines, 'E1176:', 2)
1055 g:maybe = false
1056 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001057
1058 lines =<< trim END
1059 silent try
1060 finally
1061 endtry
1062 END
1063 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1064
1065 lines =<< trim END
1066 try
1067 silent catch
1068 endtry
1069 END
1070 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1071
1072 lines =<< trim END
1073 try
1074 silent finally
1075 endtry
1076 END
1077 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1078
1079 lines =<< trim END
1080 try
1081 finally
1082 silent endtry
1083 END
1084 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1085enddef
1086
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001087def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001088 var from = 3
1089 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001090 g:val = 111
1091 def Increment(nrs: list<number>)
1092 for nr in nrs
1093 g:val += nr
1094 endfor
1095 enddef
1096 eval range(from, to)
1097 ->Increment()
1098 assert_equal(111 + 3 + 4 + 5, g:val)
1099 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001100
1101 var lines =<< trim END
1102 vim9script
1103 g:caught = 'no'
1104 try
1105 eval 123 || 0
1106 catch
1107 g:caught = 'yes'
1108 endtry
1109 assert_equal('yes', g:caught)
1110 unlet g:caught
1111 END
1112 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001113enddef
1114
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001115def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001116 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001117 nnoremap <F3> :echo 'hit F3 #'<CR>
1118 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1119 END
1120 CheckDefSuccess(lines)
1121 CheckScriptSuccess(['vim9script'] + lines)
1122enddef
1123
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001124def Test_normal_command()
1125 new
1126 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001127 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001128 try
1129 exe "norm! \<C-]>"
1130 catch /E433/
1131 caught = 2
1132 endtry
1133 assert_equal(2, caught)
1134
1135 try
1136 exe "norm! 3\<C-]>"
1137 catch /E433/
1138 caught = 3
1139 endtry
1140 assert_equal(3, caught)
1141 bwipe!
1142enddef
1143
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001144def Test_put_command()
1145 new
1146 @p = 'ppp'
1147 put p
1148 assert_equal('ppp', getline(2))
1149
1150 put ='below'
1151 assert_equal('below', getline(3))
1152 put! ='above'
1153 assert_equal('above', getline(3))
1154 assert_equal('below', getline(4))
1155
Bram Moolenaar883cf972021-01-15 18:04:43 +01001156 :2put =['a', 'b', 'c']
1157 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1158
Bram Moolenaar08597872020-12-10 19:43:40 +01001159 # compute range at runtime
1160 setline(1, range(1, 8))
1161 @a = 'aaa'
1162 :$-2put a
1163 assert_equal('aaa', getline(7))
1164
1165 setline(1, range(1, 8))
1166 :2
1167 :+2put! a
1168 assert_equal('aaa', getline(4))
1169
Bram Moolenaara28639e2021-01-19 22:48:09 +01001170 []->mapnew(() => 0)
1171 :$put ='end'
1172 assert_equal('end', getline('$'))
1173
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001174 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001175
1176 CheckDefFailure(['put =xxx'], 'E1001:')
1177enddef
1178
1179def Test_put_with_linebreak()
1180 new
1181 var lines =<< trim END
1182 vim9script
1183 pu =split('abc', '\zs')
1184 ->join()
1185 END
1186 CheckScriptSuccess(lines)
1187 getline(2)->assert_equal('a b c')
1188 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001189enddef
1190
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001191def Test_command_star_range()
1192 new
1193 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1194 setpos("'<", [0, 1, 0, 0])
1195 setpos("'>", [0, 3, 0, 0])
1196 :*s/\(foo\|bar\)/baz/g
1197 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1198
1199 bwipe!
1200enddef
1201
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001202def Test_f_args()
1203 var lines =<< trim END
1204 vim9script
1205
1206 func SaveCmdArgs(...)
1207 let g:args = a:000
1208 endfunc
1209
1210 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1211
1212 TestFArgs
1213 assert_equal([], g:args)
1214
1215 TestFArgs one two three
1216 assert_equal(['one', 'two', 'three'], g:args)
1217 END
1218 CheckScriptSuccess(lines)
1219enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001220
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001221def Test_user_command_comment()
1222 command -nargs=1 Comd echom <q-args>
1223
1224 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001225 vim9script
1226 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001227 END
1228 CheckScriptSuccess(lines)
1229
1230 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001231 vim9script
1232 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001233 END
1234 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001235 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001236
1237 lines =<< trim END
1238 vim9script
1239 command Foo echo 'Foo'
1240 Foo3Bar
1241 END
1242 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1243
1244 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001245enddef
1246
Bram Moolenaar95388e32020-11-20 21:07:00 +01001247def Test_star_command()
1248 var lines =<< trim END
1249 vim9script
1250 @s = 'g:success = 8'
1251 set cpo+=*
1252 exe '*s'
1253 assert_equal(8, g:success)
1254 unlet g:success
1255 set cpo-=*
1256 assert_fails("exe '*s'", 'E1050:')
1257 END
1258 CheckScriptSuccess(lines)
1259enddef
1260
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001261def Test_cmd_argument_without_colon()
1262 new Xfile
1263 setline(1, ['a', 'b', 'c', 'd'])
1264 write
1265 edit +3 %
1266 assert_equal(3, getcurpos()[1])
1267 edit +/a %
1268 assert_equal(1, getcurpos()[1])
1269 bwipe
1270 delete('Xfile')
1271enddef
1272
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001273def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001274 command Cmd1 eval 0
1275 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001276 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001277 Cmd
1278 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001279 CheckDefAndScriptFailure(lines, 'E464:', 1)
1280 delcommand Cmd1
1281 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001282enddef
1283
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001284def Test_command_not_recognized()
1285 var lines =<< trim END
1286 d.key = 'asdf'
1287 END
1288 CheckDefFailure(lines, 'E1146:', 1)
1289
1290 lines =<< trim END
1291 d['key'] = 'asdf'
1292 END
1293 CheckDefFailure(lines, 'E1146:', 1)
1294enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001295
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001296def Test_magic_not_used()
1297 new
1298 for cmd in ['set magic', 'set nomagic']
1299 exe cmd
1300 setline(1, 'aaa')
1301 s/.../bbb/
1302 assert_equal('bbb', getline(1))
1303 endfor
1304
1305 set magic
1306 setline(1, 'aaa')
1307 assert_fails('s/.\M../bbb/', 'E486:')
1308 assert_fails('snomagic/.../bbb/', 'E486:')
1309 assert_equal('aaa', getline(1))
1310
1311 bwipe!
1312enddef
1313
Bram Moolenaar60f63102020-12-21 20:32:43 +01001314def Test_gdefault_not_used()
1315 new
1316 for cmd in ['set gdefault', 'set nogdefault']
1317 exe cmd
1318 setline(1, 'aaa')
1319 s/./b/
1320 assert_equal('baa', getline(1))
1321 endfor
1322
1323 set nogdefault
1324 bwipe!
1325enddef
1326
Bram Moolenaar179eb562020-12-27 18:03:22 +01001327def g:SomeComplFunc(findstart: number, base: string): any
1328 if findstart
1329 return 0
1330 else
1331 return ['aaa', 'bbb']
1332 endif
1333enddef
1334
1335def Test_insert_complete()
1336 # this was running into an error with the matchparen hack
1337 new
1338 set completefunc=SomeComplFunc
1339 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1340 assert_equal('aaa', getline(1))
1341
1342 set completefunc=
1343 bwipe!
1344enddef
1345
Bram Moolenaara11919f2021-01-02 19:44:56 +01001346def Test_wincmd()
1347 split
1348 var id1 = win_getid()
1349 if true
1350 try | wincmd w | catch | endtry
1351 endif
1352 assert_notequal(id1, win_getid())
1353 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001354
1355 split
1356 var id = win_getid()
1357 split
1358 :2wincmd o
1359 assert_equal(id, win_getid())
1360 only
1361
1362 split
1363 split
1364 assert_equal(3, winnr('$'))
1365 :2wincmd c
1366 assert_equal(2, winnr('$'))
1367 only
1368
1369 split
1370 split
1371 assert_equal(3, winnr('$'))
1372 :2wincmd q
1373 assert_equal(2, winnr('$'))
1374 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001375enddef
1376
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001377def Test_windo_missing_endif()
1378 var lines =<< trim END
1379 windo if 1
1380 END
1381 CheckDefExecFailure(lines, 'E171:', 1)
1382enddef
1383
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001384let s:theList = [1, 2, 3]
1385
1386def Test_lockvar()
1387 s:theList[1] = 22
1388 assert_equal([1, 22, 3], s:theList)
1389 lockvar s:theList
1390 assert_fails('theList[1] = 77', 'E741:')
1391 unlockvar s:theList
1392 s:theList[1] = 44
1393 assert_equal([1, 44, 3], s:theList)
1394
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001395 var d = {a: 1, b: 2}
1396 d.a = 3
1397 d.b = 4
1398 assert_equal({a: 3, b: 4}, d)
1399 lockvar d.a
1400 d.b = 5
1401 var ex = ''
1402 try
1403 d.a = 6
1404 catch
1405 ex = v:exception
1406 endtry
1407 assert_match('E1121:', ex)
1408 unlockvar d.a
1409 d.a = 7
1410 assert_equal({a: 7, b: 5}, d)
1411
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001412 var lines =<< trim END
1413 vim9script
1414 var theList = [1, 2, 3]
1415 def SetList()
1416 theList[1] = 22
1417 assert_equal([1, 22, 3], theList)
1418 lockvar theList
1419 theList[1] = 77
1420 enddef
1421 SetList()
1422 END
1423 CheckScriptFailure(lines, 'E1119', 4)
1424
1425 lines =<< trim END
1426 var theList = [1, 2, 3]
1427 lockvar theList
1428 END
1429 CheckDefFailure(lines, 'E1178', 2)
1430
1431 lines =<< trim END
1432 var theList = [1, 2, 3]
1433 unlockvar theList
1434 END
1435 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001436
1437 lines =<< trim END
1438 vim9script
1439 var name = 'john'
1440 lockvar nameX
1441 END
1442 CheckScriptFailure(lines, 'E1246', 3)
1443
1444 lines =<< trim END
1445 vim9script
1446 var name = 'john'
1447 def LockIt()
1448 lockvar nameX
1449 enddef
1450 LockIt()
1451 END
1452 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001453enddef
1454
Bram Moolenaar4c137212021-04-19 16:48:48 +02001455def Test_substitute_expr()
1456 var to = 'repl'
1457 new
1458 setline(1, 'one from two')
1459 s/from/\=to
1460 assert_equal('one repl two', getline(1))
1461
1462 setline(1, 'one from two')
1463 s/from/\=to .. '_x'
1464 assert_equal('one repl_x two', getline(1))
1465
1466 setline(1, 'one from two from three')
1467 var also = 'also'
1468 s/from/\=to .. '_' .. also/g#e
1469 assert_equal('one repl_also two repl_also three', getline(1))
1470
Bram Moolenaar8238f082021-04-20 21:10:48 +02001471 setline(1, 'abc abc abc')
1472 for choice in [true, false]
1473 :1s/abc/\=choice ? 'yes' : 'no'/
1474 endfor
1475 assert_equal('yes no abc', getline(1))
1476
Bram Moolenaard386e922021-04-25 14:48:49 +02001477 bwipe!
1478
Bram Moolenaar4c137212021-04-19 16:48:48 +02001479 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1480 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1481
Bram Moolenaard386e922021-04-25 14:48:49 +02001482 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001483 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001484 var lines =<< trim END
1485 vim9script
1486 def Foo()
1487 Bar([])
1488 enddef
1489 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001490 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001491 s/^/\=Rep()/
1492 for n in l[:]
1493 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001494 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001495 enddef
1496 def Rep(): string
1497 return 'rep'
1498 enddef
1499 new
1500 Foo()
1501 assert_equal('rep', getline(1))
1502 bwipe!
1503 END
1504 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001505 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001506
1507 # List results in multiple lines
1508 new
1509 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001510 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001511 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1512 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001513enddef
1514
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001515def Test_redir_to_var()
1516 var result: string
1517 redir => result
1518 echo 'something'
1519 redir END
1520 assert_equal("\nsomething", result)
1521
1522 redir =>> result
1523 echo 'more'
1524 redir END
1525 assert_equal("\nsomething\nmore", result)
1526
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001527 var d: dict<string>
1528 redir => d.redir
1529 echo 'dict'
1530 redir END
1531 assert_equal({redir: "\ndict"}, d)
1532
1533 var l = ['a', 'b', 'c']
1534 redir => l[1]
1535 echo 'list'
1536 redir END
1537 assert_equal(['a', "\nlist", 'c'], l)
1538
1539 var dl = {l: ['x']}
1540 redir => dl.l[0]
1541 echo 'dict-list'
1542 redir END
1543 assert_equal({l: ["\ndict-list"]}, dl)
1544
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001545 redir =>> d.redir
1546 echo 'more'
1547 redir END
1548 assert_equal({redir: "\ndict\nmore"}, d)
1549
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001550 var lines =<< trim END
1551 redir => notexist
1552 END
1553 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001554
1555 lines =<< trim END
1556 var ls = 'asdf'
1557 redir => ls[1]
1558 redir END
1559 END
1560 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001561
1562 lines =<< trim END
1563 var text: string
1564 redir => text
1565 echo 'hello'
1566 redir > Xfile
1567 redir END
1568 END
1569 CheckDefFailure(lines, 'E1185:')
1570
1571 lines =<< trim END
1572 var text: number
1573 redir => text
1574 echo 'hello'
1575 redir END
1576 END
1577 CheckDefFailure(lines, 'E1012:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001578enddef
1579
Bram Moolenaar68db9962021-05-09 23:19:22 +02001580def Test_echo_void()
1581 var lines =<< trim END
1582 vim9script
1583 def NoReturn()
1584 echo 'nothing'
1585 enddef
1586 echo NoReturn()
1587 END
1588 CheckScriptFailure(lines, 'E1186:', 5)
1589
1590 lines =<< trim END
1591 vim9script
1592 def NoReturn()
1593 echo 'nothing'
1594 enddef
1595 def Try()
1596 echo NoReturn()
1597 enddef
1598 defcompile
1599 END
1600 CheckScriptFailure(lines, 'E1186:', 1)
1601enddef
1602
Bram Moolenaar2c707112021-08-02 22:26:56 +02001603def Test_cmdwin_block()
1604 augroup justTesting
1605 autocmd BufEnter * {
1606 echomsg 'in block'
1607 }
1608 augroup END
1609 feedkeys('q:', 'xt')
1610 redraw
1611 feedkeys("aclose\<CR>", 'xt')
1612
1613 au! justTesting
1614enddef
1615
Bram Moolenaar7b829262021-10-13 15:04:34 +01001616def Test_var_not_cmd()
1617 var lines =<< trim END
1618 g:notexist:cmd
1619 END
Bram Moolenaar86b3ab42021-12-19 18:33:23 +00001620 CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001621
1622 lines =<< trim END
1623 g-pat-cmd
1624 END
1625 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001626 lines =<< trim END
1627 g.pat.cmd
1628 END
Bram Moolenaar86b3ab42021-12-19 18:33:23 +00001629 CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001630
1631 lines =<< trim END
1632 s:notexist:repl
1633 END
Bram Moolenaar86b3ab42021-12-19 18:33:23 +00001634 CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001635
1636 lines =<< trim END
1637 s-pat-repl
1638 END
1639 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001640 lines =<< trim END
1641 s.pat.repl
1642 END
Bram Moolenaar86b3ab42021-12-19 18:33:23 +00001643 CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001644
1645 lines =<< trim END
1646 w:notexist->len()
1647 END
1648 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1649
1650 lines =<< trim END
1651 b:notexist->len()
1652 END
1653 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1654
1655 lines =<< trim END
1656 t:notexist->len()
1657 END
1658 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1659enddef
1660
1661def Test_no_space_after_command()
1662 var lines =<< trim END
1663 g /pat/cmd
1664 END
1665 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001666 lines =<< trim END
1667 g #pat#cmd
1668 END
1669 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1670 lines =<< trim END
1671 g#pat#cmd
1672 END
1673 CheckDefAndScriptSuccess(lines)
1674 lines =<< trim END
1675 g# pat#cmd
1676 END
1677 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001678
1679 lines =<< trim END
1680 s /pat/repl
1681 END
1682 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001683 lines =<< trim END
1684 s #pat#repl
1685 END
1686 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1687 lines =<< trim END
1688 s#pat#repl
1689 END
1690 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1691 lines =<< trim END
1692 s# pat#repl
1693 END
1694 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001695enddef
1696
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001697" Test for the 'previewpopup' option
1698def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001699 set previewpopup=height:10,width:60
1700 pedit Xfile
1701 var id = popup_findpreview()
1702 assert_notequal(id, 0)
1703 assert_match('Xfile', popup_getoptions(id).title)
1704 popup_clear()
1705 set previewpopup&
1706enddef
1707
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001708def Test_syntax_enable_clear()
1709 syntax clear
1710 syntax enable
1711 highlight clear String
1712 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1713 syntax clear
1714enddef
1715
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001716
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001717" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker