Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

75 wiersze
2.2 KiB

  1. -module(jiffy_16_preencode_tests).
  2. -include_lib("eunit/include/eunit.hrl").
  3. -include("jiffy_util.hrl").
  4. preencode_success_test_() ->
  5. [gen(ok, Case) || Case <- cases(ok)].
  6. preencode_failure_test_() ->
  7. [gen(error, Case) || Case <- cases(error)].
  8. gen(ok, {E1, J, E2}) ->
  9. {msg("~p", [E1]), [
  10. {"Encode", ?_assertEqual(J, enc(E1))},
  11. {"Decode", ?_assertEqual(E2, dec(J))}
  12. ]};
  13. gen(ok, {E, J}) ->
  14. {msg("~p", [E]), [
  15. {"Encode", ?_assertEqual(J, enc(E))}
  16. ]};
  17. gen(error, E) ->
  18. {msg("Error: ~p", [E]), [
  19. ?_assertThrow({error, _}, enc(E))
  20. ]}.
  21. cases(ok) ->
  22. TopTests =
  23. lists:map(
  24. fun (EJSON) ->
  25. JSON = enc(EJSON),
  26. {{json, JSON}, JSON, EJSON}
  27. end, [ 123
  28. , <<"hello world">>
  29. , true
  30. , false
  31. , {[ {<<"a">>, <<"apple">>}, {<<"b">>, <<"banana">>} ]}
  32. ]),
  33. EJSON = [ 1, <<"a">> ],
  34. JSON = enc(EJSON),
  35. BuriedTests =
  36. [ { [ {json, JSON} ], <<"[[1,\"a\"]]">>, [ EJSON ]}
  37. , { [ 1, {json, JSON}, 3 ], <<"[1,[1,\"a\"],3]">>, [ 1, EJSON, 3 ]}
  38. , { [ {json, JSON}, {json, JSON} ], <<"[[1,\"a\"],[1,\"a\"]]">>, [ EJSON, EJSON ]}
  39. , { {[ {<<"a">>, {json, JSON}} ]}, <<"{\"a\":[1,\"a\"]}">>, {[ {<<"a">>, EJSON} ]}}
  40. ],
  41. PartialArray = jiffy:partial_encode([ 2, 3 ], []),
  42. PartialArrayTests =
  43. [ {[ PartialArray ], <<"[2,3]">>}
  44. , {[ 1, PartialArray ], <<"[1,2,3]">>}
  45. , {[ PartialArray, 4 ], <<"[2,3,4]">>}
  46. , {[ 1, PartialArray, 4 ], <<"[1,2,3,4]">>}
  47. ],
  48. PartialObject = jiffy:partial_encode({[ {<<"ii">>, <<"two">>}, {<<"iii">>, 3} ]}, []),
  49. PartialObjectTests =
  50. [ {{[ PartialObject ]}, <<"{\"ii\":\"two\",\"iii\":3}">>}
  51. , {{[ {<<"i">>, 1}, PartialObject ]}, <<"{\"i\":1,\"ii\":\"two\",\"iii\":3}">>}
  52. , {{[ PartialObject, {<<"iv">>, 4} ]}, <<"{\"ii\":\"two\",\"iii\":3,\"iv\":4}">>}
  53. , {{[ {<<"i">>, 1}, PartialObject, {<<"iv">>, 4} ]}, <<"{\"i\":1,\"ii\":\"two\",\"iii\":3,\"iv\":4}">>}
  54. ],
  55. TopTests ++ BuriedTests ++ PartialArrayTests ++ PartialObjectTests;
  56. cases(error) ->
  57. [ {json, true}
  58. , {json, "true"}
  59. ].