aboutsummaryrefslogtreecommitdiff
path: root/test/functional/vimscript/eval_spec.lua
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-10-24 16:50:37 +0800
committerGitHub <noreply@github.com>2022-10-24 16:50:37 +0800
commitf445f6b0039ebe54680f2d140fc90c4a50a2647b (patch)
tree6249377800c18864f60ca0ce89363726a8293618 /test/functional/vimscript/eval_spec.lua
parent29fe3348ba126a334d7e6f06a66f14ec3110d02f (diff)
parent0ed1429fcb826c0022744fa17edfbe36a750d5f6 (diff)
downloadrneovim-f445f6b0039ebe54680f2d140fc90c4a50a2647b.tar.gz
rneovim-f445f6b0039ebe54680f2d140fc90c4a50a2647b.tar.bz2
rneovim-f445f6b0039ebe54680f2d140fc90c4a50a2647b.zip
Merge pull request #20791 from zeertzjq/vim-8.2.0908
vim-patch:8.2.0908: crash when changing the function table while listing it
Diffstat (limited to 'test/functional/vimscript/eval_spec.lua')
-rw-r--r--test/functional/vimscript/eval_spec.lua37
1 files changed, 35 insertions, 2 deletions
diff --git a/test/functional/vimscript/eval_spec.lua b/test/functional/vimscript/eval_spec.lua
index 1fbdedb815..64a3cf5471 100644
--- a/test/functional/vimscript/eval_spec.lua
+++ b/test/functional/vimscript/eval_spec.lua
@@ -17,12 +17,16 @@ local clear = helpers.clear
local eq = helpers.eq
local exc_exec = helpers.exc_exec
local exec = helpers.exec
+local exec_lua = helpers.exec_lua
local exec_capture = helpers.exec_capture
local eval = helpers.eval
local command = helpers.command
local write_file = helpers.write_file
local meths = helpers.meths
local sleep = helpers.sleep
+local matches = helpers.matches
+local pcall_err = helpers.pcall_err
+local assert_alive = helpers.assert_alive
local poke_eventloop = helpers.poke_eventloop
local feed = helpers.feed
@@ -249,10 +253,10 @@ describe("uncaught exception", function()
end)
end)
-describe('lambda function', function()
+describe('listing functions using :function', function()
before_each(clear)
- it('can be shown using :function followed by <lambda> #20466', function()
+ it('works for lambda functions with <lambda> #20466', function()
command('let A = {-> 1}')
local num = exec_capture('echo A'):match("function%('<lambda>(%d+)'%)")
eq(([[
@@ -260,4 +264,33 @@ describe('lambda function', function()
1 return 1
endfunction]]):format(num), exec_capture(('function <lambda>%s'):format(num)))
end)
+
+ -- FIXME: If the same function is deleted, the crash still happens. #20790
+ it('does not crash if another function is deleted while listing', function()
+ local screen = Screen.new(80, 24)
+ screen:attach()
+ matches('.*: Vim%(function%):E454: function list was modified', pcall_err(exec_lua, [=[
+ vim.cmd([[
+ func Func1()
+ endfunc
+ func Func2()
+ endfunc
+ func Func3()
+ endfunc
+ ]])
+
+ local ns = vim.api.nvim_create_namespace('test')
+
+ vim.ui_attach(ns, { ext_messages = true }, function(event, _, content)
+ if event == 'msg_show' and content[1][2] == 'function Func1()' then
+ vim.cmd('delfunc Func3')
+ end
+ end)
+
+ vim.cmd('function')
+
+ vim.ui_detach(ns)
+ ]=]))
+ assert_alive()
+ end)
end)