JsonArray_Container_Tests.cpp 4.0 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 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, DontGrow_WhenValuesAreReplaced) {
  55. _array.add("hello");
  56. _array[0] = "world";
  57. sizeMustBe(1);
  58. }
  59. TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
  60. _array.add(123);
  61. _array.add(456);
  62. firstMustEqual(123);
  63. secondMustEqual(456);
  64. }
  65. TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
  66. _array.add(123.45);
  67. _array.add(456.78);
  68. firstMustEqual(123.45);
  69. secondMustEqual(456.78);
  70. }
  71. TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
  72. _array.add(true);
  73. _array.add(false);
  74. firstMustEqual(true);
  75. secondMustEqual(false);
  76. }
  77. TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
  78. _array.add("hello");
  79. _array.add("world");
  80. firstMustEqual("hello");
  81. secondMustEqual("world");
  82. }
  83. TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
  84. JsonArray& inner_array1 = _jsonBuffer.createArray();
  85. JsonArray& inner_array2 = _jsonBuffer.createArray();
  86. _array.add(inner_array1);
  87. _array.add(inner_array2);
  88. firstMustReference(inner_array1);
  89. secondMustReference(inner_array2);
  90. }
  91. TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
  92. JsonObject& innerObject1 = _jsonBuffer.createObject();
  93. JsonObject& innerObject2 = _jsonBuffer.createObject();
  94. _array.add(innerObject1);
  95. _array.add(innerObject2);
  96. firstMustReference(innerObject1);
  97. secondMustReference(innerObject2);
  98. }
  99. TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
  100. JsonArray& inner_array1 = _array.createNestedArray();
  101. JsonArray& inner_array2 = _array.createNestedArray();
  102. firstMustReference(inner_array1);
  103. secondMustReference(inner_array2);
  104. }
  105. TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
  106. JsonObject& innerObject1 = _array.createNestedObject();
  107. JsonObject& innerObject2 = _array.createNestedObject();
  108. firstMustReference(innerObject1);
  109. secondMustReference(innerObject2);
  110. }
  111. TEST_F(JsonArray_Container_Tests, RemoveFirstElement) {
  112. _array.add("one");
  113. _array.add("two");
  114. _array.add("three");
  115. _array.removeAt(0);
  116. sizeMustBe(2);
  117. firstMustEqual("two");
  118. secondMustEqual("three");
  119. }
  120. TEST_F(JsonArray_Container_Tests, RemoveMiddleElement) {
  121. _array.add("one");
  122. _array.add("two");
  123. _array.add("three");
  124. _array.removeAt(1);
  125. sizeMustBe(2);
  126. firstMustEqual("one");
  127. secondMustEqual("three");
  128. }
  129. TEST_F(JsonArray_Container_Tests, RemoveLastElement) {
  130. _array.add("one");
  131. _array.add("two");
  132. _array.add("three");
  133. _array.removeAt(2);
  134. sizeMustBe(2);
  135. firstMustEqual("one");
  136. secondMustEqual("two");
  137. }