aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/api')
-rw-r--r--test/functional/api/buffer_spec.lua3
-rw-r--r--test/functional/api/server_notifications_spec.lua1
-rw-r--r--test/functional/api/tabpage_spec.lua3
-rw-r--r--test/functional/api/version_spec.lua71
-rw-r--r--test/functional/api/vim_spec.lua63
-rw-r--r--test/functional/api/window_spec.lua3
6 files changed, 121 insertions, 23 deletions
diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua
index 71ec213b97..3d3a2bb046 100644
--- a/test/functional/api/buffer_spec.lua
+++ b/test/functional/api/buffer_spec.lua
@@ -1,4 +1,3 @@
--- Sanity checks for buffer_* API calls via msgpack-rpc
local helpers = require('test.functional.helpers')(after_each)
local clear, nvim, buffer = helpers.clear, helpers.nvim, helpers.buffer
local curbuf, curwin, eq = helpers.curbuf, helpers.curwin, helpers.eq
@@ -6,7 +5,7 @@ local curbufmeths, ok = helpers.curbufmeths, helpers.ok
local funcs, request = helpers.funcs, helpers.request
local NIL = helpers.NIL
-describe('buffer_* functions', function()
+describe('api/buf', function()
before_each(clear)
-- access deprecated functions
diff --git a/test/functional/api/server_notifications_spec.lua b/test/functional/api/server_notifications_spec.lua
index 88e8c60560..78639d7ed7 100644
--- a/test/functional/api/server_notifications_spec.lua
+++ b/test/functional/api/server_notifications_spec.lua
@@ -1,4 +1,3 @@
--- Tests for nvim notifications
local helpers = require('test.functional.helpers')(after_each)
local eq, clear, eval, execute, nvim, next_message =
helpers.eq, helpers.clear, helpers.eval, helpers.execute, helpers.nvim,
diff --git a/test/functional/api/tabpage_spec.lua b/test/functional/api/tabpage_spec.lua
index 90940e9577..e10f30085f 100644
--- a/test/functional/api/tabpage_spec.lua
+++ b/test/functional/api/tabpage_spec.lua
@@ -1,4 +1,3 @@
--- Sanity checks for tabpage_* API calls via msgpack-rpc
local helpers = require('test.functional.helpers')(after_each)
local clear, nvim, tabpage, curtab, eq, ok =
helpers.clear, helpers.nvim, helpers.tabpage, helpers.curtab, helpers.eq,
@@ -8,7 +7,7 @@ local funcs = helpers.funcs
local request = helpers.request
local NIL = helpers.NIL
-describe('tabpage_* functions', function()
+describe('api/tabpage', function()
before_each(clear)
describe('list_wins and get_win', function()
diff --git a/test/functional/api/version_spec.lua b/test/functional/api/version_spec.lua
new file mode 100644
index 0000000000..3efd00ddbe
--- /dev/null
+++ b/test/functional/api/version_spec.lua
@@ -0,0 +1,71 @@
+local helpers = require('test.functional.helpers')(after_each)
+local mpack = require('mpack')
+local clear, funcs, eq = helpers.clear, helpers.funcs, helpers.eq
+
+local function read_mpack_file(fname)
+ local fd = io.open(fname, 'rb')
+ local data = fd:read('*a')
+ fd:close()
+ local unpack = mpack.Unpacker()
+ return unpack(data)
+end
+
+-- Remove metadata that is not essential to backwards-compatibility.
+local function remove_function_metadata(fspec)
+ fspec['can_fail'] = nil
+ fspec['async'] = nil
+ fspec['method'] = nil
+ fspec['since'] = nil
+ fspec['deprecated_since'] = nil
+ fspec['receives_channel_id'] = nil
+ for idx, _ in ipairs(fspec['parameters']) do
+ fspec['parameters'][idx][2] = '' -- Remove parameter name.
+ end
+ return fspec
+end
+
+describe("api_info()['version']", function()
+ before_each(clear)
+
+ it("returns API level", function()
+ local version = helpers.call('api_info')['version']
+ local current = version['api_level']
+ local compat = version['api_compatible']
+ eq("number", type(current))
+ eq("number", type(compat))
+ assert(current >= compat)
+ end)
+
+ it("returns Nvim version", function()
+ local version = helpers.call('api_info')['version']
+ local major = version['major']
+ local minor = version['minor']
+ local patch = version['patch']
+ eq("number", type(major))
+ eq("number", type(minor))
+ eq("number", type(patch))
+ eq(1, funcs.has("nvim-"..major.."."..minor.."."..patch))
+ eq(0, funcs.has("nvim-"..major.."."..minor.."."..(patch + 1)))
+ eq(0, funcs.has("nvim-"..major.."."..(minor + 1).."."..patch))
+ eq(0, funcs.has("nvim-"..(major + 1).."."..minor.."."..patch))
+ end)
+
+ it("api_compatible level is valid", function()
+ local api = helpers.call('api_info')
+ local compat = api['version']['api_compatible']
+ local path = 'test/functional/fixtures/api_level_'
+ ..tostring(compat)..'.mpack'
+
+ -- Verify that the current API function signatures match those of the API
+ -- level for which we claim compatibility.
+ local old_api = read_mpack_file(path)
+ for _, fn_old in ipairs(old_api['functions']) do
+ for _, fn_new in ipairs(api['functions']) do
+ if fn_old['name'] == fn_new['name'] then
+ eq(remove_function_metadata(fn_old),
+ remove_function_metadata(fn_new))
+ end
+ end
+ end
+ end)
+end)
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index 724d9f1b57..ce6c52e334 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -1,4 +1,3 @@
--- Sanity checks for vim_* API calls via msgpack-rpc
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local NIL = helpers.NIL
@@ -9,10 +8,10 @@ local meths = helpers.meths
local funcs = helpers.funcs
local request = helpers.request
-describe('vim_* functions', function()
+describe('api', function()
before_each(clear)
- describe('command', function()
+ describe('nvim_command', function()
it('works', function()
local fname = helpers.tmpname()
nvim('command', 'new')
@@ -29,9 +28,18 @@ describe('vim_* functions', function()
f:close()
os.remove(fname)
end)
+
+ it("VimL error: fails (VimL 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.
+ 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.
+ end)
end)
- describe('eval', function()
+ describe('nvim_eval', function()
it('works', function()
nvim('command', 'let g:v1 = "a"')
nvim('command', 'let g:v2 = [1, 2, {"v3": 3}]')
@@ -46,18 +54,41 @@ describe('vim_* functions', function()
it('works under deprecated name', function()
eq(2, request("vim_eval", "1+1"))
end)
+
+ it("VimL error: fails (generic error), does NOT update v:errmsg", 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.
+ end)
end)
- describe('call_function', function()
+ describe('nvim_call_function', function()
it('works', function()
nvim('call_function', 'setqflist', {{{ filename = 'something', lnum = 17}}, 'r'})
eq(17, nvim('call_function', 'getqflist', {})[1].lnum)
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.
+ end)
+ end)
+
+ describe('nvim_input', function()
+ it("VimL error: does NOT fail, updates v:errmsg", function()
+ local status, _ = pcall(nvim, "input", ":call bogus_fn()<CR>")
+ local v_errnum = string.match(nvim("eval", "v:errmsg"), "E%d*:")
+ eq(true, status) -- nvim_input() did not fail.
+ eq("E117:", v_errnum) -- v:errmsg was updated.
+ end)
end)
- describe('strwidth', function()
+ describe('nvim_strwidth', function()
it('works', function()
eq(3, nvim('strwidth', 'abc'))
-- 6 + (neovim)
@@ -70,7 +101,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set}_current_line', function()
+ describe('nvim_get_current_line, nvim_set_current_line', function()
it('works', function()
eq('', nvim('get_current_line'))
nvim('set_current_line', 'abc')
@@ -78,7 +109,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set,del}_var', function()
+ describe('nvim_get_var, nvim_set_var, nvim_del_var', function()
it('works', function()
nvim('set_var', 'lua', {1, 2, {['3'] = 1}})
eq({1, 2, {['3'] = 1}}, nvim('get_var', 'lua'))
@@ -109,7 +140,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set}_option', function()
+ describe('nvim_get_option, nvim_set_option', function()
it('works', function()
ok(nvim('get_option', 'equalalways'))
nvim('set_option', 'equalalways', false)
@@ -117,7 +148,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set}_current_buf and list_bufs', function()
+ describe('nvim_{get,set}_current_buf, nvim_list_bufs', function()
it('works', function()
eq(1, #nvim('list_bufs'))
eq(nvim('list_bufs')[1], nvim('get_current_buf'))
@@ -129,7 +160,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set}_current_win and list_wins', function()
+ describe('nvim_{get,set}_current_win, nvim_list_wins', function()
it('works', function()
eq(1, #nvim('list_wins'))
eq(nvim('list_wins')[1], nvim('get_current_win'))
@@ -142,7 +173,7 @@ describe('vim_* functions', function()
end)
end)
- describe('{get,set}_current_tabpage and list_tabpages', function()
+ describe('nvim_{get,set}_current_tabpage, nvim_list_tabpages', function()
it('works', function()
eq(1, #nvim('list_tabpages'))
eq(nvim('list_tabpages')[1], nvim('get_current_tabpage'))
@@ -161,7 +192,7 @@ describe('vim_* functions', function()
end)
end)
- describe('replace_termcodes', function()
+ describe('nvim_replace_termcodes', function()
it('escapes K_SPECIAL as K_SPECIAL KS_SPECIAL KE_FILLER', function()
eq('\128\254X', helpers.nvim('replace_termcodes', '\128', true, true, true))
end)
@@ -183,7 +214,7 @@ describe('vim_* functions', function()
end)
end)
- describe('feedkeys', function()
+ describe('nvim_feedkeys', function()
it('CSI escaping', function()
local function on_setup()
-- notice the special char(…) \xe2\80\xa6
@@ -210,7 +241,7 @@ describe('vim_* functions', function()
end)
end)
- describe('err_write', function()
+ describe('nvim_err_write', function()
local screen
before_each(function()
@@ -298,7 +329,7 @@ describe('vim_* functions', function()
end)
end)
- describe('call_atomic', function()
+ describe('nvim_call_atomic', function()
it('works', function()
meths.buf_set_lines(0, 0, -1, true, {'first'})
local req = {
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index bf2bf55fb3..465bda6bc9 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -1,4 +1,3 @@
--- Sanity checks for window_* API calls via msgpack-rpc
local helpers = require('test.functional.helpers')(after_each)
local clear, nvim, curbuf, curbuf_contents, window, curwin, eq, neq,
ok, feed, insert, eval = helpers.clear, helpers.nvim, helpers.curbuf,
@@ -29,7 +28,7 @@ local function is_visible(str)
return false
end
-describe('window_* functions', function()
+describe('api/win', function()
before_each(clear)
describe('get_buf', function()