blob: 81899d6f00edfbf713a9242072b75e413beb3939 [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 Moolenaarcfe435d2020-04-25 20:02:55 +0200108enddef
109
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100110def Test_expand_alternate_file()
111 var lines =<< trim END
112 edit Xfileone
113 var bone = bufnr()
114 edit Xfiletwo
115 var btwo = bufnr()
116 edit Xfilethree
117 var bthree = bufnr()
118
119 edit #
120 assert_equal(bthree, bufnr())
121 edit %%
122 assert_equal(btwo, bufnr())
123 edit %% # comment
124 assert_equal(bthree, bufnr())
125 edit %%yy
126 assert_equal('Xfiletwoyy', bufname())
127
128 exe "edit %%" .. bone
129 assert_equal(bone, bufnr())
130 exe "edit %%" .. btwo .. "xx"
131 assert_equal('Xfiletwoxx', bufname())
132
133 next Xfileone Xfiletwo Xfilethree
134 assert_equal('Xfileone', argv(0))
135 assert_equal('Xfiletwo', argv(1))
136 assert_equal('Xfilethree', argv(2))
137 next %%%zz
138 assert_equal('Xfileone', argv(0))
139 assert_equal('Xfiletwo', argv(1))
140 assert_equal('Xfilethreezz', argv(2))
141
142 v:oldfiles = ['Xonefile', 'Xtwofile']
143 edit %%<1
144 assert_equal('Xonefile', bufname())
145 edit %%<2
146 assert_equal('Xtwofile', bufname())
147 assert_fails('edit %%<3', 'E684:')
148
149 edit Xfileone.vim
150 edit Xfiletwo
151 edit %%:r
152 assert_equal('Xfileone', bufname())
Bram Moolenaardfbc5fd2021-01-23 15:15:01 +0100153
154 assert_false(bufexists('altfoo'))
155 edit altfoo
156 edit bar
157 assert_true(bufexists('altfoo'))
158 assert_true(buflisted('altfoo'))
159 bdel %%
160 assert_true(bufexists('altfoo'))
161 assert_false(buflisted('altfoo'))
162 bwipe! altfoo
163 bwipe! bar
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100164 END
165 CheckDefAndScriptSuccess(lines)
166enddef
167
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100168def Test_global_backtick_expansion()
169 new
170 setline(1, 'xx')
171 var name = 'foobar'
172 g/^xx/s/.*/`=name`
173 assert_equal('foobar', getline(1))
174 bwipe!
175enddef
176
Bram Moolenaarecac5912021-01-05 19:23:28 +0100177def Test_folddo_backtick_expansion()
178 new
179 var name = 'xxx'
180 folddoopen edit `=name`
181 assert_equal('xxx', bufname())
182 bwipe!
183
184 new
185 setline(1, ['one', 'two'])
186 set nomodified
187 :1,2fold
188 foldclose
189 folddoclose edit `=name`
190 assert_equal('xxx', bufname())
191 bwipe!
192enddef
193
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200194def Test_hardcopy_wildcards()
195 CheckUnix
196 CheckFeature postscript
197
Bram Moolenaarac564082020-09-27 19:05:33 +0200198 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200199 hardcopy > X`=outfile`.ps
200 assert_true(filereadable('Xprint.ps'))
201
202 delete('Xprint.ps')
203enddef
204
205def Test_syn_include_wildcards()
206 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200207 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200208 &rtp = '.'
209
Bram Moolenaarac564082020-09-27 19:05:33 +0200210 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200211 syn include @Group Xthe`=fname`.vim
212 assert_match('Found.* contained found', execute('syn list Found'))
213
214 &rtp = save_rtp
215 delete('Xthemine.vim')
216enddef
217
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200218def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200219 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200220 vim9script
221 redir @a
222 echo 'one'
223 .. 'two'
224 redir END
225 assert_equal("\nonetwo", @a)
226 END
227 CheckScriptSuccess(lines)
228
229 lines =<< trim END
230 vim9script
231 redir @a
232 echo 11 +
233 77
234 - 22
235 redir END
236 assert_equal("\n66", @a)
237 END
238 CheckScriptSuccess(lines)
239enddef
240
Bram Moolenaar13106602020-10-04 16:06:05 +0200241def Test_condition_types()
242 var lines =<< trim END
243 if 'text'
244 endif
245 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100246 CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200247
248 lines =<< trim END
249 if [1]
250 endif
251 END
252 CheckDefFailure(lines, 'E1012:', 1)
253 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
254
255 lines =<< trim END
256 g:cond = 'text'
257 if g:cond
258 endif
259 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100260 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200261
262 lines =<< trim END
263 g:cond = 0
264 if g:cond
265 elseif 'text'
266 endif
267 END
268 CheckDefFailure(lines, 'E1012:', 3)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100269 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200270
271 lines =<< trim END
272 if g:cond
273 elseif [1]
274 endif
275 END
276 CheckDefFailure(lines, 'E1012:', 2)
277 CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
278
279 lines =<< trim END
280 g:cond = 'text'
281 if 0
282 elseif g:cond
283 endif
284 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100285 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200286
287 lines =<< trim END
288 while 'text'
289 endwhile
290 END
291 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100292 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200293
294 lines =<< trim END
295 while [1]
296 endwhile
297 END
298 CheckDefFailure(lines, 'E1012:', 1)
299 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
300
301 lines =<< trim END
302 g:cond = 'text'
303 while g:cond
304 endwhile
305 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100306 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200307enddef
308
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200309def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200310 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200311 vim9script
312 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200313 true
314 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200315 g:res = 42
316 endif
317 assert_equal(42, g:res)
318 END
319 CheckScriptSuccess(lines)
320 unlet g:res
321
322 lines =<< trim END
323 vim9script
324 if 1 &&
325 0
326 g:res = 0
327 elseif 0 ||
328 0
329 || 1
330 g:res = 12
331 endif
332 assert_equal(12, g:res)
333 END
334 CheckScriptSuccess(lines)
335 unlet g:res
336enddef
337
338def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200339 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200340 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200341 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200342 while nr <
343 10 + 3
344 nr = nr
345 + 4
346 endwhile
347 assert_equal(16, nr)
348 END
349 CheckScriptSuccess(lines)
350
351 lines =<< trim END
352 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200353 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200354 while nr
355 <
356 10
357 +
358 3
359 nr = nr
360 +
361 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200362 endwhile
363 assert_equal(16, nr)
364 END
365 CheckScriptSuccess(lines)
366enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200367
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200368def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200369 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200370 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200371 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200372 for x
373 in
374 [1, 2, 3, 4]
375 nr = nr + x
376 endfor
377 assert_equal(10, nr)
378 END
379 CheckScriptSuccess(lines)
380
381 lines =<< trim END
382 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200383 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200384 for x
385 in
386 [1, 2,
387 3, 4
388 ]
389 nr = nr
390 +
391 x
392 endfor
393 assert_equal(10, nr)
394 END
395 CheckScriptSuccess(lines)
396enddef
397
Bram Moolenaare0890d62021-02-17 14:52:14 +0100398def MethodAfterLinebreak(arg: string)
399 arg
400 ->setline(1)
401enddef
402
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200403def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200404 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200405 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200406 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200407 func RetArg(
408 arg
409 )
410 let s:res = a:arg
411 endfunc
412 [1,
413 2,
414 3]->RetArg()
415 assert_equal([1, 2, 3], res)
416 END
417 CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100418
419 lines =<< trim END
420 new
421 var name = [1, 2]
422 name
423 ->copy()
424 ->setline(1)
425 assert_equal(['1', '2'], getline(1, 2))
426 bwipe!
427 END
428 CheckDefAndScriptSuccess(lines)
429
430 lines =<< trim END
431 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100432 def Foo(): string
433 return 'the text'
434 enddef
435 def Bar(F: func): string
436 return F()
437 enddef
438 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100439 Foo ->Bar()
440 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100441 enddef
442 Test()
443 assert_equal('the text', getline(1))
444 bwipe!
445 END
446 CheckDefAndScriptSuccess(lines)
447
448 lines =<< trim END
449 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100450 g:shortlist
451 ->copy()
452 ->setline(1)
453 assert_equal(['1', '2'], getline(1, 2))
454 bwipe!
455 END
456 g:shortlist = [1, 2]
457 CheckDefAndScriptSuccess(lines)
458 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100459
460 new
461 MethodAfterLinebreak('foobar')
462 assert_equal('foobar', getline(1))
463 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100464
465 lines =<< trim END
466 vim9script
467 def Foo(): string
468 return '# some text'
469 enddef
470
471 def Bar(F: func): string
472 return F()
473 enddef
474
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100475 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100476 ->setline(1)
477 END
478 CheckScriptSuccess(lines)
479 assert_equal('# some text', getline(1))
480 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200481enddef
482
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100483def Test_method_call_whitespace()
484 var lines =<< trim END
485 new
486 var yank = 'text'
487 yank->setline(1)
488 yank ->setline(2)
489 yank-> setline(3)
490 yank -> setline(4)
491 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
492 bwipe!
493 END
494 CheckDefAndScriptSuccess(lines)
495enddef
496
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100497def Test_method_and_user_command()
498 var lines =<< trim END
499 vim9script
500 def Cmd()
501 g:didFunc = 1
502 enddef
503 command Cmd g:didCmd = 1
504 Cmd
505 assert_equal(1, g:didCmd)
506 Cmd()
507 assert_equal(1, g:didFunc)
508 unlet g:didFunc
509 unlet g:didCmd
510
511 def InDefFunc()
512 Cmd
513 assert_equal(1, g:didCmd)
514 Cmd()
515 assert_equal(1, g:didFunc)
516 unlet g:didFunc
517 unlet g:didCmd
518 enddef
519 InDefFunc()
520 END
521 CheckScriptSuccess(lines)
522enddef
523
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200524def Test_option_use_linebreak()
525 var lines =<< trim END
526 new
527 &matchpairs = '(:)'
528 &matchpairs->setline(1)
529 &matchpairs = '[:]'
530 &matchpairs ->setline(2)
531 &matchpairs = '{:}'
532 &matchpairs
533 ->setline(3)
534 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
535 bwipe!
536 END
537 CheckDefAndScriptSuccess(lines)
538enddef
539
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200540def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200541 var lines =<< trim END
542 new
543 @a = 'one'
544 @a->setline(1)
545 @b = 'two'
546 @b ->setline(2)
547 @c = 'three'
548 @c
549 ->setline(3)
550 assert_equal(['one', 'two', 'three'], getline(1, '$'))
551 bwipe!
552 END
553 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200554
555 lines =<< trim END
556 @a = 'echo "text"'
557 @a
558 END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000559 CheckDefAndScriptFailure(lines, 'E1207:', 2)
560
561 lines =<< trim END
562 @/ = 'pattern'
563 @/
564 END
565 CheckDefAndScriptFailure(lines, 'E1207:', 2)
566
567 lines =<< trim END
568 &opfunc = 'nothing'
569 &opfunc
570 END
571 CheckDefAndScriptFailure(lines, 'E1207:', 2)
572 &opfunc = ''
573
574 lines =<< trim END
575 &l:showbreak = 'nothing'
576 &l:showbreak
577 END
578 CheckDefAndScriptFailure(lines, 'E1207:', 2)
579 &l:showbreak = ''
580
581 lines =<< trim END
582 &g:showbreak = 'nothing'
583 &g:showbreak
584 END
585 CheckDefAndScriptFailure(lines, 'E1207:', 2)
586 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000587
588 lines =<< trim END
589 $SomeEnv = 'value'
590 $SomeEnv
591 END
592 CheckDefAndScriptFailure(lines, 'E1207:', 2)
593 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200594enddef
595
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200596def Test_environment_use_linebreak()
597 var lines =<< trim END
598 new
599 $TESTENV = 'one'
600 $TESTENV->setline(1)
601 $TESTENV = 'two'
602 $TESTENV ->setline(2)
603 $TESTENV = 'three'
604 $TESTENV
605 ->setline(3)
606 assert_equal(['one', 'two', 'three'], getline(1, '$'))
607 bwipe!
608 END
609 CheckDefAndScriptSuccess(lines)
610enddef
611
Bram Moolenaar683581e2020-10-22 21:22:58 +0200612def Test_skipped_expr_linebreak()
613 if 0
614 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100615 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200616 endif
617enddef
618
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200619def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100620 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200621 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100622 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200623 test.data
624 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100625 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200626
Bram Moolenaarac564082020-09-27 19:05:33 +0200627 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200628 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100629 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200630 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100631 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200632 END
633 CheckScriptSuccess(lines)
634enddef
635
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200636def Test_bar_after_command()
637 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200638 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200639 redraw | echo x
640 enddef
641 RedrawAndEcho()
642 assert_match('did redraw', Screenline(&lines))
643
Bram Moolenaar788123c2020-07-05 15:32:17 +0200644 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200645 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200646 reg_executing() | echo x
647 enddef
648 CallAndEcho()
649 assert_match('did redraw', Screenline(&lines))
650
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200651 if has('unix')
652 # bar in filter write command does not start new command
653 def WriteToShell()
654 new
655 setline(1, 'some text')
656 w !cat | cat > Xoutfile
657 bwipe!
658 enddef
659 WriteToShell()
660 assert_equal(['some text'], readfile('Xoutfile'))
661 delete('Xoutfile')
662
663 # bar in filter read command does not start new command
664 def ReadFromShell()
665 new
666 r! echo hello there | cat > Xoutfile
667 r !echo again | cat >> Xoutfile
668 bwipe!
669 enddef
670 ReadFromShell()
671 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
672 delete('Xoutfile')
673 endif
674enddef
675
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200676def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100677 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100678 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100679 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200680enddef
681
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100682def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100683 var lines =<< trim END
684 final expected = "\nType Name Content\n c \"c piyo"
685 @a = 'hoge'
686 @b = 'fuga'
687 @c = 'piyo'
688
689 assert_equal(execute('filter /piyo/ registers abc'), expected)
690 END
691 CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200692
693 # also do this compiled
694 lines =<< trim END
695 @a = 'very specific z3d37dh234 string'
696 filter z3d37dh234 registers
697 assert_match('very specific z3d37dh234 string', Screenline(&lines))
698 END
699 CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100700enddef
701
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100702def Test_win_command_modifiers()
703 assert_equal(1, winnr('$'))
704
705 set splitright
706 vsplit
707 assert_equal(2, winnr())
708 close
709 aboveleft vsplit
710 assert_equal(1, winnr())
711 close
712 set splitright&
713
714 vsplit
715 assert_equal(1, winnr())
716 close
717 belowright vsplit
718 assert_equal(2, winnr())
719 close
720 rightbelow vsplit
721 assert_equal(2, winnr())
722 close
723
Bram Moolenaar97a19002020-11-01 22:15:44 +0100724 if has('browse')
725 browse set
726 assert_equal('option-window', expand('%'))
727 close
728 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100729
730 vsplit
731 botright split
732 assert_equal(3, winnr())
733 assert_equal(&columns, winwidth(0))
734 close
735 close
736
737 vsplit
738 topleft split
739 assert_equal(1, winnr())
740 assert_equal(&columns, winwidth(0))
741 close
742 close
743
744 gettabinfo()->len()->assert_equal(1)
745 tab split
746 gettabinfo()->len()->assert_equal(2)
747 tabclose
748
749 vertical new
750 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
751 close
752enddef
753
754func Test_command_modifier_confirm()
755 CheckNotGui
756 CheckRunVimInTerminal
757
758 " Test for saving all the modified buffers
759 let lines =<< trim END
760 call setline(1, 'changed')
761 def Getout()
762 confirm write Xfile
763 enddef
764 END
765 call writefile(lines, 'Xconfirmscript')
766 call writefile(['empty'], 'Xfile')
767 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
768 call term_sendkeys(buf, ":call Getout()\n")
769 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
770 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100771 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
772 call term_sendkeys(buf, "\<CR>")
773 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100774 call StopVimInTerminal(buf)
775
776 call assert_equal(['changed'], readfile('Xfile'))
777 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100778 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100779 call delete('Xconfirmscript')
780endfunc
781
782def Test_command_modifiers_keep()
783 if has('unix')
784 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
785 new
786 setline(1, ['one', 'two', 'three'])
787 normal 1Gma
788 normal 2Gmb
789 normal 3Gmc
790 if addRflag
791 set cpo+=R
792 else
793 set cpo-=R
794 endif
795 if keepMarks
796 keepmarks :%!cat
797 else
798 :%!cat
799 endif
800 if hasMarks
801 assert_equal(1, line("'a"))
802 assert_equal(2, line("'b"))
803 assert_equal(3, line("'c"))
804 else
805 assert_equal(0, line("'a"))
806 assert_equal(0, line("'b"))
807 assert_equal(0, line("'c"))
808 endif
809 quit!
810 enddef
811 DoTest(false, false, true)
812 DoTest(true, false, false)
813 DoTest(false, true, true)
814 DoTest(true, true, true)
815 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100816
817 new
818 setline(1, ['one', 'two', 'three', 'four'])
819 assert_equal(4, line("$"))
820 normal 1Gma
821 normal 2Gmb
822 normal 3Gmc
823 lockmarks :1,2!wc
824 # line is deleted, marks don't move
825 assert_equal(3, line("$"))
826 assert_equal('four', getline(3))
827 assert_equal(1, line("'a"))
828 assert_equal(2, line("'b"))
829 assert_equal(3, line("'c"))
830 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100831 endif
832
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100833 edit Xone
834 edit Xtwo
835 assert_equal('Xone', expand('#'))
836 keepalt edit Xthree
837 assert_equal('Xone', expand('#'))
838
839 normal /a*b*
840 assert_equal('a*b*', histget("search"))
841 keeppatterns normal /c*d*
842 assert_equal('a*b*', histget("search"))
843
844 new
845 setline(1, range(10))
846 :10
847 normal gg
848 assert_equal(10, getpos("''")[1])
849 keepjumps normal 5G
850 assert_equal(10, getpos("''")[1])
851 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100852enddef
853
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100854def Test_bar_line_continuation()
855 var lines =<< trim END
856 au BufNewFile Xfile g:readFile = 1
857 | g:readExtra = 2
858 g:readFile = 0
859 g:readExtra = 0
860 edit Xfile
861 assert_equal(1, g:readFile)
862 assert_equal(2, g:readExtra)
863 bwipe!
864 au! BufNewFile
865
866 au BufNewFile Xfile g:readFile = 1
867 | g:readExtra = 2
868 | g:readMore = 3
869 g:readFile = 0
870 g:readExtra = 0
871 g:readMore = 0
872 edit Xfile
873 assert_equal(1, g:readFile)
874 assert_equal(2, g:readExtra)
875 assert_equal(3, g:readMore)
876 bwipe!
877 au! BufNewFile
878 unlet g:readFile
879 unlet g:readExtra
880 unlet g:readMore
881 END
882 CheckDefAndScriptSuccess(lines)
883enddef
884
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100885def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100886 new Xsomefile
887 setline(1, 'changed')
888 var buf = bufnr()
889 hide edit Xotherfile
890 var info = getbufinfo(buf)
891 assert_equal(1, info[0].hidden)
892 assert_equal(1, info[0].changed)
893 edit Xsomefile
894 bwipe!
895
896 au BufNewFile Xfile g:readFile = 1
897 g:readFile = 0
898 edit Xfile
899 assert_equal(1, g:readFile)
900 bwipe!
901 g:readFile = 0
902 noautocmd edit Xfile
903 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100904 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100905 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100906
907 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100908 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100909 bwipe!
910
911 var caught = false
912 try
913 sandbox !ls
914 catch /E48:/
915 caught = true
916 endtry
917 assert_true(caught)
918
919 :8verbose g:verbose_now = &verbose
920 assert_equal(8, g:verbose_now)
921 unlet g:verbose_now
922enddef
923
924def EchoHere()
925 echomsg 'here'
926enddef
927def EchoThere()
928 unsilent echomsg 'there'
929enddef
930
931def Test_modifier_silent_unsilent()
932 echomsg 'last one'
933 silent echomsg "text"
934 assert_equal("\nlast one", execute(':1messages'))
935
936 silent! echoerr "error"
937
938 echomsg 'last one'
939 silent EchoHere()
940 assert_equal("\nlast one", execute(':1messages'))
941
942 silent EchoThere()
943 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +0100944
945 try
946 silent eval [][0]
947 catch
948 echomsg "caught"
949 endtry
950 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200951
952 var lines =<< trim END
953 vim9script
954 set history=11
955 silent! while 0
956 set history=22
957 silent! endwhile
958 assert_equal(11, &history)
959 set history&
960 END
961 CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100962enddef
963
Bram Moolenaar36113e42020-11-02 21:08:47 +0100964def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +0100965 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +0100966 new
967 setline(1, 'xxx')
968 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
969 assert_equal('', getline(1))
970 bwipe!
971enddef
972
Bram Moolenaarece0b872021-01-08 20:40:45 +0100973def Test_silent_pattern()
974 new
975 silent! :/pat/put _
976 bwipe!
977enddef
978
Bram Moolenaarfa984412021-03-25 22:15:28 +0100979def Test_useless_command_modifier()
980 g:maybe = true
981 var lines =<< trim END
982 if g:maybe
983 silent endif
984 END
985 CheckDefAndScriptFailure(lines, 'E1176:', 2)
986
987 lines =<< trim END
988 for i in [0]
989 silent endfor
990 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200991 CheckDefFailure(lines, 'E1176:', 2)
992 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +0100993
994 lines =<< trim END
995 while g:maybe
996 silent endwhile
997 END
Bram Moolenaar917c46a2021-08-10 19:53:01 +0200998 CheckDefFailure(lines, 'E1176:', 2)
999 g:maybe = false
1000 CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001001
1002 lines =<< trim END
1003 silent try
1004 finally
1005 endtry
1006 END
1007 CheckDefAndScriptFailure(lines, 'E1176:', 1)
1008
1009 lines =<< trim END
1010 try
1011 silent catch
1012 endtry
1013 END
1014 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1015
1016 lines =<< trim END
1017 try
1018 silent finally
1019 endtry
1020 END
1021 CheckDefAndScriptFailure(lines, 'E1176:', 2)
1022
1023 lines =<< trim END
1024 try
1025 finally
1026 silent endtry
1027 END
1028 CheckDefAndScriptFailure(lines, 'E1176:', 3)
1029enddef
1030
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001031def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001032 var from = 3
1033 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001034 g:val = 111
1035 def Increment(nrs: list<number>)
1036 for nr in nrs
1037 g:val += nr
1038 endfor
1039 enddef
1040 eval range(from, to)
1041 ->Increment()
1042 assert_equal(111 + 3 + 4 + 5, g:val)
1043 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001044
1045 var lines =<< trim END
1046 vim9script
1047 g:caught = 'no'
1048 try
1049 eval 123 || 0
1050 catch
1051 g:caught = 'yes'
1052 endtry
1053 assert_equal('yes', g:caught)
1054 unlet g:caught
1055 END
1056 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001057enddef
1058
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001059def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001060 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001061 nnoremap <F3> :echo 'hit F3 #'<CR>
1062 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1063 END
1064 CheckDefSuccess(lines)
1065 CheckScriptSuccess(['vim9script'] + lines)
1066enddef
1067
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001068def Test_normal_command()
1069 new
1070 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001071 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001072 try
1073 exe "norm! \<C-]>"
1074 catch /E433/
1075 caught = 2
1076 endtry
1077 assert_equal(2, caught)
1078
1079 try
1080 exe "norm! 3\<C-]>"
1081 catch /E433/
1082 caught = 3
1083 endtry
1084 assert_equal(3, caught)
1085 bwipe!
1086enddef
1087
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001088def Test_put_command()
1089 new
1090 @p = 'ppp'
1091 put p
1092 assert_equal('ppp', getline(2))
1093
1094 put ='below'
1095 assert_equal('below', getline(3))
1096 put! ='above'
1097 assert_equal('above', getline(3))
1098 assert_equal('below', getline(4))
1099
Bram Moolenaar883cf972021-01-15 18:04:43 +01001100 :2put =['a', 'b', 'c']
1101 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1102
Bram Moolenaar08597872020-12-10 19:43:40 +01001103 # compute range at runtime
1104 setline(1, range(1, 8))
1105 @a = 'aaa'
1106 :$-2put a
1107 assert_equal('aaa', getline(7))
1108
1109 setline(1, range(1, 8))
1110 :2
1111 :+2put! a
1112 assert_equal('aaa', getline(4))
1113
Bram Moolenaara28639e2021-01-19 22:48:09 +01001114 []->mapnew(() => 0)
1115 :$put ='end'
1116 assert_equal('end', getline('$'))
1117
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001118 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001119
1120 CheckDefFailure(['put =xxx'], 'E1001:')
1121enddef
1122
1123def Test_put_with_linebreak()
1124 new
1125 var lines =<< trim END
1126 vim9script
1127 pu =split('abc', '\zs')
1128 ->join()
1129 END
1130 CheckScriptSuccess(lines)
1131 getline(2)->assert_equal('a b c')
1132 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001133enddef
1134
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001135def Test_command_star_range()
1136 new
1137 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1138 setpos("'<", [0, 1, 0, 0])
1139 setpos("'>", [0, 3, 0, 0])
1140 :*s/\(foo\|bar\)/baz/g
1141 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1142
1143 bwipe!
1144enddef
1145
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001146def Test_f_args()
1147 var lines =<< trim END
1148 vim9script
1149
1150 func SaveCmdArgs(...)
1151 let g:args = a:000
1152 endfunc
1153
1154 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1155
1156 TestFArgs
1157 assert_equal([], g:args)
1158
1159 TestFArgs one two three
1160 assert_equal(['one', 'two', 'three'], g:args)
1161 END
1162 CheckScriptSuccess(lines)
1163enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001164
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001165def Test_user_command_comment()
1166 command -nargs=1 Comd echom <q-args>
1167
1168 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001169 vim9script
1170 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001171 END
1172 CheckScriptSuccess(lines)
1173
1174 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001175 vim9script
1176 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001177 END
1178 CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001179 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001180
1181 lines =<< trim END
1182 vim9script
1183 command Foo echo 'Foo'
1184 Foo3Bar
1185 END
1186 CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
1187
1188 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001189enddef
1190
Bram Moolenaar95388e32020-11-20 21:07:00 +01001191def Test_star_command()
1192 var lines =<< trim END
1193 vim9script
1194 @s = 'g:success = 8'
1195 set cpo+=*
1196 exe '*s'
1197 assert_equal(8, g:success)
1198 unlet g:success
1199 set cpo-=*
1200 assert_fails("exe '*s'", 'E1050:')
1201 END
1202 CheckScriptSuccess(lines)
1203enddef
1204
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001205def Test_cmd_argument_without_colon()
1206 new Xfile
1207 setline(1, ['a', 'b', 'c', 'd'])
1208 write
1209 edit +3 %
1210 assert_equal(3, getcurpos()[1])
1211 edit +/a %
1212 assert_equal(1, getcurpos()[1])
1213 bwipe
1214 delete('Xfile')
1215enddef
1216
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001217def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001218 command Cmd1 eval 0
1219 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001220 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001221 Cmd
1222 END
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001223 CheckDefAndScriptFailure(lines, 'E464:', 1)
1224 delcommand Cmd1
1225 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001226enddef
1227
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001228def Test_command_not_recognized()
1229 var lines =<< trim END
1230 d.key = 'asdf'
1231 END
1232 CheckDefFailure(lines, 'E1146:', 1)
1233
1234 lines =<< trim END
1235 d['key'] = 'asdf'
1236 END
1237 CheckDefFailure(lines, 'E1146:', 1)
1238enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001239
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001240def Test_magic_not_used()
1241 new
1242 for cmd in ['set magic', 'set nomagic']
1243 exe cmd
1244 setline(1, 'aaa')
1245 s/.../bbb/
1246 assert_equal('bbb', getline(1))
1247 endfor
1248
1249 set magic
1250 setline(1, 'aaa')
1251 assert_fails('s/.\M../bbb/', 'E486:')
1252 assert_fails('snomagic/.../bbb/', 'E486:')
1253 assert_equal('aaa', getline(1))
1254
1255 bwipe!
1256enddef
1257
Bram Moolenaar60f63102020-12-21 20:32:43 +01001258def Test_gdefault_not_used()
1259 new
1260 for cmd in ['set gdefault', 'set nogdefault']
1261 exe cmd
1262 setline(1, 'aaa')
1263 s/./b/
1264 assert_equal('baa', getline(1))
1265 endfor
1266
1267 set nogdefault
1268 bwipe!
1269enddef
1270
Bram Moolenaar179eb562020-12-27 18:03:22 +01001271def g:SomeComplFunc(findstart: number, base: string): any
1272 if findstart
1273 return 0
1274 else
1275 return ['aaa', 'bbb']
1276 endif
1277enddef
1278
1279def Test_insert_complete()
1280 # this was running into an error with the matchparen hack
1281 new
1282 set completefunc=SomeComplFunc
1283 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1284 assert_equal('aaa', getline(1))
1285
1286 set completefunc=
1287 bwipe!
1288enddef
1289
Bram Moolenaara11919f2021-01-02 19:44:56 +01001290def Test_wincmd()
1291 split
1292 var id1 = win_getid()
1293 if true
1294 try | wincmd w | catch | endtry
1295 endif
1296 assert_notequal(id1, win_getid())
1297 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001298
1299 split
1300 var id = win_getid()
1301 split
1302 :2wincmd o
1303 assert_equal(id, win_getid())
1304 only
1305
1306 split
1307 split
1308 assert_equal(3, winnr('$'))
1309 :2wincmd c
1310 assert_equal(2, winnr('$'))
1311 only
1312
1313 split
1314 split
1315 assert_equal(3, winnr('$'))
1316 :2wincmd q
1317 assert_equal(2, winnr('$'))
1318 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001319enddef
1320
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001321def Test_windo_missing_endif()
1322 var lines =<< trim END
1323 windo if 1
1324 END
1325 CheckDefExecFailure(lines, 'E171:', 1)
1326enddef
1327
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001328let s:theList = [1, 2, 3]
1329
1330def Test_lockvar()
1331 s:theList[1] = 22
1332 assert_equal([1, 22, 3], s:theList)
1333 lockvar s:theList
1334 assert_fails('theList[1] = 77', 'E741:')
1335 unlockvar s:theList
1336 s:theList[1] = 44
1337 assert_equal([1, 44, 3], s:theList)
1338
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001339 var d = {a: 1, b: 2}
1340 d.a = 3
1341 d.b = 4
1342 assert_equal({a: 3, b: 4}, d)
1343 lockvar d.a
1344 d.b = 5
1345 var ex = ''
1346 try
1347 d.a = 6
1348 catch
1349 ex = v:exception
1350 endtry
1351 assert_match('E1121:', ex)
1352 unlockvar d.a
1353 d.a = 7
1354 assert_equal({a: 7, b: 5}, d)
1355
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001356 var lines =<< trim END
1357 vim9script
1358 var theList = [1, 2, 3]
1359 def SetList()
1360 theList[1] = 22
1361 assert_equal([1, 22, 3], theList)
1362 lockvar theList
1363 theList[1] = 77
1364 enddef
1365 SetList()
1366 END
1367 CheckScriptFailure(lines, 'E1119', 4)
1368
1369 lines =<< trim END
1370 var theList = [1, 2, 3]
1371 lockvar theList
1372 END
1373 CheckDefFailure(lines, 'E1178', 2)
1374
1375 lines =<< trim END
1376 var theList = [1, 2, 3]
1377 unlockvar theList
1378 END
1379 CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001380
1381 lines =<< trim END
1382 vim9script
1383 var name = 'john'
1384 lockvar nameX
1385 END
1386 CheckScriptFailure(lines, 'E1246', 3)
1387
1388 lines =<< trim END
1389 vim9script
1390 var name = 'john'
1391 def LockIt()
1392 lockvar nameX
1393 enddef
1394 LockIt()
1395 END
1396 CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001397enddef
1398
Bram Moolenaar4c137212021-04-19 16:48:48 +02001399def Test_substitute_expr()
1400 var to = 'repl'
1401 new
1402 setline(1, 'one from two')
1403 s/from/\=to
1404 assert_equal('one repl two', getline(1))
1405
1406 setline(1, 'one from two')
1407 s/from/\=to .. '_x'
1408 assert_equal('one repl_x two', getline(1))
1409
1410 setline(1, 'one from two from three')
1411 var also = 'also'
1412 s/from/\=to .. '_' .. also/g#e
1413 assert_equal('one repl_also two repl_also three', getline(1))
1414
Bram Moolenaar8238f082021-04-20 21:10:48 +02001415 setline(1, 'abc abc abc')
1416 for choice in [true, false]
1417 :1s/abc/\=choice ? 'yes' : 'no'/
1418 endfor
1419 assert_equal('yes no abc', getline(1))
1420
Bram Moolenaard386e922021-04-25 14:48:49 +02001421 bwipe!
1422
Bram Moolenaar4c137212021-04-19 16:48:48 +02001423 CheckDefFailure(['s/from/\="x")/'], 'E488:')
1424 CheckDefFailure(['s/from/\="x"/9'], 'E488:')
1425
Bram Moolenaard386e922021-04-25 14:48:49 +02001426 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001427 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001428 var lines =<< trim END
1429 vim9script
1430 def Foo()
1431 Bar([])
1432 enddef
1433 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001434 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001435 s/^/\=Rep()/
1436 for n in l[:]
1437 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001438 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001439 enddef
1440 def Rep(): string
1441 return 'rep'
1442 enddef
1443 new
1444 Foo()
1445 assert_equal('rep', getline(1))
1446 bwipe!
1447 END
1448 CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001449 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001450
1451 # List results in multiple lines
1452 new
1453 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001454 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001455 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1456 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001457enddef
1458
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001459def Test_redir_to_var()
1460 var result: string
1461 redir => result
1462 echo 'something'
1463 redir END
1464 assert_equal("\nsomething", result)
1465
1466 redir =>> result
1467 echo 'more'
1468 redir END
1469 assert_equal("\nsomething\nmore", result)
1470
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001471 var d: dict<string>
1472 redir => d.redir
1473 echo 'dict'
1474 redir END
1475 assert_equal({redir: "\ndict"}, d)
1476
1477 var l = ['a', 'b', 'c']
1478 redir => l[1]
1479 echo 'list'
1480 redir END
1481 assert_equal(['a', "\nlist", 'c'], l)
1482
1483 var dl = {l: ['x']}
1484 redir => dl.l[0]
1485 echo 'dict-list'
1486 redir END
1487 assert_equal({l: ["\ndict-list"]}, dl)
1488
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001489 redir =>> d.redir
1490 echo 'more'
1491 redir END
1492 assert_equal({redir: "\ndict\nmore"}, d)
1493
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001494 var lines =<< trim END
1495 redir => notexist
1496 END
1497 CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001498
1499 lines =<< trim END
1500 var ls = 'asdf'
1501 redir => ls[1]
1502 redir END
1503 END
1504 CheckDefFailure(lines, 'E1141:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001505enddef
1506
Bram Moolenaar68db9962021-05-09 23:19:22 +02001507def Test_echo_void()
1508 var lines =<< trim END
1509 vim9script
1510 def NoReturn()
1511 echo 'nothing'
1512 enddef
1513 echo NoReturn()
1514 END
1515 CheckScriptFailure(lines, 'E1186:', 5)
1516
1517 lines =<< trim END
1518 vim9script
1519 def NoReturn()
1520 echo 'nothing'
1521 enddef
1522 def Try()
1523 echo NoReturn()
1524 enddef
1525 defcompile
1526 END
1527 CheckScriptFailure(lines, 'E1186:', 1)
1528enddef
1529
Bram Moolenaar2c707112021-08-02 22:26:56 +02001530def Test_cmdwin_block()
1531 augroup justTesting
1532 autocmd BufEnter * {
1533 echomsg 'in block'
1534 }
1535 augroup END
1536 feedkeys('q:', 'xt')
1537 redraw
1538 feedkeys("aclose\<CR>", 'xt')
1539
1540 au! justTesting
1541enddef
1542
Bram Moolenaar7b829262021-10-13 15:04:34 +01001543def Test_var_not_cmd()
1544 var lines =<< trim END
1545 g:notexist:cmd
1546 END
1547 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist', 1)
1548
1549 lines =<< trim END
1550 g-pat-cmd
1551 END
1552 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001553 lines =<< trim END
1554 g.pat.cmd
1555 END
1556 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: g', 'E121: Undefined variable: g', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001557
1558 lines =<< trim END
1559 s:notexist:repl
1560 END
1561 CheckDefAndScriptFailure2(lines, 'E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist', 1)
1562
1563 lines =<< trim END
1564 s-pat-repl
1565 END
1566 CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001567 lines =<< trim END
1568 s.pat.repl
1569 END
1570 CheckDefAndScriptFailure2(lines, 'E1001: Variable not found: s', 'E121: Undefined variable: s', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001571
1572 lines =<< trim END
1573 w:notexist->len()
1574 END
1575 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
1576
1577 lines =<< trim END
1578 b:notexist->len()
1579 END
1580 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
1581
1582 lines =<< trim END
1583 t:notexist->len()
1584 END
1585 CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
1586enddef
1587
1588def Test_no_space_after_command()
1589 var lines =<< trim END
1590 g /pat/cmd
1591 END
1592 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001593 lines =<< trim END
1594 g #pat#cmd
1595 END
1596 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1597 lines =<< trim END
1598 g#pat#cmd
1599 END
1600 CheckDefAndScriptSuccess(lines)
1601 lines =<< trim END
1602 g# pat#cmd
1603 END
1604 CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001605
1606 lines =<< trim END
1607 s /pat/repl
1608 END
1609 CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001610 lines =<< trim END
1611 s #pat#repl
1612 END
1613 CheckDefAndScriptFailure(lines, 'E1242:', 1)
1614 lines =<< trim END
1615 s#pat#repl
1616 END
1617 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
1618 lines =<< trim END
1619 s# pat#repl
1620 END
1621 CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001622enddef
1623
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001624" Test for the 'previewpopup' option
1625def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001626 set previewpopup=height:10,width:60
1627 pedit Xfile
1628 var id = popup_findpreview()
1629 assert_notequal(id, 0)
1630 assert_match('Xfile', popup_getoptions(id).title)
1631 popup_clear()
1632 set previewpopup&
1633enddef
1634
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001635def Test_syntax_enable_clear()
1636 syntax clear
1637 syntax enable
1638 highlight clear String
1639 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1640 syntax clear
1641enddef
1642
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001643
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001644" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker