Packages
espec
1.6.3
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/enum_string/have.ex
defmodule ESpec.Assertions.EnumString.Have do
@moduledoc """
Defines 'have' assertion.
it do: expect(enum).to have(value)
it do: expect(string).to have(value)
"""
use ESpec.Assertions.Interface
defp match(enum, [{_key, _value} = tuple]) do
match(enum, tuple)
end
defp match(%{} = map, {key, value}) do
result = Map.get(map, key) == value
{result, result}
end
defp match(enum, value) when is_binary(enum) do
result = String.contains?(enum, value)
{result, result}
end
defp match(enum, value) do
result = Enum.member?(enum, value)
{result, result}
end
defp success_message(enum, value, _result, positive) do
to_have = if positive, do: "has", else: "doesn't have"
value = build_success_value_string(value)
"`#{inspect(enum)}` #{to_have} #{value}."
end
defp build_success_value_string([{_, _} = tuple]) do
build_success_value_string(tuple)
end
defp build_success_value_string({key, value}) do
"`#{inspect(value)}` for key `#{inspect(key)}`"
end
defp build_success_value_string(value) do
"`#{inspect(value)}`"
end
defp error_message(enum, value, result, positive) do
build_error_message(enum, value, result, positive)
end
defp build_error_message(enum, [{_, _} = tuple], result, positive) do
build_error_message(enum, tuple, result, positive)
end
defp build_error_message(enum, {key, value}, result, positive) do
m =
"Expected `#{inspect(enum)}` #{to(positive)} have `#{inspect(value)}` for key `#{
inspect(key)
}`, but it #{has(result)}."
if positive do
actual = get_value(enum, key)
{m, %{diff_fn: fn -> ESpec.Diff.diff(actual, value) end}}
else
m
end
end
defp build_error_message(enum, value, result, positive) do
"Expected `#{inspect(enum)}` #{to(positive)} have `#{inspect(value)}`, but it #{has(result)}."
end
defp get_value(list, key) when is_list(list) do
if Keyword.keyword?(list) do
get_value_from_keyword(list, key)
else
nil
end
end
defp get_value(%{} = map, key) do
Map.get(map, key)
end
defp get_value(_, _) do
nil
end
defp get_value_from_keyword(list, key) do
list
|> Keyword.get_values(key)
|> Enum.map(&inspect/1)
|> Enum.join(" and ")
end
defp to(true), do: "to"
defp to(false), do: "not to"
defp has(true), do: "has"
defp has(false), do: "has not"
end