Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

97 lignes
3.6 KiB

  1. -module(jiffy_18_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. PartialArray1 = jiffy:partial_encode([ 2, 3 ], []),
  42. PartialArray2 = jiffy:partial_encode([], []),
  43. PartialArray3 = jiffy:partial_encode([ 5 ], []),
  44. PartialArrayTests =
  45. [ {[ PartialArray1 ], <<"[2,3]">>}
  46. , {[ 1, PartialArray1 ], <<"[1,2,3]">>}
  47. , {[ PartialArray1, 4 ], <<"[2,3,4]">>}
  48. , {[ 1, PartialArray1, 4 ], <<"[1,2,3,4]">>}
  49. , {[ PartialArray2 ], <<"[]">>}
  50. , {[ 1, PartialArray2 ], <<"[1]">>}
  51. , {[ PartialArray2, 4 ], <<"[4]">>}
  52. , {[ 1, PartialArray2, 4 ], <<"[1,4]">>}
  53. , {[ PartialArray1, PartialArray2 ], <<"[2,3]">>}
  54. , {[ PartialArray2, PartialArray1 ], <<"[2,3]">>}
  55. , {[ PartialArray1, PartialArray1 ], <<"[2,3,2,3]">>}
  56. , {[ PartialArray2, PartialArray2 ], <<"[]">>}
  57. , {[ PartialArray1, PartialArray3 ], <<"[2,3,5]">>}
  58. , {[ 1, PartialArray1, 4, PartialArray3, 6 ], <<"[1,2,3,4,5,6]">>}
  59. ],
  60. PartialObject1 = jiffy:partial_encode({[ {<<"ii">>, <<"two">>}, {<<"iii">>, 3} ]}, []),
  61. PartialObject2 = jiffy:partial_encode({[]}, []),
  62. PartialObject3 = jiffy:partial_encode({[ {<<"v">>, [ 1, 2, 3, 4, 5 ]} ]}, []),
  63. PartialObjectTests =
  64. [ {{[ PartialObject1 ]}, <<"{\"ii\":\"two\",\"iii\":3}">>}
  65. , {{[ {<<"i">>, 1}, PartialObject1 ]}, <<"{\"i\":1,\"ii\":\"two\",\"iii\":3}">>}
  66. , {{[ PartialObject1, {<<"iv">>, 4} ]}, <<"{\"ii\":\"two\",\"iii\":3,\"iv\":4}">>}
  67. , {{[ {<<"i">>, 1}, PartialObject1, {<<"iv">>, 4} ]}, <<"{\"i\":1,\"ii\":\"two\",\"iii\":3,\"iv\":4}">>}
  68. , {{[ PartialObject2 ]}, <<"{}">>}
  69. , {{[ {<<"i">>, 1}, PartialObject2 ]}, <<"{\"i\":1}">>}
  70. , {{[ PartialObject2, {<<"iv">>, 4} ]}, <<"{\"iv\":4}">>}
  71. , {{[ {<<"i">>, 1}, PartialObject2, {<<"iv">>, 4} ]}, <<"{\"i\":1,\"iv\":4}">>}
  72. , {{[ PartialObject1, PartialObject2 ]}, <<"{\"ii\":\"two\",\"iii\":3}">>}
  73. , {{[ PartialObject2, PartialObject1 ]}, <<"{\"ii\":\"two\",\"iii\":3}">>}
  74. , {{[ PartialObject2, PartialObject2 ]}, <<"{}">>}
  75. , {{[ PartialObject1, PartialObject3 ]}, <<"{\"ii\":\"two\",\"iii\":3,\"v\":[1,2,3,4,5]}">>}
  76. ],
  77. TopTests ++ BuriedTests ++ PartialArrayTests ++ PartialObjectTests.
  78. %% cases(error) ->
  79. %% [ {json, true}
  80. %% , {json, "true"}
  81. %% ].