JsonParser_Object_Tests.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include <gtest/gtest.h>
  2. #include <ArduinoJson/StaticJsonBuffer.hpp>
  3. #include <ArduinoJson/JsonValue.hpp>
  4. using namespace ArduinoJson;
  5. class JsonParser_Object_Test : public testing::Test {
  6. protected:
  7. void whenInputIs(const char *jsonString) {
  8. strcpy(_jsonString, jsonString);
  9. _object = _jsonBuffer.parseObject(_jsonString);
  10. }
  11. void parseMustSucceed() { EXPECT_TRUE(_object.success()); }
  12. void parseMustFail() { EXPECT_FALSE(_object.success()); }
  13. void sizeMustBe(int expected) { EXPECT_EQ(expected, _object.size()); }
  14. void keyMustHaveValue(const char *key, const char *expected) {
  15. EXPECT_STREQ(expected, _object[key].as<const char *>());
  16. }
  17. template <typename T> void keyMustHaveValue(const char *key, T expected) {
  18. EXPECT_EQ(expected, _object[key].as<T>());
  19. }
  20. private:
  21. StaticJsonBuffer<10> _jsonBuffer;
  22. JsonObject _object;
  23. char _jsonString[256];
  24. };
  25. TEST_F(JsonParser_Object_Test, EmptyObject) {
  26. whenInputIs("{}");
  27. parseMustSucceed();
  28. sizeMustBe(0);
  29. }
  30. TEST_F(JsonParser_Object_Test, MissingClosingBrace) {
  31. whenInputIs("{");
  32. parseMustFail();
  33. sizeMustBe(0);
  34. }
  35. TEST_F(JsonParser_Object_Test, MissingColonAndValue) {
  36. whenInputIs("{\"key\"}");
  37. parseMustFail();
  38. sizeMustBe(0);
  39. }
  40. TEST_F(JsonParser_Object_Test, MissingQuotesAndColonAndValue) {
  41. whenInputIs("{key}");
  42. parseMustFail();
  43. sizeMustBe(0);
  44. }
  45. TEST_F(JsonParser_Object_Test, OneString) {
  46. whenInputIs("{\"key\":\"value\"}");
  47. parseMustSucceed();
  48. sizeMustBe(1);
  49. keyMustHaveValue("key", "value");
  50. }
  51. TEST_F(JsonParser_Object_Test, OneStringSingleQuotes) {
  52. whenInputIs("{'key':'value'}");
  53. parseMustSucceed();
  54. sizeMustBe(1);
  55. keyMustHaveValue("key", "value");
  56. }
  57. TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeKey) {
  58. whenInputIs("{ \"key\":\"value\"}");
  59. parseMustSucceed();
  60. sizeMustBe(1);
  61. keyMustHaveValue("key", "value");
  62. }
  63. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterKey) {
  64. whenInputIs("{\"key\" :\"value\"}");
  65. parseMustSucceed();
  66. sizeMustBe(1);
  67. keyMustHaveValue("key", "value");
  68. }
  69. TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeValue) {
  70. whenInputIs("{\"key\": \"value\"}");
  71. parseMustSucceed();
  72. sizeMustBe(1);
  73. keyMustHaveValue("key", "value");
  74. }
  75. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterValue) {
  76. whenInputIs("{\"key\":\"value\" }");
  77. parseMustSucceed();
  78. sizeMustBe(1);
  79. keyMustHaveValue("key", "value");
  80. }
  81. TEST_F(JsonParser_Object_Test, TwoStrings) {
  82. whenInputIs("{\"key1\":\"value1\",\"key2\":\"value2\"}");
  83. parseMustSucceed();
  84. sizeMustBe(2);
  85. keyMustHaveValue("key1", "value1");
  86. keyMustHaveValue("key2", "value2");
  87. }
  88. TEST_F(JsonParser_Object_Test, TwoStringsSpaceBeforeComma) {
  89. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  90. parseMustSucceed();
  91. sizeMustBe(2);
  92. keyMustHaveValue("key1", "value1");
  93. keyMustHaveValue("key2", "value2");
  94. }
  95. TEST_F(JsonParser_Object_Test, TwoStringsSpaceAfterComma) {
  96. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  97. parseMustSucceed();
  98. sizeMustBe(2);
  99. keyMustHaveValue("key1", "value1");
  100. keyMustHaveValue("key2", "value2");
  101. }
  102. TEST_F(JsonParser_Object_Test, EndingWithAComma) {
  103. whenInputIs("{\"key1\":\"value1\",}");
  104. parseMustFail();
  105. sizeMustBe(0);
  106. }
  107. TEST_F(JsonParser_Object_Test, TwoIntergers) {
  108. whenInputIs("{\"key1\":42,\"key2\":-42}");
  109. parseMustSucceed();
  110. sizeMustBe(2);
  111. keyMustHaveValue("key1", 42);
  112. keyMustHaveValue("key2", -42);
  113. }
  114. TEST_F(JsonParser_Object_Test, TwoDoubles) {
  115. whenInputIs("{\"key1\":12.345,\"key2\":-7.89}");
  116. parseMustSucceed();
  117. sizeMustBe(2);
  118. keyMustHaveValue("key1", 12.345);
  119. keyMustHaveValue("key2", -7.89);
  120. }
  121. TEST_F(JsonParser_Object_Test, TwoBooleans) {
  122. whenInputIs("{\"key1\":true,\"key2\":false}");
  123. parseMustSucceed();
  124. sizeMustBe(2);
  125. keyMustHaveValue("key1", true);
  126. keyMustHaveValue("key2", false);
  127. }
  128. TEST_F(JsonParser_Object_Test, TwoNulls) {
  129. const char *const nullstr = 0;
  130. whenInputIs("{\"key1\":null,\"key2\":null}");
  131. parseMustSucceed();
  132. sizeMustBe(2);
  133. keyMustHaveValue("key1", nullstr);
  134. keyMustHaveValue("key2", nullstr);
  135. }
  136. TEST_F(JsonParser_Object_Test, NullForKey) {
  137. whenInputIs("null:\"value\"}");
  138. parseMustFail();
  139. }