remove.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2025, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include <string>
  7. TEST_CASE("JsonObject::remove()") {
  8. JsonDocument 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. }
  20. SECTION("Remove middle") {
  21. obj.remove("b");
  22. serializeJson(obj, result);
  23. REQUIRE("{\"a\":0,\"c\":2}" == result);
  24. }
  25. SECTION("Remove last") {
  26. obj.remove("c");
  27. serializeJson(obj, result);
  28. REQUIRE("{\"a\":0,\"b\":1}" == result);
  29. }
  30. }
  31. SECTION("remove(iterator)") {
  32. JsonObject::iterator it = obj.begin();
  33. SECTION("Remove first") {
  34. obj.remove(it);
  35. serializeJson(obj, result);
  36. REQUIRE("{\"b\":1,\"c\":2}" == result);
  37. }
  38. SECTION("Remove middle") {
  39. ++it;
  40. obj.remove(it);
  41. serializeJson(obj, result);
  42. REQUIRE("{\"a\":0,\"c\":2}" == result);
  43. }
  44. SECTION("Remove last") {
  45. ++it;
  46. ++it;
  47. obj.remove(it);
  48. serializeJson(obj, result);
  49. REQUIRE("{\"a\":0,\"b\":1}" == result);
  50. }
  51. }
  52. #ifdef HAS_VARIABLE_LENGTH_ARRAY
  53. SECTION("key is a vla") {
  54. size_t i = 16;
  55. char vla[i];
  56. strcpy(vla, "b");
  57. obj.remove(vla);
  58. serializeJson(obj, result);
  59. REQUIRE("{\"a\":0,\"c\":2}" == result);
  60. }
  61. #endif
  62. SECTION("remove by key on unbound reference") {
  63. JsonObject unboundObject;
  64. unboundObject.remove("key");
  65. }
  66. SECTION("remove by iterator on unbound reference") {
  67. JsonObject unboundObject;
  68. unboundObject.remove(unboundObject.begin());
  69. }
  70. SECTION("remove(JsonVariant)") {
  71. obj["key"] = "b";
  72. obj.remove(obj["key"]);
  73. REQUIRE("{\"a\":0,\"c\":2,\"key\":\"b\"}" == doc.as<std::string>());
  74. }
  75. }