// ArduinoJson - https://arduinojson.org // Copyright © 2014-2024, Benoit BLANCHON // MIT License #include #include #include #include "Allocators.hpp" using ArduinoJson::detail::sizeofArray; TEST_CASE("JsonVariant::remove(int)") { SpyingAllocator spy; JsonDocument doc(&spy); SECTION("release top level strings") { doc.add(std::string("hello")); doc.add(std::string("hello")); doc.add(std::string("world")); JsonVariant var = doc.as(); REQUIRE(var.as() == "[\"hello\",\"hello\",\"world\"]"); spy.clearLog(); var.remove(1); REQUIRE(var.as() == "[\"hello\",\"world\"]"); REQUIRE(spy.log() == AllocatorLog{}); spy.clearLog(); var.remove(1); REQUIRE(var.as() == "[\"hello\"]"); REQUIRE(spy.log() == AllocatorLog{ Deallocate(sizeofString("world")), }); spy.clearLog(); var.remove(0); REQUIRE(var.as() == "[]"); REQUIRE(spy.log() == AllocatorLog{ Deallocate(sizeofString("hello")), }); } SECTION("release strings in nested array") { doc[0][0] = std::string("hello"); JsonVariant var = doc.as(); REQUIRE(var.as() == "[[\"hello\"]]"); spy.clearLog(); var.remove(0); REQUIRE(var.as() == "[]"); REQUIRE(spy.log() == AllocatorLog{ Deallocate(sizeofString("hello")), }); } } TEST_CASE("JsonVariant::remove(const char *)") { JsonDocument doc; JsonVariant var = doc.to(); var["a"] = 1; var["b"] = 2; var.remove("a"); REQUIRE(var.as() == "{\"b\":2}"); } TEST_CASE("JsonVariant::remove(std::string)") { JsonDocument doc; JsonVariant var = doc.to(); var["a"] = 1; var["b"] = 2; var.remove(std::string("b")); REQUIRE(var.as() == "{\"a\":1}"); }