remove.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. using ArduinoJson::detail::sizeofArray;
  8. using ArduinoJson::detail::sizeofString;
  9. TEST_CASE("JsonVariant::remove(int)") {
  10. JsonDocument doc(4096);
  11. SECTION("release top level strings") {
  12. doc.add(std::string("hello"));
  13. doc.add(std::string("hello"));
  14. doc.add(std::string("world"));
  15. JsonVariant var = doc.as<JsonVariant>();
  16. REQUIRE(var.as<std::string>() == "[\"hello\",\"hello\",\"world\"]");
  17. REQUIRE(doc.memoryUsage() == sizeofArray(3) + 2 * sizeofString(5));
  18. var.remove(1);
  19. REQUIRE(var.as<std::string>() == "[\"hello\",\"world\"]");
  20. REQUIRE(doc.memoryUsage() == sizeofArray(3) + 2 * sizeofString(5));
  21. var.remove(1);
  22. REQUIRE(var.as<std::string>() == "[\"hello\"]");
  23. REQUIRE(doc.memoryUsage() == sizeofArray(3) + 1 * sizeofString(5));
  24. var.remove(0);
  25. REQUIRE(var.as<std::string>() == "[]");
  26. REQUIRE(doc.memoryUsage() == sizeofArray(3));
  27. }
  28. SECTION("release strings in nested array") {
  29. doc[0][0] = std::string("hello");
  30. JsonVariant var = doc.as<JsonVariant>();
  31. REQUIRE(var.as<std::string>() == "[[\"hello\"]]");
  32. REQUIRE(doc.memoryUsage() == 2 * sizeofArray(1) + sizeofString(5));
  33. var.remove(0);
  34. REQUIRE(var.as<std::string>() == "[]");
  35. REQUIRE(doc.memoryUsage() == 2 * sizeofArray(1));
  36. }
  37. }
  38. TEST_CASE("JsonVariant::remove(const char *)") {
  39. JsonDocument doc(4096);
  40. JsonVariant var = doc.to<JsonVariant>();
  41. var["a"] = 1;
  42. var["b"] = 2;
  43. var.remove("a");
  44. REQUIRE(var.as<std::string>() == "{\"b\":2}");
  45. }
  46. TEST_CASE("JsonVariant::remove(std::string)") {
  47. JsonDocument doc(4096);
  48. JsonVariant var = doc.to<JsonVariant>();
  49. var["a"] = 1;
  50. var["b"] = 2;
  51. var.remove(std::string("b"));
  52. REQUIRE(var.as<std::string>() == "{\"a\":1}");
  53. }