aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/functional/api/server_requests_spec.lua2
-rw-r--r--test/functional/api/vim_spec.lua62
-rw-r--r--test/functional/eval/match_functions_spec.lua7
-rw-r--r--test/functional/eval/server_spec.lua8
-rw-r--r--test/functional/legacy/file_perm_spec.lua2
-rw-r--r--test/functional/lua/luaeval_spec.lua8
6 files changed, 61 insertions, 28 deletions
diff --git a/test/functional/api/server_requests_spec.lua b/test/functional/api/server_requests_spec.lua
index 18229b54ff..f00ce6992f 100644
--- a/test/functional/api/server_requests_spec.lua
+++ b/test/functional/api/server_requests_spec.lua
@@ -250,7 +250,7 @@ describe('server -> client', function()
end)
after_each(function()
- funcs.jobstop(jobid)
+ pcall(funcs.jobstop, jobid)
end)
if helpers.pending_win32(pending) then return end
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index 0ff755b320..d56cf77c5f 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -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})
diff --git a/test/functional/eval/match_functions_spec.lua b/test/functional/eval/match_functions_spec.lua
index 7989b22b5e..0ec465a34c 100644
--- a/test/functional/eval/match_functions_spec.lua
+++ b/test/functional/eval/match_functions_spec.lua
@@ -6,6 +6,7 @@ local clear = helpers.clear
local funcs = helpers.funcs
local command = helpers.command
local exc_exec = helpers.exc_exec
+local expect_err = helpers.expect_err
before_each(clear)
@@ -40,9 +41,11 @@ describe('setmatches()', function()
end)
it('fails with -1 if highlight group is not defined', function()
- eq(-1, funcs.setmatches({{group=1, pattern=2, id=3, priority=4}}))
+ expect_err('E28: No such highlight group name: 1', funcs.setmatches,
+ {{group=1, pattern=2, id=3, priority=4}})
eq({}, funcs.getmatches())
- eq(-1, funcs.setmatches({{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}}))
+ expect_err('E28: No such highlight group name: 1', funcs.setmatches,
+ {{group=1, pos1={2}, pos2={6}, id=3, priority=4, conceal=5}})
eq({}, funcs.getmatches())
end)
end)
diff --git a/test/functional/eval/server_spec.lua b/test/functional/eval/server_spec.lua
index 4e4aed864b..187e138b22 100644
--- a/test/functional/eval/server_spec.lua
+++ b/test/functional/eval/server_spec.lua
@@ -5,6 +5,7 @@ local clear, funcs, meths = helpers.clear, helpers.funcs, helpers.meths
local iswin = helpers.iswin
local ok = helpers.ok
local matches = helpers.matches
+local expect_err = helpers.expect_err
local function clear_serverlist()
for _, server in pairs(funcs.serverlist()) do
@@ -89,19 +90,20 @@ describe('server', function()
s = funcs.serverstart(v4)
if #s > 0 then
table.insert(expected, v4)
- funcs.serverstart(v4) -- exists already; ignore
+ pcall(funcs.serverstart, v4) -- exists already; ignore
end
local v6 = '::1:12345'
s = funcs.serverstart(v6)
if #s > 0 then
table.insert(expected, v6)
- funcs.serverstart(v6) -- exists already; ignore
+ pcall(funcs.serverstart, v6) -- exists already; ignore
end
eq(expected, funcs.serverlist())
clear_serverlist()
- funcs.serverstart('127.0.0.1:65536') -- invalid port
+ expect_err('Failed to start server: invalid argument',
+ funcs.serverstart, '127.0.0.1:65536') -- invalid port
eq({}, funcs.serverlist())
end)
diff --git a/test/functional/legacy/file_perm_spec.lua b/test/functional/legacy/file_perm_spec.lua
index 77e82352c5..d61fdc9b83 100644
--- a/test/functional/legacy/file_perm_spec.lua
+++ b/test/functional/legacy/file_perm_spec.lua
@@ -15,7 +15,7 @@ describe('Test getting and setting file permissions', function()
it('file permissions', function()
eq('', call('getfperm', tempfile))
- eq(0, call('setfperm', tempfile, 'r------'))
+ eq(0, call('setfperm', tempfile, 'r--------'))
call('writefile', {'one'}, tempfile)
eq(9, call('len', call('getfperm', tempfile)))
diff --git a/test/functional/lua/luaeval_spec.lua b/test/functional/lua/luaeval_spec.lua
index 6da0001cea..760105df6b 100644
--- a/test/functional/lua/luaeval_spec.lua
+++ b/test/functional/lua/luaeval_spec.lua
@@ -51,12 +51,12 @@ describe('luaeval()', function()
end)
describe('recursive lua values', function()
it('are successfully transformed', function()
- funcs.luaeval('rawset(_G, "d", {})')
- funcs.luaeval('rawset(d, "d", d)')
+ command('lua rawset(_G, "d", {})')
+ command('lua rawset(d, "d", d)')
eq('\n{\'d\': {...@0}}', funcs.execute('echo luaeval("d")'))
- funcs.luaeval('rawset(_G, "l", {})')
- funcs.luaeval('table.insert(l, l)')
+ command('lua rawset(_G, "l", {})')
+ command('lua table.insert(l, l)')
eq('\n[[...@0]]', funcs.execute('echo luaeval("l")'))
end)
end)