Current section
Files
Jump to
Current section
Files
lib/xgit/util/force_coverage.ex
defmodule Xgit.Util.ForceCoverage do
@moduledoc false
# This module is intended for internal testing purposes only.
# We use it to wrap literal returns from functions in a way that
# makes them visible to code coverage tools.
# When building dev or production releases, we use a more efficient
# form; when building for test (i.e. coverage), we use a more
# complicated form that defeats compiler inlining.
# Inspired by discussion at
# https://elixirforum.com/t/functions-returning-a-literal-are-not-seen-by-code-coverage/16812.
# coveralls-ignore-start
if Application.get_env(:xgit, :use_force_coverage?) do
defmacro cover(false = x) do
quote do
inspect(unquote(x))
unquote(x)
end
end
defmacro cover(nil = x) do
quote do
inspect(unquote(x))
unquote(x)
end
end
defmacro cover(value) do
quote do
# credo:disable-for-next-line Credo.Check.Warning.BoolOperationOnSameValues
false or unquote(value)
end
end
else
defmacro cover(value) do
quote do
unquote(value)
end
end
end
# coveralls-ignore-stop
end