unsigned_char.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #if defined(__clang__)
  7. #define CONFLICTS_WITH_BUILTIN_OPERATOR
  8. #endif
  9. TEST_CASE("unsigned char[]") {
  10. SECTION("deserializeJson()") {
  11. unsigned char input[] = "{\"a\":42}";
  12. StaticJsonDocument<JSON_OBJECT_SIZE(1)> doc;
  13. DeserializationError err = deserializeJson(doc, input);
  14. REQUIRE(err == DeserializationError::Ok);
  15. }
  16. SECTION("deserializeMsgPack()") {
  17. unsigned char input[] = "\xDE\x00\x01\xA5Hello\xA5world";
  18. StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc;
  19. DeserializationError err = deserializeMsgPack(doc, input);
  20. REQUIRE(err == DeserializationError::Ok);
  21. }
  22. SECTION("JsonVariant") {
  23. DynamicJsonDocument doc;
  24. SECTION("set") {
  25. unsigned char value[] = "42";
  26. JsonVariant variant = doc.to<JsonVariant>();
  27. variant.set(value);
  28. REQUIRE(42 == variant.as<int>());
  29. }
  30. #ifndef CONFLICTS_WITH_BUILTIN_OPERATOR
  31. SECTION("operator[]") {
  32. unsigned char key[] = "hello";
  33. deserializeJson(doc, "{\"hello\":\"world\"}");
  34. JsonVariant variant = doc.as<JsonVariant>();
  35. REQUIRE(std::string("world") == variant[key]);
  36. }
  37. #endif
  38. #ifndef CONFLICTS_WITH_BUILTIN_OPERATOR
  39. SECTION("operator[] const") {
  40. unsigned char key[] = "hello";
  41. deserializeJson(doc, "{\"hello\":\"world\"}");
  42. const JsonVariant variant = doc.as<JsonVariant>();
  43. REQUIRE(std::string("world") == variant[key]);
  44. }
  45. #endif
  46. SECTION("operator==") {
  47. unsigned char comparand[] = "hello";
  48. JsonVariant variant = doc.to<JsonVariant>();
  49. variant.set("hello");
  50. REQUIRE(comparand == variant);
  51. REQUIRE(variant == comparand);
  52. REQUIRE_FALSE(comparand != variant);
  53. REQUIRE_FALSE(variant != comparand);
  54. }
  55. SECTION("operator!=") {
  56. unsigned char comparand[] = "hello";
  57. JsonVariant variant = doc.to<JsonVariant>();
  58. variant.set("world");
  59. REQUIRE(comparand != variant);
  60. REQUIRE(variant != comparand);
  61. REQUIRE_FALSE(comparand == variant);
  62. REQUIRE_FALSE(variant == comparand);
  63. }
  64. }
  65. SECTION("JsonObject") {
  66. #ifndef CONFLICTS_WITH_BUILTIN_OPERATOR
  67. SECTION("operator[]") {
  68. unsigned char key[] = "hello";
  69. DynamicJsonDocument doc;
  70. JsonObject obj = doc.to<JsonObject>();
  71. obj[key] = "world";
  72. REQUIRE(std::string("world") == obj["hello"]);
  73. }
  74. SECTION("JsonObject::operator[] const") {
  75. unsigned char key[] = "hello";
  76. DynamicJsonDocument doc;
  77. deserializeJson(doc, "{\"hello\":\"world\"}");
  78. JsonObject obj = doc.as<JsonObject>();
  79. REQUIRE(std::string("world") == obj[key]);
  80. }
  81. #endif
  82. SECTION("get()") {
  83. unsigned char key[] = "hello";
  84. DynamicJsonDocument doc;
  85. deserializeJson(doc, "{\"hello\":\"world\"}");
  86. JsonObject obj = doc.as<JsonObject>();
  87. REQUIRE(std::string("world") == obj.get<char*>(key));
  88. }
  89. SECTION("set() key") {
  90. unsigned char key[] = "hello";
  91. DynamicJsonDocument doc;
  92. JsonObject obj = doc.to<JsonObject>();
  93. obj.set(key, "world");
  94. REQUIRE(std::string("world") == obj["hello"]);
  95. }
  96. SECTION("set() value") {
  97. unsigned char value[] = "world";
  98. DynamicJsonDocument doc;
  99. JsonObject obj = doc.to<JsonObject>();
  100. obj.set("hello", value);
  101. REQUIRE(std::string("world") == obj["hello"]);
  102. }
  103. SECTION("set() key&value") {
  104. unsigned char key[] = "world";
  105. DynamicJsonDocument doc;
  106. JsonObject obj = doc.to<JsonObject>();
  107. obj.set(key, key);
  108. REQUIRE(std::string("world") == obj["world"]);
  109. }
  110. SECTION("containsKey()") {
  111. unsigned char key[] = "hello";
  112. DynamicJsonDocument doc;
  113. deserializeJson(doc, "{\"hello\":\"world\"}");
  114. JsonObject obj = doc.as<JsonObject>();
  115. REQUIRE(true == obj.containsKey(key));
  116. }
  117. SECTION("remove()") {
  118. unsigned char key[] = "hello";
  119. DynamicJsonDocument doc;
  120. deserializeJson(doc, "{\"hello\":\"world\"}");
  121. JsonObject obj = doc.as<JsonObject>();
  122. obj.remove(key);
  123. REQUIRE(0 == obj.size());
  124. }
  125. SECTION("is()") {
  126. unsigned char key[] = "hello";
  127. DynamicJsonDocument doc;
  128. deserializeJson(doc, "{\"hello\":42}");
  129. JsonObject obj = doc.as<JsonObject>();
  130. REQUIRE(true == obj.is<int>(key));
  131. }
  132. SECTION("createNestedArray()") {
  133. unsigned char key[] = "hello";
  134. DynamicJsonDocument doc;
  135. JsonObject obj = doc.to<JsonObject>();
  136. obj.createNestedArray(key);
  137. }
  138. SECTION("createNestedObject()") {
  139. unsigned char key[] = "hello";
  140. DynamicJsonDocument doc;
  141. JsonObject obj = doc.to<JsonObject>();
  142. obj.createNestedObject(key);
  143. }
  144. }
  145. SECTION("JsonObjectSubscript") {
  146. SECTION("operator=") { // issue #416
  147. unsigned char value[] = "world";
  148. DynamicJsonDocument doc;
  149. JsonObject obj = doc.to<JsonObject>();
  150. obj["hello"] = value;
  151. REQUIRE(std::string("world") == obj["hello"]);
  152. }
  153. SECTION("set()") {
  154. unsigned char value[] = "world";
  155. DynamicJsonDocument doc;
  156. JsonObject obj = doc.to<JsonObject>();
  157. obj["hello"].set(value);
  158. REQUIRE(std::string("world") == obj["hello"]);
  159. }
  160. }
  161. SECTION("JsonArray") {
  162. SECTION("add()") {
  163. unsigned char value[] = "world";
  164. DynamicJsonDocument doc;
  165. JsonArray arr = doc.to<JsonArray>();
  166. arr.add(value);
  167. REQUIRE(std::string("world") == arr[0]);
  168. }
  169. SECTION("set()") {
  170. unsigned char value[] = "world";
  171. DynamicJsonDocument doc;
  172. JsonArray arr = doc.to<JsonArray>();
  173. arr.add("hello");
  174. arr.set(0, value);
  175. REQUIRE(std::string("world") == arr[0]);
  176. }
  177. }
  178. SECTION("JsonArraySubscript") {
  179. SECTION("set()") {
  180. unsigned char value[] = "world";
  181. DynamicJsonDocument doc;
  182. JsonArray arr = doc.to<JsonArray>();
  183. arr.add("hello");
  184. arr[0].set(value);
  185. REQUIRE(std::string("world") == arr[0]);
  186. }
  187. SECTION("operator=") {
  188. unsigned char value[] = "world";
  189. DynamicJsonDocument doc;
  190. JsonArray arr = doc.to<JsonArray>();
  191. arr.add("hello");
  192. arr[0] = value;
  193. REQUIRE(std::string("world") == arr[0]);
  194. }
  195. }
  196. }