diff options
author | Jon Meredith <jmeredith@basho.com> | 2010-05-03 11:37:14 -0600 |
---|---|---|
committer | Jon Meredith <jmeredith@basho.com> | 2010-05-03 11:37:14 -0600 |
commit | bf3dfcb34bbcb87c8764ad3d82db817298af7853 (patch) | |
tree | a68b797c3640688e63ec8cf492870e69670d470b | |
parent | ff1cf0365b673593e27c8d4ca85c2e393d045d8c (diff) |
Taught eunit/coverage to split the src module coverage stats from any test code.
-rw-r--r-- | src/rebar_eunit.erl | 51 | ||||
-rw-r--r-- | src/rebar_utils.erl | 4 |
2 files changed, 36 insertions, 19 deletions
diff --git a/src/rebar_eunit.erl b/src/rebar_eunit.erl index aca68fe..c4740a7 100644 --- a/src/rebar_eunit.erl +++ b/src/rebar_eunit.erl @@ -83,10 +83,11 @@ eunit(Config, _File) -> BeamFiles = [N || N <- rebar_utils:beams(?EUNIT_DIR), string:str(N, "_tests.beam") =:= 0], Modules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- BeamFiles], - + SrcModules = [rebar_utils:erl_to_mod(M) || M <- SrcErls], + cover_init(Config, BeamFiles), EunitResult = perform_eunit(Config, Modules), - perform_cover(Config, Modules), + perform_cover(Config, Modules, SrcModules), case EunitResult of ok -> @@ -182,17 +183,18 @@ is_quickcheck_avail() -> IsAvail end. -perform_cover(Config, BeamFiles) -> - perform_cover(rebar_config:get(Config, cover_enabled, false), Config, BeamFiles). +perform_cover(Config, BeamFiles, SrcModules) -> + perform_cover(rebar_config:get(Config, cover_enabled, false), + Config, BeamFiles, SrcModules). -perform_cover(false, _Config, _BeamFiles) -> +perform_cover(false, _Config, _BeamFiles, _SrcModules) -> ok; -perform_cover(true, Config, BeamFiles) -> - cover_analyze(Config, BeamFiles). +perform_cover(true, Config, BeamFiles, SrcModules) -> + cover_analyze(Config, BeamFiles, SrcModules). -cover_analyze(_Config, []) -> +cover_analyze(_Config, [], _SrcModules) -> ok; -cover_analyze(_Config, Modules) -> +cover_analyze(_Config, Modules, SrcModules) -> Suite = list_to_atom(rebar_config:get_global(suite, "")), FilteredModules = [M || M <- Modules, M =/= Suite], @@ -200,7 +202,7 @@ cover_analyze(_Config, Modules) -> Coverage = [cover_analyze_mod(M) || M <- FilteredModules], %% Write index of coverage info - cover_write_index(lists:sort(Coverage)), + cover_write_index(lists:sort(Coverage), SrcModules), %% Write coverage details for each file [{ok, _} = cover:analyze_to_file(M, cover_file(M), [html]) || {M, _, _} <- Coverage], @@ -243,7 +245,19 @@ cover_analyze_mod(Module) -> {0,0} end. -cover_write_index(Coverage) -> +cover_write_index(Coverage, SrcModules) -> + {ok, F} = file:open(filename:join([?EUNIT_DIR, "index.html"]), [write]), + ok = file:write(F, "<html><head><title>Coverage Summary</title></head>\n"), + IsSrcCoverage = fun({Mod,_C,_N}) -> lists:member(Mod, SrcModules) end, + {SrcCoverage, TestCoverage} = lists:partition(IsSrcCoverage, Coverage), + cover_write_index_section(F, "Source", SrcCoverage), + cover_write_index_section(F, "Test", TestCoverage), + ok = file:write(F, "</body></html>"), + file:close(F). + +cover_write_index_section(_F, _SectionName, []) -> + ok; +cover_write_index_section(F, SectionName, Coverage) -> %% Calculate total coverage % {Covered, NotCovered} = lists:foldl(fun({_Mod, C, N}, {CAcc, NAcc}) -> {CAcc + C, NAcc + N} @@ -251,20 +265,19 @@ cover_write_index(Coverage) -> TotalCoverage = percentage(Covered, NotCovered), %% Write the report - {ok, F} = file:open(filename:join([?EUNIT_DIR, "index.html"]), [write]), - ok = file:write(F, "<html><head><title>Coverage Summary</title></head>\n" - "<body><h1>Coverage Summary</h1>\n"), - ok = file:write(F, ?FMT("<h3>Total: ~w%</h3>\n", [TotalCoverage])), + ok = file:write(F, ?FMT("<body><h1>~s Summary</h1>\n", [SectionName])), + ok = file:write(F, ?FMT("<h3>Total: ~s</h3>\n", [TotalCoverage])), ok = file:write(F, "<table><tr><th>Module</th><th>Coverage %</th></tr>\n"), - [ok = file:write(F, ?FMT("<tr><td><a href='~s.COVER.html'>~s</a></td><td>~w%</td>\n", + [ok = file:write(F, ?FMT("<tr><td><a href='~s.COVER.html'>~s</a></td><td>~s</td>\n", [Module, Module, percentage(Cov, NotCov)])) || {Module, Cov, NotCov} <- Coverage], - ok = file:write(F, "</table></body></html>"), - file:close(F). + ok = file:write(F, "</table>\n"). cover_file(Module) -> filename:join([?EUNIT_DIR, atom_to_list(Module) ++ ".COVER.html"]). +percentage(0, 0) -> + "not executed"; percentage(Cov, NotCov) -> - trunc((Cov / (Cov + NotCov)) * 100). + integer_to_list(trunc((Cov / (Cov + NotCov)) * 100)) ++ "%". diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index e7d22fa..1aecd2e 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -36,6 +36,7 @@ now_str/0, ensure_dir/1, beam_to_mod/2, beams/1, + erl_to_mod/1, abort/2, escript_foldl/3]). @@ -153,6 +154,9 @@ beam_to_mod(Dir, Filename) -> [Dir | Rest] = filename:split(Filename), list_to_atom(filename:basename(string:join(Rest, "."), ".beam")). +erl_to_mod(Filename) -> + list_to_atom(filename:rootname(filename:basename(Filename))). + beams(Dir) -> filelib:fold_files(Dir, ".*\.beam\$", true, fun(F, Acc) -> [F | Acc] end, []). |