You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.4 KiB

преди 13 години
преди 13 години
  1. % This file is part of Jiffy released under the MIT license.
  2. % See the LICENSE file for more information.
  3. -module(jiffy_06_object_tests).
  4. -include_lib("eunit/include/eunit.hrl").
  5. -include("jiffy_util.hrl").
  6. object_success_test_() ->
  7. [gen(ok, Case) || Case <- cases(ok)].
  8. object_failure_test_() ->
  9. [gen(error, Case) || Case <- cases(error)].
  10. latin1_atom_test_() ->
  11. Key = binary_to_atom(<<228>>, latin1), %% `ä`
  12. Expected = <<"{\"", 195, 164, "\":\"bar\"}">>,
  13. ?_assertEqual(Expected, enc(#{ Key => <<"bar">> })).
  14. gen(ok, {J, E}) ->
  15. gen(ok, {J, E, J});
  16. gen(ok, {J1, E, J2}) ->
  17. {msg("~s", [J1]), [
  18. {"Decode", ?_assertEqual(E, dec(J1))},
  19. {"Encode", ?_assertEqual(J2, enc(E))}
  20. ]};
  21. gen(error, J) ->
  22. {msg("Error: ~s", [J]), [
  23. ?_assertThrow({error, _}, dec(J))
  24. ]}.
  25. cases(ok) ->
  26. [
  27. {<<"{}">>, {[]}},
  28. {<<"{\"foo\": \"bar\"}">>,
  29. {[{<<"foo">>, <<"bar">>}]},
  30. <<"{\"foo\":\"bar\"}">>},
  31. {<<"\n\n{\"foo\":\r \"bar\",\n \"baz\"\t: 123 }">>,
  32. {[{<<"foo">>, <<"bar">>}, {<<"baz">>, 123}]},
  33. <<"{\"foo\":\"bar\",\"baz\":123}">>}
  34. ];
  35. cases(error) ->
  36. [
  37. <<"{">>,
  38. <<"{,}">>,
  39. <<"{123:true}">>,
  40. <<"{false:123}">>,
  41. <<"{:\"stuff\"}">>,
  42. <<"{\"key\":}">>,
  43. <<"{\"key\": 123">>,
  44. <<"{\"key\": 123 true">>,
  45. <<"{\"key\": 123,}">>
  46. ].