Packages
espec
1.4.1
1.10.0
1.9.2
1.9.1
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.7
0.3.5
0.3.0
0.2.0
0.1.0
BDD testing framework for Elixir inspired by RSpec.
Current section
Files
Jump to
Current section
Files
lib/espec/assertions/accepted.ex
defmodule ESpec.Assertions.Accepted do
@moduledoc """
Defines 'accepted' assertion.
it do: expect(SomeModule).to accepted(:func)
"""
use ESpec.Assertions.Interface
defp match(subject, [func, args, opts]) do
pid = Keyword.get(opts, :pid) || :any
opts_count = Keyword.get(opts, :count) || :any
count = get_count(subject, func, args, pid)
matched = if opts_count == :any do
count >= 1
else
count == opts_count
end
{matched, count}
end
defp get_count(subject, func, args, pid) do
Enum.count(:meck.history(subject), fn(el) ->
cond do
pid == :any && args == :any -> check_any_any(el, subject, func)
pid == :any -> check_any_pid(el, subject, func, args)
args == :any -> check_any_args(el, subject, func, pid)
true -> check_else(el, subject, func, pid, args)
end
end)
end
defp check_any_any(el, subject, func) do
case el do
{_, {^subject, ^func, _}, _return} -> true
_ -> false
end
end
defp check_any_pid(el, subject, func, args) do
case el do
{_, {^subject, ^func, ^args}, _return} -> true
_ -> false
end
end
defp check_any_args(el, subject, func, pid) do
case el do
{^pid, {^subject, ^func, _}, _return} -> true
_ -> false
end
end
defp check_else(el, subject, func, pid, args) do
case el do
{^pid, {^subject, ^func, ^args}, _return} -> true
_ -> false
end
end
defp success_message(subject, [func, args, opts], _result, positive) do
pid = Keyword.get(opts, :pid) || :any
opts_count = Keyword.get(opts, :count) || :any
count = if opts_count == :any, do: "at least once", else: "`#{opts_count}` times"
to = if positive, do: "accepted", else: "didn't accept"
"`#{inspect subject}` #{to} `#{inspect func}` with `#{inspect args}` in process `#{inspect pid}` #{count}."
end
defp error_message(subject, [func, args, opts], result, positive) do
to = if positive, do: "to", else: "not to"
but = "it accepted the function `#{result}` times"
pid = Keyword.get(opts, :pid) || :any
opts_count = Keyword.get(opts, :count) || :any
count = if opts_count == :any, do: "at least once", else: "`#{opts_count}` times"
"Expected `#{inspect subject}` #{to} accept `#{inspect func}` with `#{inspect args}` in process `#{inspect pid}` #{count}, but #{but}."
end
end