Mercurial > vim
view src/testdir/test_vim9_cmd.vim @ 22777:a707e11443ee
Added tag v8.2.1936 for changeset 0583f3e2c12ee2714a91ea900b1ad77c148bf963
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 01 Nov 2020 17:45:04 +0100 |
parents | 82a7aff951d2 |
children | 3ec5f653f64d |
line wrap: on
line source
" Test commands that are not compiled in a :def function source check.vim source vim9.vim source term_util.vim source view_util.vim def Test_edit_wildcards() var filename = 'Xtest' edit `=filename` assert_equal('Xtest', bufname()) var filenr = 123 edit Xtest`=filenr` assert_equal('Xtest123', bufname()) filenr = 77 edit `=filename``=filenr` assert_equal('Xtest77', bufname()) edit X`=filename`xx`=filenr`yy assert_equal('XXtestxx77yy', bufname()) enddef def Test_hardcopy_wildcards() CheckUnix CheckFeature postscript var outfile = 'print' hardcopy > X`=outfile`.ps assert_true(filereadable('Xprint.ps')) delete('Xprint.ps') enddef def Test_syn_include_wildcards() writefile(['syn keyword Found found'], 'Xthemine.vim') var save_rtp = &rtp &rtp = '.' var fname = 'mine' syn include @Group Xthe`=fname`.vim assert_match('Found.* contained found', execute('syn list Found')) &rtp = save_rtp delete('Xthemine.vim') enddef def Test_echo_linebreak() var lines =<< trim END vim9script redir @a echo 'one' .. 'two' redir END assert_equal("\nonetwo", @a) END CheckScriptSuccess(lines) lines =<< trim END vim9script redir @a echo 11 + 77 - 22 redir END assert_equal("\n66", @a) END CheckScriptSuccess(lines) enddef def Test_condition_types() var lines =<< trim END if 'text' endif END CheckDefAndScriptFailure(lines, 'E1030:', 1) lines =<< trim END if [1] endif END CheckDefFailure(lines, 'E1012:', 1) CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' if g:cond endif END CheckDefExecAndScriptFailure(lines, 'E1030:', 2) lines =<< trim END g:cond = 0 if g:cond elseif 'text' endif END CheckDefFailure(lines, 'E1012:', 3) CheckScriptFailure(['vim9script'] + lines, 'E1030:', 4) lines =<< trim END if g:cond elseif [1] endif END CheckDefFailure(lines, 'E1012:', 2) CheckScriptFailure(['vim9script'] + lines, 'E745:', 3) lines =<< trim END g:cond = 'text' if 0 elseif g:cond endif END CheckDefExecAndScriptFailure(lines, 'E1030:', 3) lines =<< trim END while 'text' endwhile END CheckDefFailure(lines, 'E1012:', 1) CheckScriptFailure(['vim9script'] + lines, 'E1030:', 2) lines =<< trim END while [1] endwhile END CheckDefFailure(lines, 'E1012:', 1) CheckScriptFailure(['vim9script'] + lines, 'E745:', 2) lines =<< trim END g:cond = 'text' while g:cond endwhile END CheckDefExecAndScriptFailure(lines, 'E1030:', 2) enddef def Test_if_linebreak() var lines =<< trim END vim9script if 1 && true || 1 g:res = 42 endif assert_equal(42, g:res) END CheckScriptSuccess(lines) unlet g:res lines =<< trim END vim9script if 1 && 0 g:res = 0 elseif 0 || 0 || 1 g:res = 12 endif assert_equal(12, g:res) END CheckScriptSuccess(lines) unlet g:res enddef def Test_while_linebreak() var lines =<< trim END vim9script var nr = 0 while nr < 10 + 3 nr = nr + 4 endwhile assert_equal(16, nr) END CheckScriptSuccess(lines) lines =<< trim END vim9script var nr = 0 while nr < 10 + 3 nr = nr + 4 endwhile assert_equal(16, nr) END CheckScriptSuccess(lines) enddef def Test_for_linebreak() var lines =<< trim END vim9script var nr = 0 for x in [1, 2, 3, 4] nr = nr + x endfor assert_equal(10, nr) END CheckScriptSuccess(lines) lines =<< trim END vim9script var nr = 0 for x in [1, 2, 3, 4 ] nr = nr + x endfor assert_equal(10, nr) END CheckScriptSuccess(lines) enddef def Test_method_call_linebreak() var lines =<< trim END vim9script var res = [] func RetArg( arg ) let s:res = a:arg endfunc [1, 2, 3]->RetArg() assert_equal([1, 2, 3], res) END CheckScriptSuccess(lines) enddef def Test_skipped_expr_linebreak() if 0 var x = [] ->map({ -> 0}) endif enddef def Test_dict_member() var test: dict<list<number>> = {'data': [3, 1, 2]} test.data->sort() assert_equal(#{data: [1, 2, 3]}, test) test.data ->reverse() assert_equal(#{data: [3, 2, 1]}, test) var lines =<< trim END vim9script var test: dict<list<number>> = {'data': [3, 1, 2]} test.data->sort() assert_equal(#{data: [1, 2, 3]}, test) END CheckScriptSuccess(lines) enddef def Test_bar_after_command() def RedrawAndEcho() var x = 'did redraw' redraw | echo x enddef RedrawAndEcho() assert_match('did redraw', Screenline(&lines)) def CallAndEcho() var x = 'did redraw' reg_executing() | echo x enddef CallAndEcho() assert_match('did redraw', Screenline(&lines)) if has('unix') # bar in filter write command does not start new command def WriteToShell() new setline(1, 'some text') w !cat | cat > Xoutfile bwipe! enddef WriteToShell() assert_equal(['some text'], readfile('Xoutfile')) delete('Xoutfile') # bar in filter read command does not start new command def ReadFromShell() new r! echo hello there | cat > Xoutfile r !echo again | cat >> Xoutfile bwipe! enddef ReadFromShell() assert_equal(['hello there', 'again'], readfile('Xoutfile')) delete('Xoutfile') endif enddef def Test_filter_is_not_modifier() var tags = [{'a': 1, 'b': 2}, {'x': 3, 'y': 4}] filter(tags, { _, v -> has_key(v, 'x') ? 1 : 0 }) assert_equal([#{x: 3, y: 4}], tags) enddef def Test_command_modifier_filter() var lines =<< trim END final expected = "\nType Name Content\n c \"c piyo" @a = 'hoge' @b = 'fuga' @c = 'piyo' assert_equal(execute('filter /piyo/ registers abc'), expected) END CheckDefAndScriptSuccess(lines) enddef def Test_win_command_modifiers() assert_equal(1, winnr('$')) set splitright vsplit assert_equal(2, winnr()) close aboveleft vsplit assert_equal(1, winnr()) close set splitright& vsplit assert_equal(1, winnr()) close belowright vsplit assert_equal(2, winnr()) close rightbelow vsplit assert_equal(2, winnr()) close browse set assert_equal('option-window', expand('%')) close vsplit botright split assert_equal(3, winnr()) assert_equal(&columns, winwidth(0)) close close vsplit topleft split assert_equal(1, winnr()) assert_equal(&columns, winwidth(0)) close close gettabinfo()->len()->assert_equal(1) tab split gettabinfo()->len()->assert_equal(2) tabclose vertical new assert_inrange(&columns / 2 - 2, &columns / 2 + 1, winwidth(0)) close enddef func Test_command_modifier_confirm() CheckNotGui CheckRunVimInTerminal " Test for saving all the modified buffers let lines =<< trim END call setline(1, 'changed') def Getout() confirm write Xfile enddef END call writefile(lines, 'Xconfirmscript') call writefile(['empty'], 'Xfile') let buf = RunVimInTerminal('-S Xconfirmscript', {'rows': 8}) call term_sendkeys(buf, ":call Getout()\n") call WaitForAssert({-> assert_match('(Y)es, \[N\]o: ', term_getline(buf, 8))}, 1000) call term_sendkeys(buf, "y") call StopVimInTerminal(buf) call assert_equal(['changed'], readfile('Xfile')) call delete('Xfile') call delete('Xconfirmscript') endfunc def Test_command_modifiers_keep() if has('unix') def DoTest(addRflag: bool, keepMarks: bool, hasMarks: bool) new setline(1, ['one', 'two', 'three']) normal 1Gma normal 2Gmb normal 3Gmc if addRflag set cpo+=R else set cpo-=R endif if keepMarks keepmarks :%!cat else :%!cat endif if hasMarks assert_equal(1, line("'a")) assert_equal(2, line("'b")) assert_equal(3, line("'c")) else assert_equal(0, line("'a")) assert_equal(0, line("'b")) assert_equal(0, line("'c")) endif quit! enddef DoTest(false, false, true) DoTest(true, false, false) DoTest(false, true, true) DoTest(true, true, true) set cpo&vim endif # TODO # lockmarks # keepalt # keeppatterns # keepjumps enddef def Test_command_modifier_other() # TODO # hide # noautocmd # noswapfile # sandbox # silent # silent! # unsilent # verbose enddef def Test_eval_command() var from = 3 var to = 5 g:val = 111 def Increment(nrs: list<number>) for nr in nrs g:val += nr endfor enddef eval range(from, to) ->Increment() assert_equal(111 + 3 + 4 + 5, g:val) unlet g:val enddef def Test_map_command() var lines =<< trim END nnoremap <F3> :echo 'hit F3 #'<CR> assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n")) END CheckDefSuccess(lines) CheckScriptSuccess(['vim9script'] + lines) enddef def Test_normal_command() new setline(1, 'doesnotexist') var caught = 0 try exe "norm! \<C-]>" catch /E433/ caught = 2 endtry assert_equal(2, caught) try exe "norm! 3\<C-]>" catch /E433/ caught = 3 endtry assert_equal(3, caught) bwipe! enddef def Test_put_command() new @p = 'ppp' put p assert_equal('ppp', getline(2)) put ='below' assert_equal('below', getline(3)) put! ='above' assert_equal('above', getline(3)) assert_equal('below', getline(4)) bwipe! enddef def Test_command_star_range() new setline(1, ['xxx foo xxx', 'xxx bar xxx', 'xxx foo xx bar']) setpos("'<", [0, 1, 0, 0]) setpos("'>", [0, 3, 0, 0]) :*s/\(foo\|bar\)/baz/g getline(1, 3)->assert_equal(['xxx baz xxx', 'xxx baz xxx', 'xxx baz xx baz']) bwipe! enddef def Test_f_args() var lines =<< trim END vim9script func SaveCmdArgs(...) let g:args = a:000 endfunc command -nargs=* TestFArgs call SaveCmdArgs(<f-args>) TestFArgs assert_equal([], g:args) TestFArgs one two three assert_equal(['one', 'two', 'three'], g:args) END CheckScriptSuccess(lines) enddef def Test_modifier_silent() echomsg 'last one' silent echomsg "text" redir => g:testmsg :1messages redir END assert_equal("\nlast one", g:testmsg) unlet g:testmsg silent! echoerr "error" enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker