Current section
Files
Jump to
Current section
Files
lib/define/tabular.ex
defmodule FlowAssertions.Define.Tabular do
alias FlowAssertions.{MiscA,MapA}
import FlowAssertions.AssertionA
import ExUnit.Assertions
@moduledoc """
Sketching out helper functions for tabular tests. This code will change.
"""
def checker_runners_for(checker) do
run = fn [actual, expected] ->
MiscA.assert_good_enough(actual, checker.(expected))
end
pass = run
fail = make_assertion_fail(run)
plus = &MapA.assert_fields/2
make(run, pass, fail, plus)
end
def assertion_runners_for(asserter) do
run = asserter
pass = fn actual -> assert run.(actual) == actual end
fail = make_assertion_fail(run)
plus = &MapA.assert_fields/2
make(run, pass, fail, plus)
end
def content_runners_for(extractor) do
run = extractor
pass = fn actual, expected -> assert run.(actual) == expected end
fail = make_assertion_fail(run)
plus = &MapA.assert_fields/2
make(run, pass, fail, plus)
end
def left_is_actual(failure_producer) do
amended_fail =
fn actual, expected_description ->
failure_producer.fail.(actual, expected_description)
|> MapA.assert_field(left: actual)
end
Map.put(failure_producer, :fail, amended_fail)
end
# ----------------------------------------------------------------------------
defp make(run, pass, fail, plus) do
%{pass: pass,
fail: fail,
plus: plus,
view: fn actual -> run.(actual) end,
view_: fn actual, _ -> run.(actual) end,
view__: fn actual, _, _ -> run.(actual) end,
view___: fn actual, _, _, _ -> run.(actual) end,
}
end
defp make_assertion_fail(run) do
fn
actual, %Regex{} = regex ->
assertion_fails(regex, fn -> run.(actual) end)
actual, message when is_binary(message) ->
assertion_fails(message, fn -> run.(actual) end)
actual, opts when is_list(opts) ->
assertion_fails(~r/.*/, opts, fn -> run.(actual) end)
end
end
end