remove.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2023, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <stdint.h>
  6. #include <catch.hpp>
  7. #include "Allocators.hpp"
  8. using ArduinoJson::detail::sizeofArray;
  9. using ArduinoJson::detail::sizeofString;
  10. TEST_CASE("JsonVariant::remove(int)") {
  11. SpyingAllocator allocator;
  12. JsonDocument doc(&allocator);
  13. SECTION("release top level strings") {
  14. doc.add(std::string("hello"));
  15. doc.add(std::string("hello"));
  16. doc.add(std::string("world"));
  17. JsonVariant var = doc.as<JsonVariant>();
  18. REQUIRE(var.as<std::string>() == "[\"hello\",\"hello\",\"world\"]");
  19. allocator.clearLog();
  20. var.remove(1);
  21. REQUIRE(var.as<std::string>() == "[\"hello\",\"world\"]");
  22. REQUIRE(allocator.log() == AllocatorLog());
  23. allocator.clearLog();
  24. var.remove(1);
  25. REQUIRE(var.as<std::string>() == "[\"hello\"]");
  26. REQUIRE(allocator.log() ==
  27. AllocatorLog() << AllocatorLog::Deallocate(sizeofString(5)));
  28. allocator.clearLog();
  29. var.remove(0);
  30. REQUIRE(var.as<std::string>() == "[]");
  31. REQUIRE(allocator.log() ==
  32. AllocatorLog() << AllocatorLog::Deallocate(sizeofString(5)));
  33. }
  34. SECTION("release strings in nested array") {
  35. doc[0][0] = std::string("hello");
  36. JsonVariant var = doc.as<JsonVariant>();
  37. REQUIRE(var.as<std::string>() == "[[\"hello\"]]");
  38. allocator.clearLog();
  39. var.remove(0);
  40. REQUIRE(var.as<std::string>() == "[]");
  41. REQUIRE(allocator.log() ==
  42. AllocatorLog() << AllocatorLog::Deallocate(sizeofString(5)));
  43. }
  44. }
  45. TEST_CASE("JsonVariant::remove(const char *)") {
  46. JsonDocument doc;
  47. JsonVariant var = doc.to<JsonVariant>();
  48. var["a"] = 1;
  49. var["b"] = 2;
  50. var.remove("a");
  51. REQUIRE(var.as<std::string>() == "{\"b\":2}");
  52. }
  53. TEST_CASE("JsonVariant::remove(std::string)") {
  54. JsonDocument doc;
  55. JsonVariant var = doc.to<JsonVariant>();
  56. var["a"] = 1;
  57. var["b"] = 2;
  58. var.remove(std::string("b"));
  59. REQUIRE(var.as<std::string>() == "{\"a\":1}");
  60. }