Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

53 linhas
1.3 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(error, E) ->
  14. {msg("Error: ~p", [E]), [
  15. ?_assertThrow({error, _}, enc(E))
  16. ]}.
  17. cases(ok) ->
  18. TopTests =
  19. lists:map(
  20. fun (EJSON) ->
  21. JSON = enc(EJSON),
  22. {{json, JSON}, JSON, EJSON}
  23. end, [ 123
  24. , <<"hello world">>
  25. , true
  26. , false
  27. , {[ {<<"a">>, <<"apple">>}, {<<"b">>, <<"banana">>} ]}
  28. ]),
  29. EJSON = [ 1, <<"a">> ],
  30. JSON = enc(EJSON),
  31. BuriedTests =
  32. [ { [ {json, JSON} ], <<"[[1,\"a\"]]">>, [ EJSON ]}
  33. , { [ 1, {json, JSON}, 3 ], <<"[1,[1,\"a\"],3]">>, [ 1, EJSON, 3 ]}
  34. , { [ {json, JSON}, {json, JSON} ], <<"[[1,\"a\"],[1,\"a\"]]">>, [ EJSON, EJSON ]}
  35. , { {[ {<<"a">>, {json, JSON}} ]}, <<"{\"a\":[1,\"a\"]}">>, {[ {<<"a">>, EJSON} ]}}
  36. ],
  37. TopTests ++ BuriedTests;
  38. cases(error) ->
  39. [ {json, true}
  40. , {json, "true"}
  41. ].