JsonArray_Container_Tests.cpp 4.1 KB

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