JsonParser_Object_Tests.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. {
  7. protected:
  8. void whenInputIs(const char* jsonString)
  9. {
  10. strcpy(_jsonString, jsonString);
  11. _object = _jsonBuffer.parseObject(_jsonString);
  12. }
  13. void parseMustSucceed()
  14. {
  15. EXPECT_TRUE(_object.success());
  16. }
  17. void parseMustFail()
  18. {
  19. EXPECT_FALSE(_object.success());
  20. }
  21. void sizeMustBe(int expected)
  22. {
  23. EXPECT_EQ(expected, _object.size());
  24. }
  25. void keyMustHaveValue(const char* key, const char* expected)
  26. {
  27. EXPECT_STREQ(expected, _object[key].as<const char*>());
  28. }
  29. template<typename T>
  30. void keyMustHaveValue(const char* key, T expected)
  31. {
  32. EXPECT_EQ(expected, _object[key].as<T>());
  33. }
  34. private:
  35. StaticJsonBuffer<10> _jsonBuffer;
  36. JsonObject _object;
  37. char _jsonString[256];
  38. };
  39. TEST_F(JsonParser_Object_Test, EmptyObject)
  40. {
  41. whenInputIs("{}");
  42. parseMustSucceed();
  43. sizeMustBe(0);
  44. }
  45. TEST_F(JsonParser_Object_Test, MissingClosingBrace)
  46. {
  47. whenInputIs("{");
  48. parseMustFail();
  49. sizeMustBe(0);
  50. }
  51. TEST_F(JsonParser_Object_Test, MissingColonAndValue)
  52. {
  53. whenInputIs("{\"key\"}");
  54. parseMustFail();
  55. sizeMustBe(0);
  56. }
  57. TEST_F(JsonParser_Object_Test, MissingQuotesAndColonAndValue)
  58. {
  59. whenInputIs("{key}");
  60. parseMustFail();
  61. sizeMustBe(0);
  62. }
  63. TEST_F(JsonParser_Object_Test, OneString)
  64. {
  65. whenInputIs("{\"key\":\"value\"}");
  66. parseMustSucceed();
  67. sizeMustBe(1);
  68. keyMustHaveValue("key", "value");
  69. }
  70. TEST_F(JsonParser_Object_Test, OneStringSingleQuotes)
  71. {
  72. whenInputIs("{'key':'value'}");
  73. parseMustSucceed();
  74. sizeMustBe(1);
  75. keyMustHaveValue("key", "value");
  76. }
  77. TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeKey)
  78. {
  79. whenInputIs("{ \"key\":\"value\"}");
  80. parseMustSucceed();
  81. sizeMustBe(1);
  82. keyMustHaveValue("key", "value");
  83. }
  84. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterKey)
  85. {
  86. whenInputIs("{\"key\" :\"value\"}");
  87. parseMustSucceed();
  88. sizeMustBe(1);
  89. keyMustHaveValue("key", "value");
  90. }
  91. TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeValue)
  92. {
  93. whenInputIs("{\"key\": \"value\"}");
  94. parseMustSucceed();
  95. sizeMustBe(1);
  96. keyMustHaveValue("key", "value");
  97. }
  98. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterValue)
  99. {
  100. whenInputIs("{\"key\":\"value\" }");
  101. parseMustSucceed();
  102. sizeMustBe(1);
  103. keyMustHaveValue("key", "value");
  104. }
  105. TEST_F(JsonParser_Object_Test, TwoStrings)
  106. {
  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, TwoStringsSpaceBeforeComma)
  114. {
  115. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  116. parseMustSucceed();
  117. sizeMustBe(2);
  118. keyMustHaveValue("key1", "value1");
  119. keyMustHaveValue("key2", "value2");
  120. }
  121. TEST_F(JsonParser_Object_Test, TwoStringsSpaceAfterComma)
  122. {
  123. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  124. parseMustSucceed();
  125. sizeMustBe(2);
  126. keyMustHaveValue("key1", "value1");
  127. keyMustHaveValue("key2", "value2");
  128. }
  129. TEST_F(JsonParser_Object_Test, EndingWithAComma)
  130. {
  131. whenInputIs("{\"key1\":\"value1\",}");
  132. parseMustFail();
  133. sizeMustBe(0);
  134. }
  135. TEST_F(JsonParser_Object_Test, TwoIntergers)
  136. {
  137. whenInputIs("{\"key1\":42,\"key2\":-42}");
  138. parseMustSucceed();
  139. sizeMustBe(2);
  140. keyMustHaveValue("key1", 42);
  141. keyMustHaveValue("key2", -42);
  142. }
  143. TEST_F(JsonParser_Object_Test, TwoDoubles)
  144. {
  145. whenInputIs("{\"key1\":12.345,\"key2\":-7.89}");
  146. parseMustSucceed();
  147. sizeMustBe(2);
  148. keyMustHaveValue("key1", 12.345);
  149. keyMustHaveValue("key2", -7.89);
  150. }
  151. TEST_F(JsonParser_Object_Test, TwoBooleans)
  152. {
  153. whenInputIs("{\"key1\":true,\"key2\":false}");
  154. parseMustSucceed();
  155. sizeMustBe(2);
  156. keyMustHaveValue("key1", true);
  157. keyMustHaveValue("key2", false);
  158. }
  159. TEST_F(JsonParser_Object_Test, TwoNulls)
  160. {
  161. const char* const nullstr = 0;
  162. whenInputIs("{\"key1\":null,\"key2\":null}");
  163. parseMustSucceed();
  164. sizeMustBe(2);
  165. keyMustHaveValue("key1", nullstr);
  166. keyMustHaveValue("key2", nullstr);
  167. }
  168. TEST_F(JsonParser_Object_Test, NullForKey)
  169. {
  170. whenInputIs("null:\"value\"}");
  171. parseMustFail();
  172. }