Packages
espec
0.8.26
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 ->
case el do
{_, {^subject, ^func, _}, _return} -> true
_ -> false
end
pid == :any ->
case el do
{_, {^subject, ^func, ^args}, _return} -> true
_ -> false
end
args == :any ->
case el do
{^pid, {^subject, ^func, _}, _return} -> true
_ -> false
end
true ->
case el do
{^pid, {^subject, ^func, ^args}, _return} -> true
_ -> false
end
end
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