mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
unittests: Move some functions into helpers modules
This commit is contained in:
parent
1265da0288
commit
919223c23a
@ -760,6 +760,29 @@ end
|
|||||||
|
|
||||||
cimport('./src/nvim/types.h', './src/nvim/main.h', './src/nvim/os/time.h')
|
cimport('./src/nvim/types.h', './src/nvim/main.h', './src/nvim/os/time.h')
|
||||||
|
|
||||||
|
local function conv_enum(etab, eval)
|
||||||
|
local n = tonumber(eval)
|
||||||
|
return etab[n] or n
|
||||||
|
end
|
||||||
|
|
||||||
|
local function array_size(arr)
|
||||||
|
return ffi.sizeof(arr) / ffi.sizeof(arr[0])
|
||||||
|
end
|
||||||
|
|
||||||
|
local function kvi_size(kvi)
|
||||||
|
return array_size(kvi.init_array)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function kvi_init(kvi)
|
||||||
|
kvi.capacity = kvi_size(kvi)
|
||||||
|
kvi.items = kvi.init_array
|
||||||
|
return kvi
|
||||||
|
end
|
||||||
|
|
||||||
|
local function kvi_new(ct)
|
||||||
|
return kvi_init(ffi.new(ct))
|
||||||
|
end
|
||||||
|
|
||||||
local module = {
|
local module = {
|
||||||
cimport = cimport,
|
cimport = cimport,
|
||||||
cppimport = cppimport,
|
cppimport = cppimport,
|
||||||
@ -780,6 +803,11 @@ local module = {
|
|||||||
child_call_once = child_call_once,
|
child_call_once = child_call_once,
|
||||||
child_cleanup_once = child_cleanup_once,
|
child_cleanup_once = child_cleanup_once,
|
||||||
sc = sc,
|
sc = sc,
|
||||||
|
conv_enum = conv_enum,
|
||||||
|
array_size = array_sive,
|
||||||
|
kvi_size = kvi_size,
|
||||||
|
kvi_init = kvi_init,
|
||||||
|
kvi_new = kvi_new,
|
||||||
}
|
}
|
||||||
return function()
|
return function()
|
||||||
return module
|
return module
|
||||||
|
@ -1,11 +1,18 @@
|
|||||||
local helpers = require('test.unit.helpers')(after_each)
|
local helpers = require('test.unit.helpers')(after_each)
|
||||||
|
local viml_helpers = require('test.unit.viml.helpers')
|
||||||
local itp = helpers.gen_itp(it)
|
local itp = helpers.gen_itp(it)
|
||||||
|
|
||||||
local child_call_once = helpers.child_call_once
|
local child_call_once = helpers.child_call_once
|
||||||
|
local conv_enum = helpers.conv_enum
|
||||||
local cimport = helpers.cimport
|
local cimport = helpers.cimport
|
||||||
local ffi = helpers.ffi
|
local ffi = helpers.ffi
|
||||||
local eq = helpers.eq
|
local eq = helpers.eq
|
||||||
|
|
||||||
|
local pline2lua = viml_helpers.pline2lua
|
||||||
|
local new_pstate = viml_helpers.new_pstate
|
||||||
|
local intchar2lua = viml_helpers.intchar2lua
|
||||||
|
local pstate_set_str = viml_helpers.pstate_set_str
|
||||||
|
|
||||||
local lib = cimport('./src/nvim/viml/parser/expressions.h')
|
local lib = cimport('./src/nvim/viml/parser/expressions.h')
|
||||||
|
|
||||||
local eltkn_type_tab, eltkn_cmp_type_tab, ccs_tab, eltkn_mul_type_tab
|
local eltkn_type_tab, eltkn_cmp_type_tab, ccs_tab, eltkn_mul_type_tab
|
||||||
@ -71,114 +78,23 @@ child_call_once(function()
|
|||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function array_size(arr)
|
|
||||||
return ffi.sizeof(arr) / ffi.sizeof(arr[0])
|
|
||||||
end
|
|
||||||
|
|
||||||
local function kvi_size(kvi)
|
|
||||||
return array_size(kvi.init_array)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function kvi_init(kvi)
|
|
||||||
kvi.capacity = kvi_size(kvi)
|
|
||||||
kvi.items = kvi.init_array
|
|
||||||
return kvi
|
|
||||||
end
|
|
||||||
|
|
||||||
local function kvi_new(ct)
|
|
||||||
return kvi_init(ffi.new(ct))
|
|
||||||
end
|
|
||||||
|
|
||||||
local function new_pstate(strings)
|
|
||||||
local strings_idx = 0
|
|
||||||
local function get_line(_, ret_pline)
|
|
||||||
strings_idx = strings_idx + 1
|
|
||||||
local str = strings[strings_idx]
|
|
||||||
local data, size
|
|
||||||
if type(str) == 'string' then
|
|
||||||
data = str
|
|
||||||
size = #str
|
|
||||||
elseif type(str) == 'nil' then
|
|
||||||
data = nil
|
|
||||||
size = 0
|
|
||||||
elseif type(str) == 'table' then
|
|
||||||
data = str.data
|
|
||||||
size = str.size
|
|
||||||
elseif type(str) == 'function' then
|
|
||||||
data, size = str()
|
|
||||||
size = size or 0
|
|
||||||
end
|
|
||||||
ret_pline.data = data
|
|
||||||
ret_pline.size = size
|
|
||||||
ret_pline.allocated = false
|
|
||||||
end
|
|
||||||
local pline_init = {
|
|
||||||
data = nil,
|
|
||||||
size = 0,
|
|
||||||
allocated = false,
|
|
||||||
}
|
|
||||||
local state = {
|
|
||||||
reader = {
|
|
||||||
get_line = get_line,
|
|
||||||
cookie = nil,
|
|
||||||
conv = {
|
|
||||||
vc_type = 0,
|
|
||||||
vc_factor = 1,
|
|
||||||
vc_fail = false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
pos = { line = 0, col = 0 },
|
|
||||||
colors = kvi_new('ParserHighlight'),
|
|
||||||
can_continuate = false,
|
|
||||||
}
|
|
||||||
local ret = ffi.new('ParserState', state)
|
|
||||||
kvi_init(ret.reader.lines)
|
|
||||||
kvi_init(ret.stack)
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
||||||
local function conv_enum(etab, eval)
|
|
||||||
local n = tonumber(eval)
|
|
||||||
return etab[n] or n
|
|
||||||
end
|
|
||||||
|
|
||||||
local function conv_eltkn_type(typ)
|
local function conv_eltkn_type(typ)
|
||||||
return conv_enum(eltkn_type_tab, typ)
|
return conv_enum(eltkn_type_tab, typ)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function pline2lua(pline)
|
|
||||||
return ffi.string(pline.data, pline.size)
|
|
||||||
end
|
|
||||||
|
|
||||||
local bracket_types = {
|
local bracket_types = {
|
||||||
Bracket = true,
|
Bracket = true,
|
||||||
FigureBrace = true,
|
FigureBrace = true,
|
||||||
Parenthesis = true,
|
Parenthesis = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function intchar2lua(ch)
|
|
||||||
ch = tonumber(ch)
|
|
||||||
return (20 <= ch and ch < 127) and ('%c'):format(ch) or ch
|
|
||||||
end
|
|
||||||
|
|
||||||
local function eltkn2lua(pstate, tkn)
|
local function eltkn2lua(pstate, tkn)
|
||||||
local ret = {
|
local ret = {
|
||||||
type = conv_eltkn_type(tkn.type),
|
type = conv_eltkn_type(tkn.type),
|
||||||
len = tonumber(tkn.len),
|
|
||||||
start = { line = tonumber(tkn.start.line), col = tonumber(tkn.start.col) },
|
|
||||||
}
|
}
|
||||||
if ret.start.line < pstate.reader.lines.size then
|
pstate_set_str(pstate, tkn.start, tkn.len, ret)
|
||||||
local pstr = pline2lua(pstate.reader.lines.items[ret.start.line])
|
if not ret.error and (#(ret.str) ~= ret.len) then
|
||||||
if ret.start.col >= #pstr then
|
ret.error = '#str /= len'
|
||||||
ret.error = 'start.col >= #pstr'
|
|
||||||
else
|
|
||||||
ret.str = pstr:sub(ret.start.col + 1, ret.start.col + ret.len)
|
|
||||||
if #(ret.str) ~= ret.len then
|
|
||||||
ret.error = '#str /= len'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
ret.error = 'start.line >= pstate.reader.lines.size'
|
|
||||||
end
|
end
|
||||||
if ret.type == 'Comparison' then
|
if ret.type == 'Comparison' then
|
||||||
ret.data = {
|
ret.data = {
|
||||||
|
97
test/unit/viml/helpers.lua
Normal file
97
test/unit/viml/helpers.lua
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
local helpers = require('test.unit.helpers')(nil)
|
||||||
|
|
||||||
|
local ffi = helpers.ffi
|
||||||
|
local kvi_new = helpers.kvi_new
|
||||||
|
local kvi_init = helpers.kvi_init
|
||||||
|
|
||||||
|
local function new_pstate(strings)
|
||||||
|
local strings_idx = 0
|
||||||
|
local function get_line(_, ret_pline)
|
||||||
|
strings_idx = strings_idx + 1
|
||||||
|
local str = strings[strings_idx]
|
||||||
|
local data, size
|
||||||
|
if type(str) == 'string' then
|
||||||
|
data = str
|
||||||
|
size = #str
|
||||||
|
elseif type(str) == 'nil' then
|
||||||
|
data = nil
|
||||||
|
size = 0
|
||||||
|
elseif type(str) == 'table' then
|
||||||
|
data = str.data
|
||||||
|
size = str.size
|
||||||
|
elseif type(str) == 'function' then
|
||||||
|
data, size = str()
|
||||||
|
size = size or 0
|
||||||
|
end
|
||||||
|
ret_pline.data = data
|
||||||
|
ret_pline.size = size
|
||||||
|
ret_pline.allocated = false
|
||||||
|
end
|
||||||
|
local pline_init = {
|
||||||
|
data = nil,
|
||||||
|
size = 0,
|
||||||
|
allocated = false,
|
||||||
|
}
|
||||||
|
local state = {
|
||||||
|
reader = {
|
||||||
|
get_line = get_line,
|
||||||
|
cookie = nil,
|
||||||
|
conv = {
|
||||||
|
vc_type = 0,
|
||||||
|
vc_factor = 1,
|
||||||
|
vc_fail = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pos = { line = 0, col = 0 },
|
||||||
|
colors = kvi_new('ParserHighlight'),
|
||||||
|
can_continuate = false,
|
||||||
|
}
|
||||||
|
local ret = ffi.new('ParserState', state)
|
||||||
|
kvi_init(ret.reader.lines)
|
||||||
|
kvi_init(ret.stack)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
local function intchar2lua(ch)
|
||||||
|
ch = tonumber(ch)
|
||||||
|
return (20 <= ch and ch < 127) and ('%c'):format(ch) or ch
|
||||||
|
end
|
||||||
|
|
||||||
|
local function pline2lua(pline)
|
||||||
|
return ffi.string(pline.data, pline.size)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function pstate_str(pstate, start, len)
|
||||||
|
local str = nil
|
||||||
|
local err = nil
|
||||||
|
if start.line < pstate.reader.lines.size then
|
||||||
|
local pstr = pline2lua(pstate.reader.lines.items[start.line])
|
||||||
|
if start.col >= #pstr then
|
||||||
|
err = 'start.col >= #pstr'
|
||||||
|
else
|
||||||
|
str = pstr:sub(tonumber(start.col) + 1, tonumber(start.col + len))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
err = 'start.line >= pstate.reader.lines.size'
|
||||||
|
end
|
||||||
|
return str, err
|
||||||
|
end
|
||||||
|
|
||||||
|
local function pstate_set_str(pstate, start, len, ret)
|
||||||
|
ret = ret or {}
|
||||||
|
ret.start = {
|
||||||
|
line = tonumber(start.line),
|
||||||
|
col = tonumber(start.col)
|
||||||
|
}
|
||||||
|
ret.len = tonumber(len)
|
||||||
|
ret.str, ret.error = pstate_str(pstate, start, len)
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
pline2lua = pline2lua,
|
||||||
|
pstate_str = pstate_str,
|
||||||
|
new_pstate = new_pstate,
|
||||||
|
intchar2lua = intchar2lua,
|
||||||
|
pstate_set_str = pstate_set_str,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user