diff options
-rw-r--r-- | src/rebar_prv_cover.erl | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/rebar_prv_cover.erl b/src/rebar_prv_cover.erl index 15a067e..f814e2a 100644 --- a/src/rebar_prv_cover.erl +++ b/src/rebar_prv_cover.erl @@ -207,6 +207,8 @@ format_table(Stats, CoverFiles) -> MaxLength = max(lists:foldl(fun max_length/2, 0, Stats), 20), Header = header(MaxLength), Seperator = seperator(MaxLength), + TotalLabel = format("total", MaxLength), + TotalCov = format(calculate_total(Stats), 8), [io_lib:format("~ts~n~ts~n~ts~n", [Seperator, Header, Seperator]), lists:map(fun({Mod, Coverage}) -> Name = format(Mod, MaxLength), @@ -214,6 +216,8 @@ format_table(Stats, CoverFiles) -> io_lib:format(" | ~ts | ~ts |~n", [Name, Cov]) end, Stats), io_lib:format("~ts~n", [Seperator]), + io_lib:format(" | ~ts | ~ts |~n", [TotalLabel, TotalCov]), + io_lib:format("~ts~n", [Seperator]), io_lib:format(" coverage calculated from:~n", []), lists:map(fun(File) -> io_lib:format(" ~ts~n", [File]) @@ -234,6 +238,16 @@ seperator(Width) -> format(String, Width) -> io_lib:format("~*.ts", [Width, String]). +calculate_total(Stats) -> + TotalStats = length(Stats), + TotalCovInt = round(lists:foldl( + fun({_Mod, Coverage, _File}, Acc) -> + Acc + (list_to_integer(string:strip(Coverage, right, $%)) / TotalStats); + ({_Mod, Coverage}, Acc) -> + Acc + (list_to_integer(string:strip(Coverage, right, $%)) / TotalStats) + end, 0, Stats)), + integer_to_list(TotalCovInt) ++ "%". + write_index(State, Coverage) -> CoverDir = cover_dir(State), FileName = filename:join([CoverDir, "index.html"]), @@ -265,6 +279,8 @@ write_index_section(F, [{Section, DataFile, Mods}|Rest]) -> [strip_coverdir(Report), Mod, Cov]) end, lists:foreach(fun(M) -> ok = file:write(F, FmtLink(M)) end, Mods), + ok = file:write(F, ?FMT("<tr><td><strong>Total</strong></td><td>~ts</td>\n", + [calculate_total(Mods)])), ok = file:write(F, "</table>\n"), write_index_section(F, Rest). |