deserializeStaticVariant.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. static const size_t epsilon = sizeof(void*);
  7. template <size_t Capacity>
  8. static void check(const char* input, MsgPackError expected) {
  9. StaticJsonVariant<Capacity> variant;
  10. MsgPackError error = deserializeMsgPack(variant, input);
  11. REQUIRE(error == expected);
  12. }
  13. TEST_CASE("deserializeMsgPack(StaticJsonVariant&)") {
  14. SECTION("single values always fit") {
  15. check<0>("\xc0", MsgPackError::Ok); // nil
  16. check<0>("\xc2", MsgPackError::Ok); // false
  17. check<0>("\xc3", MsgPackError::Ok); // true
  18. check<0>("\xcc\x00", MsgPackError::Ok); // uint 8
  19. check<0>("\xcd\x30\x39", MsgPackError::Ok); // uint 16
  20. check<0>("\xCE\x12\x34\x56\x78", MsgPackError::Ok); // uint 32
  21. }
  22. SECTION("fixstr") {
  23. check<0>("\xA0", MsgPackError::Ok);
  24. check<0>("\xA1H", MsgPackError::NoMemory);
  25. check<4>("\xA1H", MsgPackError::Ok);
  26. check<4>("\xA5Hello", MsgPackError::NoMemory);
  27. }
  28. SECTION("str 8") {
  29. check<0>("\xD9\x00", MsgPackError::Ok);
  30. check<0>("\xD9\x01H", MsgPackError::NoMemory);
  31. check<4>("\xD9\x01H", MsgPackError::Ok);
  32. check<4>("\xD9\x05Hello", MsgPackError::NoMemory);
  33. }
  34. SECTION("str 16") {
  35. check<0>("\xDA\x00\x00", MsgPackError::Ok);
  36. check<0>("\xDA\x00\x01H", MsgPackError::NoMemory);
  37. check<4>("\xDA\x00\x01H", MsgPackError::Ok);
  38. check<4>("\xDA\x00\x05Hello", MsgPackError::NoMemory);
  39. }
  40. SECTION("str 32") {
  41. check<0>("\xDB\x00\x00\x00\x00", MsgPackError::Ok);
  42. check<0>("\xDB\x00\x00\x00\x01H", MsgPackError::NoMemory);
  43. check<4>("\xDB\x00\x00\x00\x01H", MsgPackError::Ok);
  44. check<4>("\xDB\x00\x00\x00\x05Hello", MsgPackError::NoMemory);
  45. }
  46. SECTION("fixarray") {
  47. check<JSON_ARRAY_SIZE(0)>("\x90", MsgPackError::Ok); // []
  48. check<JSON_ARRAY_SIZE(0)>("\x91\x01", MsgPackError::NoMemory); // [1]
  49. check<JSON_ARRAY_SIZE(1)>("\x91\x01", MsgPackError::Ok); // [1]
  50. check<JSON_ARRAY_SIZE(1)>("\x92\x01\x02", MsgPackError::NoMemory); // [1,2]
  51. }
  52. SECTION("array 16") {
  53. check<JSON_ARRAY_SIZE(0)>("\xDC\x00\x00", MsgPackError::Ok);
  54. check<JSON_ARRAY_SIZE(0)>("\xDC\x00\x01\x01", MsgPackError::NoMemory);
  55. check<JSON_ARRAY_SIZE(1)>("\xDC\x00\x01\x01", MsgPackError::Ok);
  56. check<JSON_ARRAY_SIZE(1)>("\xDC\x00\x02\x01\x02", MsgPackError::NoMemory);
  57. }
  58. SECTION("array 32") {
  59. check<JSON_ARRAY_SIZE(0)>("\xDD\x00\x00\x00\x00", MsgPackError::Ok);
  60. check<JSON_ARRAY_SIZE(0)>("\xDD\x00\x00\x00\x01\x01",
  61. MsgPackError::NoMemory);
  62. check<JSON_ARRAY_SIZE(1)>("\xDD\x00\x00\x00\x01\x01", MsgPackError::Ok);
  63. check<JSON_ARRAY_SIZE(1)>("\xDD\x00\x00\x00\x02\x01\x02",
  64. MsgPackError::NoMemory);
  65. }
  66. SECTION("fixmap") {
  67. SECTION("{}") {
  68. check<JSON_OBJECT_SIZE(0)>("\x80", MsgPackError::Ok);
  69. }
  70. SECTION("{H:1}") {
  71. check<JSON_OBJECT_SIZE(0)>("\x81\xA1H\x01",
  72. MsgPackError::NoMemory);
  73. check<JSON_OBJECT_SIZE(1) + epsilon>("\x81\xA1H\x01", MsgPackError::Ok);
  74. }
  75. SECTION("{H:1,W:2}") {
  76. check<JSON_OBJECT_SIZE(1) + epsilon>("\x82\xA1H\x01\xA1W\x02",
  77. MsgPackError::NoMemory);
  78. check<JSON_OBJECT_SIZE(2) + 2*epsilon>("\x82\xA1H\x01\xA1W\x02",
  79. MsgPackError::Ok);
  80. }
  81. }
  82. SECTION("map 16") {
  83. SECTION("{}") {
  84. check<JSON_OBJECT_SIZE(0)>("\xDE\x00\x00", MsgPackError::Ok);
  85. }
  86. SECTION("{H:1}") {
  87. check<JSON_OBJECT_SIZE(0)>("\xDE\x00\x01\xA1H\x01",
  88. MsgPackError::NoMemory);
  89. check<JSON_OBJECT_SIZE(1) + epsilon>("\xDE\x00\x01\xA1H\x01", MsgPackError::Ok);
  90. }
  91. SECTION("{H:1,W:2}") {
  92. check<JSON_OBJECT_SIZE(1) + epsilon>("\xDE\x00\x02\xA1H\x01\xA1W\x02",
  93. MsgPackError::NoMemory);
  94. check<JSON_OBJECT_SIZE(2) + 2*epsilon>("\xDE\x00\x02\xA1H\x01\xA1W\x02",
  95. MsgPackError::Ok);
  96. }
  97. }
  98. SECTION("map 32") {
  99. SECTION("{}") {
  100. check<JSON_OBJECT_SIZE(0)>("\xDF\x00\x00\x00\x00", MsgPackError::Ok);
  101. }
  102. SECTION("{H:1}") {
  103. check<JSON_OBJECT_SIZE(0)>("\xDF\x00\x00\x00\x01\xA1H\x01",
  104. MsgPackError::NoMemory);
  105. check<JSON_OBJECT_SIZE(1) + epsilon>("\xDF\x00\x00\x00\x01\xA1H\x01",
  106. MsgPackError::Ok);
  107. }
  108. SECTION("{H:1,W:2}") {
  109. check<JSON_OBJECT_SIZE(1) + epsilon>("\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02",
  110. MsgPackError::NoMemory);
  111. check<JSON_OBJECT_SIZE(2) + 2*epsilon>("\xDF\x00\x00\x00\x02\xA1H\x01\xA1W\x02",
  112. MsgPackError::Ok);
  113. }
  114. }
  115. }