ffi_spec.lua 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. local helpers = require('test.functional.helpers')(after_each)
  2. local eq = helpers.eq
  3. local exec_lua = helpers.exec_lua
  4. local clear = helpers.clear
  5. before_each(clear)
  6. describe('ffi.cdef', function()
  7. it('can use Neovim core functions', function()
  8. if not exec_lua("return pcall(require, 'ffi')") then
  9. pending('missing LuaJIT FFI')
  10. end
  11. eq(12, exec_lua[[
  12. local ffi = require('ffi')
  13. ffi.cdef('int curwin_col_off(void);')
  14. vim.cmd('set number numberwidth=4 signcolumn=yes:4')
  15. return ffi.C.curwin_col_off()
  16. ]])
  17. eq(20, exec_lua[=[
  18. local ffi = require('ffi')
  19. ffi.cdef[[
  20. typedef unsigned char char_u;
  21. typedef struct window_S win_T;
  22. typedef struct {} stl_hlrec_t;
  23. typedef struct {} StlClickRecord;
  24. typedef struct {} Error;
  25. win_T *find_window_by_handle(int Window, Error *err);
  26. int build_stl_str_hl(
  27. win_T *wp,
  28. char_u *out,
  29. size_t outlen,
  30. char_u *fmt,
  31. int use_sandbox,
  32. char_u fillchar,
  33. int maxwidth,
  34. stl_hlrec_t **hltab,
  35. StlClickRecord **tabtab
  36. );
  37. ]]
  38. return ffi.C.build_stl_str_hl(
  39. ffi.C.find_window_by_handle(0, ffi.new('Error')),
  40. ffi.new('char_u[1024]'),
  41. 1024,
  42. ffi.cast('char_u*', 'StatusLineOfLength20'),
  43. 0,
  44. 0,
  45. 0,
  46. nil,
  47. nil
  48. )
  49. ]=])
  50. end)
  51. end)