Mercurial > vim
view src/testdir/test_vim9_cmd.vim @ 22502:1503ecd54f8a v8.2.1799
patch 8.2.1799: some Normal mode commands not fully tested
Commit: https://github.com/vim/vim/commit/d1ad99b65470d3e754f6a0588a6b0dc2214a1eab
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Oct 4 16:16:54 2020 +0200
patch 8.2.1799: some Normal mode commands not fully tested
Problem: Some Normal mode commands not fully tested.
Solution: Add a few more tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/7073)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 04 Oct 2020 16:30:03 +0200 |
parents | ef8a3177edc1 |
children | 6e965b3587a4 |
line wrap: on
line source
" Test commands that are not compiled in a :def function source check.vim source vim9.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_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_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 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker