blob: 7db8e50c8e6b22a36d1e1ecafb32ef27099ea3ad [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 Moolenaarf79d9dd2022-05-21 15:39:02 +010086def Test_defcompile_fails()
87 assert_fails('defcompile NotExists', 'E1061:')
88 assert_fails('defcompile debug debug Test_defcompile_fails', 'E488:')
89 assert_fails('defcompile profile profile Test_defcompile_fails', 'E488:')
90enddef
91
92defcompile Test_defcompile_fails
93defcompile debug Test_defcompile_fails
94defcompile profile Test_defcompile_fails
95
Bram Moolenaar5b1d6e92022-02-11 20:33:48 +000096def Test_cmdmod_execute()
97 # "legacy" applies not only to the "exe" argument but also to the commands
98 var lines =<< trim END
99 vim9script
100
101 b:undo = 'let g:undone = 1 | let g:undtwo = 2'
102 legacy exe b:undo
103 assert_equal(1, g:undone)
104 assert_equal(2, g:undtwo)
105 END
106 v9.CheckScriptSuccess(lines)
107
108 # same for "vim9cmd" modifier
109 lines =<< trim END
110 let b:undo = 'g:undone = 11 | g:undtwo = 22'
111 vim9cmd exe b:undo
112 call assert_equal(11, g:undone)
113 call assert_equal(22, g:undtwo)
114 END
115 v9.CheckScriptSuccess(lines)
116 unlet b:undo
117 unlet g:undone
118 unlet g:undtwo
Bram Moolenaar2a9b62d2022-02-12 13:30:17 +0000119
120 # "legacy" does not apply to a loaded script
121 lines =<< trim END
122 vim9script
123 export var exported = 'x'
124 END
125 writefile(lines, 'Xvim9import.vim')
126 lines =<< trim END
127 legacy exe "import './Xvim9import.vim'"
128 END
129 v9.CheckScriptSuccess(lines)
130 delete('Xvim9import.vim')
Bram Moolenaarcdf04852022-02-12 22:13:06 +0000131
132 # "legacy" does not aply to a called function
133 lines =<< trim END
134 vim9script
135
136 def g:TheFunc()
137 if exists('something')
138 echo 'yes'
139 endif
140 enddef
141 legacy exe 'call g:TheFunc()'
142 END
143 v9.CheckScriptSuccess(lines)
144 delfunc g:TheFunc
Bram Moolenaar5b1d6e92022-02-11 20:33:48 +0000145enddef
146
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200147def Test_edit_wildcards()
Bram Moolenaarac564082020-09-27 19:05:33 +0200148 var filename = 'Xtest'
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200149 edit `=filename`
150 assert_equal('Xtest', bufname())
151
Bram Moolenaarac564082020-09-27 19:05:33 +0200152 var filenr = 123
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200153 edit Xtest`=filenr`
154 assert_equal('Xtest123', bufname())
155
156 filenr = 77
157 edit `=filename``=filenr`
158 assert_equal('Xtest77', bufname())
159
160 edit X`=filename`xx`=filenr`yy
161 assert_equal('XXtestxx77yy', bufname())
Bram Moolenaar025cb1c2020-12-14 18:31:27 +0100162
Bram Moolenaar62aec932022-01-29 21:45:34 +0000163 v9.CheckDefFailure(['edit `=xxx`'], 'E1001:')
164 v9.CheckDefFailure(['edit `="foo"'], 'E1083:')
Bram Moolenaarb288ba92021-06-05 17:10:55 +0200165
166 var files = ['file 1', 'file%2', 'file# 3']
167 args `=files`
168 assert_equal(files, argv())
Bram Moolenaar279d7332021-11-27 11:42:50 +0000169
170 filename = 'Xwindo'
171 windo edit `=filename`
172 assert_equal('Xwindo', bufname())
173
174 filename = 'Xtabdo'
175 tabdo edit `=filename`
176 assert_equal('Xtabdo', bufname())
177
178 filename = 'Xargdo'
179 argdo edit `=filename`
180 assert_equal('Xargdo', bufname())
181
182 :%bwipe!
183 filename = 'Xbufdo'
184 bufdo file `=filename`
185 assert_equal('Xbufdo', bufname())
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200186enddef
187
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100188def Test_expand_alternate_file()
189 var lines =<< trim END
190 edit Xfileone
191 var bone = bufnr()
192 edit Xfiletwo
193 var btwo = bufnr()
194 edit Xfilethree
195 var bthree = bufnr()
196
197 edit #
198 assert_equal(bthree, bufnr())
199 edit %%
200 assert_equal(btwo, bufnr())
201 edit %% # comment
202 assert_equal(bthree, bufnr())
203 edit %%yy
204 assert_equal('Xfiletwoyy', bufname())
205
206 exe "edit %%" .. bone
207 assert_equal(bone, bufnr())
208 exe "edit %%" .. btwo .. "xx"
209 assert_equal('Xfiletwoxx', bufname())
210
211 next Xfileone Xfiletwo Xfilethree
212 assert_equal('Xfileone', argv(0))
213 assert_equal('Xfiletwo', argv(1))
214 assert_equal('Xfilethree', argv(2))
215 next %%%zz
216 assert_equal('Xfileone', argv(0))
217 assert_equal('Xfiletwo', argv(1))
218 assert_equal('Xfilethreezz', argv(2))
219
220 v:oldfiles = ['Xonefile', 'Xtwofile']
221 edit %%<1
222 assert_equal('Xonefile', bufname())
223 edit %%<2
224 assert_equal('Xtwofile', bufname())
225 assert_fails('edit %%<3', 'E684:')
226
227 edit Xfileone.vim
228 edit Xfiletwo
229 edit %%:r
230 assert_equal('Xfileone', bufname())
Bram Moolenaardfbc5fd2021-01-23 15:15:01 +0100231
232 assert_false(bufexists('altfoo'))
233 edit altfoo
234 edit bar
235 assert_true(bufexists('altfoo'))
236 assert_true(buflisted('altfoo'))
237 bdel %%
238 assert_true(bufexists('altfoo'))
239 assert_false(buflisted('altfoo'))
240 bwipe! altfoo
241 bwipe! bar
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100242 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000243 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4389f9c2020-12-27 16:55:11 +0100244enddef
245
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100246def Test_global_backtick_expansion()
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000247 var name = 'xxx'
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100248 new
Bram Moolenaar3d2e0312021-12-01 09:27:20 +0000249 setline(1, ['one', 'two', 'three'])
250 set nomod
251 g/two/edit `=name`
252 assert_equal('xxx', bufname())
253 bwipe!
254
255 new
256 setline(1, ['one', 'two', 'three'])
257 g/two/s/^/`=name`/
258 assert_equal('`=name`two', getline(2))
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +0100259 bwipe!
260enddef
261
Bram Moolenaarecac5912021-01-05 19:23:28 +0100262def Test_folddo_backtick_expansion()
263 new
264 var name = 'xxx'
265 folddoopen edit `=name`
266 assert_equal('xxx', bufname())
267 bwipe!
268
269 new
270 setline(1, ['one', 'two'])
271 set nomodified
272 :1,2fold
273 foldclose
274 folddoclose edit `=name`
275 assert_equal('xxx', bufname())
276 bwipe!
Bram Moolenaarfad27422021-11-30 21:58:19 +0000277
278 var lines =<< trim END
279 g:val = 'value'
280 def Test()
281 folddoopen echo `=g:val`
282 enddef
283 call Test()
284 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000285 v9.CheckScriptFailure(lines, 'E15: Invalid expression: "`=g:val`"')
Bram Moolenaarecac5912021-01-05 19:23:28 +0100286enddef
287
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200288def Test_hardcopy_wildcards()
289 CheckUnix
290 CheckFeature postscript
291
Bram Moolenaarac564082020-09-27 19:05:33 +0200292 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200293 hardcopy > X`=outfile`.ps
294 assert_true(filereadable('Xprint.ps'))
295
296 delete('Xprint.ps')
297enddef
298
299def Test_syn_include_wildcards()
300 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +0200301 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200302 &rtp = '.'
303
Bram Moolenaarac564082020-09-27 19:05:33 +0200304 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +0200305 syn include @Group Xthe`=fname`.vim
306 assert_match('Found.* contained found', execute('syn list Found'))
307
308 &rtp = save_rtp
309 delete('Xthemine.vim')
310enddef
311
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200312def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200313 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200314 vim9script
315 redir @a
316 echo 'one'
317 .. 'two'
318 redir END
319 assert_equal("\nonetwo", @a)
320 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000321 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200322
323 lines =<< trim END
324 vim9script
325 redir @a
326 echo 11 +
327 77
328 - 22
329 redir END
330 assert_equal("\n66", @a)
331 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000332 v9.CheckScriptSuccess(lines)
Bram Moolenaar7e8967f2020-06-27 21:56:17 +0200333enddef
334
Bram Moolenaar13106602020-10-04 16:06:05 +0200335def Test_condition_types()
336 var lines =<< trim END
337 if 'text'
338 endif
339 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000340 v9.CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +0200341
342 lines =<< trim END
343 if [1]
344 endif
345 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000346 v9.CheckDefFailure(lines, 'E1012:', 1)
347 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200348
349 lines =<< trim END
350 g:cond = 'text'
351 if g:cond
352 endif
353 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000354 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200355
356 lines =<< trim END
357 g:cond = 0
358 if g:cond
359 elseif 'text'
360 endif
361 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000362 v9.CheckDefAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200363
364 lines =<< trim END
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000365 g:cond = 0
366 if g:cond
367 elseif 'text' garbage
368 endif
369 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000370 v9.CheckDefAndScriptFailure(lines, 'E488:', 3)
Bram Moolenaar56a8ffd2021-12-01 10:10:22 +0000371
372 lines =<< trim END
373 g:cond = 0
Bram Moolenaar13106602020-10-04 16:06:05 +0200374 if g:cond
375 elseif [1]
376 endif
377 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000378 v9.CheckDefFailure(lines, 'E1012:', 3)
379 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200380
381 lines =<< trim END
382 g:cond = 'text'
383 if 0
384 elseif g:cond
385 endif
386 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000387 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200388
389 lines =<< trim END
390 while 'text'
391 endwhile
392 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000393 v9.CheckDefFailure(lines, 'E1012:', 1)
394 v9.CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200395
396 lines =<< trim END
397 while [1]
398 endwhile
399 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000400 v9.CheckDefFailure(lines, 'E1012:', 1)
401 v9.CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200402
403 lines =<< trim END
404 g:cond = 'text'
405 while g:cond
406 endwhile
407 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000408 v9.CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200409enddef
410
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200411def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200412 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200413 vim9script
414 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200415 true
416 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200417 g:res = 42
418 endif
419 assert_equal(42, g:res)
420 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000421 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200422 unlet g:res
423
424 lines =<< trim END
425 vim9script
426 if 1 &&
427 0
428 g:res = 0
429 elseif 0 ||
430 0
431 || 1
432 g:res = 12
433 endif
434 assert_equal(12, g:res)
435 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000436 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200437 unlet g:res
438enddef
439
440def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200441 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200442 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200443 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200444 while nr <
445 10 + 3
446 nr = nr
447 + 4
448 endwhile
449 assert_equal(16, nr)
450 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000451 v9.CheckScriptSuccess(lines)
Bram Moolenaard5053d02020-06-28 15:51:16 +0200452
453 lines =<< trim END
454 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200455 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200456 while nr
457 <
458 10
459 +
460 3
461 nr = nr
462 +
463 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200464 endwhile
465 assert_equal(16, nr)
466 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000467 v9.CheckScriptSuccess(lines)
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200468enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200469
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200470def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200471 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200472 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200473 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200474 for x
475 in
476 [1, 2, 3, 4]
477 nr = nr + x
478 endfor
479 assert_equal(10, nr)
480 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000481 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200482
483 lines =<< trim END
484 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200485 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200486 for x
487 in
488 [1, 2,
489 3, 4
490 ]
491 nr = nr
492 +
493 x
494 endfor
495 assert_equal(10, nr)
496 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000497 v9.CheckScriptSuccess(lines)
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200498enddef
499
Bram Moolenaar62aec932022-01-29 21:45:34 +0000500def s:MethodAfterLinebreak(arg: string)
Bram Moolenaare0890d62021-02-17 14:52:14 +0100501 arg
502 ->setline(1)
503enddef
504
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200505def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200506 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200507 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200508 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200509 func RetArg(
510 arg
511 )
512 let s:res = a:arg
513 endfunc
514 [1,
515 2,
516 3]->RetArg()
517 assert_equal([1, 2, 3], res)
518 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000519 v9.CheckScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100520
521 lines =<< trim END
522 new
523 var name = [1, 2]
524 name
525 ->copy()
526 ->setline(1)
527 assert_equal(['1', '2'], getline(1, 2))
528 bwipe!
529 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000530 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100531
532 lines =<< trim END
533 new
Bram Moolenaar6914e872021-03-06 21:01:09 +0100534 def Foo(): string
535 return 'the text'
536 enddef
537 def Bar(F: func): string
538 return F()
539 enddef
540 def Test()
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100541 Foo ->Bar()
542 ->setline(1)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100543 enddef
544 Test()
545 assert_equal('the text', getline(1))
546 bwipe!
547 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000548 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar6914e872021-03-06 21:01:09 +0100549
550 lines =<< trim END
551 new
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100552 g:shortlist
553 ->copy()
554 ->setline(1)
555 assert_equal(['1', '2'], getline(1, 2))
556 bwipe!
557 END
558 g:shortlist = [1, 2]
Bram Moolenaar62aec932022-01-29 21:45:34 +0000559 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar148be9b2021-02-02 21:33:52 +0100560 unlet g:shortlist
Bram Moolenaare0890d62021-02-17 14:52:14 +0100561
562 new
563 MethodAfterLinebreak('foobar')
564 assert_equal('foobar', getline(1))
565 bwipe!
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100566
567 lines =<< trim END
568 vim9script
569 def Foo(): string
570 return '# some text'
571 enddef
572
573 def Bar(F: func): string
574 return F()
575 enddef
576
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100577 Foo->Bar()
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100578 ->setline(1)
579 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000580 v9.CheckScriptSuccess(lines)
Bram Moolenaar2e2d7582021-03-03 21:22:41 +0100581 assert_equal('# some text', getline(1))
582 bwipe!
Bram Moolenaar5f195932020-07-01 20:07:14 +0200583enddef
584
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100585def Test_method_call_whitespace()
586 var lines =<< trim END
587 new
588 var yank = 'text'
589 yank->setline(1)
590 yank ->setline(2)
591 yank-> setline(3)
592 yank -> setline(4)
593 assert_equal(['text', 'text', 'text', 'text'], getline(1, 4))
594 bwipe!
595 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000596 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar7cebe8b2021-01-23 14:22:16 +0100597enddef
598
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100599def Test_method_and_user_command()
600 var lines =<< trim END
601 vim9script
602 def Cmd()
603 g:didFunc = 1
604 enddef
605 command Cmd g:didCmd = 1
606 Cmd
607 assert_equal(1, g:didCmd)
608 Cmd()
609 assert_equal(1, g:didFunc)
610 unlet g:didFunc
611 unlet g:didCmd
612
613 def InDefFunc()
614 Cmd
615 assert_equal(1, g:didCmd)
616 Cmd()
617 assert_equal(1, g:didFunc)
618 unlet g:didFunc
619 unlet g:didCmd
620 enddef
621 InDefFunc()
622 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000623 v9.CheckScriptSuccess(lines)
Bram Moolenaar77b10ff2021-03-14 13:21:35 +0100624enddef
625
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200626def Test_option_use_linebreak()
627 var lines =<< trim END
628 new
629 &matchpairs = '(:)'
630 &matchpairs->setline(1)
631 &matchpairs = '[:]'
632 &matchpairs ->setline(2)
633 &matchpairs = '{:}'
634 &matchpairs
635 ->setline(3)
636 assert_equal(['(:)', '[:]', '{:}'], getline(1, '$'))
637 bwipe!
638 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000639 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarbf5f2872021-08-21 20:50:35 +0200640enddef
641
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200642def Test_use_register()
Bram Moolenaar73170912021-08-22 22:44:11 +0200643 var lines =<< trim END
644 new
645 @a = 'one'
646 @a->setline(1)
647 @b = 'two'
648 @b ->setline(2)
649 @c = 'three'
650 @c
651 ->setline(3)
652 assert_equal(['one', 'two', 'three'], getline(1, '$'))
653 bwipe!
654 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000655 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4799cef2021-08-25 22:37:36 +0200656
657 lines =<< trim END
658 @a = 'echo "text"'
659 @a
660 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000661 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000662
663 lines =<< trim END
Bram Moolenaarea720382022-05-05 16:08:55 +0100664 @a = 'echo "text"'
665 @a
666
667 END
668 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
669
670 lines =<< trim END
671 @a = 'echo "text"'
672 @a
673 # comment
674 END
675 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
676
677 lines =<< trim END
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000678 @/ = 'pattern'
679 @/
680 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000681 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000682
683 lines =<< trim END
684 &opfunc = 'nothing'
685 &opfunc
686 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000687 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000688 &opfunc = ''
689
690 lines =<< trim END
691 &l:showbreak = 'nothing'
692 &l:showbreak
693 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000694 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000695 &l:showbreak = ''
696
697 lines =<< trim END
698 &g:showbreak = 'nothing'
699 &g:showbreak
700 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000701 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar7d5b8be2021-11-22 15:05:46 +0000702 &g:showbreak = ''
Bram Moolenaar65259b52021-11-23 14:52:06 +0000703
704 lines =<< trim END
705 $SomeEnv = 'value'
706 $SomeEnv
707 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000708 v9.CheckDefAndScriptFailure(lines, 'E1207:', 2)
Bram Moolenaar65259b52021-11-23 14:52:06 +0000709 $SomeEnv = ''
Bram Moolenaar0d032632022-05-17 12:45:15 +0100710
711 lines =<< trim END
712 eval 'value'
713 END
714 v9.CheckDefAndScriptFailure(lines, 'E1207:', 1)
715
716 lines =<< trim END
717 eval "value"
718 END
719 v9.CheckDefAndScriptFailure(lines, 'E1207:', 1)
Bram Moolenaar73170912021-08-22 22:44:11 +0200720enddef
721
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200722def Test_environment_use_linebreak()
723 var lines =<< trim END
724 new
725 $TESTENV = 'one'
726 $TESTENV->setline(1)
727 $TESTENV = 'two'
728 $TESTENV ->setline(2)
729 $TESTENV = 'three'
730 $TESTENV
731 ->setline(3)
732 assert_equal(['one', 'two', 'three'], getline(1, '$'))
733 bwipe!
734 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000735 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar5ca5cc62021-08-24 21:56:03 +0200736enddef
737
Bram Moolenaar683581e2020-10-22 21:22:58 +0200738def Test_skipped_expr_linebreak()
739 if 0
740 var x = []
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100741 ->map(() => 0)
Bram Moolenaar683581e2020-10-22 21:22:58 +0200742 endif
743enddef
744
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200745def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100746 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200747 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100748 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200749 test.data
750 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100751 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200752
Bram Moolenaarac564082020-09-27 19:05:33 +0200753 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200754 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100755 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200756 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100757 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200758 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000759 v9.CheckScriptSuccess(lines)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200760enddef
761
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200762def Test_bar_after_command()
763 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200764 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200765 redraw | echo x
766 enddef
767 RedrawAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000768 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200769
Bram Moolenaar788123c2020-07-05 15:32:17 +0200770 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200771 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200772 reg_executing() | echo x
773 enddef
774 CallAndEcho()
Bram Moolenaar62aec932022-01-29 21:45:34 +0000775 assert_match('did redraw', g:Screenline(&lines))
Bram Moolenaar788123c2020-07-05 15:32:17 +0200776
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200777 if has('unix')
778 # bar in filter write command does not start new command
779 def WriteToShell()
780 new
781 setline(1, 'some text')
782 w !cat | cat > Xoutfile
783 bwipe!
784 enddef
785 WriteToShell()
786 assert_equal(['some text'], readfile('Xoutfile'))
787 delete('Xoutfile')
788
789 # bar in filter read command does not start new command
790 def ReadFromShell()
791 new
792 r! echo hello there | cat > Xoutfile
793 r !echo again | cat >> Xoutfile
794 bwipe!
795 enddef
796 ReadFromShell()
797 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
798 delete('Xoutfile')
799 endif
800enddef
801
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200802def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100803 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaar2949cfd2020-12-31 21:28:47 +0100804 filter(tags, ( _, v) => has_key(v, 'x') ? 1 : 0 )
Bram Moolenaare0de1712020-12-02 17:36:54 +0100805 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200806enddef
807
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100808def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100809 var lines =<< trim END
810 final expected = "\nType Name Content\n c \"c piyo"
811 @a = 'hoge'
812 @b = 'fuga'
813 @c = 'piyo'
814
815 assert_equal(execute('filter /piyo/ registers abc'), expected)
816 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000817 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaare729ce22021-06-06 21:38:09 +0200818
819 # also do this compiled
820 lines =<< trim END
821 @a = 'very specific z3d37dh234 string'
822 filter z3d37dh234 registers
Bram Moolenaar62aec932022-01-29 21:45:34 +0000823 assert_match('very specific z3d37dh234 string', g:Screenline(&lines))
Bram Moolenaare729ce22021-06-06 21:38:09 +0200824 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000825 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar06bffe82021-11-28 20:24:17 +0000826
827 lines =<< trim END
828 edit foobar
829 redir => g:filter_out
830 filter #foobar# ls
831 redir END
832 assert_match('"foobar"', g:filter_out)
833 unlet g:filter_out
834 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000835 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100836enddef
837
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100838def Test_win_command_modifiers()
839 assert_equal(1, winnr('$'))
840
841 set splitright
842 vsplit
843 assert_equal(2, winnr())
844 close
845 aboveleft vsplit
846 assert_equal(1, winnr())
847 close
848 set splitright&
849
850 vsplit
851 assert_equal(1, winnr())
852 close
853 belowright vsplit
854 assert_equal(2, winnr())
855 close
856 rightbelow vsplit
857 assert_equal(2, winnr())
858 close
859
Bram Moolenaar97a19002020-11-01 22:15:44 +0100860 if has('browse')
861 browse set
862 assert_equal('option-window', expand('%'))
863 close
864 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100865
866 vsplit
867 botright split
868 assert_equal(3, winnr())
869 assert_equal(&columns, winwidth(0))
870 close
871 close
872
873 vsplit
874 topleft split
875 assert_equal(1, winnr())
876 assert_equal(&columns, winwidth(0))
877 close
878 close
879
880 gettabinfo()->len()->assert_equal(1)
881 tab split
882 gettabinfo()->len()->assert_equal(2)
883 tabclose
884
885 vertical new
886 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
887 close
888enddef
889
890func Test_command_modifier_confirm()
891 CheckNotGui
892 CheckRunVimInTerminal
893
894 " Test for saving all the modified buffers
895 let lines =<< trim END
896 call setline(1, 'changed')
897 def Getout()
898 confirm write Xfile
899 enddef
900 END
901 call writefile(lines, 'Xconfirmscript')
902 call writefile(['empty'], 'Xfile')
903 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
904 call term_sendkeys(buf, ":call Getout()\n")
905 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
906 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100907 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
908 call term_sendkeys(buf, "\<CR>")
909 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100910 call StopVimInTerminal(buf)
911
912 call assert_equal(['changed'], readfile('Xfile'))
913 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100914 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100915 call delete('Xconfirmscript')
916endfunc
917
918def Test_command_modifiers_keep()
919 if has('unix')
920 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
921 new
922 setline(1, ['one', 'two', 'three'])
923 normal 1Gma
924 normal 2Gmb
925 normal 3Gmc
926 if addRflag
927 set cpo+=R
928 else
929 set cpo-=R
930 endif
931 if keepMarks
932 keepmarks :%!cat
933 else
934 :%!cat
935 endif
936 if hasMarks
937 assert_equal(1, line("'a"))
938 assert_equal(2, line("'b"))
939 assert_equal(3, line("'c"))
940 else
941 assert_equal(0, line("'a"))
942 assert_equal(0, line("'b"))
943 assert_equal(0, line("'c"))
944 endif
945 quit!
946 enddef
947 DoTest(false, false, true)
948 DoTest(true, false, false)
949 DoTest(false, true, true)
950 DoTest(true, true, true)
951 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100952
953 new
954 setline(1, ['one', 'two', 'three', 'four'])
955 assert_equal(4, line("$"))
956 normal 1Gma
957 normal 2Gmb
958 normal 3Gmc
959 lockmarks :1,2!wc
960 # line is deleted, marks don't move
961 assert_equal(3, line("$"))
962 assert_equal('four', getline(3))
963 assert_equal(1, line("'a"))
964 assert_equal(2, line("'b"))
965 assert_equal(3, line("'c"))
966 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100967 endif
968
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100969 edit Xone
970 edit Xtwo
971 assert_equal('Xone', expand('#'))
972 keepalt edit Xthree
973 assert_equal('Xone', expand('#'))
974
975 normal /a*b*
976 assert_equal('a*b*', histget("search"))
977 keeppatterns normal /c*d*
978 assert_equal('a*b*', histget("search"))
979
980 new
981 setline(1, range(10))
982 :10
983 normal gg
984 assert_equal(10, getpos("''")[1])
985 keepjumps normal 5G
986 assert_equal(10, getpos("''")[1])
987 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100988enddef
989
Bram Moolenaar8242ebb2020-12-29 11:15:01 +0100990def Test_bar_line_continuation()
991 var lines =<< trim END
992 au BufNewFile Xfile g:readFile = 1
993 | g:readExtra = 2
994 g:readFile = 0
995 g:readExtra = 0
996 edit Xfile
997 assert_equal(1, g:readFile)
998 assert_equal(2, g:readExtra)
999 bwipe!
1000 au! BufNewFile
1001
1002 au BufNewFile Xfile g:readFile = 1
1003 | g:readExtra = 2
1004 | g:readMore = 3
1005 g:readFile = 0
1006 g:readExtra = 0
1007 g:readMore = 0
1008 edit Xfile
1009 assert_equal(1, g:readFile)
1010 assert_equal(2, g:readExtra)
1011 assert_equal(3, g:readMore)
1012 bwipe!
1013 au! BufNewFile
1014 unlet g:readFile
1015 unlet g:readExtra
1016 unlet g:readMore
1017 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001018 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaar8242ebb2020-12-29 11:15:01 +01001019enddef
1020
Bram Moolenaare88c8e82020-11-01 17:03:37 +01001021def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001022 new Xsomefile
1023 setline(1, 'changed')
1024 var buf = bufnr()
1025 hide edit Xotherfile
1026 var info = getbufinfo(buf)
1027 assert_equal(1, info[0].hidden)
1028 assert_equal(1, info[0].changed)
1029 edit Xsomefile
1030 bwipe!
1031
1032 au BufNewFile Xfile g:readFile = 1
1033 g:readFile = 0
1034 edit Xfile
1035 assert_equal(1, g:readFile)
1036 bwipe!
1037 g:readFile = 0
1038 noautocmd edit Xfile
1039 assert_equal(0, g:readFile)
Bram Moolenaardcc58e02020-12-28 20:53:21 +01001040 au! BufNewFile
Bram Moolenaardcc58e02020-12-28 20:53:21 +01001041 unlet g:readFile
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001042
1043 noswapfile edit XnoSwap
Bram Moolenaardd1f4262020-12-31 17:41:01 +01001044 assert_equal(false, &l:swapfile)
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001045 bwipe!
1046
1047 var caught = false
1048 try
1049 sandbox !ls
1050 catch /E48:/
1051 caught = true
1052 endtry
1053 assert_true(caught)
1054
1055 :8verbose g:verbose_now = &verbose
1056 assert_equal(8, g:verbose_now)
1057 unlet g:verbose_now
1058enddef
1059
Bram Moolenaar62aec932022-01-29 21:45:34 +00001060def s:EchoHere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001061 echomsg 'here'
1062enddef
Bram Moolenaar62aec932022-01-29 21:45:34 +00001063def s:EchoThere()
Bram Moolenaar66669fc2020-11-04 18:53:35 +01001064 unsilent echomsg 'there'
1065enddef
1066
1067def Test_modifier_silent_unsilent()
1068 echomsg 'last one'
1069 silent echomsg "text"
1070 assert_equal("\nlast one", execute(':1messages'))
1071
1072 silent! echoerr "error"
1073
1074 echomsg 'last one'
1075 silent EchoHere()
1076 assert_equal("\nlast one", execute(':1messages'))
1077
1078 silent EchoThere()
1079 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaar20a76292020-12-25 19:47:24 +01001080
1081 try
1082 silent eval [][0]
1083 catch
1084 echomsg "caught"
1085 endtry
1086 assert_equal("\ncaught", execute(':1messages'))
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001087
1088 var lines =<< trim END
1089 vim9script
1090 set history=11
1091 silent! while 0
1092 set history=22
1093 silent! endwhile
1094 assert_equal(11, &history)
1095 set history&
1096 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001097 v9.CheckScriptSuccess(lines)
Bram Moolenaare88c8e82020-11-01 17:03:37 +01001098enddef
1099
Bram Moolenaar36113e42020-11-02 21:08:47 +01001100def Test_range_after_command_modifier()
Bram Moolenaar62aec932022-01-29 21:45:34 +00001101 v9.CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +01001102 new
1103 setline(1, 'xxx')
Bram Moolenaar62aec932022-01-29 21:45:34 +00001104 v9.CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
Bram Moolenaar36113e42020-11-02 21:08:47 +01001105 assert_equal('', getline(1))
1106 bwipe!
Bram Moolenaarb579f6e2021-12-04 11:57:00 +00001107
1108 var lines =<< trim END
1109 legacy /pat/
1110 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001111 v9.CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat')
Bram Moolenaar36113e42020-11-02 21:08:47 +01001112enddef
1113
Bram Moolenaarece0b872021-01-08 20:40:45 +01001114def Test_silent_pattern()
1115 new
1116 silent! :/pat/put _
1117 bwipe!
1118enddef
1119
Bram Moolenaarfa984412021-03-25 22:15:28 +01001120def Test_useless_command_modifier()
1121 g:maybe = true
1122 var lines =<< trim END
1123 if g:maybe
1124 silent endif
1125 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001126 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001127
1128 lines =<< trim END
1129 for i in [0]
1130 silent endfor
1131 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001132 v9.CheckDefFailure(lines, 'E1176:', 2)
1133 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001134
1135 lines =<< trim END
1136 while g:maybe
1137 silent endwhile
1138 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001139 v9.CheckDefFailure(lines, 'E1176:', 2)
Bram Moolenaar917c46a2021-08-10 19:53:01 +02001140 g:maybe = false
Bram Moolenaar62aec932022-01-29 21:45:34 +00001141 v9.CheckScriptSuccess(['vim9script'] + lines)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001142
1143 lines =<< trim END
1144 silent try
1145 finally
1146 endtry
1147 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001148 v9.CheckDefAndScriptFailure(lines, 'E1176:', 1)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001149
1150 lines =<< trim END
1151 try
1152 silent catch
1153 endtry
1154 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001155 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001156
1157 lines =<< trim END
1158 try
1159 silent finally
1160 endtry
1161 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001162 v9.CheckDefAndScriptFailure(lines, 'E1176:', 2)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001163
1164 lines =<< trim END
1165 try
1166 finally
1167 silent endtry
1168 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001169 v9.CheckDefAndScriptFailure(lines, 'E1176:', 3)
Bram Moolenaarbc510062022-02-14 21:19:04 +00001170
1171 lines =<< trim END
1172 leftabove
1173 END
1174 v9.CheckDefAndScriptFailure(lines, 'E1082:', 1)
1175
1176 lines =<< trim END
1177 leftabove # comment
1178 END
1179 v9.CheckDefAndScriptFailure(lines, 'E1082:', 1)
Bram Moolenaarfa984412021-03-25 22:15:28 +01001180enddef
1181
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001182def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001183 var from = 3
1184 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001185 g:val = 111
1186 def Increment(nrs: list<number>)
1187 for nr in nrs
1188 g:val += nr
1189 endfor
1190 enddef
1191 eval range(from, to)
1192 ->Increment()
1193 assert_equal(111 + 3 + 4 + 5, g:val)
1194 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +01001195
1196 var lines =<< trim END
1197 vim9script
1198 g:caught = 'no'
1199 try
1200 eval 123 || 0
1201 catch
1202 g:caught = 'yes'
1203 endtry
1204 assert_equal('yes', g:caught)
1205 unlet g:caught
1206 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001207 v9.CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +02001208enddef
1209
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001210def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +02001211 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001212 nnoremap <F3> :echo 'hit F3 #'<CR>
1213 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
1214 END
Bram Moolenaarac485062022-03-23 19:45:01 +00001215 v9.CheckDefAndScriptSuccess(lines)
1216
1217 # backslash before bar is not removed
1218 lines =<< trim END
1219 vim9script
1220
1221 def Init()
1222 noremap <buffer> <F5> <ScriptCmd>MyFunc('a') \| MyFunc('b')<CR>
1223 enddef
1224 Init()
1225 unmap <buffer> <F5>
1226 END
1227 v9.CheckScriptSuccess(lines)
Bram Moolenaarb8a92962020-08-20 18:02:47 +02001228enddef
1229
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001230def Test_normal_command()
1231 new
1232 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +02001233 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +02001234 try
1235 exe "norm! \<C-]>"
1236 catch /E433/
1237 caught = 2
1238 endtry
1239 assert_equal(2, caught)
1240
1241 try
1242 exe "norm! 3\<C-]>"
1243 catch /E433/
1244 caught = 3
1245 endtry
1246 assert_equal(3, caught)
1247 bwipe!
1248enddef
1249
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001250def Test_put_command()
1251 new
1252 @p = 'ppp'
1253 put p
1254 assert_equal('ppp', getline(2))
1255
1256 put ='below'
1257 assert_equal('below', getline(3))
1258 put! ='above'
1259 assert_equal('above', getline(3))
1260 assert_equal('below', getline(4))
1261
Bram Moolenaar883cf972021-01-15 18:04:43 +01001262 :2put =['a', 'b', 'c']
1263 assert_equal(['ppp', 'a', 'b', 'c', 'above'], getline(2, 6))
1264
Bram Moolenaard0b7bfa2022-03-12 14:51:16 +00001265 :0put = 'first'
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001266 assert_equal('first', getline(1))
1267 :1put! ='first again'
1268 assert_equal('first again', getline(1))
1269
Bram Moolenaar08597872020-12-10 19:43:40 +01001270 # compute range at runtime
Bram Moolenaar4e713ba2022-02-07 15:31:37 +00001271 :%del
Bram Moolenaar08597872020-12-10 19:43:40 +01001272 setline(1, range(1, 8))
1273 @a = 'aaa'
1274 :$-2put a
1275 assert_equal('aaa', getline(7))
1276
1277 setline(1, range(1, 8))
1278 :2
1279 :+2put! a
1280 assert_equal('aaa', getline(4))
1281
Bram Moolenaara28639e2021-01-19 22:48:09 +01001282 []->mapnew(() => 0)
1283 :$put ='end'
1284 assert_equal('end', getline('$'))
1285
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001286 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001287
Bram Moolenaar62aec932022-01-29 21:45:34 +00001288 v9.CheckDefFailure(['put =xxx'], 'E1001:')
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001289enddef
1290
1291def Test_put_with_linebreak()
1292 new
1293 var lines =<< trim END
1294 vim9script
1295 pu =split('abc', '\zs')
1296 ->join()
1297 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001298 v9.CheckScriptSuccess(lines)
Bram Moolenaar025cb1c2020-12-14 18:31:27 +01001299 getline(2)->assert_equal('a b c')
1300 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001301enddef
1302
Bram Moolenaar3bd8de42020-09-14 16:37:34 +02001303def Test_command_star_range()
1304 new
1305 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
1306 setpos("'<", [0, 1, 0, 0])
1307 setpos("'>", [0, 3, 0, 0])
1308 :*s/\(foo\|bar\)/baz/g
1309 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
1310
1311 bwipe!
1312enddef
1313
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001314def Test_f_args()
1315 var lines =<< trim END
1316 vim9script
1317
1318 func SaveCmdArgs(...)
1319 let g:args = a:000
1320 endfunc
1321
1322 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
1323
1324 TestFArgs
1325 assert_equal([], g:args)
1326
1327 TestFArgs one two three
1328 assert_equal(['one', 'two', 'three'], g:args)
1329 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001330 v9.CheckScriptSuccess(lines)
Bram Moolenaar20d89e02020-10-20 23:11:33 +02001331enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +02001332
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001333def Test_user_command_comment()
1334 command -nargs=1 Comd echom <q-args>
1335
1336 var lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001337 vim9script
1338 Comd # comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001339 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001340 v9.CheckScriptSuccess(lines)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001341
1342 lines =<< trim END
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001343 vim9script
1344 Comd# comment
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001345 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001346 v9.CheckScriptFailure(lines, 'E1144:')
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001347 delcommand Comd
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001348
1349 lines =<< trim END
1350 vim9script
1351 command Foo echo 'Foo'
1352 Foo3Bar
1353 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001354 v9.CheckScriptFailure(lines, 'E1144: Command "Foo" is not followed by white space: Foo3Bar')
Bram Moolenaarb98cec22021-04-25 16:35:55 +02001355
1356 delcommand Foo
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001357enddef
1358
Bram Moolenaar95388e32020-11-20 21:07:00 +01001359def Test_star_command()
1360 var lines =<< trim END
1361 vim9script
1362 @s = 'g:success = 8'
1363 set cpo+=*
1364 exe '*s'
1365 assert_equal(8, g:success)
1366 unlet g:success
1367 set cpo-=*
1368 assert_fails("exe '*s'", 'E1050:')
1369 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001370 v9.CheckScriptSuccess(lines)
Bram Moolenaar95388e32020-11-20 21:07:00 +01001371enddef
1372
Bram Moolenaar47a2abf2020-11-25 20:12:11 +01001373def Test_cmd_argument_without_colon()
1374 new Xfile
1375 setline(1, ['a', 'b', 'c', 'd'])
1376 write
1377 edit +3 %
1378 assert_equal(3, getcurpos()[1])
1379 edit +/a %
1380 assert_equal(1, getcurpos()[1])
1381 bwipe
1382 delete('Xfile')
1383enddef
1384
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001385def Test_ambiguous_user_cmd()
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001386 command Cmd1 eval 0
1387 command Cmd2 eval 0
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001388 var lines =<< trim END
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001389 Cmd
1390 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001391 v9.CheckDefAndScriptFailure(lines, 'E464:', 1)
Bram Moolenaard1510ee2021-01-04 16:15:58 +01001392 delcommand Cmd1
1393 delcommand Cmd2
Bram Moolenaar1c0aa972020-12-16 21:43:54 +01001394enddef
1395
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001396def Test_command_not_recognized()
1397 var lines =<< trim END
1398 d.key = 'asdf'
1399 END
Bram Moolenaar97f8c102022-04-02 19:43:57 +01001400 v9.CheckDefFailure(lines, 'E1089: Unknown variable: d', 1)
1401
1402 lines =<< trim END
1403 d['key'] = 'asdf'
1404 END
1405 v9.CheckDefFailure(lines, 'E1089: Unknown variable: d', 1)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001406
1407 lines =<< trim END
Bram Moolenaar8b716f52022-02-15 21:17:56 +00001408 if 0
1409 d.key = 'asdf'
1410 endif
1411 END
1412 v9.CheckDefSuccess(lines)
Bram Moolenaar52c124d2020-12-20 21:43:35 +01001413enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +02001414
Bram Moolenaarf4e20992020-12-21 19:59:08 +01001415def Test_magic_not_used()
1416 new
1417 for cmd in ['set magic', 'set nomagic']
1418 exe cmd
1419 setline(1, 'aaa')
1420 s/.../bbb/
1421 assert_equal('bbb', getline(1))
1422 endfor
1423
1424 set magic
1425 setline(1, 'aaa')
1426 assert_fails('s/.\M../bbb/', 'E486:')
1427 assert_fails('snomagic/.../bbb/', 'E486:')
1428 assert_equal('aaa', getline(1))
1429
1430 bwipe!
1431enddef
1432
Bram Moolenaar60f63102020-12-21 20:32:43 +01001433def Test_gdefault_not_used()
1434 new
1435 for cmd in ['set gdefault', 'set nogdefault']
1436 exe cmd
1437 setline(1, 'aaa')
1438 s/./b/
1439 assert_equal('baa', getline(1))
1440 endfor
1441
1442 set nogdefault
1443 bwipe!
1444enddef
1445
Bram Moolenaar848fadd2022-01-30 15:28:30 +00001446def s:SomeComplFunc(findstart: number, base: string): any
Bram Moolenaar179eb562020-12-27 18:03:22 +01001447 if findstart
1448 return 0
1449 else
1450 return ['aaa', 'bbb']
1451 endif
1452enddef
1453
1454def Test_insert_complete()
1455 # this was running into an error with the matchparen hack
1456 new
1457 set completefunc=SomeComplFunc
1458 feedkeys("i\<c-x>\<c-u>\<Esc>", 'ntx')
1459 assert_equal('aaa', getline(1))
1460
1461 set completefunc=
1462 bwipe!
1463enddef
1464
Bram Moolenaara11919f2021-01-02 19:44:56 +01001465def Test_wincmd()
1466 split
1467 var id1 = win_getid()
1468 if true
1469 try | wincmd w | catch | endtry
1470 endif
1471 assert_notequal(id1, win_getid())
1472 close
Bram Moolenaar1ff89de2021-03-24 20:08:12 +01001473
1474 split
1475 var id = win_getid()
1476 split
1477 :2wincmd o
1478 assert_equal(id, win_getid())
1479 only
1480
1481 split
1482 split
1483 assert_equal(3, winnr('$'))
1484 :2wincmd c
1485 assert_equal(2, winnr('$'))
1486 only
1487
1488 split
1489 split
1490 assert_equal(3, winnr('$'))
1491 :2wincmd q
1492 assert_equal(2, winnr('$'))
1493 only
Bram Moolenaara11919f2021-01-02 19:44:56 +01001494enddef
1495
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001496def Test_windo_missing_endif()
1497 var lines =<< trim END
1498 windo if 1
1499 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001500 v9.CheckDefExecFailure(lines, 'E171:', 1)
Bram Moolenaar9567efa2021-01-11 22:16:30 +01001501enddef
1502
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001503let s:theList = [1, 2, 3]
1504
1505def Test_lockvar()
1506 s:theList[1] = 22
1507 assert_equal([1, 22, 3], s:theList)
1508 lockvar s:theList
1509 assert_fails('theList[1] = 77', 'E741:')
1510 unlockvar s:theList
1511 s:theList[1] = 44
1512 assert_equal([1, 44, 3], s:theList)
1513
Bram Moolenaara99fb232021-12-20 12:25:03 +00001514 if 0
1515 lockvar whatever
1516 endif
1517
Bram Moolenaar70c43d82022-01-26 21:01:15 +00001518 g:lockme = [1, 2, 3]
1519 lockvar 1 g:lockme
1520 g:lockme[1] = 77
1521 assert_equal([1, 77, 3], g:lockme)
1522
1523 lockvar 2 g:lockme
1524 var caught = false
1525 try
1526 g:lockme[1] = 99
1527 catch /E1119:/
1528 caught = true
1529 endtry
1530 assert_true(caught)
1531 assert_equal([1, 77, 3], g:lockme)
1532 unlet g:lockme
1533
1534 # also for non-materialized list
1535 g:therange = range(3)
1536 lockvar 2 g:therange
1537 caught = false
1538 try
1539 g:therange[1] = 99
1540 catch /E1119:/
1541 caught = true
1542 endtry
1543 assert_true(caught)
1544 assert_equal([0, 1, 2], g:therange)
1545 unlet g:therange
1546
Bram Moolenaare939f5e2022-01-26 21:32:59 +00001547 # use exclamation mark for locking deeper
1548 g:nestedlist = [1, [2, 3], 4]
1549 lockvar! g:nestedlist
1550 try
1551 g:nestedlist[1][0] = 9
1552 catch /E1119:/
1553 caught = true
1554 endtry
1555 assert_true(caught)
1556 unlet g:nestedlist
1557
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001558 var d = {a: 1, b: 2}
1559 d.a = 3
1560 d.b = 4
1561 assert_equal({a: 3, b: 4}, d)
1562 lockvar d.a
1563 d.b = 5
1564 var ex = ''
1565 try
1566 d.a = 6
1567 catch
1568 ex = v:exception
1569 endtry
1570 assert_match('E1121:', ex)
Bram Moolenaar83d0cec2022-02-04 21:17:58 +00001571 unlockvar d['a']
Bram Moolenaaraacc9662021-08-13 19:40:51 +02001572 d.a = 7
1573 assert_equal({a: 7, b: 5}, d)
1574
Bram Moolenaar10611952022-04-03 21:11:34 +01001575 caught = false
1576 try
1577 lockvar d.c
1578 catch /E716/
1579 caught = true
1580 endtry
1581 assert_true(caught)
1582
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001583 var lines =<< trim END
1584 vim9script
Bram Moolenaare08be092022-02-17 13:08:26 +00001585 g:bl = 0z1122
1586 lockvar g:bl
1587 def Tryit()
1588 g:bl[1] = 99
1589 enddef
1590 Tryit()
1591 END
1592 v9.CheckScriptFailure(lines, 'E741:', 1)
1593
1594 lines =<< trim END
1595 vim9script
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001596 var theList = [1, 2, 3]
1597 def SetList()
1598 theList[1] = 22
1599 assert_equal([1, 22, 3], theList)
1600 lockvar theList
1601 theList[1] = 77
1602 enddef
1603 SetList()
1604 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001605 v9.CheckScriptFailure(lines, 'E1119', 4)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001606
1607 lines =<< trim END
Bram Moolenaar0c7f2612022-02-17 19:44:07 +00001608 vim9script
1609 var theList = [1, 2, 3]
1610 def AddToList()
1611 lockvar theList
1612 theList += [4]
1613 enddef
1614 AddToList()
1615 END
1616 v9.CheckScriptFailure(lines, 'E741', 2)
1617
1618 lines =<< trim END
1619 vim9script
1620 var theList = [1, 2, 3]
1621 def AddToList()
1622 lockvar theList
1623 add(theList, 4)
1624 enddef
1625 AddToList()
1626 END
1627 v9.CheckScriptFailure(lines, 'E741', 2)
1628
Bram Moolenaar6b8c7ba2022-03-20 17:46:06 +00001629 # can unlet a locked list item but not change it
1630 lines =<< trim END
1631 var ll = [1, 2, 3]
1632 lockvar ll[1]
1633 unlet ll[1]
1634 assert_equal([1, 3], ll)
1635 END
1636 v9.CheckDefAndScriptSuccess(lines)
1637 lines =<< trim END
1638 var ll = [1, 2, 3]
1639 lockvar ll[1]
1640 ll[1] = 9
1641 END
1642 v9.CheckDefExecAndScriptFailure(lines, ['E1119:', 'E741'], 3)
1643
1644 # can unlet a locked dict item but not change it
1645 lines =<< trim END
1646 var dd = {a: 1, b: 2}
1647 lockvar dd.a
1648 unlet dd.a
1649 assert_equal({b: 2}, dd)
1650 END
1651 v9.CheckDefAndScriptSuccess(lines)
1652 lines =<< trim END
1653 var dd = {a: 1, b: 2}
1654 lockvar dd.a
1655 dd.a = 3
1656 END
1657 v9.CheckDefExecAndScriptFailure(lines, ['E1121:', 'E741'], 3)
1658
Bram Moolenaar0c7f2612022-02-17 19:44:07 +00001659 lines =<< trim END
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001660 var theList = [1, 2, 3]
1661 lockvar theList
1662 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001663 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001664
1665 lines =<< trim END
1666 var theList = [1, 2, 3]
1667 unlockvar theList
1668 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001669 v9.CheckDefFailure(lines, 'E1178', 2)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001670
1671 lines =<< trim END
1672 vim9script
1673 var name = 'john'
1674 lockvar nameX
1675 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001676 v9.CheckScriptFailure(lines, 'E1246', 3)
Bram Moolenaar04b568b2021-11-22 21:58:41 +00001677
1678 lines =<< trim END
1679 vim9script
1680 var name = 'john'
1681 def LockIt()
1682 lockvar nameX
1683 enddef
1684 LockIt()
1685 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001686 v9.CheckScriptFailure(lines, 'E1246', 1)
Bram Moolenaar7a411a32022-04-04 14:58:06 +01001687
1688 lines =<< trim END
1689 vim9script
1690 const name = 'john'
1691 unlockvar name
1692 END
1693 v9.CheckScriptFailure(lines, 'E46', 3)
1694
1695 lines =<< trim END
1696 vim9script
1697 const name = 'john'
1698 def UnLockIt()
1699 unlockvar name
1700 enddef
1701 UnLockIt()
1702 END
1703 v9.CheckScriptFailure(lines, 'E46', 1)
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001704enddef
1705
Bram Moolenaar4c137212021-04-19 16:48:48 +02001706def Test_substitute_expr()
1707 var to = 'repl'
1708 new
1709 setline(1, 'one from two')
1710 s/from/\=to
1711 assert_equal('one repl two', getline(1))
1712
1713 setline(1, 'one from two')
1714 s/from/\=to .. '_x'
1715 assert_equal('one repl_x two', getline(1))
1716
1717 setline(1, 'one from two from three')
1718 var also = 'also'
1719 s/from/\=to .. '_' .. also/g#e
1720 assert_equal('one repl_also two repl_also three', getline(1))
1721
Bram Moolenaar8238f082021-04-20 21:10:48 +02001722 setline(1, 'abc abc abc')
1723 for choice in [true, false]
1724 :1s/abc/\=choice ? 'yes' : 'no'/
1725 endfor
1726 assert_equal('yes no abc', getline(1))
1727
Bram Moolenaar95e4dd82022-04-27 22:15:40 +01001728 setline(1, 'from')
1729 v9.CheckDefExecFailure(['s/from/\=g:notexist/'], 'E121: Undefined variable: g:notexist')
1730
Bram Moolenaard386e922021-04-25 14:48:49 +02001731 bwipe!
1732
Bram Moolenaar62aec932022-01-29 21:45:34 +00001733 v9.CheckDefFailure(['s/from/\="x")/'], 'E488:')
1734 v9.CheckDefFailure(['s/from/\="x"/9'], 'E488:')
Bram Moolenaar4c137212021-04-19 16:48:48 +02001735
Bram Moolenaarefd73ae2022-03-20 18:51:00 +00001736 v9.CheckDefExecFailure(['s/this/\="that"/'], 'E486:')
1737
Bram Moolenaard386e922021-04-25 14:48:49 +02001738 # When calling a function the right instruction list needs to be restored.
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001739 g:cond = true
Bram Moolenaard386e922021-04-25 14:48:49 +02001740 var lines =<< trim END
1741 vim9script
1742 def Foo()
1743 Bar([])
1744 enddef
1745 def Bar(l: list<number>)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001746 if g:cond
Bram Moolenaard386e922021-04-25 14:48:49 +02001747 s/^/\=Rep()/
1748 for n in l[:]
1749 endfor
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001750 endif
Bram Moolenaard386e922021-04-25 14:48:49 +02001751 enddef
1752 def Rep(): string
1753 return 'rep'
1754 enddef
1755 new
1756 Foo()
1757 assert_equal('rep', getline(1))
1758 bwipe!
1759 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001760 v9.CheckScriptSuccess(lines)
Bram Moolenaar5930ddc2021-04-26 20:32:59 +02001761 unlet g:cond
Bram Moolenaar27523602021-06-05 21:36:19 +02001762
1763 # List results in multiple lines
1764 new
1765 setline(1, 'some text here')
Bram Moolenaar2c707112021-08-02 22:26:56 +02001766 s/text/\=['aaa', 'bbb', 'ccc']/
Bram Moolenaar27523602021-06-05 21:36:19 +02001767 assert_equal(['some aaa', 'bbb', 'ccc', ' here'], getline(1, '$'))
1768 bwipe!
Bram Moolenaar8b716f52022-02-15 21:17:56 +00001769
1770 # inside "if 0" substitute is ignored
1771 if 0
1772 s/a/\=nothing/ and | some more
1773 endif
Bram Moolenaar4c137212021-04-19 16:48:48 +02001774enddef
1775
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001776def Test_redir_to_var()
1777 var result: string
1778 redir => result
1779 echo 'something'
1780 redir END
1781 assert_equal("\nsomething", result)
1782
1783 redir =>> result
1784 echo 'more'
1785 redir END
1786 assert_equal("\nsomething\nmore", result)
1787
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001788 var d: dict<string>
1789 redir => d.redir
1790 echo 'dict'
1791 redir END
1792 assert_equal({redir: "\ndict"}, d)
1793
1794 var l = ['a', 'b', 'c']
1795 redir => l[1]
1796 echo 'list'
1797 redir END
1798 assert_equal(['a', "\nlist", 'c'], l)
1799
1800 var dl = {l: ['x']}
1801 redir => dl.l[0]
1802 echo 'dict-list'
1803 redir END
1804 assert_equal({l: ["\ndict-list"]}, dl)
1805
Bram Moolenaara369c3d2021-04-21 16:00:10 +02001806 redir =>> d.redir
1807 echo 'more'
1808 redir END
1809 assert_equal({redir: "\ndict\nmore"}, d)
1810
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001811 var lines =<< trim END
1812 redir => notexist
1813 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001814 v9.CheckDefFailure(lines, 'E1089:')
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001815
1816 lines =<< trim END
Bram Moolenaar8b716f52022-02-15 21:17:56 +00001817 var text: string
1818 redir => text
1819 END
1820 v9.CheckDefFailure(lines, 'E1185:')
1821
1822 lines =<< trim END
Bram Moolenaar753bcf82021-04-21 14:24:24 +02001823 var ls = 'asdf'
1824 redir => ls[1]
1825 redir END
1826 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001827 v9.CheckDefFailure(lines, 'E1141:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001828
1829 lines =<< trim END
1830 var text: string
1831 redir => text
1832 echo 'hello'
1833 redir > Xfile
1834 redir END
1835 END
Bram Moolenaar02a977e2022-02-03 21:29:39 +00001836 v9.CheckDefFailure(lines, 'E1092:')
Bram Moolenaar003312b2021-12-20 10:55:35 +00001837
1838 lines =<< trim END
1839 var text: number
1840 redir => text
1841 echo 'hello'
1842 redir END
1843 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001844 v9.CheckDefFailure(lines, 'E1012:')
Bram Moolenaar2d1c57e2021-04-19 20:50:03 +02001845enddef
1846
Bram Moolenaar68db9962021-05-09 23:19:22 +02001847def Test_echo_void()
1848 var lines =<< trim END
1849 vim9script
1850 def NoReturn()
1851 echo 'nothing'
1852 enddef
1853 echo NoReturn()
1854 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001855 v9.CheckScriptFailure(lines, 'E1186:', 5)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001856
1857 lines =<< trim END
1858 vim9script
1859 def NoReturn()
1860 echo 'nothing'
1861 enddef
1862 def Try()
1863 echo NoReturn()
1864 enddef
1865 defcompile
1866 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001867 v9.CheckScriptFailure(lines, 'E1186:', 1)
Bram Moolenaar68db9962021-05-09 23:19:22 +02001868enddef
1869
Bram Moolenaar2c707112021-08-02 22:26:56 +02001870def Test_cmdwin_block()
1871 augroup justTesting
1872 autocmd BufEnter * {
1873 echomsg 'in block'
1874 }
1875 augroup END
1876 feedkeys('q:', 'xt')
1877 redraw
1878 feedkeys("aclose\<CR>", 'xt')
1879
1880 au! justTesting
1881enddef
1882
Bram Moolenaar7b829262021-10-13 15:04:34 +01001883def Test_var_not_cmd()
1884 var lines =<< trim END
1885 g:notexist:cmd
1886 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001887 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :cmd', 'E121: Undefined variable: g:notexist'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001888
1889 lines =<< trim END
1890 g-pat-cmd
1891 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001892 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001893 lines =<< trim END
1894 g.pat.cmd
1895 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001896 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: g', 'E121: Undefined variable: g'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001897
1898 lines =<< trim END
1899 s:notexist:repl
1900 END
Bram Moolenaara749a422022-02-12 19:52:25 +00001901 v9.CheckDefAndScriptFailure(lines, ['E488: Trailing characters: :repl', 'E1268:'], 1)
1902
1903 lines =<< trim END
1904 notexist:repl
1905 END
1906 v9.CheckDefAndScriptFailure(lines, ['E476:', 'E492:'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001907
1908 lines =<< trim END
1909 s-pat-repl
1910 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001911 v9.CheckDefAndScriptFailure(lines, 'E1241:', 1)
Bram Moolenaar051a8a32021-10-14 16:53:42 +01001912 lines =<< trim END
1913 s.pat.repl
1914 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001915 v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: s', 'E121: Undefined variable: s'], 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001916
1917 lines =<< trim END
1918 w:notexist->len()
1919 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001920 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: w:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001921
1922 lines =<< trim END
1923 b:notexist->len()
1924 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001925 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: b:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001926
1927 lines =<< trim END
1928 t:notexist->len()
1929 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001930 v9.CheckDefExecAndScriptFailure(lines, 'E121: Undefined variable: t:notexist', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001931enddef
1932
1933def Test_no_space_after_command()
1934 var lines =<< trim END
1935 g /pat/cmd
1936 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001937 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001938 lines =<< trim END
1939 g #pat#cmd
1940 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001941 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarf78ee2b2022-03-04 23:22:27 +00001942
1943 new
1944 setline(1, 'some pat')
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001945 lines =<< trim END
Bram Moolenaarf78ee2b2022-03-04 23:22:27 +00001946 g#pat#print
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001947 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001948 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001949 lines =<< trim END
Bram Moolenaarf78ee2b2022-03-04 23:22:27 +00001950 g# pat#print
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001951 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001952 v9.CheckDefAndScriptSuccess(lines)
Bram Moolenaarf78ee2b2022-03-04 23:22:27 +00001953 bwipe!
Bram Moolenaar7b829262021-10-13 15:04:34 +01001954
1955 lines =<< trim END
1956 s /pat/repl
1957 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001958 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001959 lines =<< trim END
1960 s #pat#repl
1961 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001962 v9.CheckDefAndScriptFailure(lines, 'E1242:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001963 lines =<< trim END
1964 s#pat#repl
1965 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001966 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaarc0abac62021-10-13 21:17:05 +01001967 lines =<< trim END
1968 s# pat#repl
1969 END
Bram Moolenaar62aec932022-01-29 21:45:34 +00001970 v9.CheckDefExecAndScriptFailure(lines, 'E486:', 1)
Bram Moolenaar7b829262021-10-13 15:04:34 +01001971enddef
1972
Yegappan Lakshmanan2a16dc62021-11-16 17:19:30 +00001973" Test for the 'previewpopup' option
1974def Test_previewpopup()
Yegappan Lakshmanan733b1242021-11-15 11:22:09 +00001975 set previewpopup=height:10,width:60
1976 pedit Xfile
1977 var id = popup_findpreview()
1978 assert_notequal(id, 0)
1979 assert_match('Xfile', popup_getoptions(id).title)
1980 popup_clear()
1981 set previewpopup&
1982enddef
1983
Bram Moolenaarc8a9fe52021-11-20 19:50:59 +00001984def Test_syntax_enable_clear()
1985 syntax clear
1986 syntax enable
1987 highlight clear String
1988 assert_equal(true, hlget('String')->get(0, {})->get('default', false))
1989 syntax clear
1990enddef
1991
Bram Moolenaarb2cb6c82021-03-28 20:38:34 +02001992
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001993" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker