aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/functional/api/compatibility_spec.lua65
-rw-r--r--test/functional/eval/api_functions_spec.lua3
-rw-r--r--test/functional/eval/msgpack_functions_spec.lua2
-rw-r--r--test/functional/fixtures/api-info/0.mpackbin0 -> 7873 bytes
4 files changed, 67 insertions, 3 deletions
diff --git a/test/functional/api/compatibility_spec.lua b/test/functional/api/compatibility_spec.lua
new file mode 100644
index 0000000000..e0fc625b46
--- /dev/null
+++ b/test/functional/api/compatibility_spec.lua
@@ -0,0 +1,65 @@
+
+local helpers = require('test.functional.helpers')(after_each)
+local lfs = require('lfs')
+local mpack = require('mpack')
+local clear, eq, neq = helpers.clear, helpers.eq, helpers.neq
+
+local read_mpack_file = function(fname)
+ local fd = io.open(fname, 'rb')
+ local data = fd:read('*a')
+ fd:close()
+ local unpack = mpack.Unpacker()
+ return unpack(data)
+end
+
+-- ignore metadata in API function spec
+local remove_function_metadata = function(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] = ''
+ end
+end
+
+clear()
+local api_level = helpers.call('api_info')['api_level']
+
+describe('api compatibility', function()
+ before_each(clear)
+
+ it("version metadata is sane", function()
+ local info = helpers.call('api_info')
+ local current = info['api_level']['current']
+ local compatibility = info['api_level']['compatibility']
+ neq(current, nil)
+ neq(compatibility, nil)
+ assert(current >= compatibility)
+ end)
+
+ for ver = api_level['compatibility'], api_level['current'] do
+ local path = 'test/functional/fixtures/api-info/' .. tostring(ver) .. '.mpack'
+ it('are backwards compatible with api level '..ver, function()
+ if lfs.attributes(path,"mode") ~= "file" then
+ pending("No fixture found, skipping test")
+ return
+ end
+
+ local old_api = read_mpack_file(path)
+ local api = helpers.call('api_info')
+
+ for _, fspec in ipairs(old_api['functions']) do
+ remove_function_metadata(fspec)
+ for _, fspec_new in ipairs(api['functions']) do
+ if fspec['name'] == fspec_new['name'] then
+ remove_function_metadata(fspec_new)
+ eq(fspec, fspec_new)
+ end
+ end
+ end
+ end)
+ end
+end)
diff --git a/test/functional/eval/api_functions_spec.lua b/test/functional/eval/api_functions_spec.lua
index 2ef67e7808..5345c9782d 100644
--- a/test/functional/eval/api_functions_spec.lua
+++ b/test/functional/eval/api_functions_spec.lua
@@ -106,7 +106,7 @@ describe('api functions', function()
it('have metadata accessible with api_info()', function()
local api_keys = eval("sort(keys(api_info()))")
- eq({'error_types', 'functions', 'types'}, api_keys)
+ eq({'api_level', 'error_types', 'functions', 'types'}, api_keys)
end)
it('are highlighted by vim.vim syntax file', function()
@@ -144,5 +144,4 @@ describe('api functions', function()
]])
screen:detach()
end)
-
end)
diff --git a/test/functional/eval/msgpack_functions_spec.lua b/test/functional/eval/msgpack_functions_spec.lua
index 5b87b05652..ae7e1b5609 100644
--- a/test/functional/eval/msgpack_functions_spec.lua
+++ b/test/functional/eval/msgpack_functions_spec.lua
@@ -460,7 +460,7 @@ describe('msgpackparse() function', function()
eval(cmd)
eval(cmd) -- do it again (try to force segfault)
local api_info = eval(cmd) -- do it again
- eq({'error_types', 'functions', 'types'}, api_info)
+ eq({'api_level', 'error_types', 'functions', 'types'}, api_info)
end)
it('fails when called with no arguments', function()
diff --git a/test/functional/fixtures/api-info/0.mpack b/test/functional/fixtures/api-info/0.mpack
new file mode 100644
index 0000000000..75b236a3c1
--- /dev/null
+++ b/test/functional/fixtures/api-info/0.mpack
Binary files differ