Packages

Assertions tailored for use in pipelines. Common assertions extracted for easy reuse. Tabular tests.

Current section

Files

Jump to
flow_assertions lib define tabular.ex
Raw

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
arity =
Function.info(asserter)
|> Keyword.get(:arity)
{run, pass} = run_and_pass(asserter, arity: arity)
fail = make_assertion_fail(run)
plus = &MapA.assert_fields/2
make(run, pass, fail, plus)
end
defp run_and_pass(asserter, arity: 1) do
run = asserter
pass = fn actual -> assert run.(actual) == actual end
{run, pass}
end
defp run_and_pass(asserter, _) do
run = fn args -> apply asserter, args end
pass = fn [actual | _] = args -> assert run.(args) == actual end
{run, pass}
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
@doc """
Note: only works if the original function has arity 1. Fix this.
"""
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,
inspect: fn actual -> run.(actual) |> IO.inspect end,
inspect_: fn actual, _ -> run.(actual) |> IO.inspect end,
inspect__: fn actual, _, _ -> run.(actual) |> IO.inspect end,
inspect___: fn actual, _, _, _ -> run.(actual) |> IO.inspect end,
run: run
}
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