diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/lua/system_spec.lua | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/test/functional/lua/system_spec.lua b/test/functional/lua/system_spec.lua index 836d3a83b0..a988d3f0d7 100644 --- a/test/functional/lua/system_spec.lua +++ b/test/functional/lua/system_spec.lua @@ -5,27 +5,46 @@ local eq = helpers.eq local function system_sync(cmd, opts) return exec_lua([[ - return vim.system(...):wait() + local cmd, opts = ... + local obj = vim.system(...) + + if opts.timeout then + -- Minor delay before calling wait() so the timeout uv timer can have a headstart over the + -- internal call to vim.wait() in wait(). + vim.wait(10) + end + + local res = obj:wait() + + -- Check the process is no longer running + local proc = vim.api.nvim_get_proc(obj.pid) + assert(not proc, 'process still exists') + + return res ]], cmd, opts) end local function system_async(cmd, opts) - exec_lua([[ + return exec_lua([[ local cmd, opts = ... _G.done = false - vim.system(cmd, opts, function(obj) + local obj = vim.system(cmd, opts, function(obj) _G.done = true _G.ret = obj end) - ]], cmd, opts) - while true do - if exec_lua[[return _G.done]] then - break - end - end + local ok = vim.wait(10000, function() + return _G.done + end) - return exec_lua[[return _G.ret]] + assert(ok, 'process did not exit') + + -- Check the process is no longer running + local proc = vim.api.nvim_get_proc(obj.pid) + assert(not proc, 'process still exists') + + return _G.ret + ]], cmd, opts) end describe('vim.system', function() @@ -43,15 +62,39 @@ describe('vim.system', function() eq('hellocat', system({ 'cat' }, { stdin = 'hellocat', text = true }).stdout) end) - it ('supports timeout', function() + it('supports timeout', function() eq({ - code = 0, - signal = 2, + code = 124, + signal = 15, stdout = '', - stderr = "Command timed out: 'sleep 10'" - }, system({ 'sleep', '10' }, { timeout = 1 })) + stderr = '' + }, system({ 'sleep', '10' }, { timeout = 1000 })) end) end) end + it('kill processes', function() + exec_lua([[ + local signal + local cmd = vim.system({ 'cat', '-' }, { stdin = true }, function(r) + signal = r.signal + end) -- run forever + + cmd:kill('sigint') + + -- wait for the process not to exist + local done = vim.wait(2000, function() + return signal ~= nil + end) + + assert(done, 'process did not exit') + + -- Check the process is no longer running + local proc = vim.api.nvim_get_proc(cmd.pid) + assert(not proc, 'process still exists') + + assert(signal == 2) + ]]) + end) + end) |