JsonParser_Object_Tests.cpp 4.3 KB

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