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,41 +694,43 @@ 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' eq('-\n', res)
else local len_s = sc.read(rd, 5)
error = '\nTest crashed, trace:\n' .. tracehelp local len = tonumber(len_s)
for i = 1, #trace do neq(0, len)
error = error .. trace[i] if os.getenv('NVIM_TEST_TRACE_ON_ERROR') == '1' and #trace ~= 0 then
err = '\nTest failed, trace:\n' .. tracehelp
for _, traceline in ipairs(trace) do
err = err .. traceline
end
end
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
end end
if not did_traceline then if err ~= '' then
error = error .. '\nNo end of trace occurred' assert.just_fail(err)
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)
local len_s = sc.read(rd, 5)
local len = tonumber(len_s)
neq(0, len)
local err = ''
if os.getenv('NVIM_TEST_TRACE_ON_ERROR') == '1' and #trace ~= 0 then
err = '\nTest failed, trace:\n' .. tracehelp
for _, traceline in ipairs(trace) do
err = err .. traceline
end end
end end
err = err .. sc.read(rd, len + 1)
assert.just_fail(err)
end end
local function itp_parent(rd, pid, allow_failure) local function itp_parent(rd, pid, allow_failure)