as<int>()

This commit is contained in:
Benoit Blanchon
2022-03-11 18:49:34 +01:00
parent 6a23b014dc
commit 6691c5170b
5 changed files with 56 additions and 0 deletions

View File

@@ -323,4 +323,12 @@ TEST_CASE("JsonVariant::as()") {
CHECK(o.isNull() == true);
}
}
SECTION("linked int") {
StaticJsonDocument<128> doc2;
doc2.set(42);
variant.link(doc2);
CHECK(variant.as<int>() == 42);
}
}

View File

@@ -199,6 +199,24 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
}
SECTION("linked int") {
StaticJsonDocument<1024> doc2;
doc2.set(42);
variant.link(doc2);
CHECK(variant.is<JsonObjectConst>() == false);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<JsonArrayConst>() == false);
CHECK(variant.is<int>() == true);
CHECK(variant.is<float>() == false);
CHECK(variant.is<bool>() == false);
CHECK(variant.is<const char *>() == false);
CHECK(variant.is<MYENUM2>() == true);
}
}
TEST_CASE("JsonVariantConst::is<T>()") {
@@ -390,4 +408,22 @@ TEST_CASE("JsonVariantConst::is<T>()") {
CHECK(cvariant.is<const char *>() == false);
CHECK(cvariant.is<MYENUM2>() == false);
}
SECTION("linked int") {
StaticJsonDocument<1024> doc2;
doc2.set(42);
variant.link(doc2);
CHECK(cvariant.is<JsonObjectConst>() == false);
CHECK(cvariant.is<JsonVariantConst>() == true);
CHECK(cvariant.is<JsonObject>() == false);
CHECK(cvariant.is<JsonVariant>() == false);
CHECK(cvariant.is<JsonArray>() == false);
CHECK(cvariant.is<JsonArrayConst>() == false);
CHECK(cvariant.is<int>() == true);
CHECK(cvariant.is<float>() == false);
CHECK(cvariant.is<bool>() == false);
CHECK(cvariant.is<const char *>() == false);
CHECK(cvariant.is<MYENUM2>() == true);
}
}

View File

@@ -156,4 +156,12 @@ TEST_CASE("JsonVariant::operator|()") {
int result = variant | 42;
REQUIRE(result == 42);
}
SECTION("linked int | int") {
StaticJsonDocument<128> doc2;
doc2.set(42);
variant.link(doc2);
int result = variant | 666;
CHECK(result == 42);
}
}

View File

@@ -134,6 +134,8 @@ class VariantData {
template <typename T>
bool isInteger() const {
if (isPointer())
return _content.asPointer->isInteger<T>();
switch (type()) {
case VALUE_IS_UNSIGNED_INTEGER:
return canConvertNumber<T>(_content.asUnsignedInteger);

View File

@@ -17,6 +17,8 @@ namespace ARDUINOJSON_NAMESPACE {
template <typename T>
inline T VariantData::asIntegral() const {
if (isPointer())
return _content.asPointer->asIntegral<T>();
switch (type()) {
case VALUE_IS_BOOLEAN:
return _content.asBoolean;