blob: 4398cbf4f64a1d21c0ecc4b3f70e997996394dc7 [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
109enddef
110
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200111def Test_edit_wildcards()
Bram Moolenaarac564082020-09-27 19:05:33 +0200112 var filename = 'Xtest'
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200113 edit `=filename`
114 assert_equal('Xtest', bufname())
115
Bram Moolenaarac564082020-09-27 19:05:33 +0200116 var filenr = 123
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200117 edit Xtest`=filenr`
118 assert_equal('Xtest123', bufname())
119
120 filenr = 77
121 edit `=filename``=filenr`
122 assert_equal('Xtest77', bufname())
123
124 edit X`=filename`xx`=filenr`yy
125 assert_equal('XXtestxx77yy', bufname())
Bram Moolenaar025cb1c2020-12-14 18:31:27 +0100126
Bram Moolenaar62aec932022-01-29 21:45:34 +0000127 v9.CheckDefFailure(['edit `=xxx`'], 'E1001:')
128 v9.CheckDefFailure(['edit `="foo"'], 'E1083:')
Bram Moolenaarb288ba92021-06-05 17:10:55 +0200129
130 var files = ['file 1', 'file%2', 'file# 3']
131 args `=files`
132 assert_equal(files, argv())
Bram Moolenaar279d7332021-11-27 11:42:50 +0000133
134 filename = 'Xwindo'
135 windo edit `=filename`
136 assert_equal('Xwindo', bufname())
137
138 filename = 'Xtabdo'
139 tabdo edit `=filename`
140 assert_equal('Xtabdo', bufname())
141
142 filename = 'Xargdo'
143 argdo edit `=filename`
144 assert_equal('Xargdo', bufname())
145
146 :%bwipe!
147 filename = 'Xbufdo'
148 bufdo file `=filename`
149 assert_equal('Xbufdo', bufname())
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200150enddef
151
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100152def Test_expand_alternate_file()
153 var lines =<< trim END
154 edit Xfileone
155 var bone = bufnr()
156 edit Xfiletwo
157 var btwo = bufnr()
158 edit Xfilethree
159 var bthree = bufnr()
160
161 edit #
162 assert_equal(bthree, bufnr())
163 edit %%
164 assert_equal(btwo, bufnr())
165 edit %% # comment
166 assert_equal(bthree, bufnr())
167 edit %%yy
168 assert_equal('Xfiletwoyy', bufname())
169
170 exe "edit %%" .. bone
171 assert_equal(bone, bufnr())
172 exe "edit %%" .. btwo .. "xx"
173 assert_equal('Xfiletwoxx', bufname())
174
175 next Xfileone Xfiletwo Xfilethree
176 assert_equal('Xfileone', argv(0))
177 assert_equal('Xfiletwo', argv(1))
178 assert_equal('Xfilethree', argv(2))
179 next %%%zz
180 assert_equal('Xfileone', argv(0))
181 assert_equal('Xfiletwo', argv(1))
182 assert_equal('Xfilethreezz', argv(2))
183
184 v:oldfiles = ['Xonefile', 'Xtwofile']
185 edit %%<1
186 assert_equal('Xonefile', bufname())
187 edit %%<2
188 assert_equal('Xtwofile', bufname())
189 assert_fails('edit %%<3', 'E684:')
190
191 edit Xfileone.vim
192 edit Xfiletwo
193 edit %%:r
194 assert_equal('Xfileone', bufname())
Bram Moolenaardfbc5fd2021-01-23 15:15:01 +0100195
196 assert_false(bufexists('altfoo'))
197 edit altfoo
198 edit bar
199 assert_true(bufexists('altfoo'))
200 assert_true(buflisted('altfoo'))
201 bdel %%
202 assert_true(bufexists('altfoo'))
203 assert_false(buflisted('altfoo'))
204 bwipe! altfoo
205 bwipe! bar
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100206 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000207 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100208enddef
209
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100210def Test_global_backtick_expansion()
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000211 var name = 'xxx'
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100212 new
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000213 setline(1, ['one', 'two', 'three'])
214 set nomod
215 g/two/edit `=name`
216 assert_equal('xxx', bufname())
217 bwipe!
218
219 new
220 setline(1, ['one', 'two', 'three'])
221 g/two/s/^/`=name`/
222 assert_equal('`=name`two', getline(2))
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100223 bwipe!
224enddef
225
Bram Moolenaarecac5912021-01-05 19:23:28 +0100226def Test_folddo_backtick_expansion()
227 new
228 var name = 'xxx'
229 folddoopen edit `=name`
230 assert_equal('xxx', bufname())
231 bwipe!
232
233 new
234 setline(1, ['one', 'two'])
235 set nomodified
236 :1,2fold
237 foldclose
238 folddoclose edit `=name`
239 assert_equal('xxx', bufname())
240 bwipe!
Bram Moolenaarfad27422021-11-30 21:58:19 +0000241
242 var lines =<< trim END
243 g:val = 'value'
244 def Test()
245 folddoopen echo `=g:val`
246 enddef
247 call Test()
248 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000249 v9.CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"')
Bram Moolenaarecac5912021-01-05 19:23:28 +0100250enddef
251
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200252def Test_hardcopy_wildcards()
253 CheckUnix
254 CheckFeature postscript
255
Bram Moolenaarac564082020-09-27 19:05:33 +0200256 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200257 hardcopy > X`=outfile`.ps
258 assert_true(filereadable('Xprint.ps'))
259
260 delete('Xprint.ps')
261enddef
262
263def Test_syn_include_wildcards()
264 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200265 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200266 &rtp = '.'
267
Bram Moolenaarac564082020-09-27 19:05:33 +0200268 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200269 syn include @Group Xthe`=fname`.vim
270 assert_match('Found.* contained found', execute('syn list Found'))
271
272 &rtp = save_rtp
273 delete('Xthemine.vim')
274enddef
275
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200276def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200277 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200278 vim9script
279 redir @a
280 echo 'one'
281 .. 'two'
282 redir END
283 assert_equal("\nonetwo", @a)
284 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000285 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200286
287 lines =<< trim END
288 vim9script
289 redir @a
290 echo 11 +
291 77
292 - 22
293 redir END
294 assert_equal("\n66", @a)
295 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000296 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200297enddef
298
Bram Moolenaar13106602020-10-04 16:06:05 +0200299def Test_condition_types()
300 var lines =<< trim END
301 if 'text'
302 endif
303 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000304 v9.CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200305
306 lines =<< trim END
307 if [1]
308 endif
309 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000310 v9.CheckDefFailure(lines, 'E1012:', 1)
311 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200312
313 lines =<< trim END
314 g:cond = 'text'
315 if g:cond
316 endif
317 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000318 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200319
320 lines =<< trim END
321 g:cond = 0
322 if g:cond
323 elseif 'text'
324 endif
325 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000326 v9.CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200327
328 lines =<< trim END
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000329 g:cond = 0
330 if g:cond
331 elseif 'text' garbage
332 endif
333 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000334 v9.CheckDefAndScriptFailure(lines, 'E488:', 3)
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000335
336 lines =<< trim END
337 g:cond = 0
Bram Moolenaar13106602020-10-04 16:06:05 +0200338 if g:cond
339 elseif [1]
340 endif
341 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000342 v9.CheckDefFailure(lines, 'E1012:', 3)
343 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200344
345 lines =<< trim END
346 g:cond = 'text'
347 if 0
348 elseif g:cond
349 endif
350 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000351 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200352
353 lines =<< trim END
354 while 'text'
355 endwhile
356 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000357 v9.CheckDefFailure(lines, 'E1012:', 1)
358 v9.CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200359
360 lines =<< trim END
361 while [1]
362 endwhile
363 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000364 v9.CheckDefFailure(lines, 'E1012:', 1)
365 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200366
367 lines =<< trim END
368 g:cond = 'text'
369 while g:cond
370 endwhile
371 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000372 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200373enddef
374
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200375def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200376 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200377 vim9script
378 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200379 true
380 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200381 g:res = 42
382 endif
383 assert_equal(42, g:res)
384 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000385 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200386 unlet g:res
387
388 lines =<< trim END
389 vim9script
390 if 1 &&
391 0
392 g:res = 0
393 elseif 0 ||
394 0
395 || 1
396 g:res = 12
397 endif
398 assert_equal(12, g:res)
399 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000400 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200401 unlet g:res
402enddef
403
404def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200405 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200406 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200407 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200408 while nr <
409 10 + 3
410 nr = nr
411 + 4
412 endwhile
413 assert_equal(16, nr)
414 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000415 v9.CheckScriptSuccess(lines)
Bram Moolenaard5053d02020-06-28 15:51:16 +0200416
417 lines =<< trim END
418 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200419 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200420 while nr
421 <
422 10
423 +
424 3
425 nr = nr
426 +
427 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200428 endwhile
429 assert_equal(16, nr)
430 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000431 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200432enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200433
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200434def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200435 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200436 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200437 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200438 for x
439 in
440 [1, 2, 3, 4]
441 nr = nr + x
442 endfor
443 assert_equal(10, nr)
444 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000445 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200446
447 lines =<< trim END
448 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,
453 3, 4
454 ]
455 nr = nr
456 +
457 x
458 endfor
459 assert_equal(10, nr)
460 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000461 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200462enddef
463
Bram Moolenaar62aec932022-01-29 21:45:34 +0000464def s:MethodAfterLinebreak(arg: string)
Bram Moolenaare0890d62021-02-17 14:52:14 +0100465 arg
466 ->setline(1)
467enddef
468
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200469def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200470 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200471 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200472 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200473 func RetArg(
474 arg
475 )
476 let s:res = a:arg
477 endfunc
478 [1,
479 2,
480 3]->RetArg()
481 assert_equal([1, 2, 3], res)
482 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000483 v9.CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100484
485 lines =<< trim END
486 new
487 var name = [1, 2]
488 name
489 ->copy()
490 ->setline(1)
491 assert_equal(['1', '2'], getline(1, 2))
492 bwipe!
493 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000494 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100495
496 lines =<< trim END
497 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100498 def Foo(): string
499 return 'the text'
500 enddef
501 def Bar(F: func): string
502 return F()
503 enddef
504 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100505 Foo ->Bar()
506 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100507 enddef
508 Test()
509 assert_equal('the text', getline(1))
510 bwipe!
511 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000512 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100513
514 lines =<< trim END
515 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100516 g:shortlist
517 ->copy()
518 ->setline(1)
519 assert_equal(['1', '2'], getline(1, 2))
520 bwipe!
521 END
522 g:shortlist = [1, 2]
Bram Moolenaar62aec932022-01-29 21:45:34 +0000523 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100524 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100525
526 new
527 MethodAfterLinebreak('foobar')
528 assert_equal('foobar', getline(1))
529 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100530
531 lines =<< trim END
532 vim9script
533 def Foo(): string
534 return '# some text'
535 enddef
536
537 def Bar(F: func): string
538 return F()
539 enddef
540
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100541 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100542 ->setline(1)
543 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000544 v9.CheckScriptSuccess(lines)
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100545 assert_equal('# some text', getline(1))
546 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200547enddef
548
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100549def Test_method_call_whitespace()
550 var lines =<< trim END
551 new
552 var yank = 'text'
553 yank->setline(1)
554 yank ->setline(2)
555 yank-> setline(3)
556 yank -> setline(4)
557 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
558 bwipe!
559 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000560 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100561enddef
562
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100563def Test_method_and_user_command()
564 var lines =<< trim END
565 vim9script
566 def Cmd()
567 g:didFunc = 1
568 enddef
569 command Cmd g:didCmd = 1
570 Cmd
571 assert_equal(1, g:didCmd)
572 Cmd()
573 assert_equal(1, g:didFunc)
574 unlet g:didFunc
575 unlet g:didCmd
576
577 def InDefFunc()
578 Cmd
579 assert_equal(1, g:didCmd)
580 Cmd()
581 assert_equal(1, g:didFunc)
582 unlet g:didFunc
583 unlet g:didCmd
584 enddef
585 InDefFunc()
586 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000587 v9.CheckScriptSuccess(lines)
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100588enddef
589
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200590def Test_option_use_linebreak()
591 var lines =<< trim END
592 new
593 &matchpairs = '(:)'
594 &matchpairs->setline(1)
595 &matchpairs = '[:]'
596 &matchpairs ->setline(2)
597 &matchpairs = '{:}'
598 &matchpairs
599 ->setline(3)
600 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
601 bwipe!
602 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000603 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200604enddef
605
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200606def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200607 var lines =<< trim END
608 new
609 @a = 'one'
610 @a->setline(1)
611 @b = 'two'
612 @b ->setline(2)
613 @c = 'three'
614 @c
615 ->setline(3)
616 assert_equal(['one', 'two', 'three'], getline(1, '$'))
617 bwipe!
618 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000619 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200620
621 lines =<< trim END
622 @a = 'echo "text"'
623 @a
624 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000625 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000626
627 lines =<< trim END
628 @/ = 'pattern'
629 @/
630 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000631 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000632
633 lines =<< trim END
634 &opfunc = 'nothing'
635 &opfunc
636 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000637 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000638 &opfunc = ''
639
640 lines =<< trim END
641 &l:showbreak = 'nothing'
642 &l:showbreak
643 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000644 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000645 &l:showbreak = ''
646
647 lines =<< trim END
648 &g:showbreak = 'nothing'
649 &g:showbreak
650 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000651 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000652 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000653
654 lines =<< trim END
655 $SomeEnv = 'value'
656 $SomeEnv
657 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000658 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar65259b52021-11-23 14:52:06 +0000659 $SomeEnv = ''
Bram Moolenaar73170912021-08-22 22:44:11 +0200660enddef
661
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200662def Test_environment_use_linebreak()
663 var lines =<< trim END
664 new
665 $TESTENV = 'one'
666 $TESTENV->setline(1)
667 $TESTENV = 'two'
668 $TESTENV ->setline(2)
669 $TESTENV = 'three'
670 $TESTENV
671 ->setline(3)
672 assert_equal(['one', 'two', 'three'], getline(1, '$'))
673 bwipe!
674 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000675 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200676enddef
677
Bram Moolenaar683581e2020-10-22 21:22:58 +0200678def Test_skipped_expr_linebreak()
679 if 0
680 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100681 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200682 endif
683enddef
684
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200685def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100686 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200687 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100688 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200689 test.data
690 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100691 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200692
Bram Moolenaarac564082020-09-27 19:05:33 +0200693 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200694 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100695 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200696 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100697 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200698 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000699 v9.CheckScriptSuccess(lines)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200700enddef
701
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200702def Test_bar_after_command()
703 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200704 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200705 redraw | echo x
706 enddef
707 RedrawAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000708 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200709
Bram Moolenaar788123c2020-07-05 15:32:17 +0200710 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200711 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200712 reg_executing() | echo x
713 enddef
714 CallAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000715 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaar788123c2020-07-05 15:32:17 +0200716
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200717 if has('unix')
718 # bar in filter write command does not start new command
719 def WriteToShell()
720 new
721 setline(1, 'some text')
722 w !cat | cat > Xoutfile
723 bwipe!
724 enddef
725 WriteToShell()
726 assert_equal(['some text'], readfile('Xoutfile'))
727 delete('Xoutfile')
728
729 # bar in filter read command does not start new command
730 def ReadFromShell()
731 new
732 r! echo hello there | cat > Xoutfile
733 r !echo again | cat >> Xoutfile
734 bwipe!
735 enddef
736 ReadFromShell()
737 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
738 delete('Xoutfile')
739 endif
740enddef
741
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200742def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100743 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100744 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100745 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200746enddef
747
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100748def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100749 var lines =<< trim END
750 final expected = "\nType Name Content\n c \"c piyo"
751 @a = 'hoge'
752 @b = 'fuga'
753 @c = 'piyo'
754
755 assert_equal(execute('filter /piyo/ registers abc'), expected)
756 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000757 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200758
759 # also do this compiled
760 lines =<< trim END
761 @a = 'very specific z3d37dh234 string'
762 filter z3d37dh234 registers
Bram Moolenaar62aec932022-01-29 21:45:34 +0000763 assert_match('very specific z3d37dh234 string', g:Screenline(&lines))
Bram Moolenaare729ce22021-06-06 21:38:09 +0200764 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000765 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000766
767 lines =<< trim END
768 edit foobar
769 redir => g:filter_out
770 filter #foobar# ls
771 redir END
772 assert_match('"foobar"', g:filter_out)
773 unlet g:filter_out
774 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000775 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100776enddef
777
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100778def Test_win_command_modifiers()
779 assert_equal(1, winnr('$'))
780
781 set splitright
782 vsplit
783 assert_equal(2, winnr())
784 close
785 aboveleft vsplit
786 assert_equal(1, winnr())
787 close
788 set splitright&
789
790 vsplit
791 assert_equal(1, winnr())
792 close
793 belowright vsplit
794 assert_equal(2, winnr())
795 close
796 rightbelow vsplit
797 assert_equal(2, winnr())
798 close
799
Bram Moolenaar97a19002020-11-01 22:15:44 +0100800 if has('browse')
801 browse set
802 assert_equal('option-window', expand('%'))
803 close
804 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100805
806 vsplit
807 botright split
808 assert_equal(3, winnr())
809 assert_equal(&columns, winwidth(0))
810 close
811 close
812
813 vsplit
814 topleft split
815 assert_equal(1, winnr())
816 assert_equal(&columns, winwidth(0))
817 close
818 close
819
820 gettabinfo()->len()->assert_equal(1)
821 tab split
822 gettabinfo()->len()->assert_equal(2)
823 tabclose
824
825 vertical new
826 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
827 close
828enddef
829
830func Test_command_modifier_confirm()
831 CheckNotGui
832 CheckRunVimInTerminal
833
834 " Test for saving all the modified buffers
835 let lines =<< trim END
836 call setline(1, 'changed')
837 def Getout()
838 confirm write Xfile
839 enddef
840 END
841 call writefile(lines, 'Xconfirmscript')
842 call writefile(['empty'], 'Xfile')
843 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
844 call term_sendkeys(buf, ":call Getout()\n")
845 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
846 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100847 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
848 call term_sendkeys(buf, "\<CR>")
849 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100850 call StopVimInTerminal(buf)
851
852 call assert_equal(['changed'], readfile('Xfile'))
853 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100854 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100855 call delete('Xconfirmscript')
856endfunc
857
858def Test_command_modifiers_keep()
859 if has('unix')
860 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
861 new
862 setline(1, ['one', 'two', 'three'])
863 normal 1Gma
864 normal 2Gmb
865 normal 3Gmc
866 if addRflag
867 set cpo+=R
868 else
869 set cpo-=R
870 endif
871 if keepMarks
872 keepmarks :%!cat
873 else
874 :%!cat
875 endif
876 if hasMarks
877 assert_equal(1, line("'a"))
878 assert_equal(2, line("'b"))
879 assert_equal(3, line("'c"))
880 else
881 assert_equal(0, line("'a"))
882 assert_equal(0, line("'b"))
883 assert_equal(0, line("'c"))
884 endif
885 quit!
886 enddef
887 DoTest(false, false, true)
888 DoTest(true, false, false)
889 DoTest(false, true, true)
890 DoTest(true, true, true)
891 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100892
893 new
894 setline(1, ['one', 'two', 'three', 'four'])
895 assert_equal(4, line("$"))
896 normal 1Gma
897 normal 2Gmb
898 normal 3Gmc
899 lockmarks :1,2!wc
900 # line is deleted, marks don't move
901 assert_equal(3, line("$"))
902 assert_equal('four', getline(3))
903 assert_equal(1, line("'a"))
904 assert_equal(2, line("'b"))
905 assert_equal(3, line("'c"))
906 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100907 endif
908
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100909 edit Xone
910 edit Xtwo
911 assert_equal('Xone', expand('#'))
912 keepalt edit Xthree
913 assert_equal('Xone', expand('#'))
914
915 normal /a*b*
916 assert_equal('a*b*', histget("search"))
917 keeppatterns normal /c*d*
918 assert_equal('a*b*', histget("search"))
919
920 new
921 setline(1, range(10))
922 :10
923 normal gg
924 assert_equal(10, getpos("''")[1])
925 keepjumps normal 5G
926 assert_equal(10, getpos("''")[1])
927 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100928enddef
929
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100930def Test_bar_line_continuation()
931 var lines =<< trim END
932 au BufNewFile Xfile g:readFile = 1
933 | g:readExtra = 2
934 g:readFile = 0
935 g:readExtra = 0
936 edit Xfile
937 assert_equal(1, g:readFile)
938 assert_equal(2, g:readExtra)
939 bwipe!
940 au! BufNewFile
941
942 au BufNewFile Xfile g:readFile = 1
943 | g:readExtra = 2
944 | g:readMore = 3
945 g:readFile = 0
946 g:readExtra = 0
947 g:readMore = 0
948 edit Xfile
949 assert_equal(1, g:readFile)
950 assert_equal(2, g:readExtra)
951 assert_equal(3, g:readMore)
952 bwipe!
953 au! BufNewFile
954 unlet g:readFile
955 unlet g:readExtra
956 unlet g:readMore
957 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000958 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100959enddef
960
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100961def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100962 new Xsomefile
963 setline(1, 'changed')
964 var buf = bufnr()
965 hide edit Xotherfile
966 var info = getbufinfo(buf)
967 assert_equal(1, info[0].hidden)
968 assert_equal(1, info[0].changed)
969 edit Xsomefile
970 bwipe!
971
972 au BufNewFile Xfile g:readFile = 1
973 g:readFile = 0
974 edit Xfile
975 assert_equal(1, g:readFile)
976 bwipe!
977 g:readFile = 0
978 noautocmd edit Xfile
979 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100980 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +0100981 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100982
983 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +0100984 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100985 bwipe!
986
987 var caught = false
988 try
989 sandbox !ls
990 catch /E48:/
991 caught = true
992 endtry
993 assert_true(caught)
994
995 :8verbose g:verbose_now = &verbose
996 assert_equal(8, g:verbose_now)
997 unlet g:verbose_now
998enddef
999
Bram Moolenaar62aec932022-01-29 21:45:34 +00001000def s:EchoHere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001001 echomsg 'here'
1002enddef
Bram Moolenaar62aec932022-01-29 21:45:34 +00001003def s:EchoThere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001004 unsilent echomsg 'there'
1005enddef
1006
1007def Test_modifier_silent_unsilent()
1008 echomsg 'last one'
1009 silent echomsg "text"
1010 assert_equal("\nlast one", execute(':1messages'))
1011
1012 silent! echoerr "error"
1013
1014 echomsg 'last one'
1015 silent EchoHere()
1016 assert_equal("\nlast one", execute(':1messages'))
1017
1018 silent EchoThere()
1019 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +01001020
1021 try
1022 silent eval [][0]
1023 catch
1024 echomsg "caught"
1025 endtry
1026 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001027
1028 var lines =<< trim END
1029 vim9script
1030 set history=11
1031 silent! while 0
1032 set history=22
1033 silent! endwhile
1034 assert_equal(11, &history)
1035 set history&
1036 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001037 v9.CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +01001038enddef
1039
Bram Moolenaar36113e42020-11-02 21:08:47 +01001040def Test_range_after_command_modifier()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001041 v9.CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +01001042 new
1043 setline(1, 'xxx')
Bram Moolenaar62aec932022-01-29 21:45:34 +00001044 v9.CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
Bram Moolenaar36113e42020-11-02 21:08:47 +01001045 assert_equal('', getline(1))
1046 bwipe!
Bram Moolenaarb579f6e2021-12-04 11:57:00 +00001047
1048 var lines =<< trim END
1049 legacy /pat/
1050 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001051 v9.CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat')
Bram Moolenaar36113e42020-11-02 21:08:47 +01001052enddef
1053
Bram Moolenaarece0b872021-01-08 20:40:45 +01001054def Test_silent_pattern()
1055 new
1056 silent! :/pat/put _
1057 bwipe!
1058enddef
1059
Bram Moolenaarfa984412021-03-25 22:15:28 +01001060def Test_useless_command_modifier()
1061 g:maybe = true
1062 var lines =<< trim END
1063 if g:maybe
1064 silent endif
1065 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001066 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001067
1068 lines =<< trim END
1069 for i in [0]
1070 silent endfor
1071 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001072 v9.CheckDefFailure(lines, 'E1176:', 2)
1073 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001074
1075 lines =<< trim END
1076 while g:maybe
1077 silent endwhile
1078 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001079 v9.CheckDefFailure(lines, 'E1176:', 2)
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001080 g:maybe = false
Bram Moolenaar62aec932022-01-29 21:45:34 +00001081 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001082
1083 lines =<< trim END
1084 silent try
1085 finally
1086 endtry
1087 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001088 v9.CheckDefAndScriptFailure(lines, 'E1176:', 1)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001089
1090 lines =<< trim END
1091 try
1092 silent catch
1093 endtry
1094 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001095 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001096
1097 lines =<< trim END
1098 try
1099 silent finally
1100 endtry
1101 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001102 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001103
1104 lines =<< trim END
1105 try
1106 finally
1107 silent endtry
1108 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001109 v9.CheckDefAndScriptFailure(lines, 'E1176:', 3)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001110enddef
1111
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001112def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001113 var from = 3
1114 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001115 g:val = 111
1116 def Increment(nrs: list<number>)
1117 for nr in nrs
1118 g:val += nr
1119 endfor
1120 enddef
1121 eval range(from, to)
1122 ->Increment()
1123 assert_equal(111 + 3 + 4 + 5, g:val)
1124 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001125
1126 var lines =<< trim END
1127 vim9script
1128 g:caught = 'no'
1129 try
1130 eval 123 || 0
1131 catch
1132 g:caught = 'yes'
1133 endtry
1134 assert_equal('yes', g:caught)
1135 unlet g:caught
1136 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001137 v9.CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001138enddef
1139
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001140def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001141 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001142 nnoremap <F3> :echo 'hit F3 #'<CR>
1143 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1144 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001145 v9.CheckDefSuccess(lines)
1146 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001147enddef
1148
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001149def Test_normal_command()
1150 new
1151 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001152 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001153 try
1154 exe "norm! \<C-]>"
1155 catch /E433/
1156 caught = 2
1157 endtry
1158 assert_equal(2, caught)
1159
1160 try
1161 exe "norm! 3\<C-]>"
1162 catch /E433/
1163 caught = 3
1164 endtry
1165 assert_equal(3, caught)
1166 bwipe!
1167enddef
1168
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001169def Test_put_command()
1170 new
1171 @p = 'ppp'
1172 put p
1173 assert_equal('ppp', getline(2))
1174
1175 put ='below'
1176 assert_equal('below', getline(3))
1177 put! ='above'
1178 assert_equal('above', getline(3))
1179 assert_equal('below', getline(4))
1180
Bram Moolenaar883cf972021-01-15 18:04:43 +01001181 :2put =['a', 'b', 'c']
1182 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1183
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001184 :0put ='first'
1185 assert_equal('first', getline(1))
1186 :1put! ='first again'
1187 assert_equal('first again', getline(1))
1188
Bram Moolenaar08597872020-12-10 19:43:40 +01001189 # compute range at runtime
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001190 :%del
Bram Moolenaar08597872020-12-10 19:43:40 +01001191 setline(1, range(1, 8))
1192 @a = 'aaa'
1193 :$-2put a
1194 assert_equal('aaa', getline(7))
1195
1196 setline(1, range(1, 8))
1197 :2
1198 :+2put! a
1199 assert_equal('aaa', getline(4))
1200
Bram Moolenaara28639e2021-01-19 22:48:09 +01001201 []->mapnew(() => 0)
1202 :$put ='end'
1203 assert_equal('end', getline('$'))
1204
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001205 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001206
Bram Moolenaar62aec932022-01-29 21:45:34 +00001207 v9.CheckDefFailure(['put =xxx'], 'E1001:')
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001208enddef
1209
1210def Test_put_with_linebreak()
1211 new
1212 var lines =<< trim END
1213 vim9script
1214 pu =split('abc', '\zs')
1215 ->join()
1216 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001217 v9.CheckScriptSuccess(lines)
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001218 getline(2)->assert_equal('a b c')
1219 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001220enddef
1221
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001222def Test_command_star_range()
1223 new
1224 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1225 setpos("'<", [0, 1, 0, 0])
1226 setpos("'>", [0, 3, 0, 0])
1227 :*s/\(foo\|bar\)/baz/g
1228 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1229
1230 bwipe!
1231enddef
1232
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001233def Test_f_args()
1234 var lines =<< trim END
1235 vim9script
1236
1237 func SaveCmdArgs(...)
1238 let g:args = a:000
1239 endfunc
1240
1241 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1242
1243 TestFArgs
1244 assert_equal([], g:args)
1245
1246 TestFArgs one two three
1247 assert_equal(['one', 'two', 'three'], g:args)
1248 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001249 v9.CheckScriptSuccess(lines)
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001250enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001251
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001252def Test_user_command_comment()
1253 command -nargs=1 Comd echom <q-args>
1254
1255 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001256 vim9script
1257 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001258 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001259 v9.CheckScriptSuccess(lines)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001260
1261 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001262 vim9script
1263 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001264 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001265 v9.CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001266 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001267
1268 lines =<< trim END
1269 vim9script
1270 command Foo echo 'Foo'
1271 Foo3Bar
1272 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001273 v9.CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001274
1275 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001276enddef
1277
Bram Moolenaar95388e32020-11-20 21:07:00 +01001278def Test_star_command()
1279 var lines =<< trim END
1280 vim9script
1281 @s = 'g:success = 8'
1282 set cpo+=*
1283 exe '*s'
1284 assert_equal(8, g:success)
1285 unlet g:success
1286 set cpo-=*
1287 assert_fails("exe '*s'", 'E1050:')
1288 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001289 v9.CheckScriptSuccess(lines)
Bram Moolenaar95388e32020-11-20 21:07:00 +01001290enddef
1291
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001292def Test_cmd_argument_without_colon()
1293 new Xfile
1294 setline(1, ['a', 'b', 'c', 'd'])
1295 write
1296 edit +3 %
1297 assert_equal(3, getcurpos()[1])
1298 edit +/a %
1299 assert_equal(1, getcurpos()[1])
1300 bwipe
1301 delete('Xfile')
1302enddef
1303
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001304def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001305 command Cmd1 eval 0
1306 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001307 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001308 Cmd
1309 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001310 v9.CheckDefAndScriptFailure(lines, 'E464:', 1)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001311 delcommand Cmd1
1312 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001313enddef
1314
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001315def Test_command_not_recognized()
1316 var lines =<< trim END
1317 d.key = 'asdf'
1318 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001319 v9.CheckDefFailure(lines, 'E1146:', 1)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001320
1321 lines =<< trim END
1322 d['key'] = 'asdf'
1323 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001324 v9.CheckDefFailure(lines, 'E1146:', 1)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001325enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001326
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001327def Test_magic_not_used()
1328 new
1329 for cmd in ['set magic', 'set nomagic']
1330 exe cmd
1331 setline(1, 'aaa')
1332 s/.../bbb/
1333 assert_equal('bbb', getline(1))
1334 endfor
1335
1336 set magic
1337 setline(1, 'aaa')
1338 assert_fails('s/.\M../bbb/', 'E486:')
1339 assert_fails('snomagic/.../bbb/', 'E486:')
1340 assert_equal('aaa', getline(1))
1341
1342 bwipe!
1343enddef
1344
Bram Moolenaar60f63102020-12-21 20:32:43 +01001345def Test_gdefault_not_used()
1346 new
1347 for cmd in ['set gdefault', 'set nogdefault']
1348 exe cmd
1349 setline(1, 'aaa')
1350 s/./b/
1351 assert_equal('baa', getline(1))
1352 endfor
1353
1354 set nogdefault
1355 bwipe!
1356enddef
1357
Bram Moolenaar848fadd2022-01-30 15:28:30 +00001358def s:SomeComplFunc(findstart: number, base: string): any
Bram Moolenaar179eb562020-12-27 18:03:22 +01001359 if findstart
1360 return 0
1361 else
1362 return ['aaa', 'bbb']
1363 endif
1364enddef
1365
1366def Test_insert_complete()
1367 # this was running into an error with the matchparen hack
1368 new
1369 set completefunc=SomeComplFunc
1370 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1371 assert_equal('aaa', getline(1))
1372
1373 set completefunc=
1374 bwipe!
1375enddef
1376
Bram Moolenaara11919f2021-01-02 19:44:56 +01001377def Test_wincmd()
1378 split
1379 var id1 = win_getid()
1380 if true
1381 try | wincmd w | catch | endtry
1382 endif
1383 assert_notequal(id1, win_getid())
1384 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001385
1386 split
1387 var id = win_getid()
1388 split
1389 :2wincmd o
1390 assert_equal(id, win_getid())
1391 only
1392
1393 split
1394 split
1395 assert_equal(3, winnr('$'))
1396 :2wincmd c
1397 assert_equal(2, winnr('$'))
1398 only
1399
1400 split
1401 split
1402 assert_equal(3, winnr('$'))
1403 :2wincmd q
1404 assert_equal(2, winnr('$'))
1405 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001406enddef
1407
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001408def Test_windo_missing_endif()
1409 var lines =<< trim END
1410 windo if 1
1411 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001412 v9.CheckDefExecFailure(lines, 'E171:', 1)
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001413enddef
1414
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001415let s:theList = [1, 2, 3]
1416
1417def Test_lockvar()
1418 s:theList[1] = 22
1419 assert_equal([1, 22, 3], s:theList)
1420 lockvar s:theList
1421 assert_fails('theList[1] = 77', 'E741:')
1422 unlockvar s:theList
1423 s:theList[1] = 44
1424 assert_equal([1, 44, 3], s:theList)
1425
Bram Moolenaara99fb232021-12-20 12:25:03 +00001426 if 0
1427 lockvar whatever
1428 endif
1429
Bram Moolenaar70c43d82022-01-26 21:01:15 +00001430 g:lockme = [1, 2, 3]
1431 lockvar 1 g:lockme
1432 g:lockme[1] = 77
1433 assert_equal([1, 77, 3], g:lockme)
1434
1435 lockvar 2 g:lockme
1436 var caught = false
1437 try
1438 g:lockme[1] = 99
1439 catch /E1119:/
1440 caught = true
1441 endtry
1442 assert_true(caught)
1443 assert_equal([1, 77, 3], g:lockme)
1444 unlet g:lockme
1445
1446 # also for non-materialized list
1447 g:therange = range(3)
1448 lockvar 2 g:therange
1449 caught = false
1450 try
1451 g:therange[1] = 99
1452 catch /E1119:/
1453 caught = true
1454 endtry
1455 assert_true(caught)
1456 assert_equal([0, 1, 2], g:therange)
1457 unlet g:therange
1458
Bram Moolenaare939f5e2022-01-26 21:32:59 +00001459 # use exclamation mark for locking deeper
1460 g:nestedlist = [1, [2, 3], 4]
1461 lockvar! g:nestedlist
1462 try
1463 g:nestedlist[1][0] = 9
1464 catch /E1119:/
1465 caught = true
1466 endtry
1467 assert_true(caught)
1468 unlet g:nestedlist
1469
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001470 var d = {a: 1, b: 2}
1471 d.a = 3
1472 d.b = 4
1473 assert_equal({a: 3, b: 4}, d)
1474 lockvar d.a
1475 d.b = 5
1476 var ex = ''
1477 try
1478 d.a = 6
1479 catch
1480 ex = v:exception
1481 endtry
1482 assert_match('E1121:', ex)
Bram Moolenaar83d0cec2022-02-04 21:17:58 +00001483 unlockvar d['a']
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001484 d.a = 7
1485 assert_equal({a: 7, b: 5}, d)
1486
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001487 var lines =<< trim END
1488 vim9script
1489 var theList = [1, 2, 3]
1490 def SetList()
1491 theList[1] = 22
1492 assert_equal([1, 22, 3], theList)
1493 lockvar theList
1494 theList[1] = 77
1495 enddef
1496 SetList()
1497 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001498 v9.CheckScriptFailure(lines, 'E1119', 4)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001499
1500 lines =<< trim END
1501 var theList = [1, 2, 3]
1502 lockvar theList
1503 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001504 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001505
1506 lines =<< trim END
1507 var theList = [1, 2, 3]
1508 unlockvar theList
1509 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001510 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001511
1512 lines =<< trim END
1513 vim9script
1514 var name = 'john'
1515 lockvar nameX
1516 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001517 v9.CheckScriptFailure(lines, 'E1246', 3)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001518
1519 lines =<< trim END
1520 vim9script
1521 var name = 'john'
1522 def LockIt()
1523 lockvar nameX
1524 enddef
1525 LockIt()
1526 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001527 v9.CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001528enddef
1529
Bram Moolenaar4c137212021-04-19 16:48:48 +02001530def Test_substitute_expr()
1531 var to = 'repl'
1532 new
1533 setline(1, 'one from two')
1534 s/from/\=to
1535 assert_equal('one repl two', getline(1))
1536
1537 setline(1, 'one from two')
1538 s/from/\=to .. '_x'
1539 assert_equal('one repl_x two', getline(1))
1540
1541 setline(1, 'one from two from three')
1542 var also = 'also'
1543 s/from/\=to .. '_' .. also/g#e
1544 assert_equal('one repl_also two repl_also three', getline(1))
1545
Bram Moolenaar8238f082021-04-20 21:10:48 +02001546 setline(1, 'abc abc abc')
1547 for choice in [true, false]
1548 :1s/abc/\=choice ? 'yes' : 'no'/
1549 endfor
1550 assert_equal('yes no abc', getline(1))
1551
Bram Moolenaard386e922021-04-25 14:48:49 +02001552 bwipe!
1553
Bram Moolenaar62aec932022-01-29 21:45:34 +00001554 v9.CheckDefFailure(['s/from/\="x")/'], 'E488:')
1555 v9.CheckDefFailure(['s/from/\="x"/9'], 'E488:')
Bram Moolenaar4c137212021-04-19 16:48:48 +02001556
Bram Moolenaard386e922021-04-25 14:48:49 +02001557 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001558 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001559 var lines =<< trim END
1560 vim9script
1561 def Foo()
1562 Bar([])
1563 enddef
1564 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001565 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001566 s/^/\=Rep()/
1567 for n in l[:]
1568 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001569 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001570 enddef
1571 def Rep(): string
1572 return 'rep'
1573 enddef
1574 new
1575 Foo()
1576 assert_equal('rep', getline(1))
1577 bwipe!
1578 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001579 v9.CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001580 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001581
1582 # List results in multiple lines
1583 new
1584 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001585 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001586 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1587 bwipe!
Bram Moolenaar4c137212021-04-19 16:48:48 +02001588enddef
1589
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001590def Test_redir_to_var()
1591 var result: string
1592 redir => result
1593 echo 'something'
1594 redir END
1595 assert_equal("\nsomething", result)
1596
1597 redir =>> result
1598 echo 'more'
1599 redir END
1600 assert_equal("\nsomething\nmore", result)
1601
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001602 var d: dict<string>
1603 redir => d.redir
1604 echo 'dict'
1605 redir END
1606 assert_equal({redir: "\ndict"}, d)
1607
1608 var l = ['a', 'b', 'c']
1609 redir => l[1]
1610 echo 'list'
1611 redir END
1612 assert_equal(['a', "\nlist", 'c'], l)
1613
1614 var dl = {l: ['x']}
1615 redir => dl.l[0]
1616 echo 'dict-list'
1617 redir END
1618 assert_equal({l: ["\ndict-list"]}, dl)
1619
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001620 redir =>> d.redir
1621 echo 'more'
1622 redir END
1623 assert_equal({redir: "\ndict\nmore"}, d)
1624
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001625 var lines =<< trim END
1626 redir => notexist
1627 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001628 v9.CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001629
1630 lines =<< trim END
1631 var ls = 'asdf'
1632 redir => ls[1]
1633 redir END
1634 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001635 v9.CheckDefFailure(lines, 'E1141:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001636
1637 lines =<< trim END
1638 var text: string
1639 redir => text
1640 echo 'hello'
1641 redir > Xfile
1642 redir END
1643 END
Bram Moolenaar02a977e2022-02-03 21:29:39 +00001644 v9.CheckDefFailure(lines, 'E1092:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001645
1646 lines =<< trim END
1647 var text: number
1648 redir => text
1649 echo 'hello'
1650 redir END
1651 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001652 v9.CheckDefFailure(lines, 'E1012:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001653enddef
1654
Bram Moolenaar68db9962021-05-09 23:19:22 +02001655def Test_echo_void()
1656 var lines =<< trim END
1657 vim9script
1658 def NoReturn()
1659 echo 'nothing'
1660 enddef
1661 echo NoReturn()
1662 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001663 v9.CheckScriptFailure(lines, 'E1186:', 5)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001664
1665 lines =<< trim END
1666 vim9script
1667 def NoReturn()
1668 echo 'nothing'
1669 enddef
1670 def Try()
1671 echo NoReturn()
1672 enddef
1673 defcompile
1674 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001675 v9.CheckScriptFailure(lines, 'E1186:', 1)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001676enddef
1677
Bram Moolenaar2c707112021-08-02 22:26:56 +02001678def Test_cmdwin_block()
1679 augroup justTesting
1680 autocmd BufEnter * {
1681 echomsg 'in block'
1682 }
1683 augroup END
1684 feedkeys('q:', 'xt')
1685 redraw
1686 feedkeys("aclose\<CR>", 'xt')
1687
1688 au! justTesting
1689enddef
1690
Bram Moolenaar7b829262021-10-13 15:04:34 +01001691def Test_var_not_cmd()
1692 var lines =<< trim END
1693 g:notexist:cmd
1694 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001695 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001696
1697 lines =<< trim END
1698 g-pat-cmd
1699 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001700 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001701 lines =<< trim END
1702 g.pat.cmd
1703 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001704 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001705
1706 lines =<< trim END
1707 s:notexist:repl
1708 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001709 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E121: Undefined variable: s:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001710
1711 lines =<< trim END
1712 s-pat-repl
1713 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001714 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001715 lines =<< trim END
1716 s.pat.repl
1717 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001718 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001719
1720 lines =<< trim END
1721 w:notexist->len()
1722 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001723 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001724
1725 lines =<< trim END
1726 b:notexist->len()
1727 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001728 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001729
1730 lines =<< trim END
1731 t:notexist->len()
1732 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001733 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001734enddef
1735
1736def Test_no_space_after_command()
1737 var lines =<< trim END
1738 g /pat/cmd
1739 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001740 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001741 lines =<< trim END
1742 g #pat#cmd
1743 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001744 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001745 lines =<< trim END
1746 g#pat#cmd
1747 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001748 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001749 lines =<< trim END
1750 g# pat#cmd
1751 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001752 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001753
1754 lines =<< trim END
1755 s /pat/repl
1756 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001757 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001758 lines =<< trim END
1759 s #pat#repl
1760 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001761 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001762 lines =<< trim END
1763 s#pat#repl
1764 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001765 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001766 lines =<< trim END
1767 s# pat#repl
1768 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001769 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001770enddef
1771
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001772" Test for the 'previewpopup' option
1773def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001774 set previewpopup=height:10,width:60
1775 pedit Xfile
1776 var id = popup_findpreview()
1777 assert_notequal(id, 0)
1778 assert_match('Xfile', popup_getoptions(id).title)
1779 popup_clear()
1780 set previewpopup&
1781enddef
1782
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001783def Test_syntax_enable_clear()
1784 syntax clear
1785 syntax enable
1786 highlight clear String
1787 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1788 syntax clear
1789enddef
1790
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001791
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001792" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker