Patch 8.2.0482

8 views
Skip to first unread message

Bram Moolenaar

unread,
Mar 30, 2020, 1:41:17 PM3/30/20
to vim...@googlegroups.com

Patch 8.2.0482
Problem: Channel and sandbox code not sufficiently tested.
Solution: Add more tests. (Yegappan Lakshmanan, closes #5855)
Files: src/option.h, src/testdir/test_channel.vim,
src/testdir/test_clientserver.vim, src/testdir/test_cmdline.vim,
src/testdir/test_edit.vim, src/testdir/test_excmd.vim,
src/testdir/test_normal.vim, src/testdir/test_prompt_buffer.vim,
src/testdir/test_restricted.vim, src/testdir/test_smartindent.vim,
src/testdir/test_substitute.vim, src/testdir/test_terminal.vim,
src/testdir/test_textformat.vim, src/testdir/test_visual.vim


*** ../vim-8.2.0481/src/option.h 2020-02-26 16:15:31.072386953 +0100
--- src/option.h 2020-03-30 19:24:35.987073315 +0200
***************
*** 403,409 ****
EXTERN char_u *p_bo; // 'belloff'
EXTERN unsigned bo_flags;

! // values for the 'beepon' option
#define BO_ALL 0x0001
#define BO_BS 0x0002
#define BO_CRSR 0x0004
--- 403,409 ----
EXTERN char_u *p_bo; // 'belloff'
EXTERN unsigned bo_flags;

! // values for the 'belloff' option
#define BO_ALL 0x0001
#define BO_BS 0x0002
#define BO_CRSR 0x0004
*** ../vim-8.2.0481/src/testdir/test_channel.vim 2020-03-29 16:18:55.226422995 +0200
--- src/testdir/test_channel.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 251,256 ****
--- 251,257 ----
call assert_equal('got it', ch_evalexpr(newhandle, 'hello!'))

call ch_close(newhandle)
+ call assert_fails("call ch_close(newhandle)", 'E906:')
endfunc

func Test_two_channels()
***************
*** 497,502 ****
--- 498,508 ----
call ch_sendraw(job, "double this\n", {'callback': 'Ch_handler'})
call WaitForAssert({-> assert_equal("this\nAND this\n", substitute(g:Ch_reply, "\r", "", 'g'))})

+ call assert_fails("let i = ch_evalraw(job, '2 + 2', {'callback' : 'abc'})", 'E917:')
+ call assert_fails("let i = ch_evalexpr(job, '2 + 2')", 'E912:')
+ call assert_fails("let i = ch_evalraw(job, '2 + 2', {'drop' : ''})", 'E475:')
+ call assert_fails("let i = ch_evalraw(test_null_job(), '2 + 2')", 'E906:')
+
let reply = job->ch_evalraw("quit\n", {'timeout': 100})
call assert_equal("Goodbye!\n", substitute(reply, "\r", "", 'g'))
finally
***************
*** 519,524 ****
--- 525,534 ----
endfor
call assert_equal(1, found)

+ call assert_fails("call job_stop('abc')", 'E475:')
+ call assert_fails("call job_stop(job, [])", 'E474:')
+ call assert_fails("call job_stop(test_null_job())", 'E916:')
+
" Try to use the job and channel where a number is expected. This is not
" related to testing the raw pipe. This test is here just to reuse the
" already created job/channel.
***************
*** 620,625 ****
--- 630,636 ----
call Stop_g_job()
call delete('Xinput')
endtry
+ call assert_fails("echo ch_read(test_null_channel(), {'callback' : 'abc'})", 'E475:')
endfunc

func Test_nl_write_out_file()
***************
*** 1362,1370 ****
""""""""""

func Test_open_fail()
! silent! let ch = ch_open("noserver")
echo ch
let d = ch
endfunc

""""""""""
--- 1373,1395 ----
""""""""""

func Test_open_fail()
! call assert_fails("let ch = ch_open('noserver')", 'E475:')
echo ch
let d = ch
+ call assert_fails("let ch = ch_open('noserver', 10)", 'E474:')
+ call assert_fails("let ch = ch_open('localhost:-1')", 'E475:')
+ call assert_fails("let ch = ch_open('localhost:8765', {'timeout' : -1})",
+ \ 'E474:')
+ call assert_fails("let ch = ch_open('localhost:8765', {'axby' : 1})",
+ \ 'E475:')
+ call assert_fails("let ch = ch_open('localhost:8765', {'mode' : 'abc'})",
+ \ 'E475:')
+ call assert_fails("let ch = ch_open('localhost:8765', {'part' : 'out'})",
+ \ 'E475:')
+ endfunc
+
+ func Test_ch_info_fail()
+ call assert_fails("let x = ch_info(10)", 'E475:')
endfunc

""""""""""
***************
*** 1403,1408 ****
--- 1428,1437 ----
let g:Ch_call_ret = []
call assert_equal('ok', ch_evalexpr(handle, 'call-func'))
call WaitForAssert({-> assert_equal([1, 2, 3], g:Ch_call_ret)})
+
+ call assert_fails("let i = ch_evalexpr(handle, '2 + 2', {'callback' : 'abc'})", 'E917:')
+ call assert_fails("let i = ch_evalexpr(handle, '2 + 2', {'drop' : ''})", 'E475:')
+ call assert_fails("let i = ch_evalexpr(test_null_job(), '2 + 2')", 'E906:')
endfunc

func Test_call()
***************
*** 1520,1528 ****
call s:run_server('Ch_test_close_partial')
endfunc

! func Test_job_start_invalid()
call assert_fails('call job_start($x)', 'E474:')
call assert_fails('call job_start("")', 'E474:')
endfunc

func Test_job_stop_immediately()
--- 1549,1616 ----
call s:run_server('Ch_test_close_partial')
endfunc

! func Test_job_start_fails()
! " this was leaking memory
! call assert_fails("call job_start([''])", "E474:")
call assert_fails('call job_start($x)', 'E474:')
call assert_fails('call job_start("")', 'E474:')
+ call assert_fails('call job_start("ls", {"out_io" : "abc"})', 'E475:')
+ call assert_fails('call job_start("ls", {"err_io" : "abc"})', 'E475:')
+ call assert_fails('call job_start("ls", [])', 'E715:')
+ call assert_fails("call job_start('ls', {'in_top' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'in_bot' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'channel' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'callback' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'out_cb' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'err_cb' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'close_cb' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'exit_cb' : -1})", 'E475:')
+ call assert_fails("call job_start('ls', {'term_name' : []})", 'E475:')
+ call assert_fails("call job_start('ls', {'term_finish' : 'run'})", 'E475:')
+ call assert_fails("call job_start('ls', {'term_api' : []})", 'E475:')
+ call assert_fails("call job_start('ls', {'stoponexit' : []})", 'E475:')
+ call assert_fails("call job_start('ls', {'in_io' : 'file'})", 'E920:')
+ call assert_fails("call job_start('ls', {'out_io' : 'file'})", 'E920:')
+ call assert_fails("call job_start('ls', {'err_io' : 'file'})", 'E920:')
+ call assert_fails("call job_start('ls', {'in_mode' : 'abc'})", 'E475:')
+ call assert_fails("call job_start('ls', {'out_mode' : 'abc'})", 'E475:')
+ call assert_fails("call job_start('ls', {'err_mode' : 'abc'})", 'E475:')
+ call assert_fails("call job_start('ls',
+ \ {'in_io' : 'buffer', 'in_buf' : 99999})", 'E86:')
+ call assert_fails("call job_start('ls',
+ \ {'out_io' : 'buffer', 'out_buf' : 99999})", 'E86:')
+ call assert_fails("call job_start('ls',
+ \ {'err_io' : 'buffer', 'err_buf' : 99999})", 'E86:')
+
+ call assert_fails("call job_start('ls',
+ \ {'in_io' : 'buffer', 'in_buf' : -1})", 'E475:')
+ call assert_fails("call job_start('ls',
+ \ {'out_io' : 'buffer', 'out_buf' : -1})", 'E475:')
+ call assert_fails("call job_start('ls',
+ \ {'err_io' : 'buffer', 'err_buf' : -1})", 'E475:')
+
+ set nomodifiable
+ call assert_fails("call job_start('cmd /c dir',
+ \ {'out_io' : 'buffer', 'out_buf' :" .. bufnr() .. "})", 'E21:')
+ call assert_fails("call job_start('cmd /c dir',
+ \ {'err_io' : 'buffer', 'err_buf' :" .. bufnr() .. "})", 'E21:')
+ set modifiable
+
+ call assert_fails("call job_start('ls', {'in_io' : 'buffer'})", 'E915:')
+
+ edit! XXX
+ let bnum = bufnr()
+ enew
+ call assert_fails("call job_start('ls',
+ \ {'in_io' : 'buffer', 'in_buf' : bnum})", 'E918:')
+
+ " Empty job tests
+ " This was crashing on MS-Windows.
+ call assert_fails('let job = job_start([""])', 'E474:')
+ call assert_fails('let job = job_start([" "])', 'E474:')
+ call assert_fails('let job = job_start("")', 'E474:')
+ call assert_fails('let job = job_start(" ")', 'E474:')
+ %bw!
endfunc

func Test_job_stop_immediately()
***************
*** 1986,1999 ****
endtry
endfunc

- func Test_empty_job()
- " This was crashing on MS-Windows.
- call assert_fails('let job = job_start([""])', 'E474:')
- call assert_fails('let job = job_start([" "])', 'E474:')
- call assert_fails('let job = job_start("")', 'E474:')
- call assert_fails('let job = job_start(" ")', 'E474:')
- endfunc
-
" Do this last, it stops any channel log.
func Test_zz_ch_log()
call ch_logfile('Xlog', 'w')
--- 2074,2079 ----
***************
*** 2003,2016 ****
let text = readfile('Xlog')
call assert_match("hello there", text[1])
call assert_match("%s%s", text[2])
call delete('Xlog')
endfunc

- func Test_job_start_fails()
- " this was leaking memory
- call assert_fails("call job_start([''])", "E474:")
- endfunc
-
func Test_issue_5150()
if has('win32')
let cmd = 'cmd /c pause'
--- 2083,2094 ----
let text = readfile('Xlog')
call assert_match("hello there", text[1])
call assert_match("%s%s", text[2])
+ call mkdir("Xdir1")
+ call assert_fails("call ch_logfile('Xdir1')", 'E484:')
+ cal delete("Xdir1", 'd')
call delete('Xlog')
endfunc

func Test_issue_5150()
if has('win32')
let cmd = 'cmd /c pause'
***************
*** 2048,2051 ****
--- 2126,2207 ----
call assert_equal(0, job_info(job).exitval)
endfunc

+ func Test_ch_getbufnr()
+ let ch = test_null_channel()
+ call assert_equal(-1, ch_getbufnr(ch, 'in'))
+ call assert_equal(-1, ch_getbufnr(ch, 'out'))
+ call assert_equal(-1, ch_getbufnr(ch, 'err'))
+ call assert_equal(-1, ch_getbufnr(ch, ''))
+ endfunc
+
+ " Test for unsupported options passed to ch_status()
+ func Test_invalid_job_chan_options()
+ let ch = test_null_channel()
+ let invalid_opts = [
+ \ {'in_io' : 'null'},
+ \ {'out_io' : 'null'},
+ \ {'err_io' : 'null'},
+ \ {'mode' : 'json'},
+ \ {'out_mode' : 'json'},
+ \ {'err_mode' : 'json'},
+ \ {'noblock' : 1},
+ \ {'in_name' : '/a/b'},
+ \ {'pty' : 1},
+ \ {'in_buf' : 1},
+ \ {'out_buf' : 1},
+ \ {'err_buf' : 1},
+ \ {'out_modifiable' : 1},
+ \ {'err_modifiable' : 1},
+ \ {'out_msg' : 1},
+ \ {'err_msg' : 1},
+ \ {'in_top' : 1},
+ \ {'in_bot' : 1},
+ \ {'channel' : ch},
+ \ {'callback' : ''},
+ \ {'out_cb' : ''},
+ \ {'err_cb' : ''},
+ \ {'close_cb' : ''},
+ \ {'exit_cb' : ''},
+ \ {'term_opencmd' : ''},
+ \ {'eof_chars' : ''},
+ \ {'term_rows' : 10},
+ \ {'term_cols' : 10},
+ \ {'vertical' : 0},
+ \ {'curwin' : 1},
+ \ {'bufnr' : 1},
+ \ {'hidden' : 0},
+ \ {'norestore' : 0},
+ \ {'term_kill' : 'kill'},
+ \ {'tty_type' : ''},
+ \ {'term_highlight' : ''},
+ \ {'env' : {}},
+ \ {'cwd' : ''},
+ \ {'timeout' : 0},
+ \ {'out_timeout' : 0},
+ \ {'err_timeout' : 0},
+ \ {'id' : 0},
+ \ {'stoponexit' : ''},
+ \ {'block_write' : 1}
+ \ ]
+ if has('gui')
+ call add(invalid_opts, {'ansi_colors' : []})
+ endif
+
+ for opt in invalid_opts
+ call assert_fails("let x = ch_status(ch, opt)", 'E475:')
+ endfor
+ endfunc
+
+ " Test for passing the command and the arguments as List on MS-Windows
+ func Test_job_with_list_args()
+ CheckMSWindows
+
+ enew!
+ let bnum = bufnr()
+ let job = job_start(['cmd', '/c', 'echo', 'Hello', 'World'], {'out_io' : 'buffer', 'out_buf' : bnum})
+ call WaitForAssert({-> assert_equal("dead", job_status(job))})
+ call assert_equal('Hello World', getline(1))
+ %bw!
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_clientserver.vim 2020-03-25 22:23:41.894363634 +0100
--- src/testdir/test_clientserver.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 39,44 ****
--- 39,46 ----
call remote_send(name, ":let testvar = 'yes'\<CR>")
call WaitFor('remote_expr("' . name . '", "exists(\"testvar\") ? testvar : \"\"", "", 1) == "yes"')
call assert_equal('yes', remote_expr(name, "testvar", "", 2))
+ call assert_fails("let x=remote_expr(name, '2+x')", 'E449:')
+ call assert_fails("let x=remote_expr('[], '2+2')", 'E116:')

if has('unix') && has('gui') && !has('gui_running')
" Running in a terminal and the GUI is available: Tell the server to open
***************
*** 66,71 ****
--- 68,74 ----
eval 'MYSELF'->remote_startserver()
" May get MYSELF1 when running the test again.
call assert_match('MYSELF', v:servername)
+ call assert_fails("call remote_startserver('MYSELF')", 'E941:')
endif
let g:testvar = 'myself'
call assert_equal('myself', remote_expr(v:servername, 'testvar'))
***************
*** 100,105 ****
--- 103,109 ----
endtry

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
*** ../vim-8.2.0481/src/testdir/test_cmdline.vim 2020-03-25 22:23:41.898363595 +0100
--- src/testdir/test_cmdline.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 1459,1462 ****
--- 1459,1471 ----
call assert_fails('call feedkeys("q:\<F1>\<CR>", "xt")', 'E11:')
endfunc

+ " Close the Cmd-line window in insert mode using CTRL-C
+ func Test_cmdwin_insert_mode_close()
+ %bw!
+ let s = ''
+ exe "normal q:a\<C-C>let s='Hello'\<CR>"
+ call assert_equal('Hello', s)
+ call assert_equal(1, winnr('$'))
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_edit.vim 2020-03-22 14:08:27.321399669 +0100
--- src/testdir/test_edit.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 1542,1549 ****
close!
endfunc

! " Test for inserting text at the beginning of a line
! func Test_insert_before_first_nonblank()
new
call setline(1, ' ')
normal! Ia
--- 1542,1549 ----
close!
endfunc

! " Test for inserting text in a line with only spaces ('H' flag in 'cpoptions')
! func Test_edit_cpo_H()
new
call setline(1, ' ')
normal! Ia
***************
*** 1556,1559 ****
--- 1556,1578 ----
close!
endfunc

+ " Test for inserting tab in virtual replace mode ('L' flag in 'cpoptions')
+ func Test_edit_cpo_L()
+ new
+ call setline(1, 'abcdefghijklmnopqr')
+ exe "normal 0gR\<Tab>"
+ call assert_equal("\<Tab>ijklmnopqr", getline(1))
+ set cpo+=L
+ set list
+ call setline(1, 'abcdefghijklmnopqr')
+ exe "normal 0gR\<Tab>"
+ call assert_equal("\<Tab>cdefghijklmnopqr", getline(1))
+ set nolist
+ call setline(1, 'abcdefghijklmnopqr')
+ exe "normal 0gR\<Tab>"
+ call assert_equal("\<Tab>ijklmnopqr", getline(1))
+ set cpo-=L
+ %bw!
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_excmd.vim 2020-03-28 21:48:51.238858476 +0100
--- src/testdir/test_excmd.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 409,412 ****
--- 409,477 ----
close!
endfunc

+ " Test for commands that are blocked in a sandbox
+ func Sandbox_tests()
+ call assert_fails("call histadd(':', 'ls')", 'E48:')
+ call assert_fails("call mkdir('Xdir')", 'E48:')
+ call assert_fails("call rename('a', 'b')", 'E48:')
+ call assert_fails("call setbufvar(1, 'myvar', 1)", 'E48:')
+ call assert_fails("call settabvar(1, 'myvar', 1)", 'E48:')
+ call assert_fails("call settabwinvar(1, 1, 'myvar', 1)", 'E48:')
+ call assert_fails("call setwinvar(1, 'myvar', 1)", 'E48:')
+ call assert_fails("call timer_start(100, '')", 'E48:')
+ if has('channel')
+ call assert_fails("call prompt_setcallback(1, '')", 'E48:')
+ call assert_fails("call prompt_setinterrupt(1, '')", 'E48:')
+ call assert_fails("call prompt_setprompt(1, '')", 'E48:')
+ endif
+ call assert_fails("let $TESTVAR=1", 'E48:')
+ call assert_fails("call feedkeys('ivim')", 'E48:')
+ call assert_fails("source! Xfile", 'E48:')
+ call assert_fails("call delete('Xfile')", 'E48:')
+ call assert_fails("call writefile([], 'Xfile')", 'E48:')
+ call assert_fails('!ls', 'E48:')
+ call assert_fails('shell', 'E48:')
+ call assert_fails('stop', 'E48:')
+ call assert_fails('exe "normal \<C-Z>"', 'E48:')
+ set insertmode
+ call assert_fails('call feedkeys("\<C-Z>", "xt")', 'E48:')
+ set insertmode&
+ call assert_fails('suspend', 'E48:')
+ call assert_fails('call system("ls")', 'E48:')
+ call assert_fails('call systemlist("ls")', 'E48:')
+ if has('clientserver')
+ call assert_fails('let s=remote_expr("gvim", "2+2")', 'E48:')
+ if !has('win32')
+ " remote_foreground() doesn't thrown an error message on MS-Windows
+ call assert_fails('call remote_foreground("gvim")', 'E48:')
+ endif
+ call assert_fails('let s=remote_peek("gvim")', 'E48:')
+ call assert_fails('let s=remote_read("gvim")', 'E48:')
+ call assert_fails('let s=remote_send("gvim", "abc")', 'E48:')
+ call assert_fails('let s=server2client("gvim", "abc")', 'E48:')
+ endif
+ if has('terminal')
+ call assert_fails('terminal', 'E48:')
+ call assert_fails('call term_start("vim")', 'E48:')
+ call assert_fails('call term_dumpwrite(1, "Xfile")', 'E48:')
+ endif
+ if has('channel')
+ call assert_fails("call ch_logfile('chlog')", 'E48:')
+ call assert_fails("call ch_open('localhost:8765')", 'E48:')
+ endif
+ if has('job')
+ call assert_fails("call job_start('vim')", 'E48:')
+ endif
+ if has('unix') && has('libcall')
+ call assert_fails("echo libcall('libc.so', 'getenv', 'HOME')", 'E48:')
+ endif
+ if has('unix')
+ call assert_fails('cd `pwd`', 'E48:')
+ endif
+ endfunc
+
+ func Test_sandbox()
+ sandbox call Sandbox_tests()
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_normal.vim 2020-03-22 14:08:27.321399669 +0100
--- src/testdir/test_normal.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 2,7 ****
--- 2,8 ----

source shared.vim
source check.vim
+ source view_util.vim

func Setup_NewWindow()
10new
***************
*** 2941,2946 ****
--- 2942,2969 ----
close!
endfunc

+ " Test for displaying dollar when changing text ('$' flag in 'cpoptions')
+ func Test_normal_cpo_dollar()
+ new
+ let g:Line = ''
+ func SaveFirstLine()
+ let g:Line = Screenline(1)
+ return ''
+ endfunc
+ inoremap <expr> <buffer> <F2> SaveFirstLine()
+ call test_override('redraw_flag', 1)
+ set cpo+=$
+ call setline(1, 'one two three')
+ redraw!
+ exe "normal c2w\<F2>vim"
+ call assert_equal('one tw$ three', g:Line)
+ call assert_equal('vim three', getline(1))
+ set cpo-=$
+ call test_override('ALL', 0)
+ delfunc SaveFirstLine
+ %bw!
+ endfunc
+
" Test for using : to run a multi-line Ex command in operator pending mode
func Test_normal_yank_with_excmd()
new
*** ../vim-8.2.0481/src/testdir/test_prompt_buffer.vim 2020-03-10 07:48:06.575619533 +0100
--- src/testdir/test_prompt_buffer.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 121,126 ****
--- 121,131 ----
call feedkeys("\<CR>\<C-C>", 'xt')
call assert_true(v:true)

+ call assert_fails("call prompt_setcallback(bufnr(), [])", 'E921:')
+ call assert_equal(0, prompt_setcallback({}, ''))
+ call assert_fails("call prompt_setinterrupt(bufnr(), [])", 'E921:')
+ call assert_equal(0, prompt_setinterrupt({}, ''))
+
delfunc MyPromptCallback
bwipe!
endfunc
*** ../vim-8.2.0481/src/testdir/test_restricted.vim 2020-03-26 14:11:52.903001238 +0100
--- src/testdir/test_restricted.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 78,84 ****
call assert_fails("call job_start('vim')", 'E145:')
endif

! if has('libcall')
call assert_fails("echo libcall('libc.so', 'getenv', 'HOME')", 'E145:')
endif
call assert_fails("call rename('a', 'b')", 'E145:')
--- 78,84 ----
call assert_fails("call job_start('vim')", 'E145:')
endif

! if has('unix') && has('libcall')
call assert_fails("echo libcall('libc.so', 'getenv', 'HOME')", 'E145:')
endif
call assert_fails("call rename('a', 'b')", 'E145:')
***************
*** 87,95 ****
call assert_fails('!ls', 'E145:')
call assert_fails('shell', 'E145:')
call assert_fails('stop', 'E145:')
call assert_fails('suspend', 'E145:')
! call assert_fails('call system("vim")', 'E145:')
! call assert_fails('call systemlist("vim")', 'E145:')
if has('unix')
call assert_fails('cd `pwd`', 'E145:')
endif
--- 87,99 ----
call assert_fails('!ls', 'E145:')
call assert_fails('shell', 'E145:')
call assert_fails('stop', 'E145:')
+ call assert_fails('exe "normal \<C-Z>"', 'E145:')
+ set insertmode
+ call assert_fails('call feedkeys("\<C-Z>", "xt")', 'E145:')
+ set insertmode&
call assert_fails('suspend', 'E145:')
! call assert_fails('call system("ls")', 'E145:')
! call assert_fails('call systemlist("ls")', 'E145:')
if has('unix')
call assert_fails('cd `pwd`', 'E145:')
endif
*** ../vim-8.2.0481/src/testdir/test_smartindent.vim 2020-03-06 20:35:46.120669845 +0100
--- src/testdir/test_smartindent.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 21,29 ****
func Test_smartindent_has_no_effect()
new
exe "normal! i\<Tab>one\<Esc>"
! set noautoindent
! set smartindent
! set indentexpr=
exe "normal! Gotwo\<Esc>"
call assert_equal("\ttwo", getline("$"))

--- 21,27 ----
func Test_smartindent_has_no_effect()
new
exe "normal! i\<Tab>one\<Esc>"
! setlocal noautoindent smartindent indentexpr=
exe "normal! Gotwo\<Esc>"
call assert_equal("\ttwo", getline("$"))

***************
*** 32,47 ****
call assert_equal("three", getline("$"))

delfunction! MyIndent
- set autoindent&
- set smartindent&
- set indentexpr&
bwipe!
endfunc

" Test for inserting '{' and '} with smartindent
func Test_smartindent_braces()
new
! set smartindent shiftwidth=4
call setline(1, [' if (a)', "\tif (b)", "\t return 1"])
normal 2ggO{
normal 3ggA {
--- 30,42 ----
call assert_equal("three", getline("$"))

delfunction! MyIndent
bwipe!
endfunc

" Test for inserting '{' and '} with smartindent
func Test_smartindent_braces()
new
! setlocal smartindent shiftwidth=4
call setline(1, [' if (a)', "\tif (b)", "\t return 1"])
normal 2ggO{
normal 3ggA {
***************
*** 57,63 ****
\ "\t}",
\ ' }'
\ ], getline(1, '$'))
! set si& sw& ai&
close!
endfunc

--- 52,113 ----
\ "\t}",
\ ' }'
\ ], getline(1, '$'))
! close!
! endfunc
!
! " Test for adding a new line before and after comments with smartindent
! func Test_si_add_line_around_comment()
! new
! setlocal smartindent shiftwidth=4
! call setline(1, [' A', '# comment1', '# comment2'])
! exe "normal GoC\<Esc>2GOB"
! call assert_equal([' A', ' B', '# comment1', '# comment2', ' C'],
! \ getline(1, '$'))
! close!
! endfunc
!
! " After a C style comment, indent for a following line should line up with the
! " line containing the start of the comment.
! func Test_si_indent_after_c_comment()
! new
! setlocal smartindent shiftwidth=4 fo+=ro
! exe "normal i\<C-t>/*\ncomment\n/\n#define FOOBAR\n75\<Esc>ggOabc"
! normal 3jOcont
! call assert_equal([' abc', ' /*', ' * comment', ' * cont',
! \ ' */', '#define FOOBAR', ' 75'], getline(1, '$'))
! close!
! endfunc
!
! " Test for indenting a statement after a if condition split across lines
! func Test_si_if_cond_split_across_lines()
! new
! setlocal smartindent shiftwidth=4
! exe "normal i\<C-t>if (cond1 &&\n\<C-t>cond2) {\ni = 10;\n}"
! call assert_equal([' if (cond1 &&', "\t cond2) {", "\ti = 10;",
! \ ' }'], getline(1, '$'))
! close!
! endfunc
!
! " Test for inserting lines before and after a one line comment
! func Test_si_one_line_comment()
! new
! setlocal smartindent shiftwidth=4
! exe "normal i\<C-t>abc;\n\<C-t>/* comment */"
! normal oi = 10;
! normal kOj = 1;
! call assert_equal([' abc;', "\tj = 1;", "\t/* comment */", "\ti = 10;"],
! \ getline(1, '$'))
! close!
! endfunc
!
! " Test for smartindent with a comment continued across multiple lines
! func Test_si_comment_line_continuation()
! new
! setlocal smartindent shiftwidth=4
! call setline(1, ['# com1', '# com2 \', ' contd', '# com3', ' xyz'])
! normal ggOabc
! call assert_equal([' abc', '# com1', '# com2 \', ' contd', '# com3',
! \ ' xyz'], getline(1, '$'))
close!
endfunc

*** ../vim-8.2.0481/src/testdir/test_substitute.vim 2020-03-25 22:23:41.898363595 +0100
--- src/testdir/test_substitute.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 840,843 ****
--- 840,847 ----
call delete('Xresult')
endfunc

+ func Test_substitute()
+ call assert_equal('a1a2a3a', substitute('123', '\zs', 'a', 'g'))
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_terminal.vim 2020-03-29 17:50:44.675192346 +0200
--- src/testdir/test_terminal.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 1001,1006 ****
--- 1001,1028 ----
call assert_fails(cmd, 'E474')
let cmd = "call term_start(0, {'curwin' : 1, 'term_finish' : 'close'})"
call assert_fails(cmd, 'E474')
+ let cmd = "call term_start('', {'term_name' : []})"
+ call assert_fails(cmd, 'E475')
+ let cmd = "call term_start('', {'term_finish' : 'axby'})"
+ call assert_fails(cmd, 'E475')
+ let cmd = "call term_start('', {'eof_chars' : []})"
+ call assert_fails(cmd, 'E475:')
+ let cmd = "call term_start('', {'term_kill' : []})"
+ call assert_fails(cmd, 'E475:')
+ let cmd = "call term_start('', {'tty_type' : []})"
+ call assert_fails(cmd, 'E475:')
+ let cmd = "call term_start('', {'tty_type' : 'abc'})"
+ call assert_fails(cmd, 'E475:')
+ let cmd = "call term_start('', {'term_highlight' : []})"
+ call assert_fails(cmd, 'E475:')
+ if has('gui')
+ let cmd = "call term_start('', {'ansi_colors' : 'abc'})"
+ call assert_fails(cmd, 'E475:')
+ let cmd = "call term_start('', {'ansi_colors' : [[]]})"
+ call assert_fails(cmd, 'E730:')
+ let cmd = "call term_start('', {'ansi_colors' : repeat(['blue'], 18)})"
+ call assert_fails(cmd, 'E475:')
+ endif
endfunc

func Test_terminal_response_to_control_sequence()
***************
*** 1285,1290 ****
--- 1307,1313 ----
call assert_equal(1, winnr('$'))
call term_dumpdiff('dumps/Test_popup_command_01.dump', 'dumps/Test_popup_command_02.dump', {'curwin': 1})
call assert_equal(1, winnr('$'))
+ call assert_fails("call term_dumpdiff('dumps/Test_popup_command_01.dump', 'dumps/Test_popup_command_02.dump', {'bufnr': -1})", 'E475:')
bwipe

set laststatus&
***************
*** 1486,1491 ****
--- 1509,1516 ----
call assert_equal(['hello', 123], g:called_arg2)
call StopVimInTerminal(buf)

+ call assert_fails("call term_start('ls', {'term_api' : []})", 'E475:')
+
unlet! g:called_bufnum2
unlet! g:called_arg2

***************
*** 2552,2554 ****
--- 2577,2581 ----
exe g:buf0 .. 'bwipe!'
set hidden&
endfunc
+
+ " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_textformat.vim 2020-02-02 15:32:09.967762406 +0100
--- src/testdir/test_textformat.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 951,958 ****
bwipe!
endfunc

! func Test_substitute()
! call assert_equal('a1a2a3a', substitute('123', '\zs', 'a', 'g'))
endfunc

" vim: shiftwidth=2 sts=2 expandtab
--- 951,1038 ----
bwipe!
endfunc

! " Test for the 'f' flag in 'comments' (only the first line has the comment
! " string)
! func Test_firstline_comment()
! new
! setlocal comments=f:- fo+=ro
! exe "normal i- B\nD\<C-C>ggoC\<C-C>ggOA\<C-C>"
! call assert_equal(['A', '- B', ' C', ' D'], getline(1, '$'))
! %d
! setlocal comments=:-
! exe "normal i- B\nD\<C-C>ggoC\<C-C>ggOA\<C-C>"
! call assert_equal(['- A', '- B', '- C', '- D'], getline(1, '$'))
! %bw!
! endfunc
!
! " Test for the 'r' flag in 'comments' (right align comment)
! func Test_comment_rightalign()
! new
! setlocal comments=sr:/***,m:**,ex-2:******/ fo+=ro
! exe "normal i=\<C-C>o\t /***\nD\n/"
! exe "normal 2GOA\<C-C>joB\<C-C>jOC\<C-C>joE\<C-C>GOF\<C-C>joG"
! let expected =<< trim END
! =
! A
! /***
! ** B
! ** C
! ** D
! ** E
! ** F
! ******/
! G
! END
! call assert_equal(expected, getline(1, '$'))
! %bw!
! endfunc
!
! " Test for the 'b' flag in 'comments'
! func Test_comment_blank()
! new
! setlocal comments=b:* fo+=ro
! exe "normal i* E\nF\n\<BS>G\nH\<C-C>ggOC\<C-C>O\<BS>B\<C-C>OA\<C-C>2joD"
! let expected =<< trim END
! A
! *B
! * C
! * D
! * E
! * F
! *G
! H
! END
! call assert_equal(expected, getline(1, '$'))
! %bw!
! endfunc
!
! " Test for the 'n' flag in comments
! func Test_comment_nested()
! new
! setlocal comments=n:> fo+=ro
! exe "normal i> B\nD\<C-C>ggOA\<C-C>joC\<C-C>Go\<BS>>>> F\nH"
! exe "normal 5GOE\<C-C>6GoG"
! let expected =<< trim END
! > A
! > B
! > C
! > D
! >>>> E
! >>>> F
! >>>> G
! >>>> H
! END
! call assert_equal(expected, getline(1, '$'))
! %bw!
! endfunc
!
! " Test for 'a' and 'w' flags in 'formatoptions'
! func Test_fo_a_w()
! new
! setlocal fo+=aw tw=10
! call feedkeys("iabc abc a abc\<Esc>k0weade", 'xt')
! call assert_equal(['abc abcde ', 'a abc'], getline(1, '$'))
! %bw!
endfunc

" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0481/src/testdir/test_visual.vim 2020-03-22 14:08:27.321399669 +0100
--- src/testdir/test_visual.vim 2020-03-30 19:24:35.987073315 +0200
***************
*** 267,272 ****
--- 267,281 ----
call assert_equal(['abcd',
\ 'efgh',
\ 'ijkl'], getline(1, '$'))
+
+ " Test for truncating spaces in a newly added line using 'autoindent' if
+ " characters are not added to that line.
+ %d_
+ call setline(1, [' app', ' bee', ' cat'])
+ setlocal autoindent
+ exe "normal gg$gRt\n\nr"
+ call assert_equal([' apt', '', ' rat'], getline(1, '$'))
+
" clean up
%d_
set bs&vim
*** ../vim-8.2.0481/src/version.c 2020-03-30 19:13:24.977239954 +0200
--- src/version.c 2020-03-30 19:28:42.049971414 +0200
***************
*** 740,741 ****
--- 740,743 ----
{ /* Add new patch number below this line */
+ /**/
+ 482,
/**/

--
TALL KNIGHT: Firstly. You must get us another shrubbery!
OTHER KNIGHTS: More shrubberies! More shrubberies for the ex-Knights of Ni!
ARTHUR: Not another shrubbery -
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages