aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/ui_event_spec.lua
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-05-24 19:18:11 +0000
committerJosh Rahm <joshuarahm@gmail.com>2024-05-24 19:18:11 +0000
commitff7ed8f586589d620a806c3758fac4a47a8e7e15 (patch)
tree729bbcb92231538fa61dab6c3d890b025484b7f5 /test/functional/lua/ui_event_spec.lua
parent376914f419eb08fdf4c1a63a77e1f035898a0f10 (diff)
parent28c04948a1c887a1cc0cb64de79fa32631700466 (diff)
downloadrneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.gz
rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.bz2
rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.zip
Merge remote-tracking branch 'upstream/master' into mix_20240309
Diffstat (limited to 'test/functional/lua/ui_event_spec.lua')
-rw-r--r--test/functional/lua/ui_event_spec.lua74
1 files changed, 66 insertions, 8 deletions
diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua
index 3e46018682..1e80c88403 100644
--- a/test/functional/lua/ui_event_spec.lua
+++ b/test/functional/lua/ui_event_spec.lua
@@ -1,10 +1,16 @@
-local helpers = require('test.functional.helpers')(after_each)
+local t = require('test.testutil')
+local n = require('test.functional.testnvim')()
local Screen = require('test.functional.ui.screen')
-local eq = helpers.eq
-local exec_lua = helpers.exec_lua
-local clear = helpers.clear
-local feed = helpers.feed
-local fn = helpers.fn
+
+local eq = t.eq
+local exec_lua = n.exec_lua
+local clear = n.clear
+local feed = n.feed
+local fn = n.fn
+local assert_log = t.assert_log
+local check_close = n.check_close
+
+local testlog = 'Xtest_lua_ui_event_log'
describe('vim.ui_attach', function()
local screen
@@ -108,7 +114,7 @@ describe('vim.ui_attach', function()
it('does not crash on exit', function()
fn.system({
- helpers.nvim_prog,
+ n.nvim_prog,
'-u',
'NONE',
'-i',
@@ -120,7 +126,7 @@ describe('vim.ui_attach', function()
'--cmd',
'quitall!',
})
- eq(0, helpers.eval('v:shell_error'))
+ eq(0, n.eval('v:shell_error'))
end)
it('can receive accurate message kinds even if they are history', function()
@@ -149,4 +155,56 @@ describe('vim.ui_attach', function()
},
}, actual, vim.inspect(actual))
end)
+
+ it('ui_refresh() activates correct capabilities without remote UI', function()
+ screen:detach()
+ exec_lua('vim.ui_attach(ns, { ext_cmdline = true }, on_event)')
+ eq(1, n.api.nvim_get_option_value('cmdheight', {}))
+ exec_lua('vim.ui_detach(ns)')
+ exec_lua('vim.ui_attach(ns, { ext_messages = true }, on_event)')
+ n.api.nvim_set_option_value('cmdheight', 1, {})
+ screen:attach()
+ eq(1, n.api.nvim_get_option_value('cmdheight', {}))
+ end)
+
+ it("ui_refresh() sets 'cmdheight' for all open tabpages with ext_messages", function()
+ exec_lua('vim.cmd.tabnew()')
+ exec_lua('vim.ui_attach(ns, { ext_messages = true }, on_event)')
+ exec_lua('vim.cmd.tabnext()')
+ eq(0, n.api.nvim_get_option_value('cmdheight', {}))
+ end)
+
+ it('avoids recursive flushing and invalid memory access with :redraw', function()
+ exec_lua([[
+ _G.cmdline = 0
+ vim.ui_attach(ns, { ext_messages = true }, function(ev)
+ vim.cmd.redraw()
+ _G.cmdline = _G.cmdline + (ev == 'cmdline_show' and 1 or 0)
+ end
+ )]])
+ feed(':')
+ eq(1, exec_lua('return _G.cmdline'))
+ n.assert_alive()
+ feed('version<CR><CR>v<Esc>')
+ n.assert_alive()
+ end)
+end)
+
+describe('vim.ui_attach', function()
+ after_each(function()
+ check_close()
+ os.remove(testlog)
+ end)
+
+ it('error in callback is logged', function()
+ clear({ env = { NVIM_LOG_FILE = testlog } })
+ local screen = Screen.new()
+ screen:attach()
+ exec_lua([[
+ local ns = vim.api.nvim_create_namespace('testspace')
+ vim.ui_attach(ns, { ext_popupmenu = true }, function() error(42) end)
+ ]])
+ feed('ifoo<CR>foobar<CR>fo<C-X><C-N>')
+ assert_log('Error executing UI event callback: Error executing lua: .*: 42', testlog, 100)
+ end)
end)