mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 11:58:17 +00:00
test(log): use tempfile for expected error logs #33017
This commit is contained in:
@@ -32,7 +32,6 @@ describe('vim.ui_attach', function()
|
|||||||
]]
|
]]
|
||||||
|
|
||||||
screen = Screen.new(40, 5)
|
screen = Screen.new(40, 5)
|
||||||
screen:add_extra_attr_ids({ [100] = { bold = true, foreground = Screen.colors.SeaGreen } })
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function expect_events(expected)
|
local function expect_events(expected)
|
||||||
@@ -216,7 +215,7 @@ describe('vim.ui_attach', function()
|
|||||||
},
|
},
|
||||||
messages = {
|
messages = {
|
||||||
{
|
{
|
||||||
content = { { '\nSave changes?\n', 100, 10 } },
|
content = { { '\nSave changes?\n', 6, 10 } },
|
||||||
history = false,
|
history = false,
|
||||||
kind = 'confirm',
|
kind = 'confirm',
|
||||||
},
|
},
|
||||||
@@ -316,16 +315,38 @@ describe('vim.ui_attach', function()
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
end)
|
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()
|
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([[
|
exec_lua([[
|
||||||
vim.ui_attach(vim.api.nvim_create_namespace(''), { ext_messages = true }, function(ev)
|
vim.ui_attach(vim.api.nvim_create_namespace(''), { ext_messages = true }, function(ev)
|
||||||
if ev:find('msg') then
|
if ev:find('msg') then
|
||||||
vim.api.nvim_buf_set_lines(0, -2, -1, false, { err[1] })
|
vim.api.nvim_buf_set_lines(0, -2, -1, false, { err[1] })
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
]])
|
]])
|
||||||
local s1 = [[
|
local s1 = [[
|
||||||
^ |
|
^ |
|
||||||
{1:~ }|*9
|
{1:~ }|*9
|
||||||
@@ -418,27 +439,6 @@ describe('vim.ui_attach', function()
|
|||||||
{9:Excessive errors in vim.ui_attach() callback (ns=(UNKNOWN PLUGIN))} |
|
{9:Excessive errors in vim.ui_attach() callback (ns=(UNKNOWN PLUGIN))} |
|
||||||
]])
|
]])
|
||||||
end)
|
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()
|
it('sourcing invalid file does not crash #32166', function()
|
||||||
exec_lua([[
|
exec_lua([[
|
||||||
|
@@ -15,6 +15,26 @@ local eq = t.eq
|
|||||||
local assert_alive = n.assert_alive
|
local assert_alive = n.assert_alive
|
||||||
local pcall_err = t.pcall_err
|
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()
|
describe('decorations providers', function()
|
||||||
local screen ---@type test.functional.ui.screen
|
local screen ---@type test.functional.ui.screen
|
||||||
before_each(function()
|
before_each(function()
|
||||||
@@ -52,26 +72,6 @@ describe('decorations providers', function()
|
|||||||
posp = getmark(mark, false);
|
posp = getmark(mark, false);
|
||||||
restore_buffer(&save_buf); ]]
|
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 function check_trace(expected)
|
||||||
local actual = exec_lua [[ local b = beamtrace beamtrace = {} return b ]]
|
local actual = exec_lua [[ local b = beamtrace beamtrace = {} return b ]]
|
||||||
expect_events(expected, actual, "beam trace")
|
expect_events(expected, actual, "beam trace")
|
||||||
@@ -758,28 +758,6 @@ describe('decorations providers', function()
|
|||||||
]])
|
]])
|
||||||
end)
|
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()
|
it('can add new providers during redraw #26652', function()
|
||||||
setup_provider [[
|
setup_provider [[
|
||||||
local ns = api.nvim_create_namespace('test_no_add')
|
local ns = api.nvim_create_namespace('test_no_add')
|
||||||
@@ -835,6 +813,32 @@ describe('decorations providers', function()
|
|||||||
end)
|
end)
|
||||||
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 = [[
|
local example_text = [[
|
||||||
for _,item in ipairs(items) do
|
for _,item in ipairs(items) do
|
||||||
local text, hl_id_cell, count = unpack(item)
|
local text, hl_id_cell, count = unpack(item)
|
||||||
@@ -6834,4 +6838,3 @@ describe('decorations: window scoped', function()
|
|||||||
eq({ wins = {} }, api.nvim__ns_get(ns))
|
eq({ wins = {} }, api.nvim__ns_get(ns))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user