Current section

Files

Jump to
address_formatting lib address_test_helper.ex
Raw

lib/address_test_helper.ex

defmodule AddressHelper do
@moduledoc false
@filename "README.md"
@env_var "README"
def str_or_tuple({true, str}), do: str
def str_or_tuple({false, str}), do: IO.ANSI.format([:red, str])
def colorize_diff(list) do
Enum.map_join(list, &str_or_tuple/1)
end
def log_to_readme(data) do
case System.get_env(@env_var) do
nil ->
data
_ ->
@filename
|> File.open([:append])
|> elem(1)
|> IO.binwrite(data)
data
end
end
defmacro assert_render(input_tuple) do
quote bind_quoted: [data: input_tuple] do
{file,
%{
"components" => components,
"description" => description,
"expected" => expected
}} = data
{template, variables, _} = data = AddressFormatting.get_template(components)
rendered = AddressFormatting.render(data)
case ExUnit.Diff.compute(expected, rendered, :==) do
{%ExUnit.Diff{equivalent?: true}, _} ->
true
{%ExUnit.Diff{left: %{contents: left}, right: %{contents: right}}, _} ->
IO.puts("""
=================================
Test: #{file} - #{description}
expected: #{AddressHelper.colorize_diff(left)}
rendered: #{AddressHelper.colorize_diff(right)}
""")
Enum.each(components, fn {a, b} -> IO.puts("#{a}: #{b}") end)
IO.puts("---")
IO.puts(variables)
false
end
end
end
end