diff options
Diffstat (limited to 'test/unit/helpers.moon')
-rw-r--r-- | test/unit/helpers.moon | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/test/unit/helpers.moon b/test/unit/helpers.moon index 5705db88a6..c12a6473f6 100644 --- a/test/unit/helpers.moon +++ b/test/unit/helpers.moon @@ -3,24 +3,27 @@ ffi = require 'ffi' -- load neovim shared library libnvim = ffi.load './build/src/libnvim-test.so' --- Luajit ffi parser only understands function signatures. --- This helper function normalizes headers, passes to ffi and returns the --- library pointer +-- Luajit ffi parser doesn't understand preprocessor directives, so +-- this helper function removes common directives before passing it the to ffi. +-- It will return a pointer to the library table, emulating 'requires' cimport = (path) -> - -- Can't parse some of vim types, perhaps need to define those before - -- automatically importing to ffi - - -- header_file = io.open path, 'rb' - -- header = header_file\read '*a' - -- header_file.close! - -- header = string.gsub header, '#include[^\n]*\n', '' - -- header = string.gsub header, '#ifndef[^\n]*\n', '' - -- header = string.gsub header, '#define[^\n]*\n', '' - -- header = string.gsub header, '#endif[^\n]*\n', '' - -- ffi.cdef header + header_file = io.open path, 'rb' + + if not header_file + error "cannot find #{path}" + + header = header_file\read '*a' + header_file.close! + header = string.gsub header, '#include[^\n]*\n', '' + header = string.gsub header, '#ifndef[^\n]*\n', '' + header = string.gsub header, '#define[^\n]*\n', '' + header = string.gsub header, '#endif[^\n]*\n', '' + ffi.cdef header return libnvim +cimport './src/types.h' + -- take a pointer to a C-allocated string and return an interned -- version while also freeing the memory internalize = (cdata) -> @@ -32,4 +35,6 @@ return { internalize: internalize eq: (expected, actual) -> assert.are.same expected, actual ffi: ffi + lib: libnvim + cstr: ffi.typeof 'char[?]' } |