// ArduinoJson - https://arduinojson.org // Copyright © 2014-2024, Benoit BLANCHON // MIT License #include #include #include "Allocators.hpp" using ArduinoJson::detail::addPadding; TEST_CASE("JsonDocument constructor") { SpyingAllocator spyingAllocator; SECTION("JsonDocument(size_t)") { { JsonDocument doc(&spyingAllocator); } REQUIRE(spyingAllocator.log() == AllocatorLog{}); } SECTION("JsonDocument(const JsonDocument&)") { { JsonDocument doc1(&spyingAllocator); doc1.set(std::string("The size of this string is 32!!")); JsonDocument doc2(doc1); REQUIRE(doc1.as() == "The size of this string is 32!!"); REQUIRE(doc2.as() == "The size of this string is 32!!"); } REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), Allocate(sizeofStringBuffer()), Deallocate(sizeofStringBuffer()), Deallocate(sizeofStringBuffer()), }); } SECTION("JsonDocument(JsonDocument&&)") { { JsonDocument doc1(&spyingAllocator); doc1.set(std::string("The size of this string is 32!!")); JsonDocument doc2(std::move(doc1)); REQUIRE(doc2.as() == "The size of this string is 32!!"); REQUIRE(doc1.as() == "null"); } REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofStringBuffer()), Deallocate(sizeofStringBuffer()), }); } SECTION("JsonDocument(JsonObject, Allocator*)") { JsonDocument doc1; JsonObject obj = doc1.to(); obj["hello"] = "world"; JsonDocument doc2(obj, &spyingAllocator); REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofPool()), }); } SECTION("JsonDocument(JsonObject)") { JsonDocument doc1; JsonObject obj = doc1.to(); obj["hello"] = "world"; JsonDocument doc2(obj); REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); } SECTION("JsonDocument(JsonArray, Allocator*)") { JsonDocument doc1; JsonArray arr = doc1.to(); arr.add("hello"); JsonDocument doc2(arr, &spyingAllocator); REQUIRE(doc2.as() == "[\"hello\"]"); REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofPool()), }); } SECTION("JsonDocument(JsonArray)") { JsonDocument doc1; JsonArray arr = doc1.to(); arr.add("hello"); JsonDocument doc2(arr); REQUIRE(doc2.as() == "[\"hello\"]"); } SECTION("JsonDocument(JsonVariant, Allocator*)") { JsonDocument doc1; deserializeJson(doc1, "\"hello\""); JsonDocument doc2(doc1.as(), &spyingAllocator); REQUIRE(doc2.as() == "hello"); REQUIRE(spyingAllocator.log() == AllocatorLog{ Allocate(sizeofString("hello")), }); } SECTION("JsonDocument(JsonVariant)") { JsonDocument doc1; deserializeJson(doc1, "\"hello\""); JsonDocument doc2(doc1.as()); REQUIRE(doc2.as() == "hello"); } }