mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
Apply small refactor to unit tests
Redefine macro constants as enums in the ffi and import those in their respective test modules.
This commit is contained in:
parent
0677e0ee9c
commit
34538a82f3
@ -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_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
|
||||
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[?]'
|
||||
}
|
||||
|
@ -1,13 +1,21 @@
|
||||
{:cimport, :internalize, :eq, :ffi} = require 'test.unit.helpers'
|
||||
{:cimport, :internalize, :eq, :ffi, :lib, :cstr} = require 'test.unit.helpers'
|
||||
|
||||
misc1 = cimport './src/misc1.h'
|
||||
cstr = ffi.typeof 'char[?]'
|
||||
--misc1 = cimport './src/misc1.h'
|
||||
|
||||
-- TODO extract constants from vim.h
|
||||
-- remove these statements once 'cimport' is working properly for misc1.h
|
||||
misc1 = lib
|
||||
ffi.cdef [[
|
||||
enum FPC {
|
||||
FPC_SAME = 1, FPC_DIFF = 2, FPC_NOTX = 4, FPC_DIFFX = 6, FPC_SAMEX = 7
|
||||
};
|
||||
int fullpathcmp(char_u *s1, char_u *s2, int checkname);
|
||||
]]
|
||||
|
||||
-- import constants parsed by ffi
|
||||
{:FPC_SAME, :FPC_DIFF, :FPC_NOTX, :FPC_DIFFX, :FPC_SAMEX} = lib
|
||||
|
||||
describe 'misc1 function', ->
|
||||
describe 'fullpathcmp', ->
|
||||
ffi.cdef 'int fullpathcmp(char *s1, char *s2, int checkname);'
|
||||
|
||||
fullpathcmp = (s1, s2, cn) ->
|
||||
s1 = cstr (string.len s1) + 1, s1
|
||||
@ -17,12 +25,6 @@ describe 'misc1 function', ->
|
||||
f1 = 'f1.o'
|
||||
f2 = 'f2.o'
|
||||
|
||||
FPC_SAME = 1
|
||||
FPC_DIFF = 2
|
||||
FPC_NOTX = 4
|
||||
FPC_DIFFX = 6
|
||||
FPC_SAMEX = 7
|
||||
|
||||
before_each ->
|
||||
-- create the three files that will be used in this spec
|
||||
(io.open f1, 'w').close!
|
||||
|
@ -1,16 +1,22 @@
|
||||
{:cimport, :internalize, :eq, :ffi} = require 'test.unit.helpers'
|
||||
{:cimport, :internalize, :eq, :ffi, :lib, :cstr} = require 'test.unit.helpers'
|
||||
require 'lfs'
|
||||
|
||||
fs = cimport './src/fs.h'
|
||||
cstr = ffi.typeof 'char[?]'
|
||||
-- fs = cimport './src/os/os.h'
|
||||
-- remove these statements once 'cimport' is working properly for misc1.h
|
||||
fs = lib
|
||||
ffi.cdef [[
|
||||
enum OKFAIL {
|
||||
OK = 1, FAIL = 0
|
||||
};
|
||||
int mch_dirname(char_u *buf, int len);
|
||||
]]
|
||||
|
||||
-- import constants parsed by ffi
|
||||
{:OK, :FAIL} = lib
|
||||
|
||||
describe 'fs function', ->
|
||||
|
||||
export OK = 1
|
||||
export FAIL = 0
|
||||
|
||||
describe 'mch_dirname', ->
|
||||
ffi.cdef 'int mch_dirname(char *buf, int len);'
|
||||
|
||||
mch_dirname = (buf, len) ->
|
||||
fs.mch_dirname buf, len
|
||||
|
Loading…
Reference in New Issue
Block a user