blob: a9309bea7f162423befa275fc89bac14daf50c23 [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 Moolenaar62aec932022-01-29 21:45:34 +00004import './vim9.vim' as v9
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
Bram Moolenaar62aec932022-01-29 21:45:34 +000015 v9.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
Bram Moolenaar62aec932022-01-29 21:45:34 +000025 v9.CheckScriptFailure(lines, 'E492:')
Bram Moolenaardd9de502021-08-15 13:49:42 +020026
27 lines =<< trim END
28 vim9script
29 legacy echo "con" . "cat"
30 legacy let str = 'con'
31 legacy let str .= 'cat'
32 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000033 v9.CheckScriptSuccess(lines)
Bram Moolenaardd9de502021-08-15 13:49:42 +020034
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
Bram Moolenaar62aec932022-01-29 21:45:34 +000042 v9.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
Bram Moolenaar62aec932022-01-29 21:45:34 +000053 v9.CheckScriptFailure(lines, 'E115:')
Bram Moolenaardd9de502021-08-15 13:49:42 +020054
55 if has('float')
56 lines =<< trim END
57 vim9script
58 echo .10
59 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000060 v9.CheckScriptSuccess(lines)
Bram Moolenaardd9de502021-08-15 13:49:42 +020061 lines =<< trim END
62 vim9cmd echo .10
63 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000064 v9.CheckScriptSuccess(lines)
Bram Moolenaardd9de502021-08-15 13:49:42 +020065 lines =<< trim END
66 vim9script
67 legacy echo .10
68 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000069 v9.CheckScriptFailure(lines, 'E15:')
Bram Moolenaardd9de502021-08-15 13:49:42 +020070 endif
71
72 echo v:version
73 assert_fails('vim9cmd echo version', 'E121:')
74 lines =<< trim END
75 vim9script
76 echo version
77 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000078 v9.CheckScriptFailure(lines, 'E121:')
Bram Moolenaardd9de502021-08-15 13:49:42 +020079 lines =<< trim END
80 vim9script
81 legacy echo version
82 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000083 v9.CheckScriptSuccess(lines)
Bram Moolenaar39f3b142021-02-14 12:57:36 +010084enddef
85
Bram Moolenaar5b1d6e92022-02-11 20:33:48 +000086def Test_cmdmod_execute()
87 # "legacy" applies not only to the "exe" argument but also to the commands
88 var lines =<< trim END
89 vim9script
90
91 b:undo = 'let g:undone = 1 | let g:undtwo = 2'
92 legacy exe b:undo
93 assert_equal(1, g:undone)
94 assert_equal(2, g:undtwo)
95 END
96 v9.CheckScriptSuccess(lines)
97
98 # same for "vim9cmd" modifier
99 lines =<< trim END
100 let b:undo = 'g:undone = 11 | g:undtwo = 22'
101 vim9cmd exe b:undo
102 call assert_equal(11, g:undone)
103 call assert_equal(22, g:undtwo)
104 END
105 v9.CheckScriptSuccess(lines)
106 unlet b:undo
107 unlet g:undone
108 unlet g:undtwo
Bram Moolenaar2a9b62d2022-02-12 13:30:17 +0000109
110 # "legacy" does not apply to a loaded script
111 lines =<< trim END
112 vim9script
113 export var exported = 'x'
114 END
115 writefile(lines, 'Xvim9import.vim')
116 lines =<< trim END
117 legacy exe "import './Xvim9import.vim'"
118 END
119 v9.CheckScriptSuccess(lines)
120 delete('Xvim9import.vim')
Bram Moolenaar5b1d6e92022-02-11 20:33:48 +0000121enddef
122
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200123def Test_edit_wildcards()
Bram Moolenaarac564082020-09-27 19:05:33 +0200124 var filename = 'Xtest'
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200125 edit `=filename`
126 assert_equal('Xtest', bufname())
127
Bram Moolenaarac564082020-09-27 19:05:33 +0200128 var filenr = 123
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200129 edit Xtest`=filenr`
130 assert_equal('Xtest123', bufname())
131
132 filenr = 77
133 edit `=filename``=filenr`
134 assert_equal('Xtest77', bufname())
135
136 edit X`=filename`xx`=filenr`yy
137 assert_equal('XXtestxx77yy', bufname())
Bram Moolenaar025cb1c2020-12-14 18:31:27 +0100138
Bram Moolenaar62aec932022-01-29 21:45:34 +0000139 v9.CheckDefFailure(['edit `=xxx`'], 'E1001:')
140 v9.CheckDefFailure(['edit `="foo"'], 'E1083:')
Bram Moolenaarb288ba92021-06-05 17:10:55 +0200141
142 var files = ['file 1', 'file%2', 'file# 3']
143 args `=files`
144 assert_equal(files, argv())
Bram Moolenaar279d7332021-11-27 11:42:50 +0000145
146 filename = 'Xwindo'
147 windo edit `=filename`
148 assert_equal('Xwindo', bufname())
149
150 filename = 'Xtabdo'
151 tabdo edit `=filename`
152 assert_equal('Xtabdo', bufname())
153
154 filename = 'Xargdo'
155 argdo edit `=filename`
156 assert_equal('Xargdo', bufname())
157
158 :%bwipe!
159 filename = 'Xbufdo'
160 bufdo file `=filename`
161 assert_equal('Xbufdo', bufname())
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200162enddef
163
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100164def Test_expand_alternate_file()
165 var lines =<< trim END
166 edit Xfileone
167 var bone = bufnr()
168 edit Xfiletwo
169 var btwo = bufnr()
170 edit Xfilethree
171 var bthree = bufnr()
172
173 edit #
174 assert_equal(bthree, bufnr())
175 edit %%
176 assert_equal(btwo, bufnr())
177 edit %% # comment
178 assert_equal(bthree, bufnr())
179 edit %%yy
180 assert_equal('Xfiletwoyy', bufname())
181
182 exe "edit %%" .. bone
183 assert_equal(bone, bufnr())
184 exe "edit %%" .. btwo .. "xx"
185 assert_equal('Xfiletwoxx', bufname())
186
187 next Xfileone Xfiletwo Xfilethree
188 assert_equal('Xfileone', argv(0))
189 assert_equal('Xfiletwo', argv(1))
190 assert_equal('Xfilethree', argv(2))
191 next %%%zz
192 assert_equal('Xfileone', argv(0))
193 assert_equal('Xfiletwo', argv(1))
194 assert_equal('Xfilethreezz', argv(2))
195
196 v:oldfiles = ['Xonefile', 'Xtwofile']
197 edit %%<1
198 assert_equal('Xonefile', bufname())
199 edit %%<2
200 assert_equal('Xtwofile', bufname())
201 assert_fails('edit %%<3', 'E684:')
202
203 edit Xfileone.vim
204 edit Xfiletwo
205 edit %%:r
206 assert_equal('Xfileone', bufname())
Bram Moolenaardfbc5fd2021-01-23 15:15:01 +0100207
208 assert_false(bufexists('altfoo'))
209 edit altfoo
210 edit bar
211 assert_true(bufexists('altfoo'))
212 assert_true(buflisted('altfoo'))
213 bdel %%
214 assert_true(bufexists('altfoo'))
215 assert_false(buflisted('altfoo'))
216 bwipe! altfoo
217 bwipe! bar
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100218 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000219 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100220enddef
221
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100222def Test_global_backtick_expansion()
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000223 var name = 'xxx'
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100224 new
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000225 setline(1, ['one', 'two', 'three'])
226 set nomod
227 g/two/edit `=name`
228 assert_equal('xxx', bufname())
229 bwipe!
230
231 new
232 setline(1, ['one', 'two', 'three'])
233 g/two/s/^/`=name`/
234 assert_equal('`=name`two', getline(2))
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100235 bwipe!
236enddef
237
Bram Moolenaarecac5912021-01-05 19:23:28 +0100238def Test_folddo_backtick_expansion()
239 new
240 var name = 'xxx'
241 folddoopen edit `=name`
242 assert_equal('xxx', bufname())
243 bwipe!
244
245 new
246 setline(1, ['one', 'two'])
247 set nomodified
248 :1,2fold
249 foldclose
250 folddoclose edit `=name`
251 assert_equal('xxx', bufname())
252 bwipe!
Bram Moolenaarfad27422021-11-30 21:58:19 +0000253
254 var lines =<< trim END
255 g:val = 'value'
256 def Test()
257 folddoopen echo `=g:val`
258 enddef
259 call Test()
260 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000261 v9.CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"')
Bram Moolenaarecac5912021-01-05 19:23:28 +0100262enddef
263
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200264def Test_hardcopy_wildcards()
265 CheckUnix
266 CheckFeature postscript
267
Bram Moolenaarac564082020-09-27 19:05:33 +0200268 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200269 hardcopy > X`=outfile`.ps
270 assert_true(filereadable('Xprint.ps'))
271
272 delete('Xprint.ps')
273enddef
274
275def Test_syn_include_wildcards()
276 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200277 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200278 &rtp = '.'
279
Bram Moolenaarac564082020-09-27 19:05:33 +0200280 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200281 syn include @Group Xthe`=fname`.vim
282 assert_match('Found.* contained found', execute('syn list Found'))
283
284 &rtp = save_rtp
285 delete('Xthemine.vim')
286enddef
287
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200288def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200289 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200290 vim9script
291 redir @a
292 echo 'one'
293 .. 'two'
294 redir END
295 assert_equal("\nonetwo", @a)
296 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000297 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200298
299 lines =<< trim END
300 vim9script
301 redir @a
302 echo 11 +
303 77
304 - 22
305 redir END
306 assert_equal("\n66", @a)
307 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000308 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200309enddef
310
Bram Moolenaar13106602020-10-04 16:06:05 +0200311def Test_condition_types()
312 var lines =<< trim END
313 if 'text'
314 endif
315 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000316 v9.CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200317
318 lines =<< trim END
319 if [1]
320 endif
321 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000322 v9.CheckDefFailure(lines, 'E1012:', 1)
323 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200324
325 lines =<< trim END
326 g:cond = 'text'
327 if g:cond
328 endif
329 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000330 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200331
332 lines =<< trim END
333 g:cond = 0
334 if g:cond
335 elseif 'text'
336 endif
337 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000338 v9.CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200339
340 lines =<< trim END
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000341 g:cond = 0
342 if g:cond
343 elseif 'text' garbage
344 endif
345 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000346 v9.CheckDefAndScriptFailure(lines, 'E488:', 3)
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000347
348 lines =<< trim END
349 g:cond = 0
Bram Moolenaar13106602020-10-04 16:06:05 +0200350 if g:cond
351 elseif [1]
352 endif
353 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000354 v9.CheckDefFailure(lines, 'E1012:', 3)
355 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200356
357 lines =<< trim END
358 g:cond = 'text'
359 if 0
360 elseif g:cond
361 endif
362 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000363 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200364
365 lines =<< trim END
366 while 'text'
367 endwhile
368 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000369 v9.CheckDefFailure(lines, 'E1012:', 1)
370 v9.CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200371
372 lines =<< trim END
373 while [1]
374 endwhile
375 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000376 v9.CheckDefFailure(lines, 'E1012:', 1)
377 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200378
379 lines =<< trim END
380 g:cond = 'text'
381 while g:cond
382 endwhile
383 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000384 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200385enddef
386
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200387def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200388 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200389 vim9script
390 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200391 true
392 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200393 g:res = 42
394 endif
395 assert_equal(42, g:res)
396 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000397 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200398 unlet g:res
399
400 lines =<< trim END
401 vim9script
402 if 1 &&
403 0
404 g:res = 0
405 elseif 0 ||
406 0
407 || 1
408 g:res = 12
409 endif
410 assert_equal(12, g:res)
411 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000412 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200413 unlet g:res
414enddef
415
416def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200417 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200418 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200419 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200420 while nr <
421 10 + 3
422 nr = nr
423 + 4
424 endwhile
425 assert_equal(16, nr)
426 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000427 v9.CheckScriptSuccess(lines)
Bram Moolenaard5053d02020-06-28 15:51:16 +0200428
429 lines =<< trim END
430 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200431 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200432 while nr
433 <
434 10
435 +
436 3
437 nr = nr
438 +
439 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200440 endwhile
441 assert_equal(16, nr)
442 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000443 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200444enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200445
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200446def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200447 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200448 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200449 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200450 for x
451 in
452 [1, 2, 3, 4]
453 nr = nr + x
454 endfor
455 assert_equal(10, nr)
456 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000457 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200458
459 lines =<< trim END
460 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200461 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200462 for x
463 in
464 [1, 2,
465 3, 4
466 ]
467 nr = nr
468 +
469 x
470 endfor
471 assert_equal(10, nr)
472 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000473 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200474enddef
475
Bram Moolenaar62aec932022-01-29 21:45:34 +0000476def s:MethodAfterLinebreak(arg: string)
Bram Moolenaare0890d62021-02-17 14:52:14 +0100477 arg
478 ->setline(1)
479enddef
480
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200481def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200482 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200483 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200484 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200485 func RetArg(
486 arg
487 )
488 let s:res = a:arg
489 endfunc
490 [1,
491 2,
492 3]->RetArg()
493 assert_equal([1, 2, 3], res)
494 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000495 v9.CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100496
497 lines =<< trim END
498 new
499 var name = [1, 2]
500 name
501 ->copy()
502 ->setline(1)
503 assert_equal(['1', '2'], getline(1, 2))
504 bwipe!
505 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000506 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100507
508 lines =<< trim END
509 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100510 def Foo(): string
511 return 'the text'
512 enddef
513 def Bar(F: func): string
514 return F()
515 enddef
516 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100517 Foo ->Bar()
518 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100519 enddef
520 Test()
521 assert_equal('the text', getline(1))
522 bwipe!
523 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000524 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100525
526 lines =<< trim END
527 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100528 g:shortlist
529 ->copy()
530 ->setline(1)
531 assert_equal(['1', '2'], getline(1, 2))
532 bwipe!
533 END
534 g:shortlist = [1, 2]
Bram Moolenaar62aec932022-01-29 21:45:34 +0000535 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100536 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100537
538 new
539 MethodAfterLinebreak('foobar')
540 assert_equal('foobar', getline(1))
541 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100542
543 lines =<< trim END
544 vim9script
545 def Foo(): string
546 return '# some text'
547 enddef
548
549 def Bar(F: func): string
550 return F()
551 enddef
552
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100553 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100554 ->setline(1)
555 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000556 v9.CheckScriptSuccess(lines)
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100557 assert_equal('# some text', getline(1))
558 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200559enddef
560
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100561def Test_method_call_whitespace()
562 var lines =<< trim END
563 new
564 var yank = 'text'
565 yank->setline(1)
566 yank ->setline(2)
567 yank-> setline(3)
568 yank -> setline(4)
569 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
570 bwipe!
571 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000572 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100573enddef
574
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100575def Test_method_and_user_command()
576 var lines =<< trim END
577 vim9script
578 def Cmd()
579 g:didFunc = 1
580 enddef
581 command Cmd g:didCmd = 1
582 Cmd
583 assert_equal(1, g:didCmd)
584 Cmd()
585 assert_equal(1, g:didFunc)
586 unlet g:didFunc
587 unlet g:didCmd
588
589 def InDefFunc()
590 Cmd
591 assert_equal(1, g:didCmd)
592 Cmd()
593 assert_equal(1, g:didFunc)
594 unlet g:didFunc
595 unlet g:didCmd
596 enddef
597 InDefFunc()
598 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000599 v9.CheckScriptSuccess(lines)
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100600enddef
601
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200602def Test_option_use_linebreak()
603 var lines =<< trim END
604 new
605 &matchpairs = '(:)'
606 &matchpairs->setline(1)
607 &matchpairs = '[:]'
608 &matchpairs ->setline(2)
609 &matchpairs = '{:}'
610 &matchpairs
611 ->setline(3)
612 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
613 bwipe!
614 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000615 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200616enddef
617
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200618def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200619 var lines =<< trim END
620 new
621 @a = 'one'
622 @a->setline(1)
623 @b = 'two'
624 @b ->setline(2)
625 @c = 'three'
626 @c
627 ->setline(3)
628 assert_equal(['one', 'two', 'three'], getline(1, '$'))
629 bwipe!
630 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000631 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200632
633 lines =<< trim END
634 @a = 'echo "text"'
635 @a
636 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000637 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000638
639 lines =<< trim END
640 @/ = 'pattern'
641 @/
642 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000643 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000644
645 lines =<< trim END
646 &opfunc = 'nothing'
647 &opfunc
648 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000649 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000650 &opfunc = ''
651
652 lines =<< trim END
653 &l:showbreak = 'nothing'
654 &l:showbreak
655 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000656 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000657 &l:showbreak = ''
658
659 lines =<< trim END
660 &g:showbreak = 'nothing'
661 &g:showbreak
662 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000663 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000664 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000665
666 lines =<< trim END
667 $SomeEnv = 'value'
668 $SomeEnv
669 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000670 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar65259b52021-11-23 14:52:06 +0000671 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200672enddef
673
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200674def Test_environment_use_linebreak()
675 var lines =<< trim END
676 new
677 $TESTENV = 'one'
678 $TESTENV->setline(1)
679 $TESTENV = 'two'
680 $TESTENV ->setline(2)
681 $TESTENV = 'three'
682 $TESTENV
683 ->setline(3)
684 assert_equal(['one', 'two', 'three'], getline(1, '$'))
685 bwipe!
686 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000687 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200688enddef
689
Bram Moolenaar683581e2020-10-22 21:22:58 +0200690def Test_skipped_expr_linebreak()
691 if 0
692 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100693 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200694 endif
695enddef
696
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200697def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100698 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200699 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100700 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200701 test.data
702 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100703 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200704
Bram Moolenaarac564082020-09-27 19:05:33 +0200705 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200706 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100707 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200708 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100709 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200710 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000711 v9.CheckScriptSuccess(lines)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200712enddef
713
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200714def Test_bar_after_command()
715 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200716 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200717 redraw | echo x
718 enddef
719 RedrawAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000720 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200721
Bram Moolenaar788123c2020-07-05 15:32:17 +0200722 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200723 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200724 reg_executing() | echo x
725 enddef
726 CallAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000727 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaar788123c2020-07-05 15:32:17 +0200728
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200729 if has('unix')
730 # bar in filter write command does not start new command
731 def WriteToShell()
732 new
733 setline(1, 'some text')
734 w !cat | cat > Xoutfile
735 bwipe!
736 enddef
737 WriteToShell()
738 assert_equal(['some text'], readfile('Xoutfile'))
739 delete('Xoutfile')
740
741 # bar in filter read command does not start new command
742 def ReadFromShell()
743 new
744 r! echo hello there | cat > Xoutfile
745 r !echo again | cat >> Xoutfile
746 bwipe!
747 enddef
748 ReadFromShell()
749 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
750 delete('Xoutfile')
751 endif
752enddef
753
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200754def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100755 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100756 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100757 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200758enddef
759
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100760def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100761 var lines =<< trim END
762 final expected = "\nType Name Content\n c \"c piyo"
763 @a = 'hoge'
764 @b = 'fuga'
765 @c = 'piyo'
766
767 assert_equal(execute('filter /piyo/ registers abc'), expected)
768 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000769 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200770
771 # also do this compiled
772 lines =<< trim END
773 @a = 'very specific z3d37dh234 string'
774 filter z3d37dh234 registers
Bram Moolenaar62aec932022-01-29 21:45:34 +0000775 assert_match('very specific z3d37dh234 string', g:Screenline(&lines))
Bram Moolenaare729ce22021-06-06 21:38:09 +0200776 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000777 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000778
779 lines =<< trim END
780 edit foobar
781 redir => g:filter_out
782 filter #foobar# ls
783 redir END
784 assert_match('"foobar"', g:filter_out)
785 unlet g:filter_out
786 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000787 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100788enddef
789
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100790def Test_win_command_modifiers()
791 assert_equal(1, winnr('$'))
792
793 set splitright
794 vsplit
795 assert_equal(2, winnr())
796 close
797 aboveleft vsplit
798 assert_equal(1, winnr())
799 close
800 set splitright&
801
802 vsplit
803 assert_equal(1, winnr())
804 close
805 belowright vsplit
806 assert_equal(2, winnr())
807 close
808 rightbelow vsplit
809 assert_equal(2, winnr())
810 close
811
Bram Moolenaar97a19002020-11-01 22:15:44 +0100812 if has('browse')
813 browse set
814 assert_equal('option-window', expand('%'))
815 close
816 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100817
818 vsplit
819 botright split
820 assert_equal(3, winnr())
821 assert_equal(&columns, winwidth(0))
822 close
823 close
824
825 vsplit
826 topleft split
827 assert_equal(1, winnr())
828 assert_equal(&columns, winwidth(0))
829 close
830 close
831
832 gettabinfo()->len()->assert_equal(1)
833 tab split
834 gettabinfo()->len()->assert_equal(2)
835 tabclose
836
837 vertical new
838 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
839 close
840enddef
841
842func Test_command_modifier_confirm()
843 CheckNotGui
844 CheckRunVimInTerminal
845
846 " Test for saving all the modified buffers
847 let lines =<< trim END
848 call setline(1, 'changed')
849 def Getout()
850 confirm write Xfile
851 enddef
852 END
853 call writefile(lines, 'Xconfirmscript')
854 call writefile(['empty'], 'Xfile')
855 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
856 call term_sendkeys(buf, ":call Getout()\n")
857 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
858 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100859 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
860 call term_sendkeys(buf, "\<CR>")
861 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100862 call StopVimInTerminal(buf)
863
864 call assert_equal(['changed'], readfile('Xfile'))
865 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100866 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100867 call delete('Xconfirmscript')
868endfunc
869
870def Test_command_modifiers_keep()
871 if has('unix')
872 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
873 new
874 setline(1, ['one', 'two', 'three'])
875 normal 1Gma
876 normal 2Gmb
877 normal 3Gmc
878 if addRflag
879 set cpo+=R
880 else
881 set cpo-=R
882 endif
883 if keepMarks
884 keepmarks :%!cat
885 else
886 :%!cat
887 endif
888 if hasMarks
889 assert_equal(1, line("'a"))
890 assert_equal(2, line("'b"))
891 assert_equal(3, line("'c"))
892 else
893 assert_equal(0, line("'a"))
894 assert_equal(0, line("'b"))
895 assert_equal(0, line("'c"))
896 endif
897 quit!
898 enddef
899 DoTest(false, false, true)
900 DoTest(true, false, false)
901 DoTest(false, true, true)
902 DoTest(true, true, true)
903 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100904
905 new
906 setline(1, ['one', 'two', 'three', 'four'])
907 assert_equal(4, line("$"))
908 normal 1Gma
909 normal 2Gmb
910 normal 3Gmc
911 lockmarks :1,2!wc
912 # line is deleted, marks don't move
913 assert_equal(3, line("$"))
914 assert_equal('four', getline(3))
915 assert_equal(1, line("'a"))
916 assert_equal(2, line("'b"))
917 assert_equal(3, line("'c"))
918 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100919 endif
920
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100921 edit Xone
922 edit Xtwo
923 assert_equal('Xone', expand('#'))
924 keepalt edit Xthree
925 assert_equal('Xone', expand('#'))
926
927 normal /a*b*
928 assert_equal('a*b*', histget("search"))
929 keeppatterns normal /c*d*
930 assert_equal('a*b*', histget("search"))
931
932 new
933 setline(1, range(10))
934 :10
935 normal gg
936 assert_equal(10, getpos("''")[1])
937 keepjumps normal 5G
938 assert_equal(10, getpos("''")[1])
939 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100940enddef
941
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100942def Test_bar_line_continuation()
943 var lines =<< trim END
944 au BufNewFile Xfile g:readFile = 1
945 | g:readExtra = 2
946 g:readFile = 0
947 g:readExtra = 0
948 edit Xfile
949 assert_equal(1, g:readFile)
950 assert_equal(2, g:readExtra)
951 bwipe!
952 au! BufNewFile
953
954 au BufNewFile Xfile g:readFile = 1
955 | g:readExtra = 2
956 | g:readMore = 3
957 g:readFile = 0
958 g:readExtra = 0
959 g:readMore = 0
960 edit Xfile
961 assert_equal(1, g:readFile)
962 assert_equal(2, g:readExtra)
963 assert_equal(3, g:readMore)
964 bwipe!
965 au! BufNewFile
966 unlet g:readFile
967 unlet g:readExtra
968 unlet g:readMore
969 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000970 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100971enddef
972
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100973def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100974 new Xsomefile
975 setline(1, 'changed')
976 var buf = bufnr()
977 hide edit Xotherfile
978 var info = getbufinfo(buf)
979 assert_equal(1, info[0].hidden)
980 assert_equal(1, info[0].changed)
981 edit Xsomefile
982 bwipe!
983
984 au BufNewFile Xfile g:readFile = 1
985 g:readFile = 0
986 edit Xfile
987 assert_equal(1, g:readFile)
988 bwipe!
989 g:readFile = 0
990 noautocmd edit Xfile
991 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100992 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100993 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100994
995 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100996 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100997 bwipe!
998
999 var caught = false
1000 try
1001 sandbox !ls
1002 catch /E48:/
1003 caught = true
1004 endtry
1005 assert_true(caught)
1006
1007 :8verbose g:verbose_now = &verbose
1008 assert_equal(8, g:verbose_now)
1009 unlet g:verbose_now
1010enddef
1011
Bram Moolenaar62aec932022-01-29 21:45:34 +00001012def s:EchoHere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001013 echomsg 'here'
1014enddef
Bram Moolenaar62aec932022-01-29 21:45:34 +00001015def s:EchoThere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001016 unsilent echomsg 'there'
1017enddef
1018
1019def Test_modifier_silent_unsilent()
1020 echomsg 'last one'
1021 silent echomsg "text"
1022 assert_equal("\nlast one", execute(':1messages'))
1023
1024 silent! echoerr "error"
1025
1026 echomsg 'last one'
1027 silent EchoHere()
1028 assert_equal("\nlast one", execute(':1messages'))
1029
1030 silent EchoThere()
1031 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +01001032
1033 try
1034 silent eval [][0]
1035 catch
1036 echomsg "caught"
1037 endtry
1038 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001039
1040 var lines =<< trim END
1041 vim9script
1042 set history=11
1043 silent! while 0
1044 set history=22
1045 silent! endwhile
1046 assert_equal(11, &history)
1047 set history&
1048 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001049 v9.CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +01001050enddef
1051
Bram Moolenaar36113e42020-11-02 21:08:47 +01001052def Test_range_after_command_modifier()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001053 v9.CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +01001054 new
1055 setline(1, 'xxx')
Bram Moolenaar62aec932022-01-29 21:45:34 +00001056 v9.CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
Bram Moolenaar36113e42020-11-02 21:08:47 +01001057 assert_equal('', getline(1))
1058 bwipe!
Bram Moolenaarb579f6e2021-12-04 11:57:00 +00001059
1060 var lines =<< trim END
1061 legacy /pat/
1062 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001063 v9.CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat')
Bram Moolenaar36113e42020-11-02 21:08:47 +01001064enddef
1065
Bram Moolenaarece0b872021-01-08 20:40:45 +01001066def Test_silent_pattern()
1067 new
1068 silent! :/pat/put _
1069 bwipe!
1070enddef
1071
Bram Moolenaarfa984412021-03-25 22:15:28 +01001072def Test_useless_command_modifier()
1073 g:maybe = true
1074 var lines =<< trim END
1075 if g:maybe
1076 silent endif
1077 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001078 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001079
1080 lines =<< trim END
1081 for i in [0]
1082 silent endfor
1083 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001084 v9.CheckDefFailure(lines, 'E1176:', 2)
1085 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001086
1087 lines =<< trim END
1088 while g:maybe
1089 silent endwhile
1090 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001091 v9.CheckDefFailure(lines, 'E1176:', 2)
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001092 g:maybe = false
Bram Moolenaar62aec932022-01-29 21:45:34 +00001093 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001094
1095 lines =<< trim END
1096 silent try
1097 finally
1098 endtry
1099 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001100 v9.CheckDefAndScriptFailure(lines, 'E1176:', 1)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001101
1102 lines =<< trim END
1103 try
1104 silent catch
1105 endtry
1106 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001107 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001108
1109 lines =<< trim END
1110 try
1111 silent finally
1112 endtry
1113 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001114 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001115
1116 lines =<< trim END
1117 try
1118 finally
1119 silent endtry
1120 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001121 v9.CheckDefAndScriptFailure(lines, 'E1176:', 3)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001122enddef
1123
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001124def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001125 var from = 3
1126 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001127 g:val = 111
1128 def Increment(nrs: list<number>)
1129 for nr in nrs
1130 g:val += nr
1131 endfor
1132 enddef
1133 eval range(from, to)
1134 ->Increment()
1135 assert_equal(111 + 3 + 4 + 5, g:val)
1136 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001137
1138 var lines =<< trim END
1139 vim9script
1140 g:caught = 'no'
1141 try
1142 eval 123 || 0
1143 catch
1144 g:caught = 'yes'
1145 endtry
1146 assert_equal('yes', g:caught)
1147 unlet g:caught
1148 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001149 v9.CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001150enddef
1151
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001152def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001153 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001154 nnoremap <F3> :echo 'hit F3 #'<CR>
1155 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1156 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001157 v9.CheckDefSuccess(lines)
1158 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001159enddef
1160
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001161def Test_normal_command()
1162 new
1163 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001164 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001165 try
1166 exe "norm! \<C-]>"
1167 catch /E433/
1168 caught = 2
1169 endtry
1170 assert_equal(2, caught)
1171
1172 try
1173 exe "norm! 3\<C-]>"
1174 catch /E433/
1175 caught = 3
1176 endtry
1177 assert_equal(3, caught)
1178 bwipe!
1179enddef
1180
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001181def Test_put_command()
1182 new
1183 @p = 'ppp'
1184 put p
1185 assert_equal('ppp', getline(2))
1186
1187 put ='below'
1188 assert_equal('below', getline(3))
1189 put! ='above'
1190 assert_equal('above', getline(3))
1191 assert_equal('below', getline(4))
1192
Bram Moolenaar883cf972021-01-15 18:04:43 +01001193 :2put =['a', 'b', 'c']
1194 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1195
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001196 :0put ='first'
1197 assert_equal('first', getline(1))
1198 :1put! ='first again'
1199 assert_equal('first again', getline(1))
1200
Bram Moolenaar08597872020-12-10 19:43:40 +01001201 # compute range at runtime
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001202 :%del
Bram Moolenaar08597872020-12-10 19:43:40 +01001203 setline(1, range(1, 8))
1204 @a = 'aaa'
1205 :$-2put a
1206 assert_equal('aaa', getline(7))
1207
1208 setline(1, range(1, 8))
1209 :2
1210 :+2put! a
1211 assert_equal('aaa', getline(4))
1212
Bram Moolenaara28639e2021-01-19 22:48:09 +01001213 []->mapnew(() => 0)
1214 :$put ='end'
1215 assert_equal('end', getline('$'))
1216
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001217 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001218
Bram Moolenaar62aec932022-01-29 21:45:34 +00001219 v9.CheckDefFailure(['put =xxx'], 'E1001:')
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001220enddef
1221
1222def Test_put_with_linebreak()
1223 new
1224 var lines =<< trim END
1225 vim9script
1226 pu =split('abc', '\zs')
1227 ->join()
1228 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001229 v9.CheckScriptSuccess(lines)
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001230 getline(2)->assert_equal('a b c')
1231 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001232enddef
1233
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001234def Test_command_star_range()
1235 new
1236 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1237 setpos("'<", [0, 1, 0, 0])
1238 setpos("'>", [0, 3, 0, 0])
1239 :*s/\(foo\|bar\)/baz/g
1240 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1241
1242 bwipe!
1243enddef
1244
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001245def Test_f_args()
1246 var lines =<< trim END
1247 vim9script
1248
1249 func SaveCmdArgs(...)
1250 let g:args = a:000
1251 endfunc
1252
1253 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1254
1255 TestFArgs
1256 assert_equal([], g:args)
1257
1258 TestFArgs one two three
1259 assert_equal(['one', 'two', 'three'], g:args)
1260 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001261 v9.CheckScriptSuccess(lines)
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001262enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001263
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001264def Test_user_command_comment()
1265 command -nargs=1 Comd echom <q-args>
1266
1267 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001268 vim9script
1269 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001270 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001271 v9.CheckScriptSuccess(lines)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001272
1273 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001274 vim9script
1275 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001276 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001277 v9.CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001278 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001279
1280 lines =<< trim END
1281 vim9script
1282 command Foo echo 'Foo'
1283 Foo3Bar
1284 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001285 v9.CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001286
1287 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001288enddef
1289
Bram Moolenaar95388e32020-11-20 21:07:00 +01001290def Test_star_command()
1291 var lines =<< trim END
1292 vim9script
1293 @s = 'g:success = 8'
1294 set cpo+=*
1295 exe '*s'
1296 assert_equal(8, g:success)
1297 unlet g:success
1298 set cpo-=*
1299 assert_fails("exe '*s'", 'E1050:')
1300 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001301 v9.CheckScriptSuccess(lines)
Bram Moolenaar95388e32020-11-20 21:07:00 +01001302enddef
1303
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001304def Test_cmd_argument_without_colon()
1305 new Xfile
1306 setline(1, ['a', 'b', 'c', 'd'])
1307 write
1308 edit +3 %
1309 assert_equal(3, getcurpos()[1])
1310 edit +/a %
1311 assert_equal(1, getcurpos()[1])
1312 bwipe
1313 delete('Xfile')
1314enddef
1315
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001316def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001317 command Cmd1 eval 0
1318 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001319 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001320 Cmd
1321 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001322 v9.CheckDefAndScriptFailure(lines, 'E464:', 1)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001323 delcommand Cmd1
1324 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001325enddef
1326
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001327def Test_command_not_recognized()
1328 var lines =<< trim END
1329 d.key = 'asdf'
1330 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001331 v9.CheckDefFailure(lines, 'E1146:', 1)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001332
1333 lines =<< trim END
1334 d['key'] = 'asdf'
1335 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001336 v9.CheckDefFailure(lines, 'E1146:', 1)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001337enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001338
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001339def Test_magic_not_used()
1340 new
1341 for cmd in ['set magic', 'set nomagic']
1342 exe cmd
1343 setline(1, 'aaa')
1344 s/.../bbb/
1345 assert_equal('bbb', getline(1))
1346 endfor
1347
1348 set magic
1349 setline(1, 'aaa')
1350 assert_fails('s/.\M../bbb/', 'E486:')
1351 assert_fails('snomagic/.../bbb/', 'E486:')
1352 assert_equal('aaa', getline(1))
1353
1354 bwipe!
1355enddef
1356
Bram Moolenaar60f63102020-12-21 20:32:43 +01001357def Test_gdefault_not_used()
1358 new
1359 for cmd in ['set gdefault', 'set nogdefault']
1360 exe cmd
1361 setline(1, 'aaa')
1362 s/./b/
1363 assert_equal('baa', getline(1))
1364 endfor
1365
1366 set nogdefault
1367 bwipe!
1368enddef
1369
Bram Moolenaar848fadd2022-01-30 15:28:30 +00001370def s:SomeComplFunc(findstart: number, base: string): any
Bram Moolenaar179eb562020-12-27 18:03:22 +01001371 if findstart
1372 return 0
1373 else
1374 return ['aaa', 'bbb']
1375 endif
1376enddef
1377
1378def Test_insert_complete()
1379 # this was running into an error with the matchparen hack
1380 new
1381 set completefunc=SomeComplFunc
1382 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1383 assert_equal('aaa', getline(1))
1384
1385 set completefunc=
1386 bwipe!
1387enddef
1388
Bram Moolenaara11919f2021-01-02 19:44:56 +01001389def Test_wincmd()
1390 split
1391 var id1 = win_getid()
1392 if true
1393 try | wincmd w | catch | endtry
1394 endif
1395 assert_notequal(id1, win_getid())
1396 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001397
1398 split
1399 var id = win_getid()
1400 split
1401 :2wincmd o
1402 assert_equal(id, win_getid())
1403 only
1404
1405 split
1406 split
1407 assert_equal(3, winnr('$'))
1408 :2wincmd c
1409 assert_equal(2, winnr('$'))
1410 only
1411
1412 split
1413 split
1414 assert_equal(3, winnr('$'))
1415 :2wincmd q
1416 assert_equal(2, winnr('$'))
1417 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001418enddef
1419
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001420def Test_windo_missing_endif()
1421 var lines =<< trim END
1422 windo if 1
1423 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001424 v9.CheckDefExecFailure(lines, 'E171:', 1)
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001425enddef
1426
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001427let s:theList = [1, 2, 3]
1428
1429def Test_lockvar()
1430 s:theList[1] = 22
1431 assert_equal([1, 22, 3], s:theList)
1432 lockvar s:theList
1433 assert_fails('theList[1] = 77', 'E741:')
1434 unlockvar s:theList
1435 s:theList[1] = 44
1436 assert_equal([1, 44, 3], s:theList)
1437
Bram Moolenaara99fb232021-12-20 12:25:03 +00001438 if 0
1439 lockvar whatever
1440 endif
1441
Bram Moolenaar70c43d82022-01-26 21:01:15 +00001442 g:lockme = [1, 2, 3]
1443 lockvar 1 g:lockme
1444 g:lockme[1] = 77
1445 assert_equal([1, 77, 3], g:lockme)
1446
1447 lockvar 2 g:lockme
1448 var caught = false
1449 try
1450 g:lockme[1] = 99
1451 catch /E1119:/
1452 caught = true
1453 endtry
1454 assert_true(caught)
1455 assert_equal([1, 77, 3], g:lockme)
1456 unlet g:lockme
1457
1458 # also for non-materialized list
1459 g:therange = range(3)
1460 lockvar 2 g:therange
1461 caught = false
1462 try
1463 g:therange[1] = 99
1464 catch /E1119:/
1465 caught = true
1466 endtry
1467 assert_true(caught)
1468 assert_equal([0, 1, 2], g:therange)
1469 unlet g:therange
1470
Bram Moolenaare939f5e2022-01-26 21:32:59 +00001471 # use exclamation mark for locking deeper
1472 g:nestedlist = [1, [2, 3], 4]
1473 lockvar! g:nestedlist
1474 try
1475 g:nestedlist[1][0] = 9
1476 catch /E1119:/
1477 caught = true
1478 endtry
1479 assert_true(caught)
1480 unlet g:nestedlist
1481
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001482 var d = {a: 1, b: 2}
1483 d.a = 3
1484 d.b = 4
1485 assert_equal({a: 3, b: 4}, d)
1486 lockvar d.a
1487 d.b = 5
1488 var ex = ''
1489 try
1490 d.a = 6
1491 catch
1492 ex = v:exception
1493 endtry
1494 assert_match('E1121:', ex)
Bram Moolenaar83d0cec2022-02-04 21:17:58 +00001495 unlockvar d['a']
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001496 d.a = 7
1497 assert_equal({a: 7, b: 5}, d)
1498
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001499 var lines =<< trim END
1500 vim9script
1501 var theList = [1, 2, 3]
1502 def SetList()
1503 theList[1] = 22
1504 assert_equal([1, 22, 3], theList)
1505 lockvar theList
1506 theList[1] = 77
1507 enddef
1508 SetList()
1509 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001510 v9.CheckScriptFailure(lines, 'E1119', 4)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001511
1512 lines =<< trim END
1513 var theList = [1, 2, 3]
1514 lockvar theList
1515 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001516 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001517
1518 lines =<< trim END
1519 var theList = [1, 2, 3]
1520 unlockvar theList
1521 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001522 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001523
1524 lines =<< trim END
1525 vim9script
1526 var name = 'john'
1527 lockvar nameX
1528 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001529 v9.CheckScriptFailure(lines, 'E1246', 3)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001530
1531 lines =<< trim END
1532 vim9script
1533 var name = 'john'
1534 def LockIt()
1535 lockvar nameX
1536 enddef
1537 LockIt()
1538 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001539 v9.CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001540enddef
1541
Bram Moolenaar4c137212021-04-19 16:48:48 +02001542def Test_substitute_expr()
1543 var to = 'repl'
1544 new
1545 setline(1, 'one from two')
1546 s/from/\=to
1547 assert_equal('one repl two', getline(1))
1548
1549 setline(1, 'one from two')
1550 s/from/\=to .. '_x'
1551 assert_equal('one repl_x two', getline(1))
1552
1553 setline(1, 'one from two from three')
1554 var also = 'also'
1555 s/from/\=to .. '_' .. also/g#e
1556 assert_equal('one repl_also two repl_also three', getline(1))
1557
Bram Moolenaar8238f082021-04-20 21:10:48 +02001558 setline(1, 'abc abc abc')
1559 for choice in [true, false]
1560 :1s/abc/\=choice ? 'yes' : 'no'/
1561 endfor
1562 assert_equal('yes no abc', getline(1))
1563
Bram Moolenaard386e922021-04-25 14:48:49 +02001564 bwipe!
1565
Bram Moolenaar62aec932022-01-29 21:45:34 +00001566 v9.CheckDefFailure(['s/from/\="x")/'], 'E488:')
1567 v9.CheckDefFailure(['s/from/\="x"/9'], 'E488:')
Bram Moolenaar4c137212021-04-19 16:48:48 +02001568
Bram Moolenaard386e922021-04-25 14:48:49 +02001569 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001570 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001571 var lines =<< trim END
1572 vim9script
1573 def Foo()
1574 Bar([])
1575 enddef
1576 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001577 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001578 s/^/\=Rep()/
1579 for n in l[:]
1580 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001581 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001582 enddef
1583 def Rep(): string
1584 return 'rep'
1585 enddef
1586 new
1587 Foo()
1588 assert_equal('rep', getline(1))
1589 bwipe!
1590 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001591 v9.CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001592 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001593
1594 # List results in multiple lines
1595 new
1596 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001597 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001598 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1599 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001600enddef
1601
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001602def Test_redir_to_var()
1603 var result: string
1604 redir => result
1605 echo 'something'
1606 redir END
1607 assert_equal("\nsomething", result)
1608
1609 redir =>> result
1610 echo 'more'
1611 redir END
1612 assert_equal("\nsomething\nmore", result)
1613
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001614 var d: dict<string>
1615 redir => d.redir
1616 echo 'dict'
1617 redir END
1618 assert_equal({redir: "\ndict"}, d)
1619
1620 var l = ['a', 'b', 'c']
1621 redir => l[1]
1622 echo 'list'
1623 redir END
1624 assert_equal(['a', "\nlist", 'c'], l)
1625
1626 var dl = {l: ['x']}
1627 redir => dl.l[0]
1628 echo 'dict-list'
1629 redir END
1630 assert_equal({l: ["\ndict-list"]}, dl)
1631
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001632 redir =>> d.redir
1633 echo 'more'
1634 redir END
1635 assert_equal({redir: "\ndict\nmore"}, d)
1636
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001637 var lines =<< trim END
1638 redir => notexist
1639 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001640 v9.CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001641
1642 lines =<< trim END
1643 var ls = 'asdf'
1644 redir => ls[1]
1645 redir END
1646 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001647 v9.CheckDefFailure(lines, 'E1141:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001648
1649 lines =<< trim END
1650 var text: string
1651 redir => text
1652 echo 'hello'
1653 redir > Xfile
1654 redir END
1655 END
Bram Moolenaar02a977e2022-02-03 21:29:39 +00001656 v9.CheckDefFailure(lines, 'E1092:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001657
1658 lines =<< trim END
1659 var text: number
1660 redir => text
1661 echo 'hello'
1662 redir END
1663 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001664 v9.CheckDefFailure(lines, 'E1012:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001665enddef
1666
Bram Moolenaar68db9962021-05-09 23:19:22 +02001667def Test_echo_void()
1668 var lines =<< trim END
1669 vim9script
1670 def NoReturn()
1671 echo 'nothing'
1672 enddef
1673 echo NoReturn()
1674 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001675 v9.CheckScriptFailure(lines, 'E1186:', 5)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001676
1677 lines =<< trim END
1678 vim9script
1679 def NoReturn()
1680 echo 'nothing'
1681 enddef
1682 def Try()
1683 echo NoReturn()
1684 enddef
1685 defcompile
1686 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001687 v9.CheckScriptFailure(lines, 'E1186:', 1)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001688enddef
1689
Bram Moolenaar2c707112021-08-02 22:26:56 +02001690def Test_cmdwin_block()
1691 augroup justTesting
1692 autocmd BufEnter * {
1693 echomsg 'in block'
1694 }
1695 augroup END
1696 feedkeys('q:', 'xt')
1697 redraw
1698 feedkeys("aclose\<CR>", 'xt')
1699
1700 au! justTesting
1701enddef
1702
Bram Moolenaar7b829262021-10-13 15:04:34 +01001703def Test_var_not_cmd()
1704 var lines =<< trim END
1705 g:notexist:cmd
1706 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001707 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001708
1709 lines =<< trim END
1710 g-pat-cmd
1711 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001712 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001713 lines =<< trim END
1714 g.pat.cmd
1715 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001716 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001717
1718 lines =<< trim END
1719 s:notexist:repl
1720 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001721 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001722
1723 lines =<< trim END
1724 s-pat-repl
1725 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001726 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001727 lines =<< trim END
1728 s.pat.repl
1729 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001730 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001731
1732 lines =<< trim END
1733 w:notexist->len()
1734 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001735 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001736
1737 lines =<< trim END
1738 b:notexist->len()
1739 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001740 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001741
1742 lines =<< trim END
1743 t:notexist->len()
1744 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001745 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001746enddef
1747
1748def Test_no_space_after_command()
1749 var lines =<< trim END
1750 g /pat/cmd
1751 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001752 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001753 lines =<< trim END
1754 g #pat#cmd
1755 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001756 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001757 lines =<< trim END
1758 g#pat#cmd
1759 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001760 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001761 lines =<< trim END
1762 g# pat#cmd
1763 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001764 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001765
1766 lines =<< trim END
1767 s /pat/repl
1768 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001769 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001770 lines =<< trim END
1771 s #pat#repl
1772 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001773 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001774 lines =<< trim END
1775 s#pat#repl
1776 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001777 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001778 lines =<< trim END
1779 s# pat#repl
1780 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001781 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001782enddef
1783
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001784" Test for the 'previewpopup' option
1785def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001786 set previewpopup=height:10,width:60
1787 pedit Xfile
1788 var id = popup_findpreview()
1789 assert_notequal(id, 0)
1790 assert_match('Xfile', popup_getoptions(id).title)
1791 popup_clear()
1792 set previewpopup&
1793enddef
1794
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001795def Test_syntax_enable_clear()
1796 syntax clear
1797 syntax enable
1798 highlight clear String
1799 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1800 syntax clear
1801enddef
1802
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001803
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001804" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker