diff --git a/extras/tests/JsonVariant/is.cpp b/extras/tests/JsonVariant/is.cpp index 365e933f..8c793737 100644 --- a/extras/tests/JsonVariant/is.cpp +++ b/extras/tests/JsonVariant/is.cpp @@ -144,6 +144,24 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == false); } + SECTION("linked array") { + StaticJsonDocument<1024> doc2; + doc2[0] = "world"; + variant.link(doc2); + + CHECK(variant.is() == false); + CHECK(variant.is() == true); + CHECK(variant.is() == true); + CHECK(variant.is() == true); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + } + SECTION("JsonObject") { variant.to(); @@ -162,7 +180,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); } - SECTION("JsonObject") { + SECTION("linked object") { StaticJsonDocument<1024> doc2; doc2["hello"] = "world"; variant.link(doc2); @@ -337,6 +355,24 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == false); } + SECTION("linked array") { + StaticJsonDocument<1024> doc2; + doc2[0] = "world"; + variant.link(doc2); + + CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); + } + SECTION("linked object") { StaticJsonDocument<1024> doc2; doc2["hello"] = "world"; diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index a5df7abc..d8924d31 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -207,7 +207,7 @@ struct Converter { static bool checkJson(VariantRef src) { VariantData* data = getData(src); - return data && data->isArray(); + return data && data->isArrayStrict(); } }; } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 5982b904..e163e279 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -92,6 +92,9 @@ class VariantData { } const CollectionData *asArray() const { + // TODO + // if (isPointer()) + // return _content.asPointer->asArray(); return const_cast(this)->asArray(); } @@ -108,6 +111,13 @@ class VariantData { bool copyFrom(const VariantData &src, MemoryPool *pool); bool isArray() const { + if (isPointer()) + return _content.asPointer->isArray(); + else + return isArrayStrict(); + } + + bool isArrayStrict() const { return (_flags & VALUE_IS_ARRAY) != 0; }