Sfoglia il codice sorgente

Added conversion from JsonArray/JsonObject to bool

Benoit Blanchon 6 anni fa
parent
commit
7d1d0c4e67

+ 1 - 0
CHANGELOG.md

@@ -5,6 +5,7 @@ HEAD
 ----
 
 * Added support for custom writer classes (issue #1088)
+* Added conversion from `JsonArray` and `JsonObject` to `bool`, to be consistent with `JsonVariant`
 
 v6.12.0 (2019-09-05)
 -------

+ 28 - 4
extras/tests/JsonArray/isNull.cpp

@@ -6,29 +6,53 @@
 #include <catch.hpp>
 
 TEST_CASE("JsonArray::isNull()") {
-  DynamicJsonDocument doc(4096);
-
   SECTION("returns true") {
     JsonArray arr;
     REQUIRE(arr.isNull() == true);
   }
 
   SECTION("returns false") {
+    DynamicJsonDocument doc(4096);
     JsonArray arr = doc.to<JsonArray>();
     REQUIRE(arr.isNull() == false);
   }
 }
 
 TEST_CASE("JsonArrayConst::isNull()") {
-  DynamicJsonDocument doc(4096);
-
   SECTION("returns true") {
     JsonArrayConst arr;
     REQUIRE(arr.isNull() == true);
   }
 
   SECTION("returns false") {
+    DynamicJsonDocument doc(4096);
     JsonArrayConst arr = doc.to<JsonArray>();
     REQUIRE(arr.isNull() == false);
   }
 }
+
+TEST_CASE("JsonArray::operator bool()") {
+  SECTION("returns false") {
+    JsonArray arr;
+    REQUIRE(static_cast<bool>(arr) == false);
+  }
+
+  SECTION("returns true") {
+    DynamicJsonDocument doc(4096);
+    JsonArray arr = doc.to<JsonArray>();
+    REQUIRE(static_cast<bool>(arr) == true);
+  }
+}
+
+TEST_CASE("JsonArrayConst::operator bool()") {
+  SECTION("returns false") {
+    JsonArrayConst arr;
+    REQUIRE(static_cast<bool>(arr) == false);
+  }
+
+  SECTION("returns true") {
+    DynamicJsonDocument doc(4096);
+    JsonArrayConst arr = doc.to<JsonArray>();
+    REQUIRE(static_cast<bool>(arr) == true);
+  }
+}

+ 28 - 4
extras/tests/JsonObject/isNull.cpp

@@ -6,29 +6,53 @@
 #include <catch.hpp>
 
 TEST_CASE("JsonObject::isNull()") {
-  DynamicJsonDocument doc(4096);
-
   SECTION("returns true") {
     JsonObject obj;
     REQUIRE(obj.isNull() == true);
   }
 
   SECTION("returns false") {
+    DynamicJsonDocument doc(4096);
     JsonObject obj = doc.to<JsonObject>();
     REQUIRE(obj.isNull() == false);
   }
 }
 
 TEST_CASE("JsonObjectConst::isNull()") {
-  DynamicJsonDocument doc(4096);
-
   SECTION("returns true") {
     JsonObjectConst obj;
     REQUIRE(obj.isNull() == true);
   }
 
   SECTION("returns false") {
+    DynamicJsonDocument doc(4096);
     JsonObjectConst obj = doc.to<JsonObject>();
     REQUIRE(obj.isNull() == false);
   }
 }
+
+TEST_CASE("JsonObject::operator bool()") {
+  SECTION("returns false") {
+    JsonObject obj;
+    REQUIRE(static_cast<bool>(obj) == false);
+  }
+
+  SECTION("returns true") {
+    DynamicJsonDocument doc(4096);
+    JsonObject obj = doc.to<JsonObject>();
+    REQUIRE(static_cast<bool>(obj) == true);
+  }
+}
+
+TEST_CASE("JsonObjectConst::operator bool()") {
+  SECTION("returns false") {
+    JsonObjectConst obj;
+    REQUIRE(static_cast<bool>(obj) == false);
+  }
+
+  SECTION("returns true") {
+    DynamicJsonDocument doc(4096);
+    JsonObjectConst obj = doc.to<JsonObject>();
+    REQUIRE(static_cast<bool>(obj) == true);
+  }
+}

+ 4 - 0
src/ArduinoJson/Array/ArrayRef.hpp

@@ -36,6 +36,10 @@ class ArrayRefBase {
     return _data == 0;
   }
 
+  FORCE_INLINE operator bool() const {
+    return _data != 0;
+  }
+
   FORCE_INLINE size_t memoryUsage() const {
     return _data ? _data->memoryUsage() : 0;
   }

+ 4 - 0
src/ArduinoJson/Object/ObjectRef.hpp

@@ -31,6 +31,10 @@ class ObjectRefBase {
     return _data == 0;
   }
 
+  FORCE_INLINE operator bool() const {
+    return _data != 0;
+  }
+
   FORCE_INLINE size_t memoryUsage() const {
     return _data ? _data->memoryUsage() : 0;
   }