DynamicJsonObject.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. TEST_CASE("deserializeJson(DynamicJsonObject&)") {
  7. DynamicJsonObject obj;
  8. SECTION("An empty object") {
  9. JsonError err = deserializeJson(obj, "{}");
  10. REQUIRE(err == JsonError::Ok);
  11. REQUIRE(obj.size() == 0);
  12. }
  13. SECTION("Quotes") {
  14. SECTION("Double quotes") {
  15. JsonError err = deserializeJson(obj, "{\"key\":\"value\"}");
  16. REQUIRE(err == JsonError::Ok);
  17. REQUIRE(obj.size() == 1);
  18. REQUIRE(obj["key"] == "value");
  19. }
  20. SECTION("Single quotes") {
  21. JsonError err = deserializeJson(obj, "{'key':'value'}");
  22. REQUIRE(err == JsonError::Ok);
  23. REQUIRE(obj.size() == 1);
  24. REQUIRE(obj["key"] == "value");
  25. }
  26. SECTION("No quotes") {
  27. JsonError err = deserializeJson(obj, "{key:value}");
  28. REQUIRE(err == JsonError::Ok);
  29. REQUIRE(obj.size() == 1);
  30. REQUIRE(obj["key"] == "value");
  31. }
  32. SECTION("No quotes, allow underscore in key") {
  33. JsonError err = deserializeJson(obj, "{_k_e_y_:42}");
  34. REQUIRE(err == JsonError::Ok);
  35. REQUIRE(obj.size() == 1);
  36. REQUIRE(obj["_k_e_y_"] == 42);
  37. }
  38. }
  39. SECTION("Spaces") {
  40. SECTION("Before the key") {
  41. JsonError err = deserializeJson(obj, "{ \"key\":\"value\"}");
  42. REQUIRE(err == JsonError::Ok);
  43. REQUIRE(obj.size() == 1);
  44. REQUIRE(obj["key"] == "value");
  45. }
  46. SECTION("After the key") {
  47. JsonError err = deserializeJson(obj, "{\"key\" :\"value\"}");
  48. REQUIRE(err == JsonError::Ok);
  49. REQUIRE(obj.size() == 1);
  50. REQUIRE(obj["key"] == "value");
  51. }
  52. SECTION("Before the value") {
  53. JsonError err = deserializeJson(obj, "{\"key\": \"value\"}");
  54. REQUIRE(err == JsonError::Ok);
  55. REQUIRE(obj.size() == 1);
  56. REQUIRE(obj["key"] == "value");
  57. }
  58. SECTION("After the value") {
  59. JsonError err = deserializeJson(obj, "{\"key\":\"value\" }");
  60. REQUIRE(err == JsonError::Ok);
  61. REQUIRE(obj.size() == 1);
  62. REQUIRE(obj["key"] == "value");
  63. }
  64. SECTION("Before the colon") {
  65. JsonError err =
  66. deserializeJson(obj, "{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  67. REQUIRE(err == JsonError::Ok);
  68. REQUIRE(obj.size() == 2);
  69. REQUIRE(obj["key1"] == "value1");
  70. REQUIRE(obj["key2"] == "value2");
  71. }
  72. SECTION("After the colon") {
  73. JsonError err =
  74. deserializeJson(obj, "{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  75. REQUIRE(err == JsonError::Ok);
  76. REQUIRE(obj.size() == 2);
  77. REQUIRE(obj["key1"] == "value1");
  78. REQUIRE(obj["key2"] == "value2");
  79. }
  80. }
  81. SECTION("Values types") {
  82. SECTION("String") {
  83. JsonError err =
  84. deserializeJson(obj, "{\"key1\":\"value1\",\"key2\":\"value2\"}");
  85. REQUIRE(err == JsonError::Ok);
  86. REQUIRE(obj.size() == 2);
  87. REQUIRE(obj["key1"] == "value1");
  88. REQUIRE(obj["key2"] == "value2");
  89. }
  90. SECTION("Integer") {
  91. JsonError err = deserializeJson(obj, "{\"key1\":42,\"key2\":-42}");
  92. REQUIRE(err == JsonError::Ok);
  93. REQUIRE(obj.size() == 2);
  94. REQUIRE(obj["key1"] == 42);
  95. REQUIRE(obj["key2"] == -42);
  96. }
  97. SECTION("Double") {
  98. JsonError err = deserializeJson(obj, "{\"key1\":12.345,\"key2\":-7E89}");
  99. REQUIRE(err == JsonError::Ok);
  100. REQUIRE(obj.size() == 2);
  101. REQUIRE(obj["key1"] == 12.345);
  102. REQUIRE(obj["key2"] == -7E89);
  103. }
  104. SECTION("Booleans") {
  105. JsonError err = deserializeJson(obj, "{\"key1\":true,\"key2\":false}");
  106. REQUIRE(err == JsonError::Ok);
  107. REQUIRE(obj.size() == 2);
  108. REQUIRE(obj["key1"] == true);
  109. REQUIRE(obj["key2"] == false);
  110. }
  111. SECTION("Null") {
  112. JsonError err = deserializeJson(obj, "{\"key1\":null,\"key2\":null}");
  113. REQUIRE(err == JsonError::Ok);
  114. REQUIRE(obj.size() == 2);
  115. REQUIRE(obj["key1"].as<char *>() == 0);
  116. REQUIRE(obj["key2"].as<char *>() == 0);
  117. }
  118. SECTION("Array") {
  119. char jsonString[] = " { \"ab\" : [ 1 , 2 ] , \"cd\" : [ 3 , 4 ] } ";
  120. JsonError err = deserializeJson(obj, jsonString);
  121. JsonArray &array1 = obj["ab"];
  122. const JsonArray &array2 = obj["cd"];
  123. JsonArray &array3 = obj["ef"];
  124. REQUIRE(err == JsonError::Ok);
  125. REQUIRE(true == array1.success());
  126. REQUIRE(true == array2.success());
  127. REQUIRE(false == array3.success());
  128. REQUIRE(2 == array1.size());
  129. REQUIRE(2 == array2.size());
  130. REQUIRE(0 == array3.size());
  131. REQUIRE(1 == array1[0].as<int>());
  132. REQUIRE(2 == array1[1].as<int>());
  133. REQUIRE(3 == array2[0].as<int>());
  134. REQUIRE(4 == array2[1].as<int>());
  135. REQUIRE(0 == array3[0].as<int>());
  136. }
  137. }
  138. SECTION("Misc") {
  139. SECTION("The opening brace is missing") {
  140. JsonError err = deserializeJson(obj, "}");
  141. REQUIRE(err == JsonError::OpeningBraceExpected);
  142. }
  143. SECTION("The closing brace is missing") {
  144. JsonError err = deserializeJson(obj, "{\"hello\":\"world\"");
  145. REQUIRE(err == JsonError::ClosingBraceExpected);
  146. }
  147. SECTION("A quoted key without value") {
  148. JsonError err = deserializeJson(obj, "{\"key\"}");
  149. REQUIRE(err == JsonError::ColonExpected);
  150. }
  151. SECTION("A non-quoted key without value") {
  152. JsonError err = deserializeJson(obj, "{key}");
  153. REQUIRE(err == JsonError::ColonExpected);
  154. }
  155. SECTION("A dangling comma") {
  156. JsonError err = deserializeJson(obj, "{\"key1\":\"value1\",}");
  157. REQUIRE(err == JsonError::ColonExpected);
  158. }
  159. SECTION("null as a key") {
  160. JsonError err = deserializeJson(obj, "{null:\"value\"}");
  161. REQUIRE(err == JsonError::Ok);
  162. }
  163. }
  164. SECTION("Should clear the JsonObject") {
  165. deserializeJson(obj, "{\"hello\":\"world\"}");
  166. deserializeJson(obj, "{}");
  167. REQUIRE(obj.size() == 0);
  168. REQUIRE(obj.memoryUsage() == JSON_OBJECT_SIZE(0));
  169. }
  170. }