remove.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include <string>
  7. TEST_CASE("JsonObject::remove()") {
  8. DynamicJsonDocument doc;
  9. JsonObject obj = doc.to<JsonObject>();
  10. obj["a"] = 0;
  11. obj["b"] = 1;
  12. obj["c"] = 2;
  13. std::string result;
  14. SECTION("remove(key)") {
  15. SECTION("Remove first") {
  16. obj.remove("a");
  17. serializeJson(obj, result);
  18. REQUIRE("{\"b\":1,\"c\":2}" == result);
  19. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(2));
  20. }
  21. SECTION("Remove middle") {
  22. obj.remove("b");
  23. serializeJson(obj, result);
  24. REQUIRE("{\"a\":0,\"c\":2}" == result);
  25. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(2));
  26. }
  27. SECTION("Remove last") {
  28. obj.remove("c");
  29. serializeJson(obj, result);
  30. REQUIRE("{\"a\":0,\"b\":1}" == result);
  31. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(2));
  32. }
  33. SECTION("Release value string memory") {
  34. obj["c"] = std::string("Copy me!");
  35. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(3) + JSON_STRING_SIZE(9));
  36. obj.remove("c");
  37. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(2));
  38. }
  39. SECTION("Release key string memory") {
  40. obj[std::string("Copy me!")] = 42;
  41. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(4) + JSON_STRING_SIZE(9));
  42. obj.remove("Copy me!");
  43. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(3));
  44. }
  45. SECTION("Release raw string memory") {
  46. obj["c"] = serialized(std::string("Copy me!"));
  47. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(3) + JSON_STRING_SIZE(8));
  48. obj.remove("c");
  49. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(2));
  50. }
  51. }
  52. SECTION("remove(iterator)") {
  53. JsonObject::iterator it = obj.begin();
  54. SECTION("Remove first") {
  55. obj.remove(it);
  56. serializeJson(obj, result);
  57. REQUIRE("{\"b\":1,\"c\":2}" == result);
  58. }
  59. SECTION("Remove middle") {
  60. ++it;
  61. obj.remove(it);
  62. serializeJson(obj, result);
  63. REQUIRE("{\"a\":0,\"c\":2}" == result);
  64. }
  65. SECTION("Remove last") {
  66. it += 2;
  67. obj.remove(it);
  68. serializeJson(obj, result);
  69. REQUIRE("{\"a\":0,\"b\":1}" == result);
  70. }
  71. }
  72. #ifdef HAS_VARIABLE_LENGTH_ARRAY
  73. SECTION("key is a vla") {
  74. int i = 16;
  75. char vla[i];
  76. strcpy(vla, "b");
  77. obj.remove(vla);
  78. serializeJson(obj, result);
  79. REQUIRE("{\"a\":0,\"c\":2}" == result);
  80. }
  81. #endif
  82. }