forked from bblanchon/ArduinoJson
Added JsonVariant::is<JsonVariant>()
(issue #1412)
This commit is contained in:
@ -9,6 +9,7 @@ HEAD
|
|||||||
* `deserializeMsgPack()` inserts `null` instead of returning `NotSupported`
|
* `deserializeMsgPack()` inserts `null` instead of returning `NotSupported`
|
||||||
* Removed `DeserializationError::NotSupported`
|
* Removed `DeserializationError::NotSupported`
|
||||||
* Added `JsonVariant::is<JsonArrayConst/JsonObjectConst>()` (issue #1412)
|
* Added `JsonVariant::is<JsonArrayConst/JsonObjectConst>()` (issue #1412)
|
||||||
|
* Added `JsonVariant::is<JsonVariant>()` (issue #1412)
|
||||||
|
|
||||||
> ### BREAKING CHANGES
|
> ### BREAKING CHANGES
|
||||||
>
|
>
|
||||||
|
@ -11,7 +11,22 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
DynamicJsonDocument doc(4096);
|
DynamicJsonDocument doc(4096);
|
||||||
JsonVariant variant = doc.to<JsonVariant>();
|
JsonVariant variant = doc.to<JsonVariant>();
|
||||||
|
|
||||||
|
SECTION("undefined") {
|
||||||
|
variant = JsonVariant();
|
||||||
|
|
||||||
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
|
CHECK(variant.is<JsonVariant>() == false);
|
||||||
|
CHECK(variant.is<bool>() == false);
|
||||||
|
CHECK(variant.is<char *>() == false);
|
||||||
|
CHECK(variant.is<int>() == false);
|
||||||
|
CHECK(variant.is<std::string>() == false);
|
||||||
|
CHECK(variant.is<float>() == false);
|
||||||
|
CHECK(variant.is<MYENUM2>() == false);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("null") {
|
SECTION("null") {
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
CHECK(variant.is<bool>() == false);
|
CHECK(variant.is<bool>() == false);
|
||||||
@ -26,6 +41,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
variant.set(true);
|
variant.set(true);
|
||||||
|
|
||||||
CHECK(variant.is<bool>() == true);
|
CHECK(variant.is<bool>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
CHECK(variant.is<char *>() == false);
|
CHECK(variant.is<char *>() == false);
|
||||||
@ -39,6 +55,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
variant.set(false);
|
variant.set(false);
|
||||||
|
|
||||||
CHECK(variant.is<bool>() == true);
|
CHECK(variant.is<bool>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
CHECK(variant.is<char *>() == false);
|
CHECK(variant.is<char *>() == false);
|
||||||
@ -57,6 +74,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
CHECK(variant.is<double>() == true);
|
CHECK(variant.is<double>() == true);
|
||||||
CHECK(variant.is<float>() == true);
|
CHECK(variant.is<float>() == true);
|
||||||
CHECK(variant.is<MYENUM2>() == true);
|
CHECK(variant.is<MYENUM2>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<bool>() == false);
|
CHECK(variant.is<bool>() == false);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
@ -69,6 +87,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
|
|
||||||
CHECK(variant.is<double>() == true);
|
CHECK(variant.is<double>() == true);
|
||||||
CHECK(variant.is<float>() == true);
|
CHECK(variant.is<float>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<bool>() == false);
|
CHECK(variant.is<bool>() == false);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
@ -84,6 +103,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
CHECK(variant.is<char *>() == true);
|
CHECK(variant.is<char *>() == true);
|
||||||
CHECK(variant.is<const char *>() == true);
|
CHECK(variant.is<const char *>() == true);
|
||||||
CHECK(variant.is<std::string>() == true);
|
CHECK(variant.is<std::string>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<double>() == false);
|
CHECK(variant.is<double>() == false);
|
||||||
CHECK(variant.is<float>() == false);
|
CHECK(variant.is<float>() == false);
|
||||||
CHECK(variant.is<bool>() == false);
|
CHECK(variant.is<bool>() == false);
|
||||||
@ -98,6 +118,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
|
|
||||||
CHECK(variant.is<JsonArray>() == true);
|
CHECK(variant.is<JsonArray>() == true);
|
||||||
CHECK(variant.is<JsonArrayConst>() == true);
|
CHECK(variant.is<JsonArrayConst>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<JsonObject>() == false);
|
CHECK(variant.is<JsonObject>() == false);
|
||||||
CHECK(variant.is<JsonObjectConst>() == false);
|
CHECK(variant.is<JsonObjectConst>() == false);
|
||||||
CHECK(variant.is<int>() == false);
|
CHECK(variant.is<int>() == false);
|
||||||
@ -112,6 +133,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
|
|
||||||
CHECK(variant.is<JsonObject>() == true);
|
CHECK(variant.is<JsonObject>() == true);
|
||||||
CHECK(variant.is<JsonObjectConst>() == true);
|
CHECK(variant.is<JsonObjectConst>() == true);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
CHECK(variant.is<JsonArray>() == false);
|
CHECK(variant.is<JsonArray>() == false);
|
||||||
CHECK(variant.is<JsonArrayConst>() == false);
|
CHECK(variant.is<JsonArrayConst>() == false);
|
||||||
CHECK(variant.is<int>() == false);
|
CHECK(variant.is<int>() == false);
|
||||||
@ -119,6 +141,7 @@ TEST_CASE("JsonVariant::is<T>()") {
|
|||||||
CHECK(variant.is<bool>() == false);
|
CHECK(variant.is<bool>() == false);
|
||||||
CHECK(variant.is<char *>() == false);
|
CHECK(variant.is<char *>() == false);
|
||||||
CHECK(variant.is<MYENUM2>() == false);
|
CHECK(variant.is<MYENUM2>() == false);
|
||||||
|
CHECK(variant.is<JsonVariant>() == true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,9 +150,24 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
JsonVariant variant = doc.to<JsonVariant>();
|
JsonVariant variant = doc.to<JsonVariant>();
|
||||||
JsonVariantConst cvariant = variant;
|
JsonVariantConst cvariant = variant;
|
||||||
|
|
||||||
|
SECTION("undefined") {
|
||||||
|
cvariant = JsonVariantConst();
|
||||||
|
|
||||||
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == false);
|
||||||
|
CHECK(cvariant.is<bool>() == false);
|
||||||
|
CHECK(cvariant.is<char *>() == false);
|
||||||
|
CHECK(cvariant.is<int>() == false);
|
||||||
|
CHECK(cvariant.is<std::string>() == false);
|
||||||
|
CHECK(cvariant.is<float>() == false);
|
||||||
|
CHECK(cvariant.is<MYENUM2>() == false);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("null") {
|
SECTION("null") {
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<bool>() == false);
|
CHECK(cvariant.is<bool>() == false);
|
||||||
CHECK(cvariant.is<char *>() == false);
|
CHECK(cvariant.is<char *>() == false);
|
||||||
CHECK(cvariant.is<int>() == false);
|
CHECK(cvariant.is<int>() == false);
|
||||||
@ -142,6 +180,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
variant.set(true);
|
variant.set(true);
|
||||||
|
|
||||||
CHECK(cvariant.is<bool>() == true);
|
CHECK(cvariant.is<bool>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
CHECK(cvariant.is<char *>() == false);
|
CHECK(cvariant.is<char *>() == false);
|
||||||
@ -155,6 +194,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
variant.set(false);
|
variant.set(false);
|
||||||
|
|
||||||
CHECK(cvariant.is<bool>() == true);
|
CHECK(cvariant.is<bool>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
CHECK(cvariant.is<char *>() == false);
|
CHECK(cvariant.is<char *>() == false);
|
||||||
@ -173,6 +213,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
CHECK(cvariant.is<double>() == true);
|
CHECK(cvariant.is<double>() == true);
|
||||||
CHECK(cvariant.is<float>() == true);
|
CHECK(cvariant.is<float>() == true);
|
||||||
CHECK(cvariant.is<MYENUM2>() == true);
|
CHECK(cvariant.is<MYENUM2>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<bool>() == false);
|
CHECK(cvariant.is<bool>() == false);
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
@ -185,6 +226,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
|
|
||||||
CHECK(cvariant.is<double>() == true);
|
CHECK(cvariant.is<double>() == true);
|
||||||
CHECK(cvariant.is<float>() == true);
|
CHECK(cvariant.is<float>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<bool>() == false);
|
CHECK(cvariant.is<bool>() == false);
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
@ -200,6 +242,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
CHECK(cvariant.is<char *>() == true);
|
CHECK(cvariant.is<char *>() == true);
|
||||||
CHECK(cvariant.is<const char *>() == true);
|
CHECK(cvariant.is<const char *>() == true);
|
||||||
CHECK(cvariant.is<std::string>() == true);
|
CHECK(cvariant.is<std::string>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<double>() == false);
|
CHECK(cvariant.is<double>() == false);
|
||||||
CHECK(cvariant.is<float>() == false);
|
CHECK(cvariant.is<float>() == false);
|
||||||
CHECK(cvariant.is<bool>() == false);
|
CHECK(cvariant.is<bool>() == false);
|
||||||
@ -214,6 +257,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
|
|
||||||
CHECK(cvariant.is<JsonArray>() == true);
|
CHECK(cvariant.is<JsonArray>() == true);
|
||||||
CHECK(cvariant.is<JsonArrayConst>() == true);
|
CHECK(cvariant.is<JsonArrayConst>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<JsonObject>() == false);
|
CHECK(cvariant.is<JsonObject>() == false);
|
||||||
CHECK(cvariant.is<JsonObjectConst>() == false);
|
CHECK(cvariant.is<JsonObjectConst>() == false);
|
||||||
CHECK(cvariant.is<int>() == false);
|
CHECK(cvariant.is<int>() == false);
|
||||||
@ -228,6 +272,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
|
|||||||
|
|
||||||
CHECK(cvariant.is<JsonObject>() == true);
|
CHECK(cvariant.is<JsonObject>() == true);
|
||||||
CHECK(cvariant.is<JsonObjectConst>() == true);
|
CHECK(cvariant.is<JsonObjectConst>() == true);
|
||||||
|
CHECK(cvariant.is<JsonVariant>() == true);
|
||||||
CHECK(cvariant.is<JsonArray>() == false);
|
CHECK(cvariant.is<JsonArray>() == false);
|
||||||
CHECK(cvariant.is<JsonArrayConst>() == false);
|
CHECK(cvariant.is<JsonArrayConst>() == false);
|
||||||
CHECK(cvariant.is<int>() == false);
|
CHECK(cvariant.is<int>() == false);
|
||||||
|
@ -112,6 +112,15 @@ class VariantRefBase : public VariantTag {
|
|||||||
is() const {
|
is() const {
|
||||||
return variantIsObject(_data);
|
return variantIsObject(_data);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// bool is<VariantRef> const;
|
||||||
|
// bool is<const VariantRef> const;
|
||||||
|
template <typename T>
|
||||||
|
FORCE_INLINE typename enable_if<
|
||||||
|
is_same<typename remove_const<T>::type, VariantRef>::value, bool>::type
|
||||||
|
is() const {
|
||||||
|
return !!_data;
|
||||||
|
}
|
||||||
#if ARDUINOJSON_HAS_NULLPTR
|
#if ARDUINOJSON_HAS_NULLPTR
|
||||||
//
|
//
|
||||||
// bool is<nullptr_t> const;
|
// bool is<nullptr_t> const;
|
||||||
|
Reference in New Issue
Block a user