/test/bert_tests.erl

https://github.com/drdaeman/bert.erl · Erlang · 66 lines · 48 code · 14 blank · 4 comment · 0 complexity · 662251dd2a34d99b449e7d09f88dd4d8 MD5 · raw file

  1. -module(bert_tests).
  2. -include_lib("eunit/include/eunit.hrl").
  3. -import(bert, [encode/1, decode/1, encode64/1, decode64/1]).
  4. % simple terms (both encoding and decoding)
  5. -define(assertEncode(Data, CorrectTerm),
  6. ?assertEqual(binary_to_term(encode(Data)), CorrectTerm),
  7. ?assertEqual(decode(term_to_binary(CorrectTerm)), Data)).
  8. basic_types_test() ->
  9. lists:map(
  10. fun(X) -> ?assertEncode(X, X) end,
  11. [4,
  12. 8.1516,
  13. foo,
  14. {coord, 23, 42},
  15. [1, 2, 3],
  16. [a, [1, 2]],
  17. <<"Roses are red\0Violets are blue">>]
  18. ).
  19. nil_test() ->
  20. ?assertEncode([], {bert, nil}).
  21. special_atoms_test() ->
  22. ?assertEncode(true, {bert, true}),
  23. ?assertEncode(false, {bert, false}).
  24. empty_dictionary_test() ->
  25. ?assertEncode(dict:new(), {bert, dict, []}).
  26. % encoding
  27. encode_dictionary_test() ->
  28. ?assertMatch({bert, dict, [_, _]},
  29. binary_to_term(encode(dict:from_list([{name, <<"Tom">>}, {age, 30}])))).
  30. encode_nested_test() ->
  31. ?assertEncode([foo, [true, false], {42, dict:new()}],
  32. [foo, [{bert, true}, {bert, false}], {42, {bert, dict, []}}]),
  33. Data = binary_to_term(encode(dict:from_list([{42, true}, {empty, dict:new()}]))),
  34. ?assertMatch({bert, dict, [_, _]}, Data),
  35. {bert, dict, DictItems} = Data,
  36. ?assertEqual([], ordsets:subtract(ordsets:from_list(DictItems),
  37. [{42, {bert, true}}, {empty, {bert, dict, []}}])).
  38. %% decoding
  39. decode_dictionary_test() ->
  40. Items = [{name, <<"Tom">>}, {age, 30}],
  41. ?assertEqual(
  42. [],
  43. ordsets:subtract(ordsets:from_list(Items),
  44. dict:to_list(decode(term_to_binary({bert, dict, Items}))))).
  45. decode_nested_test() ->
  46. ?assertEqual(dict:from_list([{true, dict:from_list([{42, []}])}]),
  47. decode(term_to_binary(
  48. {bert, dict, [{{bert, true}, {bert, dict, [{42, {bert, nil}}]}}]}))).
  49. %% base64
  50. base64_test() ->
  51. A = [foo, {bar, baz}],
  52. ?assertEqual(A, decode64(encode64(A))).