diff options
Diffstat (limited to 'test/unit/helpers.lua')
-rw-r--r-- | test/unit/helpers.lua | 180 |
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 |