is<array>()

This commit is contained in:
Benoit Blanchon
2022-03-10 18:45:02 +01:00
parent e9963f1656
commit cf1d19fec5
3 changed files with 48 additions and 2 deletions

View File

@@ -144,6 +144,24 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<MYENUM2>() == false); CHECK(variant.is<MYENUM2>() == false);
} }
SECTION("linked array") {
StaticJsonDocument<1024> doc2;
doc2[0] = "world";
variant.link(doc2);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<JsonArrayConst>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonObjectConst>() == false);
CHECK(variant.is<int>() == false);
CHECK(variant.is<float>() == false);
CHECK(variant.is<bool>() == false);
CHECK(variant.is<const char *>() == false);
CHECK(variant.is<MYENUM2>() == false);
}
SECTION("JsonObject") { SECTION("JsonObject") {
variant.to<JsonObject>(); variant.to<JsonObject>();
@@ -162,7 +180,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<JsonVariantConst>() == true); CHECK(variant.is<JsonVariantConst>() == true);
} }
SECTION("JsonObject") { SECTION("linked object") {
StaticJsonDocument<1024> doc2; StaticJsonDocument<1024> doc2;
doc2["hello"] = "world"; doc2["hello"] = "world";
variant.link(doc2); variant.link(doc2);
@@ -337,6 +355,24 @@ TEST_CASE("JsonVariantConst::is<T>()") {
CHECK(cvariant.is<MYENUM2>() == false); CHECK(cvariant.is<MYENUM2>() == false);
} }
SECTION("linked array") {
StaticJsonDocument<1024> doc2;
doc2[0] = "world";
variant.link(doc2);
CHECK(cvariant.is<JsonArrayConst>() == true);
CHECK(cvariant.is<JsonVariantConst>() == true);
CHECK(cvariant.is<JsonArray>() == false);
CHECK(cvariant.is<JsonVariant>() == false);
CHECK(cvariant.is<JsonObject>() == false);
CHECK(cvariant.is<JsonObjectConst>() == false);
CHECK(cvariant.is<int>() == false);
CHECK(cvariant.is<float>() == false);
CHECK(cvariant.is<bool>() == false);
CHECK(cvariant.is<const char *>() == false);
CHECK(cvariant.is<MYENUM2>() == false);
}
SECTION("linked object") { SECTION("linked object") {
StaticJsonDocument<1024> doc2; StaticJsonDocument<1024> doc2;
doc2["hello"] = "world"; doc2["hello"] = "world";

View File

@@ -207,7 +207,7 @@ struct Converter<ArrayRef> {
static bool checkJson(VariantRef src) { static bool checkJson(VariantRef src) {
VariantData* data = getData(src); VariantData* data = getData(src);
return data && data->isArray(); return data && data->isArrayStrict();
} }
}; };
} // namespace ARDUINOJSON_NAMESPACE } // namespace ARDUINOJSON_NAMESPACE

View File

@@ -92,6 +92,9 @@ class VariantData {
} }
const CollectionData *asArray() const { const CollectionData *asArray() const {
// TODO
// if (isPointer())
// return _content.asPointer->asArray();
return const_cast<VariantData *>(this)->asArray(); return const_cast<VariantData *>(this)->asArray();
} }
@@ -108,6 +111,13 @@ class VariantData {
bool copyFrom(const VariantData &src, MemoryPool *pool); bool copyFrom(const VariantData &src, MemoryPool *pool);
bool isArray() const { bool isArray() const {
if (isPointer())
return _content.asPointer->isArray();
else
return isArrayStrict();
}
bool isArrayStrict() const {
return (_flags & VALUE_IS_ARRAY) != 0; return (_flags & VALUE_IS_ARRAY) != 0;
} }