blob: a55ba64031e1fc43a474641ed4e8e366e5a5a4c4 [file] [log] [blame]
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02001" Test commands that are not compiled in a :def function
2
Bram Moolenaar6378c4f2020-04-26 13:50:41 +02003source check.vim
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02004source vim9.vim
Bram Moolenaare88c8e82020-11-01 17:03:37 +01005source term_util.vim
Bram Moolenaare9f262b2020-07-05 14:57:51 +02006source view_util.vim
Bram Moolenaarcfe435d2020-04-25 20:02:55 +02007
8def Test_edit_wildcards()
Bram Moolenaarac564082020-09-27 19:05:33 +02009 var filename = 'Xtest'
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020010 edit `=filename`
11 assert_equal('Xtest', bufname())
12
Bram Moolenaarac564082020-09-27 19:05:33 +020013 var filenr = 123
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020014 edit Xtest`=filenr`
15 assert_equal('Xtest123', bufname())
16
17 filenr = 77
18 edit `=filename``=filenr`
19 assert_equal('Xtest77', bufname())
20
21 edit X`=filename`xx`=filenr`yy
22 assert_equal('XXtestxx77yy', bufname())
Bram Moolenaar025cb1c2020-12-14 18:31:27 +010023
24 CheckDefFailure(['edit `=xxx`'], 'E1001:')
25 CheckDefFailure(['edit `="foo"'], 'E1083:')
Bram Moolenaarcfe435d2020-04-25 20:02:55 +020026enddef
27
Bram Moolenaar56ce9ea2020-12-25 18:35:29 +010028def Test_global_backtick_expansion()
29 new
30 setline(1, 'xx')
31 var name = 'foobar'
32 g/^xx/s/.*/`=name`
33 assert_equal('foobar', getline(1))
34 bwipe!
35enddef
36
Bram Moolenaar6378c4f2020-04-26 13:50:41 +020037def Test_hardcopy_wildcards()
38 CheckUnix
39 CheckFeature postscript
40
Bram Moolenaarac564082020-09-27 19:05:33 +020041 var outfile = 'print'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +020042 hardcopy > X`=outfile`.ps
43 assert_true(filereadable('Xprint.ps'))
44
45 delete('Xprint.ps')
46enddef
47
48def Test_syn_include_wildcards()
49 writefile(['syn keyword Found found'], 'Xthemine.vim')
Bram Moolenaarac564082020-09-27 19:05:33 +020050 var save_rtp = &rtp
Bram Moolenaar6378c4f2020-04-26 13:50:41 +020051 &rtp = '.'
52
Bram Moolenaarac564082020-09-27 19:05:33 +020053 var fname = 'mine'
Bram Moolenaar6378c4f2020-04-26 13:50:41 +020054 syn include @Group Xthe`=fname`.vim
55 assert_match('Found.* contained found', execute('syn list Found'))
56
57 &rtp = save_rtp
58 delete('Xthemine.vim')
59enddef
60
Bram Moolenaar7e8967f2020-06-27 21:56:17 +020061def Test_echo_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +020062 var lines =<< trim END
Bram Moolenaar7e8967f2020-06-27 21:56:17 +020063 vim9script
64 redir @a
65 echo 'one'
66 .. 'two'
67 redir END
68 assert_equal("\nonetwo", @a)
69 END
70 CheckScriptSuccess(lines)
71
72 lines =<< trim END
73 vim9script
74 redir @a
75 echo 11 +
76 77
77 - 22
78 redir END
79 assert_equal("\n66", @a)
80 END
81 CheckScriptSuccess(lines)
82enddef
83
Bram Moolenaar13106602020-10-04 16:06:05 +020084def Test_condition_types()
85 var lines =<< trim END
86 if 'text'
87 endif
88 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +010089 CheckDefAndScriptFailure(lines, 'E1135:', 1)
Bram Moolenaar13106602020-10-04 16:06:05 +020090
91 lines =<< trim END
92 if [1]
93 endif
94 END
95 CheckDefFailure(lines, 'E1012:', 1)
96 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
97
98 lines =<< trim END
99 g:cond = 'text'
100 if g:cond
101 endif
102 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100103 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200104
105 lines =<< trim END
106 g:cond = 0
107 if g:cond
108 elseif 'text'
109 endif
110 END
111 CheckDefFailure(lines, 'E1012:', 3)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100112 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 4)
Bram Moolenaar13106602020-10-04 16:06:05 +0200113
114 lines =<< trim END
115 if g:cond
116 elseif [1]
117 endif
118 END
119 CheckDefFailure(lines, 'E1012:', 2)
120 CheckScriptFailure(['vim9script'] + lines, 'E745:', 3)
121
122 lines =<< trim END
123 g:cond = 'text'
124 if 0
125 elseif g:cond
126 endif
127 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100128 CheckDefExecAndScriptFailure(lines, 'E1135:', 3)
Bram Moolenaar13106602020-10-04 16:06:05 +0200129
130 lines =<< trim END
131 while 'text'
132 endwhile
133 END
134 CheckDefFailure(lines, 'E1012:', 1)
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100135 CheckScriptFailure(['vim9script'] + lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200136
137 lines =<< trim END
138 while [1]
139 endwhile
140 END
141 CheckDefFailure(lines, 'E1012:', 1)
142 CheckScriptFailure(['vim9script'] + lines, 'E745:', 2)
143
144 lines =<< trim END
145 g:cond = 'text'
146 while g:cond
147 endwhile
148 END
Bram Moolenaarea2d4072020-11-12 12:08:51 +0100149 CheckDefExecAndScriptFailure(lines, 'E1135:', 2)
Bram Moolenaar13106602020-10-04 16:06:05 +0200150enddef
151
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200152def Test_if_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200153 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200154 vim9script
155 if 1 &&
Bram Moolenaar2bb26582020-10-03 22:52:39 +0200156 true
157 || 1
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200158 g:res = 42
159 endif
160 assert_equal(42, g:res)
161 END
162 CheckScriptSuccess(lines)
163 unlet g:res
164
165 lines =<< trim END
166 vim9script
167 if 1 &&
168 0
169 g:res = 0
170 elseif 0 ||
171 0
172 || 1
173 g:res = 12
174 endif
175 assert_equal(12, g:res)
176 END
177 CheckScriptSuccess(lines)
178 unlet g:res
179enddef
180
181def Test_while_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200182 var lines =<< trim END
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200183 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200184 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200185 while nr <
186 10 + 3
187 nr = nr
188 + 4
189 endwhile
190 assert_equal(16, nr)
191 END
192 CheckScriptSuccess(lines)
193
194 lines =<< trim END
195 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200196 var nr = 0
Bram Moolenaard5053d02020-06-28 15:51:16 +0200197 while nr
198 <
199 10
200 +
201 3
202 nr = nr
203 +
204 4
Bram Moolenaarfaf86262020-06-27 23:07:36 +0200205 endwhile
206 assert_equal(16, nr)
207 END
208 CheckScriptSuccess(lines)
209enddef
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200210
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200211def Test_for_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200212 var lines =<< trim END
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200213 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200214 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200215 for x
216 in
217 [1, 2, 3, 4]
218 nr = nr + x
219 endfor
220 assert_equal(10, nr)
221 END
222 CheckScriptSuccess(lines)
223
224 lines =<< trim END
225 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200226 var nr = 0
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200227 for x
228 in
229 [1, 2,
230 3, 4
231 ]
232 nr = nr
233 +
234 x
235 endfor
236 assert_equal(10, nr)
237 END
238 CheckScriptSuccess(lines)
239enddef
240
Bram Moolenaard2ef6b32020-07-02 21:11:34 +0200241def Test_method_call_linebreak()
Bram Moolenaarac564082020-09-27 19:05:33 +0200242 var lines =<< trim END
Bram Moolenaar5f195932020-07-01 20:07:14 +0200243 vim9script
Bram Moolenaarac564082020-09-27 19:05:33 +0200244 var res = []
Bram Moolenaar5f195932020-07-01 20:07:14 +0200245 func RetArg(
246 arg
247 )
248 let s:res = a:arg
249 endfunc
250 [1,
251 2,
252 3]->RetArg()
253 assert_equal([1, 2, 3], res)
254 END
255 CheckScriptSuccess(lines)
256enddef
257
Bram Moolenaar683581e2020-10-22 21:22:58 +0200258def Test_skipped_expr_linebreak()
259 if 0
260 var x = []
261 ->map({ -> 0})
262 endif
263enddef
264
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200265def Test_dict_member()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100266 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200267 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100268 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200269 test.data
270 ->reverse()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100271 assert_equal({data: [3, 2, 1]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200272
Bram Moolenaarac564082020-09-27 19:05:33 +0200273 var lines =<< trim END
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200274 vim9script
Bram Moolenaare0de1712020-12-02 17:36:54 +0100275 var test: dict<list<number>> = {data: [3, 1, 2]}
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200276 test.data->sort()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100277 assert_equal({data: [1, 2, 3]}, test)
Bram Moolenaar0a47e092020-07-08 18:30:06 +0200278 END
279 CheckScriptSuccess(lines)
280enddef
281
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200282def Test_bar_after_command()
283 def RedrawAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200284 var x = 'did redraw'
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200285 redraw | echo x
286 enddef
287 RedrawAndEcho()
288 assert_match('did redraw', Screenline(&lines))
289
Bram Moolenaar788123c2020-07-05 15:32:17 +0200290 def CallAndEcho()
Bram Moolenaarac564082020-09-27 19:05:33 +0200291 var x = 'did redraw'
Bram Moolenaar788123c2020-07-05 15:32:17 +0200292 reg_executing() | echo x
293 enddef
294 CallAndEcho()
295 assert_match('did redraw', Screenline(&lines))
296
Bram Moolenaare9f262b2020-07-05 14:57:51 +0200297 if has('unix')
298 # bar in filter write command does not start new command
299 def WriteToShell()
300 new
301 setline(1, 'some text')
302 w !cat | cat > Xoutfile
303 bwipe!
304 enddef
305 WriteToShell()
306 assert_equal(['some text'], readfile('Xoutfile'))
307 delete('Xoutfile')
308
309 # bar in filter read command does not start new command
310 def ReadFromShell()
311 new
312 r! echo hello there | cat > Xoutfile
313 r !echo again | cat >> Xoutfile
314 bwipe!
315 enddef
316 ReadFromShell()
317 assert_equal(['hello there', 'again'], readfile('Xoutfile'))
318 delete('Xoutfile')
319 endif
320enddef
321
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200322def Test_filter_is_not_modifier()
Bram Moolenaare0de1712020-12-02 17:36:54 +0100323 var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200324 filter(tags, { _, v -> has_key(v, 'x') ? 1 : 0 })
Bram Moolenaare0de1712020-12-02 17:36:54 +0100325 assert_equal([{x: 3, y: 4}], tags)
Bram Moolenaarb074e8b2020-07-11 13:40:45 +0200326enddef
327
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100328def Test_command_modifier_filter()
Bram Moolenaar4f6b6ed2020-10-29 20:24:34 +0100329 var lines =<< trim END
330 final expected = "\nType Name Content\n c \"c piyo"
331 @a = 'hoge'
332 @b = 'fuga'
333 @c = 'piyo'
334
335 assert_equal(execute('filter /piyo/ registers abc'), expected)
336 END
337 CheckDefAndScriptSuccess(lines)
338enddef
339
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100340def Test_win_command_modifiers()
341 assert_equal(1, winnr('$'))
342
343 set splitright
344 vsplit
345 assert_equal(2, winnr())
346 close
347 aboveleft vsplit
348 assert_equal(1, winnr())
349 close
350 set splitright&
351
352 vsplit
353 assert_equal(1, winnr())
354 close
355 belowright vsplit
356 assert_equal(2, winnr())
357 close
358 rightbelow vsplit
359 assert_equal(2, winnr())
360 close
361
Bram Moolenaar97a19002020-11-01 22:15:44 +0100362 if has('browse')
363 browse set
364 assert_equal('option-window', expand('%'))
365 close
366 endif
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100367
368 vsplit
369 botright split
370 assert_equal(3, winnr())
371 assert_equal(&columns, winwidth(0))
372 close
373 close
374
375 vsplit
376 topleft split
377 assert_equal(1, winnr())
378 assert_equal(&columns, winwidth(0))
379 close
380 close
381
382 gettabinfo()->len()->assert_equal(1)
383 tab split
384 gettabinfo()->len()->assert_equal(2)
385 tabclose
386
387 vertical new
388 assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0))
389 close
390enddef
391
392func Test_command_modifier_confirm()
393 CheckNotGui
394 CheckRunVimInTerminal
395
396 " Test for saving all the modified buffers
397 let lines =<< trim END
398 call setline(1, 'changed')
399 def Getout()
400 confirm write Xfile
401 enddef
402 END
403 call writefile(lines, 'Xconfirmscript')
404 call writefile(['empty'], 'Xfile')
405 let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8})
406 call term_sendkeys(buf, ":call Getout()\n")
407 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
408 call term_sendkeys(buf, "y")
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100409 call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000)
410 call term_sendkeys(buf, "\<CR>")
411 call TermWait(buf)
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100412 call StopVimInTerminal(buf)
413
414 call assert_equal(['changed'], readfile('Xfile'))
415 call delete('Xfile')
Bram Moolenaar645cd3e2020-11-01 20:04:57 +0100416 call delete('.Xfile.swp') " in case Vim was killed
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100417 call delete('Xconfirmscript')
418endfunc
419
420def Test_command_modifiers_keep()
421 if has('unix')
422 def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool)
423 new
424 setline(1, ['one', 'two', 'three'])
425 normal 1Gma
426 normal 2Gmb
427 normal 3Gmc
428 if addRflag
429 set cpo+=R
430 else
431 set cpo-=R
432 endif
433 if keepMarks
434 keepmarks :%!cat
435 else
436 :%!cat
437 endif
438 if hasMarks
439 assert_equal(1, line("'a"))
440 assert_equal(2, line("'b"))
441 assert_equal(3, line("'c"))
442 else
443 assert_equal(0, line("'a"))
444 assert_equal(0, line("'b"))
445 assert_equal(0, line("'c"))
446 endif
447 quit!
448 enddef
449 DoTest(false, false, true)
450 DoTest(true, false, false)
451 DoTest(false, true, true)
452 DoTest(true, true, true)
453 set cpo&vim
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100454
455 new
456 setline(1, ['one', 'two', 'three', 'four'])
457 assert_equal(4, line("$"))
458 normal 1Gma
459 normal 2Gmb
460 normal 3Gmc
461 lockmarks :1,2!wc
462 # line is deleted, marks don't move
463 assert_equal(3, line("$"))
464 assert_equal('four', getline(3))
465 assert_equal(1, line("'a"))
466 assert_equal(2, line("'b"))
467 assert_equal(3, line("'c"))
468 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100469 endif
470
Bram Moolenaarf65b35b2020-11-04 18:02:44 +0100471 edit Xone
472 edit Xtwo
473 assert_equal('Xone', expand('#'))
474 keepalt edit Xthree
475 assert_equal('Xone', expand('#'))
476
477 normal /a*b*
478 assert_equal('a*b*', histget("search"))
479 keeppatterns normal /c*d*
480 assert_equal('a*b*', histget("search"))
481
482 new
483 setline(1, range(10))
484 :10
485 normal gg
486 assert_equal(10, getpos("''")[1])
487 keepjumps normal 5G
488 assert_equal(10, getpos("''")[1])
489 quit!
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100490enddef
491
492def Test_command_modifier_other()
Bram Moolenaar66669fc2020-11-04 18:53:35 +0100493 new Xsomefile
494 setline(1, 'changed')
495 var buf = bufnr()
496 hide edit Xotherfile
497 var info = getbufinfo(buf)
498 assert_equal(1, info[0].hidden)
499 assert_equal(1, info[0].changed)
500 edit Xsomefile
501 bwipe!
502
503 au BufNewFile Xfile g:readFile = 1
504 g:readFile = 0
505 edit Xfile
506 assert_equal(1, g:readFile)
507 bwipe!
508 g:readFile = 0
509 noautocmd edit Xfile
510 assert_equal(0, g:readFile)
511
512 noswapfile edit XnoSwap
513 assert_equal(0, &l:swapfile)
514 bwipe!
515
516 var caught = false
517 try
518 sandbox !ls
519 catch /E48:/
520 caught = true
521 endtry
522 assert_true(caught)
523
524 :8verbose g:verbose_now = &verbose
525 assert_equal(8, g:verbose_now)
526 unlet g:verbose_now
527enddef
528
529def EchoHere()
530 echomsg 'here'
531enddef
532def EchoThere()
533 unsilent echomsg 'there'
534enddef
535
536def Test_modifier_silent_unsilent()
537 echomsg 'last one'
538 silent echomsg "text"
539 assert_equal("\nlast one", execute(':1messages'))
540
541 silent! echoerr "error"
542
543 echomsg 'last one'
544 silent EchoHere()
545 assert_equal("\nlast one", execute(':1messages'))
546
547 silent EchoThere()
548 assert_equal("\nthere", execute(':1messages'))
Bram Moolenaare88c8e82020-11-01 17:03:37 +0100549enddef
550
Bram Moolenaar36113e42020-11-02 21:08:47 +0100551def Test_range_after_command_modifier()
Bram Moolenaar6e2c2c52020-12-25 19:25:45 +0100552 CheckScriptFailure(['vim9script', 'silent keepjump 1d _'], 'E1050: Colon required before a range: 1d _', 2)
Bram Moolenaar36113e42020-11-02 21:08:47 +0100553 new
554 setline(1, 'xxx')
555 CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
556 assert_equal('', getline(1))
557 bwipe!
558enddef
559
Bram Moolenaar007f9d62020-07-06 23:04:49 +0200560def Test_eval_command()
Bram Moolenaarac564082020-09-27 19:05:33 +0200561 var from = 3
562 var to = 5
Bram Moolenaar007f9d62020-07-06 23:04:49 +0200563 g:val = 111
564 def Increment(nrs: list<number>)
565 for nr in nrs
566 g:val += nr
567 endfor
568 enddef
569 eval range(from, to)
570 ->Increment()
571 assert_equal(111 + 3 + 4 + 5, g:val)
572 unlet g:val
Bram Moolenaard0fe6202020-12-05 17:11:12 +0100573
574 var lines =<< trim END
575 vim9script
576 g:caught = 'no'
577 try
578 eval 123 || 0
579 catch
580 g:caught = 'yes'
581 endtry
582 assert_equal('yes', g:caught)
583 unlet g:caught
584 END
585 CheckScriptSuccess(lines)
Bram Moolenaar007f9d62020-07-06 23:04:49 +0200586enddef
587
Bram Moolenaarb8a92962020-08-20 18:02:47 +0200588def Test_map_command()
Bram Moolenaarac564082020-09-27 19:05:33 +0200589 var lines =<< trim END
Bram Moolenaarb8a92962020-08-20 18:02:47 +0200590 nnoremap <F3> :echo 'hit F3 #'<CR>
591 assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
592 END
593 CheckDefSuccess(lines)
594 CheckScriptSuccess(['vim9script'] + lines)
595enddef
596
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +0200597def Test_normal_command()
598 new
599 setline(1, 'doesnotexist')
Bram Moolenaarac564082020-09-27 19:05:33 +0200600 var caught = 0
Bram Moolenaarb3ea36c2020-08-23 21:46:32 +0200601 try
602 exe "norm! \<C-]>"
603 catch /E433/
604 caught = 2
605 endtry
606 assert_equal(2, caught)
607
608 try
609 exe "norm! 3\<C-]>"
610 catch /E433/
611 caught = 3
612 endtry
613 assert_equal(3, caught)
614 bwipe!
615enddef
616
Bram Moolenaarc3516f72020-09-08 22:45:35 +0200617def Test_put_command()
618 new
619 @p = 'ppp'
620 put p
621 assert_equal('ppp', getline(2))
622
623 put ='below'
624 assert_equal('below', getline(3))
625 put! ='above'
626 assert_equal('above', getline(3))
627 assert_equal('below', getline(4))
628
Bram Moolenaar08597872020-12-10 19:43:40 +0100629 # compute range at runtime
630 setline(1, range(1, 8))
631 @a = 'aaa'
632 :$-2put a
633 assert_equal('aaa', getline(7))
634
635 setline(1, range(1, 8))
636 :2
637 :+2put! a
638 assert_equal('aaa', getline(4))
639
Bram Moolenaarc3516f72020-09-08 22:45:35 +0200640 bwipe!
Bram Moolenaar025cb1c2020-12-14 18:31:27 +0100641
642 CheckDefFailure(['put =xxx'], 'E1001:')
643enddef
644
645def Test_put_with_linebreak()
646 new
647 var lines =<< trim END
648 vim9script
649 pu =split('abc', '\zs')
650 ->join()
651 END
652 CheckScriptSuccess(lines)
653 getline(2)->assert_equal('a b c')
654 bwipe!
Bram Moolenaarc3516f72020-09-08 22:45:35 +0200655enddef
656
Bram Moolenaar3bd8de42020-09-14 16:37:34 +0200657def Test_command_star_range()
658 new
659 setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar'])
660 setpos("'<", [0, 1, 0, 0])
661 setpos("'>", [0, 3, 0, 0])
662 :*s/\(foo\|bar\)/baz/g
663 getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz'])
664
665 bwipe!
666enddef
667
Bram Moolenaar20d89e02020-10-20 23:11:33 +0200668def Test_f_args()
669 var lines =<< trim END
670 vim9script
671
672 func SaveCmdArgs(...)
673 let g:args = a:000
674 endfunc
675
676 command -nargs=* TestFArgs call SaveCmdArgs(<f-args>)
677
678 TestFArgs
679 assert_equal([], g:args)
680
681 TestFArgs one two three
682 assert_equal(['one', 'two', 'three'], g:args)
683 END
684 CheckScriptSuccess(lines)
685enddef
Bram Moolenaarc3516f72020-09-08 22:45:35 +0200686
Bram Moolenaar95388e32020-11-20 21:07:00 +0100687def Test_star_command()
688 var lines =<< trim END
689 vim9script
690 @s = 'g:success = 8'
691 set cpo+=*
692 exe '*s'
693 assert_equal(8, g:success)
694 unlet g:success
695 set cpo-=*
696 assert_fails("exe '*s'", 'E1050:')
697 END
698 CheckScriptSuccess(lines)
699enddef
700
Bram Moolenaar47a2abf2020-11-25 20:12:11 +0100701def Test_cmd_argument_without_colon()
702 new Xfile
703 setline(1, ['a', 'b', 'c', 'd'])
704 write
705 edit +3 %
706 assert_equal(3, getcurpos()[1])
707 edit +/a %
708 assert_equal(1, getcurpos()[1])
709 bwipe
710 delete('Xfile')
711enddef
712
Bram Moolenaar1c0aa972020-12-16 21:43:54 +0100713def Test_ambiguous_user_cmd()
714 var lines =<< trim END
715 com Cmd1 eval 0
716 com Cmd2 eval 0
717 Cmd
718 END
719 CheckScriptFailure(lines, 'E464:')
720enddef
721
Bram Moolenaar52c124d2020-12-20 21:43:35 +0100722def Test_command_not_recognized()
723 var lines =<< trim END
724 d.key = 'asdf'
725 END
726 CheckDefFailure(lines, 'E1146:', 1)
727
728 lines =<< trim END
729 d['key'] = 'asdf'
730 END
731 CheckDefFailure(lines, 'E1146:', 1)
732enddef
Bram Moolenaarb7a78f72020-06-28 18:43:40 +0200733
Bram Moolenaarf4e20992020-12-21 19:59:08 +0100734def Test_magic_not_used()
735 new
736 for cmd in ['set magic', 'set nomagic']
737 exe cmd
738 setline(1, 'aaa')
739 s/.../bbb/
740 assert_equal('bbb', getline(1))
741 endfor
742
743 set magic
744 setline(1, 'aaa')
745 assert_fails('s/.\M../bbb/', 'E486:')
746 assert_fails('snomagic/.../bbb/', 'E486:')
747 assert_equal('aaa', getline(1))
748
749 bwipe!
750enddef
751
Bram Moolenaar60f63102020-12-21 20:32:43 +0100752def Test_gdefault_not_used()
753 new
754 for cmd in ['set gdefault', 'set nogdefault']
755 exe cmd
756 setline(1, 'aaa')
757 s/./b/
758 assert_equal('baa', getline(1))
759 endfor
760
761 set nogdefault
762 bwipe!
763enddef
764
Bram Moolenaarcfe435d2020-04-25 20:02:55 +0200765" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker