0
0
mirror of https://github.com/vim/vim.git synced 2025-07-24 10:45:12 -04:00

patch 8.2.0509: various code is not properly tested.

Problem:    various code is not properly tested.
Solution:   Add more tests. (Yegappan Lakshmanan, closes #5871)
This commit is contained in:
Bram Moolenaar 2020-04-04 14:00:39 +02:00
parent d77a8525d5
commit cde0ff39da
14 changed files with 452 additions and 15 deletions

View File

@ -1966,7 +1966,7 @@ parse_command_name(mparm_T *parmp)
#endif
}
// Checking for "ex" here may catch some weir names, such as "vimex" or
// Checking for "ex" here may catch some weird names, such as "vimex" or
// "viewex", we assume the user knows that.
if (STRNICMP(initstr, "ex", 2) == 0)
{

View File

@ -133,3 +133,13 @@ func CheckNotRoot()
throw 'Skipped: cannot run test as root'
endif
endfunc
" Command to check that the current language is English
command CheckEnglish call CheckEnglish()
func CheckEnglish()
if v:lang != "C" && v:lang !~ '^[Ee]n'
throw 'Skipped: only works in English language environment'
endif
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -337,3 +337,5 @@ func IsRoot()
endif
return v:false
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -82,6 +82,8 @@ func RunVimInTerminal(arguments, options)
let cols = term_getsize(buf)[1]
endif
call term_wait(buf)
" Wait for "All" or "Top" of the ruler to be shown in the last line or in
" the status line of the last window. This can be quite slow (e.g. when
" using valgrind).
@ -113,3 +115,5 @@ func StopVimInTerminal(buf)
call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))})
only!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -6,11 +6,7 @@ CheckFeature clientserver
source shared.vim
func Test_client_server()
let cmd = GetVimCommand()
if cmd == ''
return
endif
func Check_X11_Connection()
if has('x11')
if empty($DISPLAY)
throw 'Skipped: $DISPLAY is not set'
@ -19,11 +15,19 @@ func Test_client_server()
call remote_send('xxx', '')
catch
if v:exception =~ 'E240:'
throw 'Skipped: no connection to the X server'
throw 'Skipped: no connection to the X server'
endif
" ignore other errors
endtry
endif
endfunc
func Test_client_server()
let cmd = GetVimCommand()
if cmd == ''
return
endif
call Check_X11_Connection()
let name = 'XVIMTEST'
let cmd .= ' --servername ' . name
@ -72,6 +76,10 @@ func Test_client_server()
endif
let g:testvar = 'myself'
call assert_equal('myself', remote_expr(v:servername, 'testvar'))
call remote_send(v:servername, ":let g:testvar2 = 75\<CR>")
call feedkeys('', 'x')
call assert_equal(75, g:testvar2)
call assert_fails('let v = remote_expr(v:servername, "/2")', 'E449:')
call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
call assert_equal('got it', g:myserverid->remote_read(2))
@ -92,6 +100,55 @@ func Test_client_server()
call assert_equal('another', g:peek_result)
call assert_equal('another', remote_read(g:myserverid, 2))
if !has('gui_running')
" In GUI vim, the following tests display a dialog box
let cmd = GetVimProg() .. ' --servername ' .. name
" Run a separate instance to send a command to the server
call remote_expr(name, 'execute("only")')
call system(cmd .. ' --remote-send ":new Xfile<CR>"')
call assert_equal('2', remote_expr(name, 'winnr("$")'))
call assert_equal('Xfile', remote_expr(name, 'winbufnr(1)->bufname()'))
call remote_expr(name, 'execute("only")')
" Invoke a remote-expr. On MS-Windows, the returned value has a carriage
" return.
let l = system(cmd .. ' --remote-expr "2 + 2"')
call assert_equal(['4'], split(l, "\n"))
" Edit multiple files using --remote
call system(cmd .. ' --remote Xfile1 Xfile2 Xfile3')
call assert_equal("Xfile1\nXfile2\nXfile3\n", remote_expr(name, 'argv()'))
eval name->remote_send(":%bw!\<CR>")
" Edit files in separate tab pages
call system(cmd .. ' --remote-tab Xfile1 Xfile2 Xfile3')
call assert_equal('3', remote_expr(name, 'tabpagenr("$")'))
call assert_equal('Xfile2', remote_expr(name, 'bufname(tabpagebuflist(2)[0])'))
eval name->remote_send(":%bw!\<CR>")
" Edit a file using --remote-wait
eval name->remote_send(":source $VIMRUNTIME/plugin/rrhelper.vim\<CR>")
call system(cmd .. ' --remote-wait +enew Xfile1')
call assert_equal("Xfile1", remote_expr(name, 'bufname("#")'))
eval name->remote_send(":%bw!\<CR>")
" Edit files using --remote-tab-wait
call system(cmd .. ' --remote-tabwait +tabonly\|enew Xfile1 Xfile2')
call assert_equal('1', remote_expr(name, 'tabpagenr("$")'))
eval name->remote_send(":%bw!\<CR>")
" Error cases
if v:lang == "C" || v:lang =~ '^[Ee]n'
let l = split(system(cmd .. ' --remote +pwd'), "\n")
call assert_equal("Argument missing after: \"+pwd\"", l[1])
endif
let l = system(cmd .. ' --remote-expr "abcd"')
call assert_match('^E449: ', l)
endif
eval name->remote_send(":%bw!\<CR>")
eval name->remote_send(":qa!\<CR>")
try
call WaitForAssert({-> assert_equal("dead", job_status(job))})
@ -102,8 +159,8 @@ func Test_client_server()
endif
endtry
call assert_fails("let x=remote_peek([])", 'E730:')
call assert_fails("let x=remote_read('vim10')", 'E277:')
call assert_fails("let x = remote_peek([])", 'E730:')
call assert_fails("let x = remote_read('vim10')", 'E277:')
endfunc
" Uncomment this line to get a debugging log

