Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

102 рядки
2.6 KiB

14 роки тому
14 роки тому
14 роки тому
14 роки тому
  1. #! /usr/bin/env escript
  2. % This file is part of Jiffy released under the MIT license.
  3. % See the LICENSE file for more information.
  4. main([]) ->
  5. code:add_pathz("ebin"),
  6. code:add_pathz("test"),
  7. etap:plan(76),
  8. util:test_good(good()),
  9. util:test_errors(errors()),
  10. test_utf8(utf8_cases()),
  11. etap:end_tests().
  12. good() ->
  13. [
  14. {<<"\"\"">>, <<"">>},
  15. {<<"\"0\"">>, <<"0">>},
  16. {<<"\"foo\"">>, <<"foo">>},
  17. {<<"\"\\\"foobar\\\"\"">>, <<"\"foobar\"">>},
  18. {<<"\"\\n\\n\\n\"">>, <<"\n\n\n">>},
  19. {<<"\"\\\" \\b\\f\\r\\n\\t\\\"\"">>, <<"\" \b\f\r\n\t\"">>},
  20. {<<"\"foo\\u0005bar\"">>, <<"foo", 5, "bar">>},
  21. {
  22. <<"\"\\uD834\\uDD1E\"">>,
  23. <<240, 157, 132, 158>>,
  24. <<34, 240, 157, 132, 158, 34>>
  25. }
  26. ].
  27. errors() ->
  28. [
  29. <<"\"foo">>,
  30. <<"\"", 0, "\"">>,
  31. <<"\"\\g\"">>,
  32. <<"\"\\uFFFF\"">>,
  33. <<"\"\\uD834foo\\uDD1E\"">>,
  34. % CouchDB-345
  35. <<34,78,69,73,77,69,78,32,70,216,82,82,32,70,65,69,78,33,34>>
  36. ].
  37. test_utf8([]) ->
  38. ok;
  39. test_utf8([Case | Rest]) ->
  40. etap:fun_is(
  41. fun({error, invalid_string}) -> true; (Else) -> Else end,
  42. (catch jiffy:encode(Case)),
  43. lists:flatten(io_lib:format("Invalid utf-8: ~p", [Case]))
  44. ),
  45. Case2 = <<34, Case/binary, 34>>,
  46. etap:fun_is(
  47. fun({error, {_, invalid_string}}) -> true; (Else) -> Else end,
  48. (catch jiffy:decode(Case2)),
  49. lists:flatten(io_lib:format("Invalid utf-8: ~p", [Case2]))
  50. ),
  51. test_utf8(Rest).
  52. utf8_cases() ->
  53. [
  54. % Stray continuation byte
  55. <<16#C2, 16#81, 16#80>>,
  56. <<"foo", 16#80, "bar">>,
  57. % Not enough extension bytes
  58. <<16#C0>>,
  59. <<16#E0>>,
  60. <<16#E0, 16#80>>,
  61. <<16#F0>>,
  62. <<16#F0, 16#80>>,
  63. <<16#F0, 16#80, 16#80>>,
  64. <<16#F8>>,
  65. <<16#F8, 16#80>>,
  66. <<16#F8, 16#80, 16#80>>,
  67. <<16#F8, 16#80, 16#80, 16#80>>,
  68. <<16#FC>>,
  69. <<16#FC, 16#80>>,
  70. <<16#FC, 16#80, 16#80>>,
  71. <<16#FC, 16#80, 16#80, 16#80>>,
  72. <<16#FC, 16#80, 16#80, 16#80, 16#80>>,
  73. % No data in high bits.
  74. <<16#C0, 16#80>>,
  75. <<16#C1, 16#80>>,
  76. <<16#E0, 16#80, 16#80>>,
  77. <<16#E0, 16#90, 16#80>>,
  78. <<16#F0, 16#80, 16#80, 16#80>>,
  79. <<16#F0, 16#88, 16#80, 16#80>>,
  80. <<16#F8, 16#80, 16#80, 16#80, 16#80>>,
  81. <<16#F8, 16#84, 16#80, 16#80, 16#80>>,
  82. <<16#FC, 16#80, 16#80, 16#80, 16#80, 16#80>>,
  83. <<16#FC, 16#82, 16#80, 16#80, 16#80, 16#80>>
  84. ].