mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	API level is disconnected from NVIM version. The API metadata holds the
current API level, and the lowest backwards-compatible level supported
by this instance.
Release 0.1.6 is the first release that reports the Nvim version and API
level.
    metadata['version'] = {
      major: 0,
      minor: 1,
      patch: 6,
      api_level: 1,
      api_compatible: 0,
      api_prerelease: false,
    }
The API level may remain unchanged across Nvim releases if the API has
not changed.
When changing the API,
    - set NVIM_API_PRERELEASE to true
    - increment NVIM_API_LEVEL (at most once per Nvim version)
    - adjust NVIM_API_LEVEL_COMPAT if backwards-compatibility was broken
api_level_0.mpack was generated from Nvim 0.1.5 with:
    nvim --api-info
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
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)
 |