Packages
excoveralls
0.18.5
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
Coverage report tool for Elixir with coveralls.io integration.
Current section
Files
Jump to
Current section
Files
lib/excoveralls/cover.ex
defmodule ExCoveralls.Cover do
@moduledoc """
Wrapper class for Erlang's cover tool.
"""
@doc """
Compile the beam files for coverage analysis.
"""
def compile(compile_path) do
:cover.stop
{:ok, pid} = :cover.start()
# Silence analyse import messages emitted by cover
{:ok, string_io} = StringIO.open("")
Process.group_leader(pid, string_io)
compile_path
|> String.to_charlist()
|> :cover.compile_beam_directory()
end
@doc """
Returns the relative file path of the specified module.
"""
def module_path(module) do
module.module_info(:compile)[:source]
|> List.to_string
|> Path.relative_to(ExCoveralls.PathReader.base_path)
end
@doc "Wrapper for :cover.modules"
def modules do
:cover.modules |> Enum.filter(&has_compile_info?/1)
end
def import(base_path) do
Path.wildcard("#{base_path}/*.coverdata") |> Enum.map(&to_charlist/1) |> Enum.each(&:cover.import/1)
end
def export(path) do
path |> to_charlist() |> :cover.export()
end
def has_compile_info?(module) do
with info when not is_nil(info) <- module.module_info(:compile),
path when not is_nil(path) <- Keyword.get(info, :source) do
file_exist?(module, path)
else
_e ->
log_missing_source(module)
false
end
rescue
_e ->
log_missing_source(module)
false
end
@doc "Wrapper for :cover.analyse"
def analyze(module) do
:cover.analyse(module, :calls, :line)
end
defp file_exist?(module, path) do
if File.exists?(path) do
true
else
log_missing_file(module, path)
false
end
end
defp log_missing_source(module) do
IO.puts :stderr, "[warning] skipping the module '#{module}' because source information for the module is not available."
end
defp log_missing_file(module, path) do
IO.puts :stderr, "[warning] skipping the module '#{module}' because source file with '#{path}' path does not exist"
end
end