1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
-module(atom_test).
-export([kv/1]).
-include_lib("eunit/include/eunit.hrl").
eval(Content) ->
Quoted = elixir:'string_to_quoted!'(Content, 1, 1, <<"nofile">>, []),
{Value, Binding, _} = elixir:eval_forms(Quoted, [], elixir:env_for_eval([])),
{Value, Binding}.
kv([{Key, nil}]) -> Key.
atom_with_punctuation_test() ->
{foo@bar, []} = eval(":foo@bar"),
{'a?', []} = eval(":a?"),
{'a!', []} = eval(":a!"),
{'||', []} = eval(":||"),
{'...', []} = eval(":...").
atom_quoted_call_test() ->
{3, []} = eval("Kernel.'+'(1, 2)").
kv_with_quotes_test() ->
{'foo bar', []} = eval(":atom_test.kv(\"foo bar\": nil)").
kv_with_interpolation_test() ->
{'foo', []} = eval(":atom_test.kv(\"#{\"foo\"}\": nil)"),
{'foo', []} = eval(":atom_test.kv(\"#{\"fo\"}o\": nil)"),
{'foo', _} = eval("a = \"f\"; :atom_test.kv(\"#{a}#{\"o\"}o\": nil)").
quoted_atom_test() ->
{'+', []} = eval(":\"+\""),
{'+', []} = eval(":'+'"),
{'foo bar', []} = eval(":\"foo bar\"").
atom_with_interpolation_test() ->
{foo, []} = eval(":\"f#{\"o\"}o\""),
{foo, _} = eval("a=\"foo\"; :\"#{a}\""),
{foo, _} = eval("a=\"oo\"; :\"f#{a}\""),
{foo, _} = eval("a=\"fo\"; :\"#{a}o\""),
{fof, _} = eval("a=\"f\"; :\"#{a}o#{a}\"").
quoted_atom_chars_are_escaped_test() ->
{'"', []} = eval(":\"\\\"\"").
|