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.

69 lines
1.5 KiB

пре 13 година
пре 13 година
пре 6 година
  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. nested_object_test_() ->
  11. Obj = nested(256),
  12. Enc = enc(Obj),
  13. ?_assertEqual(Obj, dec(Enc)).
  14. nested(0) -> <<"bottom">>;
  15. nested(N) -> {[{to_bin(N), nested(N - 1)}]}.
  16. to_bin(N) when is_integer(N) ->
  17. list_to_binary(integer_to_list(N)).
  18. gen(ok, {J, E}) ->
  19. gen(ok, {J, E, J});
  20. gen(ok, {J1, E, J2}) ->
  21. {msg("~s", [J1]), [
  22. {"Decode", ?_assertEqual(E, dec(J1))},
  23. {"Encode", ?_assertEqual(J2, enc(E))}
  24. ]};
  25. gen(error, J) ->
  26. {msg("Error: ~s", [J]), [
  27. ?_assertError(_, dec(J))
  28. ]}.
  29. cases(ok) ->
  30. [
  31. {<<"{}">>, {[]}},
  32. {<<"{\"foo\": \"bar\"}">>,
  33. {[{<<"foo">>, <<"bar">>}]},
  34. <<"{\"foo\":\"bar\"}">>},
  35. {<<"\n\n{\"foo\":\r \"bar\",\n \"baz\"\t: 123 }">>,
  36. {[{<<"foo">>, <<"bar">>}, {<<"baz">>, 123}]},
  37. <<"{\"foo\":\"bar\",\"baz\":123}">>}
  38. ];
  39. cases(error) ->
  40. [
  41. <<"{">>,
  42. <<"{,}">>,
  43. <<"{123:true}">>,
  44. <<"{false:123}">>,
  45. <<"{:\"stuff\"}">>,
  46. <<"{\"key\":}">>,
  47. <<"{\"key\": 123">>,
  48. <<"{\"key\": 123 true">>,
  49. <<"{\"key\": 123,}">>
  50. ].