unittests: Do gc after reporting error, not before

Reason: test may contain cleanup at the endwhich is needed for GC to work 
properly, but is not done if test fails. With collectgarbage() in former 
position it would crash when collecting garbage.
This commit is contained in:
ZyX
2017-12-24 17:42:23 +03:00
parent 32689aa5be
commit 2923e8533d

View File

@@ -650,8 +650,6 @@ local function itp_child(wr, func)
collectgarbage('stop') collectgarbage('stop')
child_sethook(wr) child_sethook(wr)
err, emsg = pcall(func) err, emsg = pcall(func)
collectgarbage('restart')
collectgarbage()
debug.sethook() debug.sethook()
end end
emsg = tostring(emsg) emsg = tostring(emsg)
@@ -662,14 +660,15 @@ local function itp_child(wr, func)
end end
sc.write(wr, ('-\n%05u\n%s'):format(#emsg, emsg)) sc.write(wr, ('-\n%05u\n%s'):format(#emsg, emsg))
deinit() deinit()
sc.close(wr)
sc.exit(1)
else else
sc.write(wr, '+\n') sc.write(wr, '+\n')
deinit() deinit()
sc.close(wr)
sc.exit(0)
end end
collectgarbage('restart')
collectgarbage()
sc.write(wr, '$\n')
sc.close(wr)
sc.exit(err and 0 or 1)
end end
local function check_child_err(rd) local function check_child_err(rd)
@@ -695,33 +694,13 @@ local function check_child_err(rd)
end end
end end
local res = sc.read(rd, 2) local res = sc.read(rd, 2)
if #res ~= 2 then if #res == 2 then
local error local err = ''
if #trace == 0 then if res ~= '+\n' then
error = '\nTest crashed, no trace available\n'
else
error = '\nTest crashed, trace:\n' .. tracehelp
for i = 1, #trace do
error = error .. trace[i]
end
end
if not did_traceline then
error = error .. '\nNo end of trace occurred'
end
local cc_err, cc_emsg = pcall(check_cores, Paths.test_luajit_prg, true)
if not cc_err then
error = error .. '\ncheck_cores failed: ' .. cc_emsg
end
assert.just_fail(error)
end
if res == '+\n' then
return
end
eq('-\n', res) eq('-\n', res)
local len_s = sc.read(rd, 5) local len_s = sc.read(rd, 5)
local len = tonumber(len_s) local len = tonumber(len_s)
neq(0, len) neq(0, len)
local err = ''
if os.getenv('NVIM_TEST_TRACE_ON_ERROR') == '1' and #trace ~= 0 then if os.getenv('NVIM_TEST_TRACE_ON_ERROR') == '1' and #trace ~= 0 then
err = '\nTest failed, trace:\n' .. tracehelp err = '\nTest failed, trace:\n' .. tracehelp
for _, traceline in ipairs(trace) do for _, traceline in ipairs(trace) do
@@ -729,8 +708,30 @@ local function check_child_err(rd)
end end
end end
err = err .. sc.read(rd, len + 1) err = err .. sc.read(rd, len + 1)
end
local eres = sc.read(rd, 2)
if eres ~= '$\n' then
if #trace == 0 then
err = '\nTest crashed, no trace available\n'
else
err = '\nTest crashed, trace:\n' .. tracehelp
for i = 1, #trace do
err = err .. trace[i]
end
end
if not did_traceline then
err = err .. '\nNo end of trace occurred'
end
local cc_err, cc_emsg = pcall(check_cores, Paths.test_luajit_prg, true)
if not cc_err then
err = err .. '\ncheck_cores failed: ' .. cc_emsg
end
end
if err ~= '' then
assert.just_fail(err) assert.just_fail(err)
end end
end
end
local function itp_parent(rd, pid, allow_failure) local function itp_parent(rd, pid, allow_failure)
local err, emsg = pcall(check_child_err, rd) local err, emsg = pcall(check_child_err, rd)