aboutsummaryrefslogtreecommitdiff
path: root/test/unit/helpers.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/helpers.lua')
-rw-r--r--test/unit/helpers.lua180
1 files changed, 96 insertions, 84 deletions
diff --git a/test/unit/helpers.lua b/test/unit/helpers.lua
index 8d581dac49..ab4a59cfdb 100644
--- a/test/unit/helpers.lua
+++ b/test/unit/helpers.lua
@@ -2,24 +2,24 @@ local ffi = require('ffi')
local formatc = require('test.unit.formatc')
local Set = require('test.unit.set')
local Preprocess = require('test.unit.preprocess')
-local Paths = require('test.cmakeconfig.paths')
local global_helpers = require('test.helpers')
+local paths = global_helpers.paths
local assert = require('luassert')
local say = require('say')
local check_cores = global_helpers.check_cores
local dedent = global_helpers.dedent
local neq = global_helpers.neq
-local map = global_helpers.tbl_map
+local map = vim.tbl_map
local eq = global_helpers.eq
-local trim = global_helpers.trim
+local trim = vim.trim
-- add some standard header locations
-for _, p in ipairs(Paths.include_paths) do
+for _, p in ipairs(paths.include_paths) do
Preprocess.add_to_include_path(p)
end
-local child_pid = nil --- @type integer
+local child_pid = nil --- @type integer?
--- @generic F: function
--- @param func F
--- @return F
@@ -49,7 +49,7 @@ local function child_call(func, ret)
return function(...)
local child_calls = child_calls_mod or child_calls_init
if child_pid ~= 0 then
- child_calls[#child_calls + 1] = {func=func, args={...}}
+ child_calls[#child_calls + 1] = { func = func, args = { ... } }
return ret
else
return func(...)
@@ -62,7 +62,7 @@ end
--- @param func function
local function child_call_once(func, ...)
if child_pid ~= 0 then
- child_calls_mod_once[#child_calls_mod_once + 1] = { func = func, args = {...} }
+ child_calls_mod_once[#child_calls_mod_once + 1] = { func = func, args = { ... } }
else
func(...)
end
@@ -75,7 +75,7 @@ local child_cleanups_mod_once = nil --- @type ChildCall[]?
local function child_cleanup_once(func, ...)
local child_cleanups = child_cleanups_mod_once
if child_pid ~= 0 then
- child_cleanups[#child_cleanups + 1] = {func=func, args={...}}
+ child_cleanups[#child_cleanups + 1] = { func = func, args = { ... } }
else
func(...)
end
@@ -133,25 +133,28 @@ local pragma_pack_id = 1
local function filter_complex_blocks(body)
local result = {} --- @type string[]
- for line in body:gmatch("[^\r\n]+") do
- if not (string.find(line, "(^)", 1, true) ~= nil
- or string.find(line, "_ISwupper", 1, true)
- or string.find(line, "_Float")
- or string.find(line, "__s128")
- or string.find(line, "__u128")
- or string.find(line, "msgpack_zone_push_finalizer")
- or string.find(line, "msgpack_unpacker_reserve_buffer")
- or string.find(line, "value_init_")
- or string.find(line, "UUID_NULL") -- static const uuid_t UUID_NULL = {...}
- or string.find(line, "inline _Bool")) then
+ for line in body:gmatch('[^\r\n]+') do
+ if
+ not (
+ string.find(line, '(^)', 1, true) ~= nil
+ or string.find(line, '_ISwupper', 1, true)
+ or string.find(line, '_Float')
+ or string.find(line, '__s128')
+ or string.find(line, '__u128')
+ or string.find(line, 'msgpack_zone_push_finalizer')
+ or string.find(line, 'msgpack_unpacker_reserve_buffer')
+ or string.find(line, 'value_init_')
+ or string.find(line, 'UUID_NULL') -- static const uuid_t UUID_NULL = {...}
+ or string.find(line, 'inline _Bool')
+ )
+ then
result[#result + 1] = line
end
end
- return table.concat(result, "\n")
+ return table.concat(result, '\n')
end
-
local cdef = ffi.cdef
local cimportstr
@@ -184,9 +187,8 @@ local function cimport(...)
previous_defines = previous_defines_init
cdefs = cdefs_init
end
- for _, path in ipairs({...}) do
- if not (path:sub(1, 1) == '/' or path:sub(1, 1) == '.'
- or path:sub(2, 2) == ':') then
+ for _, path in ipairs({ ... }) do
+ if not (path:sub(1, 1) == '/' or path:sub(1, 1) == '.' or path:sub(2, 2) == ':') then
path = './' .. path
end
if not preprocess_cache[path] then
@@ -205,15 +207,15 @@ local function cimport(...)
body = filter_complex_blocks(body)
-- add the formatted lines to a set
local new_cdefs = Set:new()
- for line in body:gmatch("[^\r\n]+") do
+ for line in body:gmatch('[^\r\n]+') do
line = trim(line)
-- give each #pragma pack an unique id, so that they don't get removed
-- if they are inserted into the set
-- (they are needed in the right order with the struct definitions,
- -- otherwise luajit has wrong memory layouts for the sturcts)
- if line:match("#pragma%s+pack") then
+ -- otherwise luajit has wrong memory layouts for the structs)
+ if line:match('#pragma%s+pack') then
--- @type string
- line = line .. " // " .. pragma_pack_id
+ line = line .. ' // ' .. pragma_pack_id
pragma_pack_id = pragma_pack_id + 1
end
new_cdefs:add(line)
@@ -277,13 +279,13 @@ end
local function alloc_log_new()
local log = {
- log={}, --- @type ChildCallLog[]
- lib=cimport('./src/nvim/memory.h'), --- @type table<string,function>
- original_functions={}, --- @type table<string,function>
- null={['\0:is_null']=true},
+ log = {}, --- @type ChildCallLog[]
+ lib = cimport('./src/nvim/memory.h'), --- @type table<string,function>
+ original_functions = {}, --- @type table<string,function>
+ null = { ['\0:is_null'] = true },
}
- local allocator_functions = {'malloc', 'free', 'calloc', 'realloc'}
+ local allocator_functions = { 'malloc', 'free', 'calloc', 'realloc' }
function log:save_original_functions()
for _, funcname in ipairs(allocator_functions) do
@@ -301,7 +303,7 @@ local function alloc_log_new()
local kk = k
self.lib['mem_' .. k] = function(...)
--- @type ChildCallLog
- local log_entry = { func = kk, args = {...} }
+ local log_entry = { func = kk, args = { ... } }
self.log[#self.log + 1] = log_entry
if kk == 'free' then
self.original_functions[kk](...)
@@ -314,7 +316,9 @@ local function alloc_log_new()
log_entry.args[i] = self.null
end
end
- if self.hook then self:hook(log_entry) end
+ if self.hook then
+ self:hook(log_entry)
+ end
if log_entry.ret then
return log_entry.ret
end
@@ -355,7 +359,7 @@ local function alloc_log_new()
end
end
table.sort(toremove)
- for i = #toremove,1,-1 do
+ for i = #toremove, 1, -1 do
table.remove(self.log, toremove[i])
end
end
@@ -365,11 +369,9 @@ local function alloc_log_new()
log:set_mocks()
end
- function log:before_each()
- end
+ function log:before_each() end
- function log:after_each()
- end
+ function log:after_each() end
log:setup()
@@ -397,13 +399,12 @@ function sc.fork()
end
function sc.pipe()
- local ret = ffi.new('int[2]', {-1, -1})
+ local ret = ffi.new('int[2]', { -1, -1 })
ffi.errno(0)
local res = ffi.C.pipe(ret)
- if (res ~= 0) then
+ if res ~= 0 then
local err = ffi.errno(0)
- assert(res == 0, ("pipe() error: %u: %s"):format(
- err, ffi.string(ffi.C.strerror(err))))
+ assert(res == 0, ('pipe() error: %u: %s'):format(err, ffi.string(ffi.C.strerror(err))))
end
assert(ret[0] ~= -1 and ret[1] ~= -1)
return ret[0], ret[1]
@@ -411,19 +412,16 @@ end
--- @return string
function sc.read(rd, len)
- local ret = ffi.new('char[?]', len, {0})
+ local ret = ffi.new('char[?]', len, { 0 })
local total_bytes_read = 0
ffi.errno(0)
while total_bytes_read < len do
- local bytes_read = tonumber(ffi.C.read(
- rd,
- ffi.cast('void*', ret + total_bytes_read),
- len - total_bytes_read))
+ local bytes_read =
+ tonumber(ffi.C.read(rd, ffi.cast('void*', ret + total_bytes_read), len - total_bytes_read))
if bytes_read == -1 then
local err = ffi.errno(0)
if err ~= ffi.C.kPOSIXErrnoEINTR then
- assert(false, ("read() error: %u: %s"):format(
- err, ffi.string(ffi.C.strerror(err))))
+ assert(false, ('read() error: %u: %s'):format(err, ffi.string(ffi.C.strerror(err))))
end
elseif bytes_read == 0 then
break
@@ -439,15 +437,16 @@ function sc.write(wr, s)
local total_bytes_written = 0
ffi.errno(0)
while total_bytes_written < #s do
- local bytes_written = tonumber(ffi.C.write(
- wr,
- ffi.cast('void*', wbuf + total_bytes_written),
- #s - total_bytes_written))
+ local bytes_written = tonumber(
+ ffi.C.write(wr, ffi.cast('void*', wbuf + total_bytes_written), #s - total_bytes_written)
+ )
if bytes_written == -1 then
local err = ffi.errno(0)
if err ~= ffi.C.kPOSIXErrnoEINTR then
- assert(false, ("write() error: %u: %s ('%s')"):format(
- err, ffi.string(ffi.C.strerror(err)), s))
+ assert(
+ false,
+ ("write() error: %u: %s ('%s')"):format(err, ffi.string(ffi.C.strerror(err)), s)
+ )
end
elseif bytes_written == 0 then
break
@@ -464,7 +463,7 @@ sc.close = ffi.C.close
--- @return integer
function sc.wait(pid)
ffi.errno(0)
- local stat_loc = ffi.new('int[1]', {0})
+ local stat_loc = ffi.new('int[1]', { 0 })
while true do
local r = ffi.C.waitpid(pid, stat_loc, ffi.C.kPOSIXWaitWUNTRACED)
if r == -1 then
@@ -472,8 +471,7 @@ function sc.wait(pid)
if err == ffi.C.kPOSIXErrnoECHILD then
break
elseif err ~= ffi.C.kPOSIXErrnoEINTR then
- assert(false, ("waitpid() error: %u: %s"):format(
- err, ffi.string(ffi.C.strerror(err))))
+ assert(false, ('waitpid() error: %u: %s'):format(err, ffi.string(ffi.C.strerror(err))))
end
else
assert(r == pid)
@@ -489,7 +487,7 @@ sc.exit = ffi.C._exit
local function format_list(lst)
local ret = {} --- @type string[]
for _, v in ipairs(lst) do
- ret[#ret+1] = assert:format({v, n=1})[1]
+ ret[#ret + 1] = assert:format({ v, n = 1 })[1]
end
return table.concat(ret, ', ')
end
@@ -498,9 +496,8 @@ if os.getenv('NVIM_TEST_PRINT_SYSCALLS') == '1' then
for k_, v_ in pairs(sc) do
(function(k, v)
sc[k] = function(...)
- local rets = {v(...)}
- io.stderr:write(('%s(%s) = %s\n'):format(k, format_list({...}),
- format_list(rets)))
+ local rets = { v(...) }
+ io.stderr:write(('%s(%s) = %s\n'):format(k, format_list({ ... }), format_list(rets)))
return unpack(rets)
end
end)(k_, v_)
@@ -512,9 +509,13 @@ local function just_fail(_)
end
say:set('assertion.just_fail.positive', '%s')
say:set('assertion.just_fail.negative', '%s')
-assert:register('assertion', 'just_fail', just_fail,
- 'assertion.just_fail.positive',
- 'assertion.just_fail.negative')
+assert:register(
+ 'assertion',
+ 'just_fail',
+ just_fail,
+ 'assertion.just_fail.positive',
+ 'assertion.just_fail.negative'
+)
local hook_fnamelen = 30
local hook_sfnamelen = 30
@@ -561,7 +562,7 @@ local function child_sethook(wr)
local info = nil --- @type debuginfo?
if use_prev then
info = prev_info
- elseif reason ~= 'tail return' then -- tail return
+ elseif reason ~= 'tail return' then -- tail return
info = debug.getinfo(2, 'nSl')
end
@@ -609,17 +610,20 @@ local function child_sethook(wr)
-- assert(-1 <= lnum and lnum <= 99999)
local lnum_s = lnum == -1 and 'nknwn' or ('%u'):format(lnum)
--- @type string
- local msg = ( -- lua does not support %*
+ local msg = ( -- lua does not support %*
''
.. msgchar
.. whatchar
.. namewhatchar
.. ' '
- .. source .. (' '):rep(hook_sfnamelen - #source)
+ .. source
+ .. (' '):rep(hook_sfnamelen - #source)
.. ':'
- .. funcname .. (' '):rep(hook_fnamelen - #funcname)
+ .. funcname
+ .. (' '):rep(hook_fnamelen - #funcname)
.. ':'
- .. ('0'):rep(hook_numlen - #lnum_s) .. lnum_s
+ .. ('0'):rep(hook_numlen - #lnum_s)
+ .. lnum_s
.. '\n'
)
-- eq(hook_msglen, #msg)
@@ -724,7 +728,7 @@ local function check_child_err(rd)
--- @type string
err = err .. '\nNo end of trace occurred'
end
- local cc_err, cc_emsg = pcall(check_cores, Paths.test_luajit_prg, true)
+ local cc_err, cc_emsg = pcall(check_cores, paths.test_luajit_prg, true)
if not cc_err then
--- @type string
err = err .. '\ncheck_cores failed: ' .. cc_emsg
@@ -742,16 +746,16 @@ local function itp_parent(rd, pid, allow_failure, location)
sc.close(rd)
if not ok then
if allow_failure then
- io.stderr:write('Errorred out ('..status..'):\n' .. tostring(emsg) .. '\n')
+ io.stderr:write('Errorred out (' .. status .. '):\n' .. tostring(emsg) .. '\n')
os.execute([[
sh -c "source ci/common/test.sh
- check_core_dumps --delete \"]] .. Paths.test_luajit_prg .. [[\""]])
+ check_core_dumps --delete \"]] .. paths.test_luajit_prg .. [[\""]])
else
- error(tostring(emsg)..'\nexit code: '..status)
+ error(tostring(emsg) .. '\nexit code: ' .. status)
end
elseif status ~= 0 then
if not allow_failure then
- error("child process errored out with status "..status.."!\n\n"..location)
+ error('child process errored out with status ' .. status .. '!\n\n' .. location)
end
end
end
@@ -760,7 +764,9 @@ local function gen_itp(it)
child_calls_mod = {}
child_calls_mod_once = {}
child_cleanups_mod_once = {}
- preprocess_cache_mod = map(function(v) return v end, preprocess_cache_init)
+ preprocess_cache_mod = map(function(v)
+ return v
+ end, preprocess_cache_init)
previous_defines_mod = previous_defines_init
cdefs_mod = cdefs_init:copy()
local function itp(name, func, allow_failure)
@@ -791,11 +797,15 @@ local function gen_itp(it)
end
local function cppimport(path)
- return cimport(Paths.test_source_path .. '/test/includes/pre/' .. path)
+ return cimport(paths.test_source_path .. '/test/includes/pre/' .. path)
end
-cimport('./src/nvim/types.h', './src/nvim/main.h', './src/nvim/os/time.h',
- './src/nvim/os/fs.h')
+cimport(
+ './src/nvim/types_defs.h',
+ './src/nvim/main.h',
+ './src/nvim/os/time.h',
+ './src/nvim/os/fs.h'
+)
local function conv_enum(etab, eval)
local n = tonumber(eval)
@@ -844,7 +854,7 @@ local function ptr2addr(ptr)
return tonumber(ffi.cast('intptr_t', ffi.cast('void *', ptr)))
end
-local s = ffi.new('char[64]', {0})
+local s = ffi.new('char[64]', { 0 })
local function ptr2key(ptr)
ffi.C.snprintf(s, ffi.sizeof(s), '%p', ffi.cast('void *', ptr))
@@ -853,7 +863,9 @@ end
local function is_asan()
cimport('./src/nvim/version.h')
- local status, res = pcall(function() return lib.version_cflags end)
+ local status, res = pcall(function()
+ return lib.version_cflags
+ end)
if status then
return ffi.string(res):match('-fsanitize=[a-z,]*address')
else
@@ -892,7 +904,7 @@ local module = {
is_asan = is_asan,
}
--- @class test.unit.helpers: test.unit.helpers.module, test.helpers
-module = global_helpers.tbl_extend('error', module, global_helpers)
+module = vim.tbl_extend('error', module, global_helpers)
return function()
return module