aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/functional/lua/ui_event_spec.lua50
-rw-r--r--test/functional/ui/decorations_spec.lua89
2 files changed, 71 insertions, 68 deletions
diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua
index 1b3f128b9d..096280f563 100644
--- a/test/functional/lua/ui_event_spec.lua
+++ b/test/functional/lua/ui_event_spec.lua
@@ -32,7 +32,6 @@ describe('vim.ui_attach', function()
]]
screen = Screen.new(40, 5)
- screen:add_extra_attr_ids({ [100] = { bold = true, foreground = Screen.colors.SeaGreen } })
end)
local function expect_events(expected)
@@ -216,7 +215,7 @@ describe('vim.ui_attach', function()
},
messages = {
{
- content = { { '\nSave changes?\n', 100, 10 } },
+ content = { { '\nSave changes?\n', 6, 10 } },
history = false,
kind = 'confirm',
},
@@ -316,16 +315,38 @@ describe('vim.ui_attach', function()
},
})
end)
+end)
+
+describe('vim.ui_attach', function()
+ before_each(function()
+ clear({ env = { NVIM_LOG_FILE = testlog } })
+ end)
+
+ after_each(function()
+ check_close()
+ os.remove(testlog)
+ end)
+
+ it('error in callback is logged', function()
+ exec_lua([[
+ local ns = vim.api.nvim_create_namespace('test')
+ vim.ui_attach(ns, { ext_popupmenu = true }, function() error(42) end)
+ ]])
+ feed('ifoo<CR>foobar<CR>fo<C-X><C-N>')
+ assert_log('Error in "popupmenu_show" UI event handler %(ns=test%):', testlog, 100)
+ assert_log('Error executing lua: .*: 42', testlog, 100)
+ end)
it('detaches after excessive errors', function()
- screen:try_resize(86, 10)
+ local screen = Screen.new(86, 10)
+ screen:add_extra_attr_ids({ [100] = { bold = true, foreground = Screen.colors.SeaGreen } })
exec_lua([[
vim.ui_attach(vim.api.nvim_create_namespace(''), { ext_messages = true }, function(ev)
if ev:find('msg') then
vim.api.nvim_buf_set_lines(0, -2, -1, false, { err[1] })
end
end)
- ]])
+ ]])
local s1 = [[
^ |
{1:~ }|*9
@@ -418,27 +439,6 @@ describe('vim.ui_attach', function()
{9:Excessive errors in vim.ui_attach() callback (ns=(UNKNOWN PLUGIN))} |
]])
end)
-end)
-
-describe('vim.ui_attach', function()
- before_each(function()
- clear({ env = { NVIM_LOG_FILE = testlog } })
- end)
-
- after_each(function()
- check_close()
- os.remove(testlog)
- end)
-
- it('error in callback is logged', function()
- exec_lua([[
- local ns = vim.api.nvim_create_namespace('test')
- vim.ui_attach(ns, { ext_popupmenu = true }, function() error(42) end)
- ]])
- feed('ifoo<CR>foobar<CR>fo<C-X><C-N>')
- assert_log('Error in "popupmenu_show" UI event handler %(ns=test%):', testlog, 100)
- assert_log('Error executing lua: .*: 42', testlog, 100)
- end)
it('sourcing invalid file does not crash #32166', function()
exec_lua([[
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index ccc7841856..639d43b560 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -15,6 +15,26 @@ local eq = t.eq
local assert_alive = n.assert_alive
local pcall_err = t.pcall_err
+--- @return integer
+local function setup_provider(code)
+ return exec_lua ([[
+ local api = vim.api
+ _G.ns1 = api.nvim_create_namespace "ns1"
+ ]] .. (code or [[
+ beamtrace = {}
+ local function on_do(kind, ...)
+ table.insert(beamtrace, {kind, ...})
+ end
+ ]]) .. [[
+ api.nvim_set_decoration_provider(_G.ns1, {
+ on_start = on_do; on_buf = on_do;
+ on_win = on_do; on_line = on_do;
+ on_end = on_do; _on_spell_nav = on_do;
+ })
+ return _G.ns1
+ ]])
+end
+
describe('decorations providers', function()
local screen ---@type test.functional.ui.screen
before_each(function()
@@ -52,26 +72,6 @@ describe('decorations providers', function()
posp = getmark(mark, false);
restore_buffer(&save_buf); ]]
- --- @return integer
- local function setup_provider(code)
- return exec_lua ([[
- local api = vim.api
- _G.ns1 = api.nvim_create_namespace "ns1"
- ]] .. (code or [[
- beamtrace = {}
- local function on_do(kind, ...)
- table.insert(beamtrace, {kind, ...})
- end
- ]]) .. [[
- api.nvim_set_decoration_provider(_G.ns1, {
- on_start = on_do; on_buf = on_do;
- on_win = on_do; on_line = on_do;
- on_end = on_do; _on_spell_nav = on_do;
- })
- return _G.ns1
- ]])
- end
-
local function check_trace(expected)
local actual = exec_lua [[ local b = beamtrace beamtrace = {} return b ]]
expect_events(expected, actual, "beam trace")
@@ -758,28 +758,6 @@ describe('decorations providers', function()
]])
end)
- it('errors gracefully', function()
- screen:try_resize(65, screen._height)
- insert(mulholland)
-
- setup_provider [[
- function on_do(...)
- error "Foo"
- end
- ]]
-
- screen:expect([[
- // just to see if there was an accident |
- {8: }|
- {2:Error in decoration provider "start" (ns=ns1):} |
- {2:Error executing lua: [string "<nvim>"]:4: Foo} |
- {2:stack traceback:} |
- {2: [C]: in function 'error'} |
- {2: [string "<nvim>"]:4: in function <[string "<nvim>"]:3>} |
- {18:Press ENTER or type command to continue}^ |
- ]])
- end)
-
it('can add new providers during redraw #26652', function()
setup_provider [[
local ns = api.nvim_create_namespace('test_no_add')
@@ -835,6 +813,32 @@ describe('decorations providers', function()
end)
end)
+describe('decoration_providers', function()
+ it('errors and logs gracefully', function()
+ local testlog = 'Xtest_decorations_log'
+ clear({ env = { NVIM_LOG_FILE = testlog } })
+ local screen = Screen.new(65, 7)
+ setup_provider([[
+ function on_do(...)
+ error "Foo"
+ end
+ ]])
+ screen:expect([[
+ {3: }|
+ {9:Error in decoration provider "start" (ns=ns1):} |
+ {9:Error executing lua: [string "<nvim>"]:4: Foo} |
+ {9:stack traceback:} |
+ {9: [C]: in function 'error'} |
+ {9: [string "<nvim>"]:4: in function <[string "<nvim>"]:3>} |
+ {6:Press ENTER or type command to continue}^ |
+ ]])
+ t.assert_log('Error in decoration provider "start" %(ns=ns1%):', testlog, 100)
+ t.assert_log('Error executing lua: %[string "<nvim>"%]:4: Foo', testlog, 100)
+ n.check_close()
+ os.remove(testlog)
+ end)
+end)
+
local example_text = [[
for _,item in ipairs(items) do
local text, hl_id_cell, count = unpack(item)
@@ -6834,4 +6838,3 @@ describe('decorations: window scoped', function()
eq({ wins = {} }, api.nvim__ns_get(ns))
end)
end)
-