Patch 8.1.0820
Problem: Test for sending large data over channel sometimes fails.
Solution: Handle that the job may have finished early. Also fix that file
changed test doesn't work in the GUI and reduce flakyness. (Ozaki
Kiichi, closes #3861)
Files: src/testdir/test_channel.vim, src/testdir/test_filechanged.vim
*** ../vim-8.1.0819/src/testdir/test_channel.vim 2019-01-24
23:11:44.631650199 +0100
--- src/testdir/test_channel.vim 2019-01-25 20:58:53.293743070 +0100
***************
*** 879,897 ****
func Test_pipe_err_to_buffer_name()
call Run_test_pipe_err_to_buffer(1, 0, 1)
endfunc
!
func Test_pipe_err_to_buffer_nr()
call Run_test_pipe_err_to_buffer(0, 0, 1)
endfunc
!
func Test_pipe_err_to_buffer_name_nomod()
call Run_test_pipe_err_to_buffer(1, 1, 1)
endfunc
!
func Test_pipe_err_to_buffer_name_nomsg()
call Run_test_pipe_err_to_buffer(1, 0, 0)
endfunc
!
func Test_pipe_both_to_buffer()
if !has('job')
return
--- 879,897 ----
func Test_pipe_err_to_buffer_name()
call Run_test_pipe_err_to_buffer(1, 0, 1)
endfunc
!
func Test_pipe_err_to_buffer_nr()
call Run_test_pipe_err_to_buffer(0, 0, 1)
endfunc
!
func Test_pipe_err_to_buffer_name_nomod()
call Run_test_pipe_err_to_buffer(1, 1, 1)
endfunc
!
func Test_pipe_err_to_buffer_name_nomsg()
call Run_test_pipe_err_to_buffer(1, 0, 0)
endfunc
!
func Test_pipe_both_to_buffer()
if !has('job')
return
***************
*** 966,980 ****
let options.in_top = 2
let options.in_bot = 4
endif
! let g:job = job_start('sort', options)
if !a:use_buffer
! call assert_equal("run", job_status(g:job))
! call ch_sendraw(g:job, "ccc\naaa\nddd\nbbb\neee\n")
! call ch_close_in(g:job)
endif
! call WaitForAssert({-> assert_equal("dead", job_status(g:job))})
sp sortout
call WaitFor('line("$") > 3')
--- 966,980 ----
let options.in_top = 2
let options.in_bot = 4
endif
! let job = job_start('sort', options)
if !a:use_buffer
! call assert_equal("run", job_status(job))
! call ch_sendraw(job, "ccc\naaa\nddd\nbbb\neee\n")
! call ch_close_in(job)
endif
! call WaitForAssert({-> assert_equal("dead", job_status(job))})
sp sortout
call WaitFor('line("$") > 3')
***************
*** 985,992 ****
call assert_equal(['aaa', 'bbb', 'ddd'], getline(2, 4))
endif
! call job_stop(g:job)
! unlet g:job
if a:use_buffer
bwipe! sortin
endif
--- 985,991 ----
call assert_equal(['aaa', 'bbb', 'ddd'], getline(2, 4))
endif
! call job_stop(job)
if a:use_buffer
bwipe! sortin
endif
***************
*** 1186,1192 ****
split testout
let job = job_start([s:python, '-c',
\ 'import sys; [sys.stdout.write(".") and sys.stdout.flush() for _ in
range(10000)]'], options)
! call assert_equal("run", job_status(job))
call WaitFor('len(join(getline(1, "$"), "")) >= 10000')
try
let totlen = 0
--- 1185,1192 ----
split testout
let job = job_start([s:python, '-c',
\ 'import sys; [sys.stdout.write(".") and sys.stdout.flush() for _ in
range(10000)]'], options)
! " the job may be done quickly, also accept "dead"
! call assert_match('^\%(dead\|run\)$', job_status(job))
call WaitFor('len(join(getline(1, "$"), "")) >= 10000')
try
let totlen = 0
***************
*** 1247,1255 ****
endfunc
let job = job_start(s:python . " test_channel_pipe.py",
\ {'out_cb': dict.outHandler,
! \ 'out_mode': 'json',
! \ 'err_cb': dict.errHandler,
! \ 'err_mode': 'json'})
call assert_equal("run", job_status(job))
try
let g:Ch_outmsg = ''
--- 1247,1255 ----
endfunc
let job = job_start(s:python . " test_channel_pipe.py",
\ {'out_cb': dict.outHandler,
! \ 'out_mode': 'json',
! \ 'err_cb': dict.errHandler,
! \ 'err_mode': 'json'})
call assert_equal("run", job_status(job))
try
let g:Ch_outmsg = ''
***************
*** 1290,1297 ****
endfunc
let job = job_start(s:python . " test_channel_pipe.py quit now",
\ {'out_cb': 'OutHandler',
! \ 'close_cb': 'CloseHandler'})
! call assert_equal("run", job_status(job))
try
call WaitForAssert({-> assert_equal('quit', g:Ch_msg1)})
call WaitForAssert({-> assert_equal(2, g:Ch_closemsg)})
--- 1290,1298 ----
endfunc
let job = job_start(s:python . " test_channel_pipe.py quit now",
\ {'out_cb': 'OutHandler',
! \ 'close_cb': 'CloseHandler'})
! " the job may be done quickly, also accept "dead"
! call assert_match('^\%(dead\|run\)$', job_status(job))
try
call WaitForAssert({-> assert_equal('quit', g:Ch_msg1)})
call WaitForAssert({-> assert_equal(2, g:Ch_closemsg)})
***************
*** 1314,1320 ****
endfunc
let job = job_start(s:python . " test_channel_pipe.py quit now",
\ {'close_cb': 'CloseHandler'})
! call assert_equal("run", job_status(job))
try
call WaitForAssert({-> assert_equal('quit', g:Ch_received)})
finally
--- 1315,1322 ----
endfunc
let job = job_start(s:python . " test_channel_pipe.py quit now",
\ {'close_cb': 'CloseHandler'})
! " the job may be done quickly, also accept "dead"
! call assert_match('^\%(dead\|run\)$', job_status(job))
try
call WaitForAssert({-> assert_equal('quit', g:Ch_received)})
finally
***************
*** 1338,1344 ****
endfunc
let job = job_start(s:python . " test_channel_pipe.py incomplete",
\ {'close_cb': 'CloseHandler'})
! call assert_equal("run", job_status(job))
try
call WaitForAssert({-> assert_equal('incomplete', g:Ch_received)})
finally
--- 1340,1347 ----
endfunc
let job = job_start(s:python . " test_channel_pipe.py incomplete",
\ {'close_cb': 'CloseHandler'})
! " the job may be done quickly, also accept "dead"
! call assert_match('^\%(dead\|run\)$', job_status(job))
try
call WaitForAssert({-> assert_equal('incomplete', g:Ch_received)})
finally
***************
*** 1354,1363 ****
call ch_log('Test_out_cb_lambda()')
let job = job_start(s:python . " test_channel_pipe.py",
! \ {'out_cb': {ch, msg -> execute("let g:Ch_outmsg = 'lambda: ' . msg")},
! \ 'out_mode': 'json',
! \ 'err_cb': {ch, msg -> execute(":let g:Ch_errmsg = 'lambda: ' . msg")},
! \ 'err_mode': 'json'})
call assert_equal("run", job_status(job))
try
let g:Ch_outmsg = ''
--- 1357,1366 ----
call ch_log('Test_out_cb_lambda()')
let job = job_start(s:python . " test_channel_pipe.py",
! \ {'out_cb': {ch, msg -> execute("let g:Ch_outmsg = 'lambda: ' .
msg")},
! \ 'out_mode': 'json',
! \ 'err_cb': {ch, msg -> execute(":let g:Ch_errmsg = 'lambda: ' .
msg")},
! \ 'err_mode': 'json'})
call assert_equal("run", job_status(job))
try
let g:Ch_outmsg = ''
***************
*** 1385,1398 ****
let self.ret['exit_cb'] = job_status(a:job)
endfunc
! let g:job = job_start(has('win32') ? 'cmd /c echo:' : 'echo', {
! \ 'close_cb': g:retdict.close_cb,
! \ 'exit_cb': g:retdict.exit_cb,
! \ })
! call assert_equal('run', job_status(g:job))
! unlet g:job
call WaitForAssert({-> assert_equal(2, len(g:retdict.ret))})
! call assert_match('^\%(dead\|run\)', g:retdict.ret['close_cb'])
call assert_equal('dead', g:retdict.ret['exit_cb'])
unlet g:retdict
endfunc
--- 1388,1400 ----
let self.ret['exit_cb'] = job_status(a:job)
endfunc
! let job = job_start([&shell, &shellcmdflag, 'echo'],
! \ {'close_cb': g:retdict.close_cb,
! \ 'exit_cb': g:retdict.exit_cb})
! " the job may be done quickly, also accept "dead"
! call assert_match('^\%(dead\|run\)$', job_status(job))
call WaitForAssert({-> assert_equal(2, len(g:retdict.ret))})
! call assert_match('^\%(dead\|run\)$', g:retdict.ret['close_cb'])
call assert_equal('dead', g:retdict.ret['exit_cb'])
unlet g:retdict
endfunc
***************
*** 1415,1421 ****
let g:wipe_buf = bufnr('')
let job = job_start(has('win32') ? 'cmd /c echo:' : ['true'],
! \ {'exit_cb': 'ExitCbWipe'})
let timer = timer_start(300, {-> feedkeys("\<Esc>", 'nt')}, {'repeat': 5})
call feedkeys(repeat('g', 1000) . 'o', 'ntx!')
call WaitForAssert({-> assert_equal("dead", job_status(job))})
--- 1417,1423 ----
let g:wipe_buf = bufnr('')
let job = job_start(has('win32') ? 'cmd /c echo:' : ['true'],
! \ {'exit_cb': 'ExitCbWipe'})
let timer = timer_start(300, {-> feedkeys("\<Esc>", 'nt')}, {'repeat': 5})
call feedkeys(repeat('g', 1000) . 'o', 'ntx!')
call WaitForAssert({-> assert_equal("dead", job_status(job))})
***************
*** 1933,1939 ****
return
endif
! let job = job_start(s:python . ' -c "import time;time.sleep(0.2)"',
{'out_io': 'null', 'err_io': 'null', 'pty': 1})
let elapsed = WaitFor({-> job_status(job) ==# 'dead'})
call assert_inrange(200, 1000, elapsed)
call job_stop(job)
--- 1935,1942 ----
return
endif
! let job = job_start(s:python . ' -c "import time;time.sleep(0.2)"',
! \ {'out_io': 'null', 'err_io': 'null', 'pty': 1})
let elapsed = WaitFor({-> job_status(job) ==# 'dead'})
call assert_inrange(200, 1000, elapsed)
call job_stop(job)
***************
*** 1985,1997 ****
try
let g:out = ''
let job = job_start(s:python . " test_channel_pipe.py",
! \ {'mode': 'raw', 'drop': 'never', 'noblock': 1,
! \ 'callback': {ch, msg -> execute('let g:out .= msg')}})
! let want = repeat('X', 79999) . "\n"
call ch_sendraw(job, want)
! let g:Ch_job = job
! call WaitForAssert({-> assert_equal("dead", job_status(g:Ch_job))})
call assert_equal(want, substitute(g:out, '\r', '', 'g'))
finally
call job_stop(job)
--- 1988,2001 ----
try
let g:out = ''
let job = job_start(s:python . " test_channel_pipe.py",
! \ {'mode': 'raw', 'drop': 'never', 'noblock': 1,
! \ 'callback': {ch, msg -> execute('let g:out .= msg')}})
! let outlen = 79999
! let want = repeat('X', outlen) . "\n"
call ch_sendraw(job, want)
! call WaitFor({-> len(g:out) >= outlen}, 10000)
! call WaitForAssert({-> assert_equal("dead", job_status(job))})
call assert_equal(want, substitute(g:out, '\r', '', 'g'))
finally
call job_stop(job)
*** ../vim-8.1.0819/src/testdir/test_filechanged.vim 2019-01-24
21:57:11.574719854 +0100
--- src/testdir/test_filechanged.vim 2019-01-25 20:54:17.931364655 +0100
***************
*** 90,96 ****
endfunc
func Test_file_changed_dialog()
! if !has('unix')
return
endif
au! FileChangedShell
--- 90,96 ----
endfunc
func Test_file_changed_dialog()
! if !has('unix') || has('gui_running')
return
endif
au! FileChangedShell
*** ../vim-8.1.0819/src/version.c 2019-01-25 20:48:29.385157333 +0100
--- src/version.c 2019-01-25 21:00:22.821191796 +0100
***************
*** 789,790 ****
--- 789,792 ----
{ /* Add new patch number below this line */
+ /**/
+ 820,
/**/
--
FIRST GUARD: Ah! Now ... we're not allowed to ...
SIR LAUNCELOT runs him through, grabs his spear and stabs the other
guard who collapses in a heap. Hiccoughs quietly.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.