Fix size()

This commit is contained in:
Benoit Blanchon
2022-03-10 14:54:34 +01:00
parent a2b5fbab19
commit a673f14943
2 changed files with 28 additions and 1 deletions

View File

@@ -51,3 +51,24 @@ TEST_CASE("JsonVariant::link()") {
CHECK(variant.as<std::string>() == "{\"hello\":\"WORLD!\"}");
}
}
TEST_CASE("Linked document") {
StaticJsonDocument<1024> doc1, doc2;
JsonVariant variant = doc1.to<JsonVariant>();
doc2["hello"] = "world";
variant.link(doc2);
// TODO: move in size.cpp
SECTION("size()") {
CHECK(doc1.size() == 1);
}
SECTION("is<T>()") {
CHECK(doc1.is<JsonObject>() == true);
CHECK(doc1.is<JsonArray>() == false);
}
SECTION("get member") {
CHECK(doc1["hello"].as<std::string>() == "world");
}
}

View File

@@ -117,6 +117,10 @@ class VariantData {
return (_flags & COLLECTION_MASK) != 0;
}
bool isPointer() const {
return type() == VALUE_IS_POINTER;
}
template <typename T>
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) {