jsone_decode_tests.erl 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. %% Copyright (c) 2013, Takeru Ohta <phjgt308@gmail.com>
  2. -module(jsone_decode_tests).
  3. -include_lib("eunit/include/eunit.hrl").
  4. decode_test_() ->
  5. [
  6. {"'false'がデコード可能",
  7. fun () ->
  8. ?assertEqual({false, <<"">>}, jsone_decode:decode(<<"false">>))
  9. end},
  10. {"'true'がデコード可能",
  11. fun () ->
  12. ?assertEqual({true, <<"">>}, jsone_decode:decode(<<"true">>))
  13. end},
  14. {"'null'がデコード可能",
  15. fun () ->
  16. ?assertEqual({null, <<"">>}, jsone_decode:decode(<<"null">>))
  17. end},
  18. {"正の整数がデコード可能",
  19. fun () ->
  20. ?assertEqual({1, <<"">>}, jsone_decode:decode(<<"1">>))
  21. end},
  22. {"0がデコード可能",
  23. fun () ->
  24. ?assertEqual({0, <<"">>}, jsone_decode:decode(<<"0">>))
  25. end},
  26. {"負の整数がデコード可能",
  27. fun () ->
  28. ?assertEqual({-1, <<"">>}, jsone_decode:decode(<<"-1">>))
  29. end},
  30. {"整数の値の大きさに制限はなし",
  31. fun () ->
  32. ?assertEqual({111111111111111111111111111111111111111111111111111111111111111111111111111111, <<"">>},
  33. jsone_decode:decode(<<"111111111111111111111111111111111111111111111111111111111111111111111111111111">>))
  34. end},
  35. {"先頭に余計な0がつく場合は、先頭文字とそれ以降が別々のトークンと判断される",
  36. fun () ->
  37. ?assertEqual({0, <<"0">>}, jsone_decode:decode(<<"00">>)),
  38. ?assertEqual({0, <<"1">>}, jsone_decode:decode(<<"01">>)),
  39. ?assertEqual({0, <<"1">>}, jsone_decode:decode(<<"-01">>))
  40. end},
  41. {"正の整数の前の'+'記号は許可されない",
  42. fun () ->
  43. ?assertError({invalid_json, number_integer_part, _}, jsone_decode:decode(<<"+1">>))
  44. end},
  45. {"小数がデコード可能",
  46. fun () ->
  47. ?assertEqual({1.23, <<"">>}, jsone_decode:decode(<<"1.23">>))
  48. end},
  49. {"指数形式の小数がデコード可能",
  50. fun () ->
  51. ?assertEqual({12.345, <<"">>}, jsone_decode:decode(<<"12345e-3">>)),
  52. ?assertEqual({12.345, <<"">>}, jsone_decode:decode(<<"12345E-3">>)), % 'e'は大文字でも可
  53. ?assertEqual({12.345, <<"">>}, jsone_decode:decode(<<"12345.0e-3">>)),
  54. ?assertEqual({12.345, <<"">>}, jsone_decode:decode(<<"0.12345e2">>)),
  55. ?assertEqual({12.345, <<"">>}, jsone_decode:decode(<<"0.12345e+2">>)), % 指数部では'+'をつけても良い
  56. ?assertEqual({-12.345, <<"">>}, jsone_decode:decode(<<"-0.012345e3">>))
  57. end}%% ,
  58. %% {"不正な形式の小数",
  59. %% fun () ->
  60. %% ?assertEqual(ok, jsone_decode:decode(<<"
  61. %% end}
  62. ].