mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	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