neovim/test/functional/lua/ffi_spec.lua
luukvbaal 8147d3df28
vim-patch:9.0.0844: handling 'statusline' errors is spread out (#20992)
Problem:    Handling 'statusline' errors is spread out.
Solution:   Pass the option name to the lower levels so the option can be
            reset there when an error is encountered. (Luuk van Baal,
            closes vim/vim#11467)

7b224fdf4a
2022-11-08 07:21:22 +08:00

65 lines
1.4 KiB
Lua

local helpers = require('test.functional.helpers')(after_each)
local eq = helpers.eq
local exec_lua = helpers.exec_lua
local clear = helpers.clear
before_each(clear)
describe('ffi.cdef', function()
it('can use Neovim core functions', function()
if not exec_lua("return pcall(require, 'ffi')") then
pending('missing LuaJIT FFI')
end
eq(12, exec_lua[[
local ffi = require('ffi')
ffi.cdef('int curwin_col_off(void);')
vim.cmd('set number numberwidth=4 signcolumn=yes:4')
return ffi.C.curwin_col_off()
]])
eq(20, exec_lua[=[
local ffi = require('ffi')
ffi.cdef[[
typedef unsigned char char_u;
typedef struct window_S win_T;
typedef struct {} stl_hlrec_t;
typedef struct {} StlClickRecord;
typedef struct {} Error;
win_T *find_window_by_handle(int Window, Error *err);
int build_stl_str_hl(
win_T *wp,
char *out,
size_t outlen,
char *fmt,
char *opt_name,
int opt_scope,
int fillchar,
int maxwidth,
stl_hlrec_t **hltab,
StlClickRecord **tabtab
);
]]
return ffi.C.build_stl_str_hl(
ffi.C.find_window_by_handle(0, ffi.new('Error')),
ffi.new('char[1024]'),
1024,
ffi.cast('char*', 'StatusLineOfLength20'),
nil,
0,
0,
0,
nil,
nil
)
]=])
end)
end)