JsonArray_Container_Tests.cpp 3.3 KB

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