Quellcode durchsuchen

Redirect cover module output to .eunit/cover.log

The cover module calls io:format and io:fwrite directly for several types of
informational messages and warnings.  When using meck to mock covered modules
these warnings are triggered and can cause severe polution of the test output.

We can avoid this by starting cover explicitly then setting the group_leader
of that process to a file handle.
pull/3/head
David Reid vor 14 Jahren
Ursprung
Commit
0edf52b539
1 geänderte Dateien mit 22 neuen und 3 gelöschten Zeilen
  1. +22
    -3
      src/rebar_eunit.erl

+ 22
- 3
src/rebar_eunit.erl Datei anzeigen

@ -128,10 +128,13 @@ eunit(Config, AppFile) ->
Modules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- BeamFiles], Modules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- BeamFiles],
SrcModules = [rebar_utils:erl_to_mod(M) || M <- SrcErls], SrcModules = [rebar_utils:erl_to_mod(M) || M <- SrcErls],
cover_init(Config, BeamFiles),
{ok, CoverLog} = cover_init(Config, BeamFiles),
EunitResult = perform_eunit(Config, Modules), EunitResult = perform_eunit(Config, Modules),
perform_cover(Config, Modules, SrcModules), perform_cover(Config, Modules, SrcModules),
cover_close(CoverLog),
case EunitResult of case EunitResult of
ok -> ok ->
ok; ok;
@ -275,9 +278,25 @@ cover_analyze(Config, Modules, SrcModules) ->
ok ok
end. end.
cover_init(false, _BeamFiles) ->
cover_close(not_enabled) ->
ok; ok;
cover_close(F) ->
ok = file:close(F).
cover_init(false, _BeamFiles) ->
{ok, not_enabled};
cover_init(true, BeamFiles) -> cover_init(true, BeamFiles) ->
%% Attempt to start the cover server, then set it's group leader to
%% .eunit/cover.log, so all cover log messages will go there instead of
%% to stdout.
{_,CoverPid} = cover:start(),
{ok, F} = file:open(
filename:join([?EUNIT_DIR, "cover.log"]),
[write]),
group_leader(F, CoverPid),
%% Make sure any previous runs of cover don't unduly influence %% Make sure any previous runs of cover don't unduly influence
cover:reset(), cover:reset(),
@ -300,7 +319,7 @@ cover_init(true, BeamFiles) ->
[Beam, Desc]) [Beam, Desc])
end, end,
_ = [PrintWarning(Beam, Desc) || {Beam, {error, Desc}} <- Compiled], _ = [PrintWarning(Beam, Desc) || {Beam, {error, Desc}} <- Compiled],
ok
{ok, F}
end; end;
cover_init(Config, BeamFiles) -> cover_init(Config, BeamFiles) ->
cover_init(rebar_config:get(Config, cover_enabled, false), BeamFiles). cover_init(rebar_config:get(Config, cover_enabled, false), BeamFiles).

Laden…
Abbrechen
Speichern