// ArduinoJson - https://arduinojson.org // Copyright © 2014-2023, Benoit BLANCHON // MIT License #include #include #include #include "Allocators.hpp" using ArduinoJson::detail::sizeofArray; using ArduinoJson::detail::sizeofString; 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() << AllocatorLog::Deallocate(sizeofString(5))); spy.clearLog(); var.remove(0); REQUIRE(var.as() == "[]"); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Deallocate(sizeofString(5))); } 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() << AllocatorLog::Deallocate(sizeofString(5))); } } 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}"); }