// ArduinoJson - https://arduinojson.org // Copyright © 2014-2023, Benoit BLANCHON // MIT License #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 #define ARDUINOJSON_ENABLE_PROGMEM 1 #include #include #include "Allocators.hpp" using ArduinoJson::detail::sizeofArray; using ArduinoJson::detail::sizeofString; TEST_CASE("JsonDocument::add()") { SpyingAllocator spy; JsonDocument doc(&spy); SECTION("integer") { doc.add(42); REQUIRE(doc.as() == "[42]"); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool())); } SECTION("const char*") { doc.add("hello"); REQUIRE(doc.as() == "[\"hello\"]"); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool())); } SECTION("std::string") { doc.add(std::string("example")); doc.add(std::string("example")); CHECK(doc[0].as() == doc[1].as()); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool()) << AllocatorLog::Allocate(sizeofString(7))); } SECTION("char*") { char value[] = "example"; doc.add(value); doc.add(value); CHECK(doc[0].as() == doc[1].as()); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool()) << AllocatorLog::Allocate(sizeofString(7))); } SECTION("Arduino String") { doc.add(String("example")); doc.add(String("example")); CHECK(doc[0].as() == doc[1].as()); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool()) << AllocatorLog::Allocate(sizeofString(7))); } SECTION("Flash string") { doc.add(F("example")); doc.add(F("example")); CHECK(doc[0].as() == doc[1].as()); REQUIRE(spy.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool()) << AllocatorLog::Allocate(sizeofString(7))); } }