mirror of
https://github.com/neovim/neovim.git
synced 2025-11-17 15:51:32 +00:00
API: return non-generic VimL errors
- Return VimL errors instead of generic errors for: - nvim_call_function - nvim_call_dict_function - Fix tests which were silently broken before this change. This violates #6150 where we agreed not to translate API errors. But that can be fixed later.
This commit is contained in:
@@ -5,6 +5,7 @@ local global_helpers = require('test.helpers')
|
||||
local NIL = helpers.NIL
|
||||
local clear, nvim, eq, neq = helpers.clear, helpers.nvim, helpers.eq, helpers.neq
|
||||
local command = helpers.command
|
||||
local eval = helpers.eval
|
||||
local funcs = helpers.funcs
|
||||
local iswin = helpers.iswin
|
||||
local meth_pcall = helpers.meth_pcall
|
||||
@@ -40,20 +41,20 @@ describe('api', function()
|
||||
os.remove(fname)
|
||||
end)
|
||||
|
||||
it("parse error: fails (specific error), does NOT update v:errmsg", function()
|
||||
-- Most API methods return generic errors (or no error) if a VimL
|
||||
-- expression fails; nvim_command returns the VimL error details.
|
||||
it('VimL validation error: fails with specific error', function()
|
||||
local status, rv = pcall(nvim, "command", "bogus_command")
|
||||
eq(false, status) -- nvim_command() failed.
|
||||
eq("E492:", string.match(rv, "E%d*:")) -- VimL error was returned.
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
eq('', nvim('eval', 'v:errmsg')) -- v:errmsg was not updated.
|
||||
eq('', eval('v:exception'))
|
||||
end)
|
||||
|
||||
it("runtime error: fails (specific error)", function()
|
||||
it('VimL execution error: fails with specific error', function()
|
||||
local status, rv = pcall(nvim, "command_output", "buffer 23487")
|
||||
eq(false, status) -- nvim_command() failed.
|
||||
eq("E86: Buffer 23487 does not exist", string.match(rv, "E%d*:.*"))
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
eq('', eval('v:exception'))
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -109,21 +110,21 @@ describe('api', function()
|
||||
eq(':!echo foo\r\n\nfoo'..win_lf..'\n', nvim('command_output', [[!echo foo]]))
|
||||
end)
|
||||
|
||||
it("parse error: fails (specific error), does NOT update v:errmsg", function()
|
||||
it('VimL validation error: fails with specific error', function()
|
||||
local status, rv = pcall(nvim, "command_output", "bogus commannnd")
|
||||
eq(false, status) -- nvim_command_output() failed.
|
||||
eq("E492: Not an editor command: bogus commannnd",
|
||||
string.match(rv, "E%d*:.*"))
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
-- Verify NO hit-enter prompt.
|
||||
eq({mode='n', blocking=false}, nvim("get_mode"))
|
||||
end)
|
||||
|
||||
it("runtime error: fails (specific error)", function()
|
||||
it('VimL execution error: fails with specific error', function()
|
||||
local status, rv = pcall(nvim, "command_output", "buffer 42")
|
||||
eq(false, status) -- nvim_command_output() failed.
|
||||
eq("E86: Buffer 42 does not exist", string.match(rv, "E%d*:.*"))
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
-- Verify NO hit-enter prompt.
|
||||
eq({mode='n', blocking=false}, nvim("get_mode"))
|
||||
end)
|
||||
@@ -149,7 +150,7 @@ describe('api', function()
|
||||
local status, rv = pcall(nvim, "eval", "bogus expression")
|
||||
eq(false, status) -- nvim_eval() failed.
|
||||
ok(nil ~= string.find(rv, "Failed to evaluate expression"))
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -160,12 +161,39 @@ describe('api', function()
|
||||
eq(17, nvim('call_function', 'eval', {17}))
|
||||
eq('foo', nvim('call_function', 'simplify', {'this/./is//redundant/../../../foo'}))
|
||||
end)
|
||||
it("VimL error: fails (generic error), does NOT update v:errmsg", function()
|
||||
local status, rv = pcall(nvim, "call_function", "bogus function", {"arg1"})
|
||||
eq(false, status) -- nvim_call_function() failed.
|
||||
ok(nil ~= string.find(rv, "Error calling function"))
|
||||
eq("", nvim("eval", "v:errmsg")) -- v:errmsg was not updated.
|
||||
|
||||
it("VimL validation error: returns specific error, does NOT update v:errmsg", function()
|
||||
expect_err('E117: Unknown function: bogus function', request,
|
||||
'nvim_call_function', 'bogus function', {'arg1'})
|
||||
expect_err('E119: Not enough arguments for function: atan', request,
|
||||
'nvim_call_function', 'atan', {})
|
||||
eq('', eval('v:exception'))
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
end)
|
||||
|
||||
it("VimL error: returns error details, does NOT update v:errmsg", function()
|
||||
expect_err('E808: Number or Float required', request,
|
||||
'nvim_call_function', 'atan', {'foo'})
|
||||
expect_err('Invalid channel stream "xxx"', request,
|
||||
'nvim_call_function', 'chanclose', {999, 'xxx'})
|
||||
expect_err('E900: Invalid channel id', request,
|
||||
'nvim_call_function', 'chansend', {999, 'foo'})
|
||||
eq('', eval('v:exception'))
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
end)
|
||||
|
||||
it("VimL exception: returns exception details, does NOT update v:errmsg", function()
|
||||
source([[
|
||||
function! Foo() abort
|
||||
throw 'wtf'
|
||||
endfunction
|
||||
]])
|
||||
expect_err('wtf', request,
|
||||
'nvim_call_function', 'Foo', {})
|
||||
eq('', eval('v:exception'))
|
||||
eq('', eval('v:errmsg')) -- v:errmsg was not updated.
|
||||
end)
|
||||
|
||||
it('validates args', function()
|
||||
local too_many_args = { 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x' }
|
||||
source([[
|
||||
@@ -216,7 +244,7 @@ describe('api', function()
|
||||
'nvim_call_dict_function', 'g:d', 'baz', {1,2})
|
||||
expect_err('Not a function: meep', request,
|
||||
'nvim_call_dict_function', 'g:d', 'meep', {1,2})
|
||||
expect_err('Error calling function', request,
|
||||
expect_err('E117: Unknown function: f', request,
|
||||
'nvim_call_dict_function', { f = '' }, 'f', {1,2})
|
||||
expect_err('Not a function: f', request,
|
||||
'nvim_call_dict_function', "{ 'f': '' }", 'f', {1,2})
|
||||
|
||||
Reference in New Issue
Block a user