Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

55 строки
1.5 KiB

11 лет назад
11 лет назад
11 лет назад
14 лет назад
14 лет назад
14 лет назад
14 лет назад
  1. -module(util).
  2. -export([test_good/1, test_good/2, test_errors/1]).
  3. test_good(Cases) ->
  4. test_good(Cases, []).
  5. test_good(Cases, Options) ->
  6. lists:foreach(fun(Case) -> check_good(Case, Options) end, Cases).
  7. test_errors(Cases) ->
  8. lists:foreach(fun(Case) -> check_error(Case) end, Cases).
  9. ok_dec(J, _E) ->
  10. lists:flatten(io_lib:format("Decoded ~p.", [J])).
  11. ok_enc(E, _J) ->
  12. lists:flatten(io_lib:format("Encoded ~p", [E])).
  13. do_encode(E, Options) ->
  14. iolist_to_binary(jiffy:encode(E, Options)).
  15. error_mesg(J) ->
  16. lists:flatten(io_lib:format("Decoding ~p returns an error.", [J])).
  17. check_good({J, E}, Options) ->
  18. etap:is(jiffy:decode(J), E, ok_dec(J, E)),
  19. etap:is(do_encode(E, Options), J, ok_enc(E, J));
  20. check_good({J, E, J2}, Options) ->
  21. etap:is(jiffy:decode(J), E, ok_dec(J, E)),
  22. check_map({J, J2}, Options),
  23. etap:is(do_encode(E, Options), J2, ok_enc(E, J2)).
  24. check_map({J, J2}, Options) ->
  25. try jiffy:decode(J, [map]) of
  26. E2 ->
  27. % etap function breaks all tests because of etap:plan, so stop
  28. % if map test failed
  29. J2 = do_encode(E2, Options)
  30. catch throw:{error, {1, map_unavailable}} ->
  31. ok
  32. end.
  33. check_error({J, E}) ->
  34. etap:fun_is(
  35. fun({error, E1}) when E1 == E -> true; (E1) -> E1 end,
  36. (catch jiffy:decode(J)),
  37. error_mesg(J)
  38. );
  39. check_error(J) ->
  40. etap:fun_is(
  41. fun({error, _}) -> true; (Else) -> Else end,
  42. (catch jiffy:decode(J)),
  43. error_mesg(J)
  44. ).