commit 02f8ca59a80cd3570593c717ff6ceadc33239b89
parent 93b30582db520ae20d66b000053007c11b62c15d
Author: bfredl <bjorn.linse@gmail.com>
Date: Tue, 20 Sep 2022 22:03:16 +0200
fix(tests): indicate in test logs when nvim exit times out
When it happens it wastes 2 seconds which is NOT included in the
normal busted timing info. It is hard to correct this, but we
can at least print a warning when this happens.
Diffstat:
3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua
@@ -21,13 +21,15 @@ local function man_system(cmd, silent)
local done = false
local exit_code
- local handle = vim.loop.spawn(cmd[1], {
+ local handle
+ handle = vim.loop.spawn(cmd[1], {
args = vim.list_slice(cmd, 2),
stdio = { nil, stdout, stderr },
}, function(code)
exit_code = code
stdout:close()
stderr:close()
+ handle:close()
done = true
end)
@@ -52,7 +54,7 @@ local function man_system(cmd, silent)
if not done then
if handle then
- vim.loop.shutdown(handle)
+ handle:close()
stdout:close()
stderr:close()
end
diff --git a/test/functional/fixtures/start/nvim-leftpad/lua/async_leftpad.lua b/test/functional/fixtures/start/nvim-leftpad/lua/async_leftpad.lua
@@ -1,3 +1,5 @@
return function (val, res)
- vim.loop.new_async(function() _G[res] = require'leftpad'(val) end):send()
+ local handle
+ handle = vim.loop.new_async(function() _G[res] = require'leftpad'(val) handle:close() end)
+ handle:send()
end
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
@@ -380,10 +380,23 @@ local function remove_args(args, args_rm)
return new_args
end
+function module.check_close(old_session)
+ local start_time = luv.now()
+ old_session:close()
+ luv.update_time() -- Update cached value of luv.now() (libuv: uv_now()).
+ local end_time = luv.now()
+ local delta = end_time - start_time
+ if delta > 500 then
+ print("nvim took " .. delta .. " milliseconds to exit after last test\n"..
+ "This indicates a likely problem with the test even if it passed!\n")
+ io.stdout:flush()
+ end
+end
+
--- @param io_extra used for stdin_fd, see :help ui-option
function module.spawn(argv, merge, env, keep, io_extra)
if session and not keep then
- session:close()
+ module.check_close(session)
end
local child_stream = ChildProcessStream.spawn(