diff --git a/ci/test.lua b/ci/test.lua index 66625d26d..b69a27712 100644 --- a/ci/test.lua +++ b/ci/test.lua @@ -175,8 +175,25 @@ local function wrap_expect(func, private) end msg = msg:sub(3) -- strip leading ': ' orig_printerr('Check failed! ' .. (msg or '(no message)')) - local info = debug.getinfo(2) - orig_printerr((' at %s:%d'):format(info.short_src, info.currentline)) + -- Generate a stack trace with all function calls in the same file as the caller to expect.*() + -- (this produces better stack traces when using helpers in tests) + -- Skip any frames corresponding to C calls, which could be pcall() / with_finalize() + local frame = 2 + local caller_src + while true do + info = debug.getinfo(frame) + if not info then break end + if not caller_src then + caller_src = info.short_src + end + if info.what == 'Lua' then + if info.short_src ~= caller_src then + break + end + orig_printerr((' at %s:%d'):format(info.short_src, info.currentline)) + end + frame = frame + 1 + end print('') end end