diff options
Diffstat (limited to 'test/functional/api/server_requests_spec.lua')
-rw-r--r-- | test/functional/api/server_requests_spec.lua | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/functional/api/server_requests_spec.lua b/test/functional/api/server_requests_spec.lua new file mode 100644 index 0000000000..b6f56a868c --- /dev/null +++ b/test/functional/api/server_requests_spec.lua @@ -0,0 +1,68 @@ +-- Tests for some server->client RPC scenarios. Note that unlike with +-- `rpcnotify`, to evaluate `rpcrequest` calls we need the client event loop to +-- be running. +local helpers = require('test.functional.helpers') +local clear, nvim, eval, eq, run, stop = helpers.clear, helpers.nvim, + helpers.eval, helpers.eq, helpers.run, helpers.stop + + +describe('server -> client', function() + local cid + + before_each(function() + clear() + cid = nvim('get_api_info')[1] + end) + + describe('simple call', function() + it('works', function() + local function on_setup() + eq({4, 5, 6}, eval('rpcrequest('..cid..', "scall", 1, 2, 3)')) + stop() + end + + local function on_request(method, args) + eq('scall', method) + eq({1, 2, 3}, args) + nvim('command', 'let g:result = [4, 5, 6]') + return eval('g:result') + end + run(on_request, nil, on_setup) + end) + end) + + describe('recursive call', function() + it('works', function() + local function on_setup() + nvim('set_var', 'result1', 0) + nvim('set_var', 'result2', 0) + nvim('set_var', 'result3', 0) + nvim('set_var', 'result4', 0) + nvim('command', 'let g:result1 = rpcrequest('..cid..', "rcall", 2)') + eq(4, nvim('get_var', 'result1')) + eq(8, nvim('get_var', 'result2')) + eq(16, nvim('get_var', 'result3')) + eq(32, nvim('get_var', 'result4')) + stop() + end + + local function on_request(method, args) + eq('rcall', method) + local n = unpack(args) * 2 + if n <= 16 then + local cmd + if n == 4 then + cmd = 'let g:result2 = rpcrequest('..cid..', "rcall", '..n..')' + elseif n == 8 then + cmd = 'let g:result3 = rpcrequest('..cid..', "rcall", '..n..')' + elseif n == 16 then + cmd = 'let g:result4 = rpcrequest('..cid..', "rcall", '..n..')' + end + nvim('command', cmd) + end + return n + end + run(on_request, nil, on_setup) + end) + end) +end) |