aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_server/src/test_server.erl
diff options
context:
space:
mode:
authorZandra Hird <[email protected]>2015-05-06 13:01:07 +0200
committerZandra Hird <[email protected]>2015-05-06 13:01:07 +0200
commit0440e0e45835de5adbe790f9437492d734c6c4e1 (patch)
tree978ff1a48ae243e69fca96cce5eb2654b66c8076 /lib/test_server/src/test_server.erl
parent83ff5ec3ced8ce1c456bfdf75fcbf5be01385388 (diff)
parentefbfe9602983ff451b864e557bdf3733222b78ba (diff)
downloadotp-0440e0e45835de5adbe790f9437492d734c6c4e1.tar.gz
otp-0440e0e45835de5adbe790f9437492d734c6c4e1.tar.bz2
otp-0440e0e45835de5adbe790f9437492d734c6c4e1.zip
Merge branch 'maint'
Conflicts: OTP_VERSION erts/vsn.mk lib/test_server/src/erl2html2.erl
Diffstat (limited to 'lib/test_server/src/test_server.erl')
-rw-r--r--lib/test_server/src/test_server.erl33
1 files changed, 27 insertions, 6 deletions
diff --git a/lib/test_server/src/test_server.erl b/lib/test_server/src/test_server.erl
index 7f2da7755a..7cb9c4bb5a 100644
--- a/lib/test_server/src/test_server.erl
+++ b/lib/test_server/src/test_server.erl
@@ -1313,12 +1313,30 @@ get_loc(Pid) ->
Stk = [rewrite_loc_item(Loc) || Loc <- Stk0],
case get(test_server_loc) of
[{Suite,Case}] ->
- %% location info unknown, check if {Suite,Case,Line}
- %% is available in stacktrace. and if so, use stacktrace
- %% instead of current test_server_loc
+ %% Location info unknown, check if {Suite,Case,Line}
+ %% is available in stacktrace and if so, use stacktrace
+ %% instead of current test_server_loc.
+ %% If location is the last expression in a test case
+ %% function, the info is not available due to tail call
+ %% elimination. We need to check if the test case has been
+ %% called by ts_tc/3 and, if so, insert the test case info
+ %% at that position.
case [match || {S,C,_L} <- Stk, S == Suite, C == Case] of
- [match|_] -> put(test_server_loc, Stk);
- _ -> ok
+ [match|_] ->
+ put(test_server_loc, Stk);
+ _ ->
+ {PreTC,PostTC} =
+ lists:splitwith(fun({test_server,ts_tc,_}) ->
+ false;
+ (_) ->
+ true
+ end, Stk),
+ if PostTC == [] ->
+ ok;
+ true ->
+ put(test_server_loc,
+ PreTC++[{Suite,Case,last_expr} | PostTC])
+ end
end;
_ ->
put(test_server_loc, Stk)
@@ -1380,7 +1398,10 @@ lookup_config(Key,Config) ->
undefined
end.
-%% timer:tc/3
+%%
+%% IMPORTANT: get_loc/1 uses the name of this function when analysing
+%% stack traces. If the name changes, get_loc/1 must be updated!
+%%
ts_tc(M, F, A) ->
Before = erlang:monotonic_time(),
Result = try