25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

67 satır
1.6 KiB

  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. nested_object_segv_test_() ->
  15. Obj = nested(128),
  16. Enc = enc(Obj),
  17. ?_assertEqual(Obj, dec(Enc)).
  18. nested(0) -> <<"bottom">>;
  19. nested(N) -> {[{integer_to_binary(N), nested(N - 1)}]}.
  20. gen(ok, {J, E}) ->
  21. gen(ok, {J, E, J});
  22. gen(ok, {J1, E, J2}) ->
  23. {msg("~s", [J1]), [
  24. {"Decode", ?_assertEqual(E, dec(J1))},
  25. {"Encode", ?_assertEqual(J2, enc(E))}
  26. ]};
  27. gen(error, J) ->
  28. {msg("Error: ~s", [J]), [
  29. ?_assertThrow({error, _}, dec(J))
  30. ]}.
  31. cases(ok) ->
  32. [
  33. {<<"{}">>, {[]}},
  34. {<<"{\"foo\": \"bar\"}">>,
  35. {[{<<"foo">>, <<"bar">>}]},
  36. <<"{\"foo\":\"bar\"}">>},
  37. {<<"\n\n{\"foo\":\r \"bar\",\n \"baz\"\t: 123 }">>,
  38. {[{<<"foo">>, <<"bar">>}, {<<"baz">>, 123}]},
  39. <<"{\"foo\":\"bar\",\"baz\":123}">>}
  40. ];
  41. cases(error) ->
  42. [
  43. <<"{">>,
  44. <<"{,}">>,
  45. <<"{123:true}">>,
  46. <<"{false:123}">>,
  47. <<"{:\"stuff\"}">>,
  48. <<"{\"key\":}">>,
  49. <<"{\"key\": 123">>,
  50. <<"{\"key\": 123 true">>,
  51. <<"{\"key\": 123,}">>
  52. ].