aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/lua')
-rw-r--r--test/functional/lua/system_spec.lua73
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)