mirror of
https://github.com/neovim/neovim.git
synced 2026-06-15 16:23:48 +00:00
The new lua based runner replaces Makefile, runnvim.sh and runnvim.vim As it happens, we run a `--headless` nvim inside a `:terminal` layer, this is pointless. Also there is still a lot remnants for oldesttests, but we don't have any except for test1.in which just checks the environment for following, nonexistant oldesttests. so just skip that. For now, the actual vimscript code which runs in vim-under-test is completely unchanged. On macos, luajit is finally working with the latest ziglua master. Also fix some minor bugs regarding locales, such as incorrect HAVE_WORKING_LIBINTL checks
161 lines
3.7 KiB
Lua
161 lines
3.7 KiB
Lua
-- execute old style tests
|
|
|
|
-- when compared to the testdir/Makefile based approach, this replaces
|
|
-- all wrapper process logic:
|
|
-- Makefile
|
|
-- runnvim.sh and its library test.sh
|
|
-- runnvim.vim (wrapper which runs a nested vim inside a terminal)
|
|
|
|
-- it DOES NOT not replace the logic running inside the nvim-under-test
|
|
-- runtest.vim and its libraries setup.vim, shared.vim, check.vim
|
|
|
|
local nvim_bin = vim.v.progpath -- must be absolute
|
|
|
|
vim.api.nvim_set_current_dir('test/old/testdir/')
|
|
|
|
local function readable(fn)
|
|
return vim.fn.filereadable(fn) ~= 0
|
|
end
|
|
|
|
local errlog = 'test.log'
|
|
local messages = 'messages'
|
|
local starttime = 'starttime'
|
|
local gen_opt_log = 'gen_opt_test.log'
|
|
|
|
function oksystem(args)
|
|
local res = vim.system(args, {}):wait()
|
|
if res.code ~= 0 then
|
|
error(vim.inspect(args) .. ' failed:\n' .. res.stdout .. res.stderr)
|
|
end
|
|
return res
|
|
end
|
|
|
|
function clean_output()
|
|
for _, f in ipairs { errlog, messages, starttime, gen_opt_log, 'opt_test.vim' } do
|
|
vim.uv.fs_unlink(f)
|
|
end
|
|
-- check status, some tests mess with perms so this could fail:
|
|
oksystem { 'bash', '-c', 'rm -rf X* viminfo test.out test.ok' }
|
|
end
|
|
|
|
function if_nonempty(rawtext, name)
|
|
text = vim.trim(rawtext)
|
|
if #text > 0 then
|
|
if name then
|
|
print('== ' .. name)
|
|
end
|
|
print(text)
|
|
print(name and '== END ' .. name or '\n')
|
|
end
|
|
end
|
|
|
|
function if_exists(fn, name)
|
|
local fil = io.open(fn)
|
|
if fil then
|
|
if_nonempty(fil:read '*a', name)
|
|
fil:close()
|
|
return true
|
|
end
|
|
end
|
|
|
|
local verbose = vim.env.VERBOSE
|
|
|
|
function run_nvim(...)
|
|
local cmd = vim.system(
|
|
{ nvim_bin, '-u', 'NONE', '-i', 'NONE', '--headless', ... },
|
|
{ env = { VIMRUNTIME = '../../../runtime' } }
|
|
)
|
|
return cmd:wait()
|
|
end
|
|
|
|
function run_test(testfile)
|
|
if not vim.endswith(testfile, '.vim') then
|
|
error 'not an oldtest'
|
|
end
|
|
|
|
clean_output()
|
|
|
|
if testfile == 'test_options_all.vim' then
|
|
local res = run_nvim(
|
|
'-S',
|
|
'gen_opt_test.vim',
|
|
'../../../src/nvim/options.lua',
|
|
'../../../runtime/doc/options.txt'
|
|
)
|
|
|
|
if if_exists(gen_opt_log, 'GEN opt_test.vim') or res.code > 0 then
|
|
return false
|
|
end
|
|
end
|
|
|
|
local resfile = string.sub(testfile, 1, -4) .. 'res'
|
|
vim.uv.fs_unlink(resfile)
|
|
assert(not readable(resfile))
|
|
|
|
local opts = 'set shortmess-=F backupdir=. undodir=. viewdir=.'
|
|
local res = run_nvim('--cmd', opts, '-S', 'runtest.vim', testfile)
|
|
local passed = (readable(resfile) and res.code == 0)
|
|
|
|
if_exists(messages)
|
|
|
|
if verbose or not passed then
|
|
if_nonempty(res.stdout, 'STDOUT')
|
|
if_nonempty(res.stderr, 'STDERR')
|
|
-- if_exists(starttime, "starttime")
|
|
if_exists(errlog, 'test.log')
|
|
end
|
|
return passed
|
|
end
|
|
|
|
local function all_tests()
|
|
local nested_tests = {}
|
|
local alot = io.open('test_alot.vim')
|
|
local sourcepat = '^source (test_.*%.vim)$'
|
|
for line in alot:lines() do
|
|
local m = string.match(line, sourcepat)
|
|
if m then
|
|
nested_tests[m] = true
|
|
end
|
|
end
|
|
alot:close()
|
|
|
|
local files = {}
|
|
for name, type in vim.fs.dir('.') do
|
|
match = string.match(name, '^test_.*%.vim$')
|
|
if match then
|
|
if nested_tests[match] then
|
|
nested_tests[match] = nil
|
|
elseif match == 'test_largefile.vim' then
|
|
-- ignored: uses too much resources to run on CI
|
|
else
|
|
table.insert(files, match)
|
|
end
|
|
end
|
|
end
|
|
return files
|
|
end
|
|
|
|
local files
|
|
if #arg > 0 then
|
|
files = {}
|
|
for _, a in ipairs(arg) do
|
|
table.insert(files, string.match(a, '[^/]*$'))
|
|
end
|
|
else
|
|
files = all_tests()
|
|
end
|
|
|
|
local count = #files
|
|
local failures = {}
|
|
for i, fil in ipairs(files) do
|
|
print('run: ', fil)
|
|
if not run_test(fil) then
|
|
table.insert(failures, fil)
|
|
end
|
|
end
|
|
|
|
if #failures > 0 then
|
|
print('failed:', vim.inspect(failures))
|
|
vim.cmd 'cquit'
|
|
end
|