Mercurial > vim
diff src/testdir/test_channel.vim @ 9003:072556995a8e v7.4.1787
commit https://github.com/vim/vim/commit/b2658a1ab02cd0ba848164f70c7c464fdc398162
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Apr 26 17:16:24 2016 +0200
patch 7.4.1787
Problem: When a job ends the close callback is invoked before other
callbacks. On Windows the close callback is not called.
Solution: First invoke out/err callbacks before the close callback.
Make the close callback work on Windows.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 26 Apr 2016 17:30:05 +0200 |
parents | ed0b39dd7fd6 |
children | d5c6f1c5cd28 |
line wrap: on
line diff
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -1048,6 +1048,38 @@ func Test_out_cb() endtry endfunc +func Test_out_close_cb() + if !has('job') + return + endif + call ch_log('Test_out_close_cb()') + + let s:counter = 1 + let s:outmsg = 0 + let s:closemsg = 0 + func! OutHandler(chan, msg) + let s:outmsg = s:counter + let s:counter += 1 + endfunc + func! CloseHandler(chan) + let s:closemsg = s:counter + let s:counter += 1 + 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 s:waitFor('s:closemsg != 0 && s:outmsg != 0') + call assert_equal(1, s:outmsg) + call assert_equal(2, s:closemsg) + finally + call job_stop(job) + delfunc OutHandler + delfunc CloseHandler + endtry +endfunc + """""""""" let s:unletResponse = ''