Can you please provide a sample of the output?
*José Valimwww.plataformatec.com.br <http://www.plataformatec.com.br/>Founder and Director of R&D* On Wed, May 9, 2018 at 12:22 PM, Łukasz Niemier <[email protected]> wrote: > This would greatly reduce people using additional coverage reporters like > excoveralls or similar as some tools (at least GitLab CI that I am using) > allows to parse test output to fetch general coverage from there. > > My proposal is to generate per module and total percentage from default > coverage reporter. Example Coverage module that provides such result > (additional there is additional option :threshold which colours resulting > coverage red/green). > > defmodule Cover do > @moduledoc false > > @threshold 90 > > def start(compile_path, opts) do > Mix.shell().info("Cover compiling modules ...") > _ = :cover.start() > > case :cover.compile_beam_directory(compile_path |> to_charlist) do > results when is_list(results) -> > :ok > > {:error, _} -> > Mix.raise("Failed to cover compile directory: " <> compile_path) > end > > output = opts[:output] > > fn -> > File.mkdir_p!(output) > > Mix.shell().info("\nCover results") > > {:result, ok, _fail} = :cover.analyse(:coverage, :module) > > Mix.shell().info("Percentage | Module") > Mix.shell().info("-----------|--------------------------") > > total = > ok > |> Stream.each(&display(&1, opts)) > |> Stream.each(&html(&1, output)) > |> Enum.reduce({0, 0}, fn {_, {cov, not_cov}}, {tot_cov, > tot_not_cov} -> > {tot_cov + cov, tot_not_cov + not_cov} > end) > > Mix.shell().info("-----------|--------------------------") > > display({"Total", total}, opts) > end > end > > defp colour(percentage, threshold) when percentage > threshold, do: > :green > defp colour(_, _), do: :red > > defp display({name, coverage}, opts) do > threshold = Keyword.get(opts, :threshold, @threshold) > percentage = percentage(coverage) > > Mix.shell().info([ > colour(percentage, threshold), > format(percentage, 9), > "%", > :reset, > " | #{name}" > ]) > end > > defp html({mod, _}, output) do > {:ok, _} = :cover.analyse_to_file(mod, '#{output}/#{mod}.html', > [:html]) > end > > defp percentage({0, 0}), do: 100 > defp percentage({cov, not_cov}), do: cov / (cov + not_cov) * 100 > > defp format(num, len) when is_integer(num) do > num > |> Integer.to_string() > |> String.pad_leading(len) > end > > defp format(num, len) when is_float(num) do > num > |> Float.round(2) > |> Float.to_string() > |> String.pad_leading(len) > end > end > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/elixir-lang-core/6ca4916a-8b3d-44c5-9df7- > ba0467150a5a%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/6ca4916a-8b3d-44c5-9df7-ba0467150a5a%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K1Ba06CvMhSzOBndpyb7S%3DhkZT2zVj-P9UcLTPP5w8cg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
