From a673f14943c0139dac4986a6576a8ec508780812 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 10 Mar 2022 14:54:34 +0100 Subject: [PATCH] Fix size() --- extras/tests/JsonVariant/link.cpp | 21 +++++++++++++++++++++ src/ArduinoJson/Variant/VariantData.hpp | 8 +++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/extras/tests/JsonVariant/link.cpp b/extras/tests/JsonVariant/link.cpp index 6c6ebdb3..cec1f8cb 100644 --- a/extras/tests/JsonVariant/link.cpp +++ b/extras/tests/JsonVariant/link.cpp @@ -51,3 +51,24 @@ TEST_CASE("JsonVariant::link()") { CHECK(variant.as() == "{\"hello\":\"WORLD!\"}"); } } + +TEST_CASE("Linked document") { + StaticJsonDocument<1024> doc1, doc2; + JsonVariant variant = doc1.to(); + doc2["hello"] = "world"; + variant.link(doc2); + + // TODO: move in size.cpp + SECTION("size()") { + CHECK(doc1.size() == 1); + } + + SECTION("is()") { + CHECK(doc1.is() == true); + CHECK(doc1.is() == false); + } + + SECTION("get member") { + CHECK(doc1["hello"].as() == "world"); + } +} diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 9b410efd..74fe6074 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -117,6 +117,10 @@ class VariantData { return (_flags & COLLECTION_MASK) != 0; } + bool isPointer() const { + return type() == VALUE_IS_POINTER; + } + template bool isInteger() const { switch (type()) { @@ -259,7 +263,9 @@ class VariantData { } size_t size() const { - return isCollection() ? _content.asCollection.size() : 0; + return isPointer() ? _content.asPointer->size() + : isCollection() ? _content.asCollection.size() + : 0; } VariantData *addElement(MemoryPool *pool) {