Explorar o código

Add `is<JsonString>()`

Benoit Blanchon %!s(int64=4) %!d(string=hai) anos
pai
achega
8418845c8d
Modificáronse 3 ficheiros con 21 adicións e 1 borrados
  1. 1 1
      CHANGELOG.md
  2. 15 0
      extras/tests/JsonVariant/is.cpp
  3. 5 0
      src/ArduinoJson/Variant/ConverterImpl.hpp

+ 1 - 1
CHANGELOG.md

@@ -8,7 +8,7 @@ HEAD
   Dependent settings (like `ARDUINOJSON_DEFAULT_NESTING_LIMIT`) must be set individually.
 * Change the default of `ARDUINOJSON_USE_DOUBLE` to `1`
 * Change the default of `ARDUINOJSON_USE_LONG_LONG` to `1` on 32-bit platforms
-* Add `as<JsonString>()`
+* Add `as<JsonString>()` and `is<JsonString>()`
 
 v6.18.5 (2021-09-28)
 -------

+ 15 - 0
extras/tests/JsonVariant/is.cpp

@@ -22,8 +22,10 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<int>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
     CHECK(variant.is<float>() == false);
     CHECK(variant.is<MYENUM2>() == false);
+    CHECK(variant.is<JsonString>() == false);
   }
 
   SECTION("null") {
@@ -35,6 +37,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<int>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
     CHECK(variant.is<float>() == false);
     CHECK(variant.is<MYENUM2>() == false);
   }
@@ -50,6 +53,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<int>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
     CHECK(variant.is<float>() == false);
     CHECK(variant.is<MYENUM2>() == false);
   }
@@ -65,6 +69,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<int>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
     CHECK(variant.is<float>() == false);
     CHECK(variant.is<MYENUM2>() == false);
   }
@@ -85,6 +90,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<JsonArray>() == false);
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
   }
 
   SECTION("double") {
@@ -100,6 +106,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == false);
     CHECK(variant.is<int>() == false);
     CHECK(variant.is<std::string>() == false);
+    CHECK(variant.is<JsonString>() == false);
     CHECK(variant.is<MYENUM2>() == false);
   }
 
@@ -109,6 +116,7 @@ TEST_CASE("JsonVariant::is<T>()") {
     CHECK(variant.is<const char *>() == true);
     CHECK(variant.is<const char *>() == true);
     CHECK(variant.is<std::string>() == true);
+    CHECK(variant.is<JsonString>() == true);
     CHECK(variant.is<JsonVariant>() == true);
     CHECK(variant.is<JsonVariantConst>() == true);
     CHECK(variant.is<double>() == false);
@@ -173,6 +181,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<int>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
     CHECK(cvariant.is<float>() == false);
     CHECK(cvariant.is<MYENUM2>() == false);
   }
@@ -186,6 +195,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<int>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
     CHECK(cvariant.is<float>() == false);
     CHECK(cvariant.is<MYENUM2>() == false);
   }
@@ -201,6 +211,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<int>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
     CHECK(cvariant.is<float>() == false);
     CHECK(cvariant.is<MYENUM2>() == false);
   }
@@ -216,6 +227,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<int>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
     CHECK(cvariant.is<float>() == false);
     CHECK(cvariant.is<MYENUM2>() == false);
   }
@@ -236,6 +248,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<JsonVariant>() == false);
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
   }
 
   SECTION("double") {
@@ -251,6 +264,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == false);
     CHECK(cvariant.is<int>() == false);
     CHECK(cvariant.is<std::string>() == false);
+    CHECK(cvariant.is<JsonString>() == false);
     CHECK(cvariant.is<MYENUM2>() == false);
   }
 
@@ -260,6 +274,7 @@ TEST_CASE("JsonVariantConst::is<T>()") {
     CHECK(cvariant.is<const char *>() == true);
     CHECK(cvariant.is<const char *>() == true);
     CHECK(cvariant.is<std::string>() == true);
+    CHECK(cvariant.is<JsonString>() == true);
     CHECK(cvariant.is<double>() == false);
     CHECK(cvariant.is<float>() == false);
     CHECK(cvariant.is<bool>() == false);

+ 5 - 0
src/ArduinoJson/Variant/ConverterImpl.hpp

@@ -139,6 +139,11 @@ struct Converter<String> {
     const VariantData* data = getData(src);
     return data ? String(data->asString(), false) : 0;
   }
+
+  static bool checkJson(VariantConstRef src) {
+    const VariantData* data = getData(src);
+    return data && data->isString();
+  }
 };
 
 template <typename T>