mirror of
https://github.com/correl/rebar.git
synced 2024-11-23 19:19:54 +00:00
Add optional eunit coverage report to terminal
Add a coverage report similar to the one output to index.html except that it is output to the terminal if the new rebar.conf option 'cover_print_enabled' is set to true.
This commit is contained in:
parent
d5c408c2e4
commit
f2244b26be
2 changed files with 35 additions and 2 deletions
|
@ -71,6 +71,9 @@
|
||||||
%% Whether to enable coverage reporting. Default is `false'
|
%% Whether to enable coverage reporting. Default is `false'
|
||||||
{cover_enabled, false}.
|
{cover_enabled, false}.
|
||||||
|
|
||||||
|
%% Whether to print coverage report to console. Default is `false'
|
||||||
|
{cover_print_enabled, false}.
|
||||||
|
|
||||||
%% == Dialyzer ==
|
%% == Dialyzer ==
|
||||||
|
|
||||||
%% Options for running the dialyzer, right now only `plt' is supported
|
%% Options for running the dialyzer, right now only `plt' is supported
|
||||||
|
|
|
@ -214,7 +214,7 @@ perform_cover(true, Config, BeamFiles, SrcModules) ->
|
||||||
|
|
||||||
cover_analyze(_Config, [], _SrcModules) ->
|
cover_analyze(_Config, [], _SrcModules) ->
|
||||||
ok;
|
ok;
|
||||||
cover_analyze(_Config, Modules, SrcModules) ->
|
cover_analyze(Config, Modules, SrcModules) ->
|
||||||
Suite = list_to_atom(rebar_config:get_global(suite, "")),
|
Suite = list_to_atom(rebar_config:get_global(suite, "")),
|
||||||
FilteredModules = [M || M <- Modules, M =/= Suite],
|
FilteredModules = [M || M <- Modules, M =/= Suite],
|
||||||
|
|
||||||
|
@ -228,7 +228,15 @@ cover_analyze(_Config, Modules, SrcModules) ->
|
||||||
[{ok, _} = cover:analyze_to_file(M, cover_file(M), [html]) || {M, _, _} <- Coverage],
|
[{ok, _} = cover:analyze_to_file(M, cover_file(M), [html]) || {M, _, _} <- Coverage],
|
||||||
|
|
||||||
Index = filename:join([rebar_utils:get_cwd(), ?EUNIT_DIR, "index.html"]),
|
Index = filename:join([rebar_utils:get_cwd(), ?EUNIT_DIR, "index.html"]),
|
||||||
?CONSOLE("Cover analysis: ~s\n", [Index]).
|
?CONSOLE("Cover analysis: ~s\n", [Index]),
|
||||||
|
|
||||||
|
%% Print coverage report, if configured
|
||||||
|
case rebar_config:get(Config, cover_print_enabled, false) of
|
||||||
|
true ->
|
||||||
|
cover_print_coverage(lists:sort(Coverage));
|
||||||
|
false ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
cover_init(false, _BeamFiles) ->
|
cover_init(false, _BeamFiles) ->
|
||||||
ok;
|
ok;
|
||||||
|
@ -326,6 +334,28 @@ cover_write_index_section(F, SectionName, Coverage) ->
|
||||||
{Module, Cov, NotCov} <- Coverage],
|
{Module, Cov, NotCov} <- Coverage],
|
||||||
ok = file:write(F, "</table>\n").
|
ok = file:write(F, "</table>\n").
|
||||||
|
|
||||||
|
cover_print_coverage(Coverage) ->
|
||||||
|
{Covered, NotCovered} = lists:foldl(fun({_Mod, C, N}, {CAcc, NAcc}) ->
|
||||||
|
{CAcc + C, NAcc + N}
|
||||||
|
end, {0, 0}, Coverage),
|
||||||
|
TotalCoverage = percentage(Covered, NotCovered),
|
||||||
|
|
||||||
|
%% Determine the longest module name for right-padding
|
||||||
|
Width = lists:foldl(fun({Mod, _, _}, Acc) ->
|
||||||
|
case length(atom_to_list(Mod)) of
|
||||||
|
N when N > Acc ->
|
||||||
|
N;
|
||||||
|
_ ->
|
||||||
|
Acc
|
||||||
|
end
|
||||||
|
end, 0, Coverage) * -1,
|
||||||
|
|
||||||
|
%% Print the output the console
|
||||||
|
?CONSOLE("~nCode Coverage:~n", []),
|
||||||
|
[?CONSOLE("~*s : ~3s~n",
|
||||||
|
[Width, Mod, percentage(C, N)]) || {Mod, C, N} <- Coverage],
|
||||||
|
?CONSOLE("~n~*s : ~s~n", [Width, "Total", TotalCoverage]).
|
||||||
|
|
||||||
cover_file(Module) ->
|
cover_file(Module) ->
|
||||||
filename:join([?EUNIT_DIR, atom_to_list(Module) ++ ".COVER.html"]).
|
filename:join([?EUNIT_DIR, atom_to_list(Module) ++ ".COVER.html"]).
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue