diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a45e689..e347e033 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ HEAD * `deserializeMsgPack()` inserts `null` instead of returning `NotSupported` * Removed `DeserializationError::NotSupported` * Added `JsonVariant::is()` (issue #1412) +* Added `JsonVariant::is()` (issue #1412) > ### BREAKING CHANGES > diff --git a/extras/tests/JsonVariant/is.cpp b/extras/tests/JsonVariant/is.cpp index c7383455..e2e046b4 100644 --- a/extras/tests/JsonVariant/is.cpp +++ b/extras/tests/JsonVariant/is.cpp @@ -11,7 +11,22 @@ TEST_CASE("JsonVariant::is()") { DynamicJsonDocument doc(4096); JsonVariant variant = doc.to(); + SECTION("undefined") { + variant = JsonVariant(); + + 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); + CHECK(variant.is() == false); + CHECK(variant.is() == false); + } + SECTION("null") { + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -26,6 +41,7 @@ TEST_CASE("JsonVariant::is()") { variant.set(true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -39,6 +55,7 @@ TEST_CASE("JsonVariant::is()") { variant.set(false); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -57,6 +74,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); CHECK(variant.is() == true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -69,6 +87,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -84,6 +103,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); CHECK(variant.is() == true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -98,6 +118,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -112,6 +133,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == true); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -119,6 +141,7 @@ TEST_CASE("JsonVariant::is()") { CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); + CHECK(variant.is() == true); } } @@ -127,9 +150,24 @@ TEST_CASE("JsonVariantConst::is()") { JsonVariant variant = doc.to(); JsonVariantConst cvariant = variant; + SECTION("undefined") { + cvariant = JsonVariantConst(); + + 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("null") { CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -142,6 +180,7 @@ TEST_CASE("JsonVariantConst::is()") { variant.set(true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -155,6 +194,7 @@ TEST_CASE("JsonVariantConst::is()") { variant.set(false); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -173,6 +213,7 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -185,6 +226,7 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -200,6 +242,7 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -214,6 +257,7 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -228,6 +272,7 @@ TEST_CASE("JsonVariantConst::is()") { CHECK(cvariant.is() == true); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index e2d6e7dc..bee99e0a 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -112,6 +112,15 @@ class VariantRefBase : public VariantTag { is() const { return variantIsObject(_data); } + // + // bool is const; + // bool is const; + template + FORCE_INLINE typename enable_if< + is_same::type, VariantRef>::value, bool>::type + is() const { + return !!_data; + } #if ARDUINOJSON_HAS_NULLPTR // // bool is const;