View File

@ -146,9 +146,7 @@ endfunc
" In Ex-mode, backslashes at the end of a command should be halved.
func Test_Ex_echo_backslash()
" This test works only when the language is English
if v:lang != "C" && v:lang !~ '^[Ee]n'
return
endif
CheckEnglish
let bsl = '\\\\'
let bsl2 = '\\\'
call assert_fails('call feedkeys("Qecho " .. bsl .. "\nvisual\n", "xt")',

View File

@ -84,6 +84,15 @@ func Test_expandcmd()
let $FOO="blue\tsky"
call setline(1, "$FOO")
call assert_equal("grep pat blue\tsky", expandcmd('grep pat <cfile>'))
" Test for expression expansion `=
let $FOO= "blue"
call assert_equal("blue sky", expandcmd("`=$FOO .. ' sky'`"))
" Test for env variable with spaces
let $FOO= "foo bar baz"
call assert_equal("e foo bar baz", expandcmd("e $FOO"))
unlet $FOO
close!
endfunc

View File

@ -659,6 +659,7 @@ func Save_mode()
return ''
endfunc
" Test for the mode() function
func Test_mode()
new
call append(0, ["Blue Ball Black", "Brown Band Bowl", ""])
@ -782,6 +783,8 @@ func Test_mode()
call assert_equal('c-c', g:current_modes)
call feedkeys("gQecho \<C-R>=Save_mode()\<CR>\<CR>vi\<CR>", 'xt')
call assert_equal('c-cv', g:current_modes)
call feedkeys("Qcall Save_mode()\<CR>vi\<CR>", 'xt')
call assert_equal('c-ce', g:current_modes)
" How to test Ex mode?
bwipe!
@ -1284,6 +1287,19 @@ func Test_inputlist()
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx')
call assert_equal(3, c)
" Use backspace to delete characters in the prompt
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<BS>3\<BS>2\<cr>", 'tx')
call assert_equal(2, c)
" Use mouse to make a selection
call test_setmouse(&lines - 3, 2)
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<LeftMouse>", 'tx')
call assert_equal(1, c)
" Mouse click outside of the list
call test_setmouse(&lines - 6, 2)
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<LeftMouse>", 'tx')
call assert_equal(-2, c)
call assert_fails('call inputlist("")', 'E686:')
endfunc

View File

@ -1,6 +1,7 @@
" Test for options
source check.vim
source view_util.vim
func Test_whichwrap()
set whichwrap=b,s
@ -707,4 +708,12 @@ func Test_rightleftcmd()
set rightleft&
endfunc
" Test for the "debug" option
func Test_debug_option()
set debug=beep
exe "normal \<C-c>"
call assert_equal('Beep!', Screenline(&lines))
set debug&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -2,6 +2,7 @@
source shared.vim
source screendump.vim
source term_util.vim
source check.vim
" Check that loading startup.vim works.
@ -10,6 +11,9 @@ func Test_startup_script()
source $VIMRUNTIME/defaults.vim
call assert_equal(0, &compatible)
" Restore some options, so that the following tests doesn't break
set nomore
set noshowmode
endfunc
" Verify the order in which plugins are loaded:
@ -322,6 +326,10 @@ func Test_q_arg()
\ lines)
endif
" Test with a non-existing error file (exits with value 3)
let out = system(GetVimCommand() .. ' -q xyz.err')
call assert_equal(3, v:shell_error)
call delete('Xtestout')
call delete('Xerrors')
endfunc
@ -687,3 +695,268 @@ func Test_v_argv()
call assert_true(idx > 2)
call assert_equal(['arg1', '--cmd', 'echo v:argv', '--cmd', 'q'']'], list[idx:])
endfunc
" Test for the "-r" recovery mode option
func Test_r_arg()
" Can't catch the output of gvim.
CheckNotGui
CheckUnix
CheckEnglish
let cmd = GetVimCommand()
" There can be swap files anywhere, only check for the headers.
let expected =<< trim END
Swap files found:.*
In current directory:.*
In directory \~/tmp:.*
In directory /var/tmp:.*
In directory /tmp:.*
END
call assert_match(join(expected, ""), system(cmd .. " -r")->substitute("[\r\n]\\+", '', ''))
endfunc
" Test for the '-t' option to jump to a tag
func Test_t_arg()
let before =<< trim [CODE]
set tags=Xtags
[CODE]
let after =<< trim [CODE]
let s = bufname('') .. ':L' .. line('.') .. 'C' .. col('.')
call writefile([s], "Xtestout")
qall
[CODE]
call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
\ "first\tXfile1\t/^ \\zsfirst$/",
\ "second\tXfile1\t/^ \\zssecond$/",
\ "third\tXfile1\t/^ \\zsthird$/"],
\ 'Xtags')
call writefile([' first', ' second', ' third'], 'Xfile1')
if RunVim(before, after, '-t second')
call assert_equal(['Xfile1:L2C5'], readfile('Xtestout'))
call delete('Xtestout')
endif
call delete('Xtags')
call delete('Xfile1')
endfunc
" Test for entering the insert mode on startup
func Test_start_insertmode()
let before =<< trim [CODE]
set insertmode
[CODE]
let after =<< trim [CODE]
call writefile(['insertmode=' .. &insertmode], 'Xtestout')
qall
[CODE]
if RunVim(before, after, '')
call assert_equal(['insertmode=1'], readfile('Xtestout'))
call delete('Xtestout')
endif
endfunc
" Test for enabling the binary mode on startup
func Test_b_arg()
let after =<< trim [CODE]
call writefile(['binary=' .. &binary], 'Xtestout')
qall
[CODE]
if RunVim([], after, '-b')
call assert_equal(['binary=1'], readfile('Xtestout'))
call delete('Xtestout')
endif
endfunc
" Test for enabling the lisp mode on startup
func Test_l_arg()
let after =<< trim [CODE]
let s = 'lisp=' .. &lisp .. ', showmatch=' .. &showmatch
call writefile([s], 'Xtestout')
qall
[CODE]
if RunVim([], after, '-l')
call assert_equal(['lisp=1, showmatch=1'], readfile('Xtestout'))
call delete('Xtestout')
endif
endfunc
" Test for specifying a non-existing vimrc file using "-u"
func Test_missing_vimrc()
if !CanRunVimInTerminal()
throw 'Skipped: cannot run vim in terminal'
endif
let after =<< trim [CODE]
call assert_match('^E282:', v:errmsg)
call writefile(v:errors, 'Xtestout')
[CODE]
call writefile(after, 'Xafter')
let cmd = GetVimCommandCleanTerm() . ' -u Xvimrc_missing -S Xafter'
let buf = term_start(cmd, {'term_rows' : 10})
call WaitForAssert({-> assert_equal("running", term_getstatus(buf))})
call term_wait(buf)
call term_sendkeys(buf, "\n:")
call term_wait(buf)
call WaitForAssert({-> assert_match(':', term_getline(buf, 10))})
call StopVimInTerminal(buf)
call assert_equal([], readfile('Xtestout'))
call delete('Xafter')
call delete('Xtestout')
endfunc
" Test for using the $VIMINIT environment variable
func Test_VIMINIT()
let after =<< trim [CODE]
call assert_equal(1, exists('viminit_found'))
call assert_equal('yes', viminit_found)
call writefile(v:errors, 'Xtestout')
qall
[CODE]
call writefile(after, 'Xafter')
let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
call setenv('VIMINIT', 'let viminit_found="yes"')
exe "silent !" . cmd
call assert_equal([], readfile('Xtestout'))
call delete('Xtestout')
call delete('Xafter')
endfunc
" Test for using the $EXINIT environment variable
func Test_EXINIT()
let after =<< trim [CODE]
call assert_equal(1, exists('exinit_found'))
call assert_equal('yes', exinit_found)
call writefile(v:errors, 'Xtestout')
qall
[CODE]
call writefile(after, 'Xafter')
let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
call setenv('EXINIT', 'let exinit_found="yes"')
exe "silent !" . cmd
call assert_equal([], readfile('Xtestout'))
call delete('Xtestout')
call delete('Xafter')
endfunc
" Test for using the 'exrc' option
func Test_exrc()
let after =<< trim [CODE]
call assert_equal(1, &exrc)
call assert_equal(1, &secure)
call assert_equal(37, exrc_found)
call writefile(v:errors, 'Xtestout')
qall
[CODE]
call mkdir('Xdir')
call writefile(['let exrc_found=37'], 'Xdir/.exrc')
call writefile(after, 'Xdir/Xafter')
let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "cd Xdir" --cmd "set enc=utf8 exrc secure"'
exe "silent !" . cmd
call assert_equal([], readfile('Xdir/Xtestout'))
call delete('Xdir', 'rf')
endfunc
" Test for starting Vim with a non-terminal as input/output
func Test_io_not_a_terminal()
" Can't catch the output of gvim.
CheckNotGui
CheckUnix
CheckEnglish
let l = systemlist(GetVimProg() .. ' --ttyfail')
call assert_equal(['Vim: Warning: Output is not to a terminal',
\ 'Vim: Warning: Input is not from a terminal'], l)
endfunc
" Test for the "-w scriptout" argument
func Test_w_arg()
" Can't catch the output of gvim.
CheckNotGui
call writefile(["iVim Editor\<Esc>:q!\<CR>"], 'Xscriptin', 'b')
if RunVim([], [], '-s Xscriptin -w Xscriptout')
call assert_equal(["iVim Editor\e:q!\r"], readfile('Xscriptout'))
call delete('Xscriptout')
endif
call delete('Xscriptin')
" Test for failing to open the script output file. This test works only when
" the language is English.
if v:lang == "C" || v:lang =~ '^[Ee]n'
call mkdir("Xdir")
let m = system(GetVimCommand() .. " -w Xdir")
call assert_equal("Cannot open for script output: \"Xdir\"\n", m)
call delete("Xdir", 'rf')
endif
endfunc
" Test for the "-s scriptin" argument
func Test_s_arg()
" Can't catch the output of gvim.
CheckNotGui
CheckEnglish
" Test for failing to open the script input file.
let m = system(GetVimCommand() .. " -s abcxyz")
call assert_equal("Cannot open for reading: \"abcxyz\"\n", m)
call writefile([], 'Xinput')
let m = system(GetVimCommand() .. " -s Xinput -s Xinput")
call assert_equal("Attempt to open script file again: \"-s Xinput\"\n", m)
call delete('Xinput')
endfunc
" Test for the "-n" (no swap file) argument
func Test_n_arg()
let after =<< trim [CODE]
call assert_equal(0, &updatecount)
call writefile(v:errors, 'Xtestout')
qall
[CODE]
if RunVim([], after, '-n')
call assert_equal([], readfile('Xtestout'))
call delete('Xtestout')
endif
call delete('Xafter')
endfunc
" Test for the "-h" (help) argument
func Test_h_arg()
" Can't catch the output of gvim.
CheckNotGui
let l = systemlist(GetVimProg() .. ' -h')
call assert_match('^VIM - Vi IMproved', l[0])
let l = systemlist(GetVimProg() .. ' -?')
call assert_match('^VIM - Vi IMproved', l[0])
endfunc
" Test for the "-F" (farsi) argument
func Test_F_arg()
" Can't catch the output of gvim.
CheckNotGui
let l = systemlist(GetVimProg() .. ' -F')
call assert_match('^E27:', l[0])
endfunc
" Test for the "-E" (improved Ex mode) argument
func Test_E_arg()
let after =<< trim [CODE]
call assert_equal('cv', mode(1))
call writefile(v:errors, 'Xtestout')
qall
[CODE]
if RunVim([], after, '-E')
call assert_equal([], readfile('Xtestout'))
call delete('Xtestout')
endif
call delete('Xafter')
endfunc
" Test for too many edit argument errors
func Test_too_many_edit_args()
" Can't catch the output of gvim.
CheckNotGui
CheckEnglish
let l = systemlist(GetVimProg() .. ' - -')
call assert_match('^Too many edit arguments: "-"', l[1])
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -1026,6 +1026,41 @@ func Test_comment_nested()
%bw!
endfunc
" Test for a space character in 'comments' setting
func Test_comment_space()
new
setlocal comments=b:\ > fo+=ro
exe "normal i> B\nD\<C-C>ggOA\<C-C>joC"
exe "normal Go > F\nH\<C-C>kOE\<C-C>joG"
let expected =<< trim END
A
> B
C
D
> E
> F
> G
> H
END
call assert_equal(expected, getline(1, '$'))
%bw!
endfunc
" Test for the 'O' flag in 'comments'
func Test_comment_O()
new
setlocal comments=Ob:* fo+=ro
exe "normal i* B\nD\<C-C>kOA\<C-C>joC"
let expected =<< trim END
A
* B
* C
* D
END
call assert_equal(expected, getline(1, '$'))
%bw!
endfunc
" Test for 'a' and 'w' flags in 'formatoptions'
func Test_fo_a_w()
new
@ -1035,4 +1070,23 @@ func Test_fo_a_w()
%bw!
endfunc
" Test for 'j' flag in 'formatoptions'
func Test_fo_j()
new
setlocal fo+=j comments=://
call setline(1, ['i++; // comment1', ' // comment2'])
normal J
call assert_equal('i++; // comment1 comment2', getline(1))
setlocal fo-=j
call setline(1, ['i++; // comment1', ' // comment2'])
normal J
call assert_equal('i++; // comment1 // comment2', getline(1))
" Test with nested comments
setlocal fo+=j comments=n:>,n:)
call setline(1, ['i++; > ) > ) comment1', ' > ) comment2'])
normal J
call assert_equal('i++; > ) > ) comment1 comment2', getline(1))
%bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -2012,9 +2012,7 @@ endfunc
" Test for verbose messages with :try :catch, and :finally {{{1
func Test_try_catch_verbose()
" This test works only when the language is English
if v:lang != "C" && v:lang !~ '^[Ee]n'
return
endif
CheckEnglish
set verbose=14

View File

@ -760,6 +760,11 @@ func Test_viminfo_perm()
call setfperm('Xviminfo', '--x------')
call assert_fails('rviminfo Xviminfo', 'E195:')
call delete('Xviminfo')
" Try to write the viminfo to a directory
call mkdir('Xdir')
call assert_fails('wviminfo Xdir', 'E886:')
call delete('Xdir', 'rf')
endfunc
" Test for writing to an existing viminfo file merges the file marks

View File

@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
509,
/**/
508,
/**/