Skip to content

Commit 420df34

Browse files
committed
Fix utils.strip_luatest_trace
* Strip uselss `...` and `eval` lines. * Scan the stack trace backwards so as to skip `[C]`, `...`, and `eval` lines that were called by luatest internal files, not vice versa. * Don't strip lines related to luatest test files (from luatest/test), even though they match the luatest internal file pattern, because we do want to see stack traces when we test luatest. Needed for #396
1 parent 8254673 commit 420df34

File tree

2 files changed

+53
-6
lines changed

2 files changed

+53
-6
lines changed

luatest/utils.lua

+16-6
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,33 @@ end
6161

6262
-- Check if line of stack trace comes from inside luatest.
6363
local function is_luatest_internal_line(s)
64-
return s:find('[/\\]luatest[/\\]') or s:find('bin[/\\]luatest')
64+
return s:find('bin[/\\]luatest') or
65+
(s:find('[/\\]luatest[/\\]') and
66+
not s:find('[/\\]luatest[/\\]test[/\\]'))
6567
end
6668

6769
function utils.strip_luatest_trace(trace)
6870
local lines = trace:split('\n')
69-
local result = {lines[1]} -- always keep 1st line
70-
local keep = true
71-
for i = 2, table.maxn(lines) do
71+
local result = {}
72+
local keep = false
73+
for i = table.maxn(lines), 2, -1 do
7274
local line = lines[i]
73-
-- `[C]:` lines don't change context
74-
if not line:find('^%s+%[C%]:') then
75+
-- `[C]:`, `...`, `eval:` lines don't change context
76+
if not (line:find('^%s+%[C%]:') or
77+
line:find('^%s+%.%.%.$') or
78+
line:find('^%s+eval:')) then
7579
keep = not is_luatest_internal_line(line)
7680
end
7781
if keep then
7882
table.insert(result, line)
7983
end
8084
end
85+
table.insert(result, lines[1]) -- always keep 1st line
86+
for i = 1, math.floor(#result / 2) do
87+
local v = result[#result - i + 1]
88+
result[#result - i + 1] = result[i]
89+
result[i] = v
90+
end
8191
return table.concat(result, '\n')
8292
end
8393

test/luaunit/utility_test.lua

+37
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,43 @@ function g.test_stripStackTrace()
847847
[[stack traceback:
848848
luaunit2/example_with_luaunit.lua:124: in function 'test1_withFailure']]
849849
)
850+
851+
t.assert_equals(subject([[stack traceback:
852+
/tmp/luatest/luatest/utils.lua:55: in function 'luatest_error'
853+
/tmp/luatest/luatest/assertions.lua:66: in function 'failure'
854+
/tmp/luatest/luatest/assertions.lua:71: in function 'fail_fmt'
855+
/tmp/luatest/luatest/assertions.lua:341: in function 'assert_le'
856+
/tmp/luatest/test/example_test.lua:37: in function 'check'
857+
/tmp/luatest/test/example_test.lua:40: in function </tmp/luatest/test/example_test.lua:34>
858+
[C]: in function 'xpcall'
859+
eval:9: in main chunk
860+
[C]: at 0x5da8d110ced6
861+
/tmp/luatest/luatest/server.lua:745: in function 'exec'
862+
/tmp/luatest/test/example_test.lua:34: in function 'test.test_fail_server'
863+
/tmp/luatest/luatest/runner.lua:472: in function </tmp/luatest/luatest/runner.lua:471>
864+
[C]: in function 'xpcall'
865+
/tmp/luatest/luatest/runner.lua:471: in function 'super'
866+
/tmp/luatest/luatest/capturing.lua:106: in function 'protected_call'
867+
/tmp/luatest/luatest/runner.lua:559: in function 'super'
868+
/tmp/luatest/luatest/hooks.lua:290: in function 'invoke_test_function'
869+
/tmp/luatest/luatest/runner.lua:554: in function 'super'
870+
...
871+
[C]: in function 'xpcall'
872+
/tmp/luatest/luatest/utils.lua:39: in function 'run_tests'
873+
/tmp/luatest/luatest/runner.lua:381: in function </tmp/luatest/luatest/runner.lua:366>
874+
[C]: in function 'xpcall'
875+
/tmp/luatest/luatest/capturing.lua:74: in function </tmp/luatest/luatest/capturing.lua:72>
876+
[C]: in function 'xpcall'
877+
/tmp/luatest/luatest/runner.lua:55: in function 'fn'
878+
.../vlad/src/tarantool/luatest/luatest/sandboxed_runner.lua:14: in function 'run'
879+
/tmp/luatest/luatest/cli_entrypoint.lua:4: in function </tmp/luatest/luatest/cli_entrypoint.lua:3>
880+
/tmp/luatest/bin/luatest:5: in main chunk]]
881+
),
882+
[[stack traceback:
883+
/tmp/luatest/test/example_test.lua:37: in function 'check'
884+
/tmp/luatest/test/example_test.lua:40: in function </tmp/luatest/test/example_test.lua:34>
885+
/tmp/luatest/test/example_test.lua:34: in function 'test.test_fail_server']]
886+
)
850887
end
851888

852889
function g.test_eps_value()

0 commit comments

Comments
 (0)