diff options
Diffstat (limited to 'test/functional/lua/loop_spec.lua')
-rw-r--r-- | test/functional/lua/loop_spec.lua | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/functional/lua/loop_spec.lua b/test/functional/lua/loop_spec.lua index 8df2900368..fbf70d7be7 100644 --- a/test/functional/lua/loop_spec.lua +++ b/test/functional/lua/loop_spec.lua @@ -194,4 +194,52 @@ describe('vim.uv', function() feed('<cr>') n.assert_alive() end) + + it("doesn't crash on async callbacks throwing nil error", function() + local screen = Screen.new(50, 4) + + exec_lua(function() + _G.idle = vim.uv.new_idle() + _G.idle:start(function() + _G.idle:stop() + error() + end) + end) + + screen:expect([[ + {3: }| + {9:Error executing callback:} | + {9:[NULL]} | + {6:Press ENTER or type command to continue}^ | + ]]) + feed('<cr>') + + exec_lua(function() + _G.idle:close() + end) + end) + + it("doesn't crash on async callbacks throwing object as an error", function() + local screen = Screen.new(50, 4) + + exec_lua(function() + _G.idle = vim.uv.new_idle() + _G.idle:start(function() + _G.idle:stop() + error(_G.idle) -- userdata with __tostring method + end) + end) + + screen:expect([[ + {3: }| + {9:Error executing callback:} | + {9:uv_idle_t: 0x{MATCH:%w+}} | + {6:Press ENTER or type command to continue}^ | + ]]) + feed('<cr>') + + exec_lua(function() + _G.idle:close() + end) + end) end) |