diff options
| author | Bram Moolenaar <Bram@vim.org> | 2016-10-27 20:00:07 +0200 |
|---|---|---|
| committer | Bram Moolenaar <Bram@vim.org> | 2016-10-27 20:00:07 +0200 |
| commit | 01688ad545ff0809ddad5c8fa6b149dc5d67312b (patch) | |
| tree | f588850e3798caf6ddef56772a58903d8b3ab4eb /src/testdir | |
| parent | 2f97912800e86a296c001832bbbf2fc425f1e533 (diff) | |
| download | vim-git-01688ad545ff0809ddad5c8fa6b149dc5d67312b.tar.gz | |
patch 8.0.0050v8.0.0050
Problem: An exiting job is detected with a large latency.
Solution: Check for pending job more often. (Ozaki Kiichi) Change the
double loop in mch_inchar() into one.
Diffstat (limited to 'src/testdir')
| -rw-r--r-- | src/testdir/shared.vim | 28 | ||||
| -rw-r--r-- | src/testdir/test_channel.vim | 33 |
2 files changed, 55 insertions, 6 deletions
diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim index 24b05bec6..45a2ea496 100644 --- a/src/testdir/shared.vim +++ b/src/testdir/shared.vim @@ -136,6 +136,34 @@ func WaitFor(expr) return 1000 endfunc +" Wait for up to a given milliseconds. +" With the +timers feature this waits for key-input by getchar(), Resume() +" feeds key-input and resumes process. Return time waited in milliseconds. +" Without +timers it uses simply :sleep. +func Standby(msec) + if has('timers') + let start = reltime() + let g:_standby_timer = timer_start(a:msec, function('s:feedkeys')) + call getchar() + return float2nr(reltimefloat(reltime(start)) * 1000) + else + execute 'sleep ' a:msec . 'm' + return a:msec + endif +endfunc + +func Resume() + if exists('g:_standby_timer') + call timer_stop(g:_standby_timer) + call s:feedkeys(0) + unlet g:_standby_timer + endif +endfunc + +func s:feedkeys(timer) + call feedkeys('x', 'nt') +endfunc + " Run Vim, using the "vimcmd" file and "-u NORC". " "before" is a list of Vim commands to be executed before loading plugins. " "after" is a list of Vim commands to be executed after loading plugins. diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim index 0a50ed47e..c21e617b1 100644 --- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -1362,9 +1362,11 @@ func Test_exit_callback() endif endfunc -let g:exit_cb_time = {'start': 0, 'end': 0} function MyExitTimeCb(job, status) - let g:exit_cb_time.end = reltime(g:exit_cb_time.start) + if job_info(a:job).process == g:exit_cb_val.process + let g:exit_cb_val.end = reltime(g:exit_cb_val.start) + endif + call Resume() endfunction func Test_exit_callback_interval() @@ -1372,11 +1374,30 @@ func Test_exit_callback_interval() return endif - let g:exit_cb_time.start = reltime() + let g:exit_cb_val = {'start': reltime(), 'end': 0, 'process': 0} let job = job_start([s:python, '-c', 'import time;time.sleep(0.5)'], {'exit_cb': 'MyExitTimeCb'}) - call WaitFor('g:exit_cb_time.end != 0') - let elapsed = reltimefloat(g:exit_cb_time.end) - call assert_true(elapsed > 0.3) + let g:exit_cb_val.process = job_info(job).process + call WaitFor('type(g:exit_cb_val.end) != v:t_number || g:exit_cb_val.end != 0') + let elapsed = reltimefloat(g:exit_cb_val.end) + call assert_true(elapsed > 0.5) + call assert_true(elapsed < 1.0) + + " case: unreferenced job, using timer + if !has('timers') + return + endif + + let g:exit_cb_val = {'start': reltime(), 'end': 0, 'process': 0} + let g:job = job_start([s:python, '-c', 'import time;time.sleep(0.5)'], {'exit_cb': 'MyExitTimeCb'}) + let g:exit_cb_val.process = job_info(g:job).process + unlet g:job + call Standby(1000) + if type(g:exit_cb_val.end) != v:t_number || g:exit_cb_val.end != 0 + let elapsed = reltimefloat(g:exit_cb_val.end) + else + let elapsed = 1.0 + endif + call assert_true(elapsed > 0.5) call assert_true(elapsed < 1.0) endfunc |
