set.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2023
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. using namespace Catch::Matchers;
  7. TEST_CASE("JsonArray::set()") {
  8. DynamicJsonBuffer _jsonBuffer;
  9. JsonArray& _array = _jsonBuffer.createArray();
  10. _array.add(0);
  11. SECTION("int") {
  12. _array.set(0, 123);
  13. REQUIRE(123 == _array[0].as<int>());
  14. REQUIRE(_array[0].is<int>());
  15. REQUIRE_FALSE(_array[0].is<bool>());
  16. }
  17. SECTION("double") {
  18. _array.set(0, 123.45);
  19. REQUIRE(123.45 == _array[0].as<double>());
  20. REQUIRE(_array[0].is<double>());
  21. REQUIRE_FALSE(_array[0].is<int>());
  22. }
  23. SECTION("bool") {
  24. _array.set(0, true);
  25. REQUIRE(true == _array[0].as<bool>());
  26. REQUIRE(_array[0].is<bool>());
  27. REQUIRE_FALSE(_array[0].is<int>());
  28. }
  29. SECTION("const char*") {
  30. _array.set(0, "hello");
  31. REQUIRE_THAT(_array[0].as<const char*>(), Equals("hello"));
  32. REQUIRE(_array[0].is<const char*>());
  33. REQUIRE_FALSE(_array[0].is<int>());
  34. }
  35. SECTION("nested array") {
  36. JsonArray& arr = _jsonBuffer.createArray();
  37. _array.set(0, arr);
  38. REQUIRE(&arr == &_array[0].as<JsonArray&>());
  39. REQUIRE(_array[0].is<JsonArray&>());
  40. REQUIRE_FALSE(_array[0].is<int>());
  41. }
  42. SECTION("nested object") {
  43. JsonObject& obj = _jsonBuffer.createObject();
  44. _array.set(0, obj);
  45. REQUIRE(&obj == &_array[0].as<JsonObject&>());
  46. REQUIRE(_array[0].is<JsonObject&>());
  47. REQUIRE_FALSE(_array[0].is<int>());
  48. }
  49. SECTION("array subscript") {
  50. JsonArray& arr = _jsonBuffer.createArray();
  51. arr.add("hello");
  52. _array.set(0, arr[0]);
  53. REQUIRE_THAT(_array[0].as<char*>(), Equals("hello"));
  54. }
  55. SECTION("object subscript") {
  56. JsonObject& obj = _jsonBuffer.createObject();
  57. obj["x"] = "hello";
  58. _array.set(0, obj["x"]);
  59. REQUIRE_THAT(_array[0].as<char*>(), Equals("hello"));
  60. }
  61. SECTION("should not duplicate const char*") {
  62. _array.set(0, "world");
  63. const size_t expectedSize = JSON_ARRAY_SIZE(1);
  64. REQUIRE(expectedSize == _jsonBuffer.size());
  65. }
  66. SECTION("should duplicate char*") {
  67. _array.set(0, const_cast<char*>("world"));
  68. const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6;
  69. REQUIRE(expectedSize == _jsonBuffer.size());
  70. }
  71. SECTION("should duplicate std::string") {
  72. _array.set(0, std::string("world"));
  73. const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6;
  74. REQUIRE(expectedSize == _jsonBuffer.size());
  75. }
  76. }