JsonArray_Container_Tests.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // Copyright Benoit Blanchon 2014
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. #include <gtest/gtest.h>
  7. #include <ArduinoJson/StaticJsonBuffer.hpp>
  8. #include <ArduinoJson/JsonArray.hpp>
  9. #include <ArduinoJson/JsonObject.hpp>
  10. using namespace ArduinoJson;
  11. class JsonArray_Container_Tests : public ::testing::Test {
  12. protected:
  13. JsonArray_Container_Tests() : array(json.createArray()) {}
  14. template <typename T>
  15. void firstMustEqual(T expected) {
  16. itemMustEqual(0, expected);
  17. }
  18. template <typename T>
  19. void secondMustEqual(T expected) {
  20. itemMustEqual(1, expected);
  21. }
  22. template <typename T>
  23. void firstMustReference(const T& expected) {
  24. itemMustReference(0, expected);
  25. }
  26. template <typename T>
  27. void secondMustReference(const T& expected) {
  28. itemMustReference(1, expected);
  29. }
  30. void sizeMustBe(int expected) { EXPECT_EQ(expected, array.size()); }
  31. StaticJsonBuffer<256> json;
  32. JsonArray& array;
  33. private:
  34. template <typename T>
  35. void itemMustEqual(int index, T expected) {
  36. EXPECT_EQ(expected, array[index].as<T>());
  37. }
  38. template <typename T>
  39. void itemMustReference(int index, const T& expected) {
  40. EXPECT_EQ(&expected, &array[index].as<T&>());
  41. }
  42. };
  43. TEST_F(JsonArray_Container_Tests, SuccessIsTrue) {
  44. EXPECT_TRUE(array.success());
  45. }
  46. TEST_F(JsonArray_Container_Tests, InitialSizeIsZero) { sizeMustBe(0); }
  47. TEST_F(JsonArray_Container_Tests, Grow_WhenValuesAreAdded) {
  48. array.add("hello");
  49. sizeMustBe(1);
  50. array.add("world");
  51. sizeMustBe(2);
  52. }
  53. TEST_F(JsonArray_Container_Tests, CanStoreIntegers) {
  54. array.add(123);
  55. array.add(456);
  56. firstMustEqual(123);
  57. secondMustEqual(456);
  58. }
  59. TEST_F(JsonArray_Container_Tests, CanStoreDoubles) {
  60. array.add(123.45);
  61. array.add(456.78);
  62. firstMustEqual(123.45);
  63. secondMustEqual(456.78);
  64. }
  65. TEST_F(JsonArray_Container_Tests, CanStoreBooleans) {
  66. array.add(true);
  67. array.add(false);
  68. firstMustEqual(true);
  69. secondMustEqual(false);
  70. }
  71. TEST_F(JsonArray_Container_Tests, CanStoreStrings) {
  72. const char* firstString = "h3110";
  73. const char* secondString = "w0r1d";
  74. array.add(firstString);
  75. array.add(secondString);
  76. firstMustEqual(firstString);
  77. secondMustEqual(secondString);
  78. }
  79. TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) {
  80. JsonArray& innerarray1 = json.createArray();
  81. JsonArray& innerarray2 = json.createArray();
  82. array.add(innerarray1);
  83. array.add(innerarray2);
  84. firstMustReference(innerarray1);
  85. secondMustReference(innerarray2);
  86. }
  87. TEST_F(JsonArray_Container_Tests, CanStoreNestedObjects) {
  88. JsonObject& innerObject1 = json.createObject();
  89. JsonObject& innerObject2 = json.createObject();
  90. array.add(innerObject1);
  91. array.add(innerObject2);
  92. firstMustReference(innerObject1);
  93. secondMustReference(innerObject2);
  94. }
  95. TEST_F(JsonArray_Container_Tests, CanCreateNestedArrays) {
  96. JsonArray& innerarray1 = array.createNestedArray();
  97. JsonArray& innerarray2 = array.createNestedArray();
  98. firstMustReference(innerarray1);
  99. secondMustReference(innerarray2);
  100. }
  101. TEST_F(JsonArray_Container_Tests, CanCreateNestedObjects) {
  102. JsonObject& innerObject1 = array.createNestedObject();
  103. JsonObject& innerObject2 = array.createNestedObject();
  104. firstMustReference(innerObject1);
  105. secondMustReference(innerObject2);
  106. }