aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-03-04 11:26:37 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-03-04 11:26:37 -0300
commit34538a82f360da742ca40ea57c38ad40c99a17e7 (patch)
tree3c02f30eabe8481a7bb7df16e824012069ee0dae
parent0677e0ee9c991449fbe6503f3c55dc749d5fd573 (diff)
downloadrneovim-34538a82f360da742ca40ea57c38ad40c99a17e7.tar.gz
rneovim-34538a82f360da742ca40ea57c38ad40c99a17e7.tar.bz2
rneovim-34538a82f360da742ca40ea57c38ad40c99a17e7.zip
Apply small refactor to unit tests
Redefine macro constants as enums in the ffi and import those in their respective test modules.
-rw-r--r--test/unit/helpers.moon33
-rw-r--r--test/unit/misc1.moon24
-rw-r--r--test/unit/os/fs.moon20
3 files changed, 45 insertions, 32 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[?]'
}
diff --git a/test/unit/misc1.moon b/test/unit/misc1.moon
index a795b03dd9..d67f867913 100644
--- a/test/unit/misc1.moon
+++ b/test/unit/misc1.moon
@@ -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!
diff --git a/test/unit/os/fs.moon b/test/unit/os/fs.moon
index 60805eb488..f9457b31ef 100644
--- a/test/unit/os/fs.moon
+++ b/test/unit/os/fs.moon
@@ -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);
+]]
-describe 'fs function', ->
+-- import constants parsed by ffi
+{:OK, :FAIL} = lib
- export OK = 1
- export FAIL = 0
+describe 'fs function', ->
describe 'mch_dirname', ->
- ffi.cdef 'int mch_dirname(char *buf, int len);'
mch_dirname = (buf, len) ->
fs.mch_dirname buf, len