Hi there. I've got strange behavior with var!.
Let's consider a few macros definition:
defmacro remove_field(name) do
quote do: var!(body) = :proplists.delete(to_b(unquote(name)), var!(body))
end
defmacro remove_fields(names) do
quote do: lc f inlist unquote(names), do: remove_field(f)
end
def to_b(name) when is_atom(name), do: atom_to_binary(name)
def to_b(name), do: name
their ExUnit:
import CouchNormalizer.Scenario
@fixture [{"field", :v}, {"field_2", :v2}, {"field_3", :v3}]
test :remove_field do
body = @fixture
remove_field(:unknown)
assert @fixture == body
remove_field(:field)
assert [{"field_2", :v2}, {"field_3", :v3}] == body
remove_field("field_2")
assert [{"field_3", :v3}] == body
end
test :remove_fields do
body = @fixture
remove_fields [:unknown, :unknown]
assert @fixture == body
remove_fields [:field_2, :field]
assert [{"field_3", :v3}] == body
end
As a result:
- :remove_field passed,
- :remove_fields failed with
2) test_remove_fields
** (ExUnit.AssertionError) Expected [{"field_3",:v3}] to be equal to (==) [{"field",:v},{"field_2",:v2},{"field_3",:v3}]
...
What the catch? Probably I don't understand some special cases for 'var!'