JsonParser_Object_Tests.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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->at(key).as<const char *>());
  19. }
  20. template <typename T>
  21. void keyMustHaveValue(const char *key, T expected) {
  22. EXPECT_EQ(expected, _object->at(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, OneStringSpaceBeforeKey) {
  63. whenInputIs("{ \"key\":\"value\"}");
  64. parseMustSucceed();
  65. sizeMustBe(1);
  66. keyMustHaveValue("key", "value");
  67. }
  68. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterKey) {
  69. whenInputIs("{\"key\" :\"value\"}");
  70. parseMustSucceed();
  71. sizeMustBe(1);
  72. keyMustHaveValue("key", "value");
  73. }
  74. TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeValue) {
  75. whenInputIs("{\"key\": \"value\"}");
  76. parseMustSucceed();
  77. sizeMustBe(1);
  78. keyMustHaveValue("key", "value");
  79. }
  80. TEST_F(JsonParser_Object_Test, OneStringSpaceAfterValue) {
  81. whenInputIs("{\"key\":\"value\" }");
  82. parseMustSucceed();
  83. sizeMustBe(1);
  84. keyMustHaveValue("key", "value");
  85. }
  86. TEST_F(JsonParser_Object_Test, TwoStrings) {
  87. whenInputIs("{\"key1\":\"value1\",\"key2\":\"value2\"}");
  88. parseMustSucceed();
  89. sizeMustBe(2);
  90. keyMustHaveValue("key1", "value1");
  91. keyMustHaveValue("key2", "value2");
  92. }
  93. TEST_F(JsonParser_Object_Test, TwoStringsSpaceBeforeComma) {
  94. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  95. parseMustSucceed();
  96. sizeMustBe(2);
  97. keyMustHaveValue("key1", "value1");
  98. keyMustHaveValue("key2", "value2");
  99. }
  100. TEST_F(JsonParser_Object_Test, TwoStringsSpaceAfterComma) {
  101. whenInputIs("{\"key1\":\"value1\" ,\"key2\":\"value2\"}");
  102. parseMustSucceed();
  103. sizeMustBe(2);
  104. keyMustHaveValue("key1", "value1");
  105. keyMustHaveValue("key2", "value2");
  106. }
  107. TEST_F(JsonParser_Object_Test, EndingWithAComma) {
  108. whenInputIs("{\"key1\":\"value1\",}");
  109. parseMustFail();
  110. sizeMustBe(0);
  111. }
  112. TEST_F(JsonParser_Object_Test, TwoIntergers) {
  113. whenInputIs("{\"key1\":42,\"key2\":-42}");
  114. parseMustSucceed();
  115. sizeMustBe(2);
  116. keyMustHaveValue("key1", 42);
  117. keyMustHaveValue("key2", -42);
  118. }
  119. TEST_F(JsonParser_Object_Test, TwoDoubles) {
  120. whenInputIs("{\"key1\":12.345,\"key2\":-7E89}");
  121. parseMustSucceed();
  122. sizeMustBe(2);
  123. keyMustHaveValue("key1", 12.345);
  124. keyMustHaveValue("key2", -7E89);
  125. }
  126. TEST_F(JsonParser_Object_Test, TwoBooleans) {
  127. whenInputIs("{\"key1\":true,\"key2\":false}");
  128. parseMustSucceed();
  129. sizeMustBe(2);
  130. keyMustHaveValue("key1", true);
  131. keyMustHaveValue("key2", false);
  132. }
  133. TEST_F(JsonParser_Object_Test, TwoNulls) {
  134. const char *const nullstr = 0;
  135. whenInputIs("{\"key1\":null,\"key2\":null}");
  136. parseMustSucceed();
  137. sizeMustBe(2);
  138. keyMustHaveValue("key1", nullstr);
  139. keyMustHaveValue("key2", nullstr);
  140. }
  141. TEST_F(JsonParser_Object_Test, NullForKey) {
  142. whenInputIs("null:\"value\"}");
  143. parseMustFail();
  144. }