Current section
Files
Jump to
Current section
Files
lib/enum_a.ex
defmodule FlowAssertions.EnumA do
use FlowAssertions.Define
@moduledoc """
Assertions that apply to Enums.
"""
@doc """
Assert that an Enum has only a single element.
```
[1] |> assert_singleton # passes
[ ] |> assert_singleton # fails
%{a: 1} |> assert_singleton # passes
%{a: 1, b: 2} |> assert_singleton # fails
```
"""
defchain assert_singleton(enum),
do: singleton_or_flunk(enum)
@doc """
Returns the content element of what must be a single-element Enum.
'''
[1] |> singleton_content # 1
[ ] |> singleton_content # fails
%{a: 1} |> singleton_content # the tuple {:a, 1}
"""
def singleton_content(enum),
do: singleton_or_flunk(enum)
@doc """
Assert that an Enum has no elements."
```
[] |> assert_empty # true
%{} |> assert_empty # true
```
"""
defchain assert_empty(value_to_check) do
if not Enum.empty?(value_to_check),
do: flunk("Expected an empty Enum")
end
# ----------------------------------------------------------------------------
defp singleton_or_flunk(enum) do
case Enum.into(enum, []) do
[x] -> x
_ -> flunk """
Expected a single element:
#{inspect enum}
"""
end
end
end