parseObject.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // Copyright Benoit Blanchon 2014-2017
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://bblanchon.github.io/ArduinoJson/
  6. // If you like this project, please add a star!
  7. #include <ArduinoJson.h>
  8. #include <catch.hpp>
  9. TEST_CASE("JsonBuffer::parseObject()") {
  10. DynamicJsonBuffer jb;
  11. SECTION("EmptyObject") {
  12. JsonObject& obj = jb.parseObject("{}");
  13. REQUIRE(obj.success());
  14. REQUIRE(obj.size() == 0);
  15. }
  16. SECTION("MissingOpeningBrace") {
  17. JsonObject& obj = jb.parseObject("}");
  18. REQUIRE_FALSE(obj.success());
  19. }
  20. SECTION("MissingClosingBrace") {
  21. JsonObject& obj = jb.parseObject("{");
  22. REQUIRE_FALSE(obj.success());
  23. }
  24. SECTION("MissingColonAndValue") {
  25. JsonObject& obj = jb.parseObject("{\"key\"}");
  26. REQUIRE_FALSE(obj.success());
  27. }
  28. SECTION("MissingQuotesAndColonAndValue") {
  29. JsonObject& obj = jb.parseObject("{key}");
  30. REQUIRE_FALSE(obj.success());
  31. }
  32. SECTION("OneString") {
  33. JsonObject& obj = jb.parseObject("{\"key\":\"value\"}");
  34. REQUIRE(obj.success());
  35. REQUIRE(obj.size() == 1);
  36. REQUIRE(obj["key"] == "value");
  37. }
  38. SECTION("OneStringSingleQuotes") {
  39. JsonObject& obj = jb.parseObject("{'key':'value'}");
  40. REQUIRE(obj.success());
  41. REQUIRE(obj.size() == 1);
  42. REQUIRE(obj["key"] == "value");
  43. }
  44. SECTION("OneStringNoQuotes") {
  45. JsonObject& obj = jb.parseObject("{key:value}");
  46. REQUIRE(obj.success());
  47. REQUIRE(obj.size() == 1);
  48. REQUIRE(obj["key"] == "value");
  49. }
  50. SECTION("OneStringSpaceBeforeKey") {
  51. JsonObject& obj = jb.parseObject("{ \"key\":\"value\"}");
  52. REQUIRE(obj.success());
  53. REQUIRE(obj.size() == 1);
  54. REQUIRE(obj["key"] == "value");
  55. }
  56. SECTION("OneStringSpaceAfterKey") {
  57. JsonObject& obj = jb.parseObject("{\"key\" :\"value\"}");
  58. REQUIRE(obj.success());
  59. REQUIRE(obj.size() == 1);
  60. REQUIRE(obj["key"] == "value");
  61. }
  62. SECTION("OneStringSpaceBeforeValue") {
  63. JsonObject& obj = jb.parseObject("{\"key\": \"value\"}");
  64. REQUIRE(obj.success());
  65. REQUIRE(obj.size() == 1);
  66. REQUIRE(obj["key"] == "value");
  67. }
  68. SECTION("OneStringSpaceAfterValue") {
  69. JsonObject& obj = jb.parseObject("{\"key\":\"value\" }");
  70. REQUIRE(obj.success());
  71. REQUIRE(obj.size() == 1);
  72. REQUIRE(obj["key"] == "value");
  73. }
  74. SECTION("TwoStrings") {
  75. JsonObject& obj =
  76. jb.parseObject("{\"key1\":\"value1\",\"key2\":\"value2\"}");
  77. REQUIRE(obj.success());
  78. REQUIRE(obj.size() == 2);
  79. REQUIRE(obj["key1"] == "value1");
  80. REQUIRE(obj["key2"] == "value2");
  81. }
  82. SECTION("TwoStringsSpaceBeforeComma") {
  83. JsonObject& obj =
  84. jb.parseObject("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  85. REQUIRE(obj.success());
  86. REQUIRE(obj.size() == 2);
  87. REQUIRE(obj["key1"] == "value1");
  88. REQUIRE(obj["key2"] == "value2");
  89. }
  90. SECTION("TwoStringsSpaceAfterComma") {
  91. JsonObject& obj =
  92. jb.parseObject("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  93. REQUIRE(obj.success());
  94. REQUIRE(obj.size() == 2);
  95. REQUIRE(obj["key1"] == "value1");
  96. REQUIRE(obj["key2"] == "value2");
  97. }
  98. SECTION("EndingWithAComma") {
  99. JsonObject& obj = jb.parseObject("{\"key1\":\"value1\",}");
  100. REQUIRE_FALSE(obj.success());
  101. REQUIRE(obj.size() == 0);
  102. }
  103. SECTION("TwoIntergers") {
  104. JsonObject& obj = jb.parseObject("{\"key1\":42,\"key2\":-42}");
  105. REQUIRE(obj.success());
  106. REQUIRE(obj.size() == 2);
  107. REQUIRE(obj["key1"] == 42);
  108. REQUIRE(obj["key2"] == -42);
  109. }
  110. SECTION("TwoDoubles") {
  111. JsonObject& obj = jb.parseObject("{\"key1\":12.345,\"key2\":-7E89}");
  112. REQUIRE(obj.success());
  113. REQUIRE(obj.size() == 2);
  114. REQUIRE(obj["key1"] == 12.345);
  115. REQUIRE(obj["key2"] == -7E89);
  116. }
  117. SECTION("TwoBooleans") {
  118. JsonObject& obj = jb.parseObject("{\"key1\":true,\"key2\":false}");
  119. REQUIRE(obj.success());
  120. REQUIRE(obj.size() == 2);
  121. REQUIRE(obj["key1"] == true);
  122. REQUIRE(obj["key2"] == false);
  123. }
  124. SECTION("TwoNulls") {
  125. JsonObject& obj = jb.parseObject("{\"key1\":null,\"key2\":null}");
  126. REQUIRE(obj.success());
  127. REQUIRE(obj.size() == 2);
  128. REQUIRE(obj["key1"].as<char*>() == 0);
  129. REQUIRE(obj["key2"].as<char*>() == 0);
  130. }
  131. SECTION("NullForKey") {
  132. JsonObject& obj = jb.parseObject("null:\"value\"}");
  133. REQUIRE_FALSE(obj.success());
  134. }
  135. }