set.cpp 2.3 KB

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