JsonArray_Container_Tests.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 JsonArray_Container_Tests : public ::testing::Test {
  9. protected:
  10. JsonArray_Container_Tests() : _array(_jsonBuffer.createArray()) {}
  11. template <typename T>
  12. void firstMustEqual(T expected) {
  13. itemMustEqual(0, expected);
  14. }
  15. template <typename T>
  16. void secondMustEqual(T expected) {
  17. itemMustEqual(1, expected);
  18. }
  19. template <typename T>
  20. void firstMustReference(const T& expected) {
  21. itemMustReference(0, expected);
  22. }
  23. template <typename T>
  24. void secondMustReference(const T& expected) {
  25. itemMustReference(1, expected);
  26. }
  27. void sizeMustBe(int expected) { EXPECT_EQ(expected, _array.size()); }
  28. DynamicJsonBuffer _jsonBuffer;
  29. JsonArray& _array;
  30. private:
  31. template <typename T>
  32. void itemMustEqual(int index, T expected) {
  33. EXPECT_EQ(expected, _array[index].as<T>());
  34. }
  35. template <typename T>
  36. void itemMustReference(int index, const T& expected) {
  37. EXPECT_EQ(&expected, &_array[index].as<T&>());
  38. }
  39. };
  40. template <>
  41. void JsonArray_Container_Tests::itemMustEqual(int index, const char* expected) {
  42. EXPECT_STREQ(expected, _array[index].asString());
  43. }
  44. TEST_F(JsonArray_Container_Tests, SuccessIsTrue) {
  45. EXPECT_TRUE(_array.success());
  46. }
  47. TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) { sizeMustBe(0); }
  48. TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
  49. _array.add("hello");
  50. sizeMustBe(1);
  51. _array.add("world");
  52. sizeMustBe(2);
  53. }
  54. TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
  55. _array.add(123);
  56. _array.add(456);
  57. firstMustEqual(123);
  58. secondMustEqual(456);
  59. }
  60. TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
  61. _array.add(123.45);
  62. _array.add(456.78);
  63. firstMustEqual(123.45);
  64. secondMustEqual(456.78);
  65. }
  66. TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
  67. _array.add(true);
  68. _array.add(false);
  69. firstMustEqual(true);
  70. secondMustEqual(false);
  71. }
  72. TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
  73. _array.add("hello");
  74. _array.add("world");
  75. firstMustEqual("hello");
  76. secondMustEqual("world");
  77. }
  78. TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
  79. JsonArray& inner_array1 = _jsonBuffer.createArray();
  80. JsonArray& inner_array2 = _jsonBuffer.createArray();
  81. _array.add(inner_array1);
  82. _array.add(inner_array2);
  83. firstMustReference(inner_array1);
  84. secondMustReference(inner_array2);
  85. }
  86. TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
  87. JsonObject& innerObject1 = _jsonBuffer.createObject();
  88. JsonObject& innerObject2 = _jsonBuffer.createObject();
  89. _array.add(innerObject1);
  90. _array.add(innerObject2);
  91. firstMustReference(innerObject1);
  92. secondMustReference(innerObject2);
  93. }
  94. TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
  95. JsonArray& inner_array1 = _array.createNestedArray();
  96. JsonArray& inner_array2 = _array.createNestedArray();
  97. firstMustReference(inner_array1);
  98. secondMustReference(inner_array2);
  99. }
  100. TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
  101. JsonObject& innerObject1 = _array.createNestedObject();
  102. JsonObject& innerObject2 = _array.createNestedObject();
  103. firstMustReference(innerObject1);
  104. secondMustReference(innerObject2);
  105. }
  106. TEST_F(JsonArray_Container_Tests, RemoveFirstElement) {
  107. _array.add("one");
  108. _array.add("two");
  109. _array.add("three");
  110. _array.removeAt(0);
  111. sizeMustBe(2);
  112. firstMustEqual("two");
  113. secondMustEqual("three");
  114. }
  115. TEST_F(JsonArray_Container_Tests, RemoveMiddleElement) {
  116. _array.add("one");
  117. _array.add("two");
  118. _array.add("three");
  119. _array.removeAt(1);
  120. sizeMustBe(2);
  121. firstMustEqual("one");
  122. secondMustEqual("three");
  123. }
  124. TEST_F(JsonArray_Container_Tests, RemoveLastElement) {
  125. _array.add("one");
  126. _array.add("two");
  127. _array.add("three");
  128. _array.removeAt(2);
  129. sizeMustBe(2);
  130. firstMustEqual("one");
  131. secondMustEqual("two");
  132. }