Mercurial > vim
diff src/testdir/test_channel.vim @ 10845:c31782d57569 v8.0.0312
patch 8.0.0312: failure when a channel receives a split json message
commit https://github.com/vim/vim/commit/88989cc381c764978f7d7c8e387f3efc21333b4b
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Feb 6 21:56:09 2017 +0100
patch 8.0.0312: failure when a channel receives a split json message
Problem: When a json message arrives in pieces, the start is dropped and
the decoding fails.
Solution: Do not drop the start when it is still needed. (Kay Zheng) Add a
test. Reset the timeout when something is received.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 06 Feb 2017 22:00:05 +0100 |
parents | 095c9abae4ff |
children | 1c4ebbae41d2 |
line wrap: on
line diff
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -1141,7 +1141,11 @@ func Test_out_cb() let dict = {'thisis': 'dict: '} func dict.outHandler(chan, msg) dict - let g:Ch_outmsg = self.thisis . a:msg + if type(a:msg) == v:t_string + let g:Ch_outmsg = self.thisis . a:msg + else + let g:Ch_outobj = a:msg + endif endfunc func dict.errHandler(chan, msg) dict let g:Ch_errmsg = self.thisis . a:msg @@ -1161,6 +1165,12 @@ func Test_out_cb() call assert_equal("dict: hello", g:Ch_outmsg) call WaitFor('g:Ch_errmsg != ""') call assert_equal("dict: there", g:Ch_errmsg) + + " Receive a json object split in pieces + unlet! g:Ch_outobj + call ch_sendraw(job, "echosplit [0, {\"one\": 1,| \"tw|o\": 2, \"three\": 3|}]\n") + call WaitFor('exists("g:Ch_outobj")') + call assert_equal({'one': 1, 'two': 2, 'three': 3}, g:Ch_outobj) finally call job_stop(job) endtry