diff --git a/CHANGELOG.md b/CHANGELOG.md index 91d3135c..e0178893 100644 --- a/CHANGELOG.md +++ b/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) ------- diff --git a/extras/tests/JsonArray/isNull.cpp b/extras/tests/JsonArray/isNull.cpp index befab9fd..b5a30f86 100644 --- a/extras/tests/JsonArray/isNull.cpp +++ b/extras/tests/JsonArray/isNull.cpp @@ -6,29 +6,53 @@ #include 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(); 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(); REQUIRE(arr.isNull() == false); } } + +TEST_CASE("JsonArray::operator bool()") { + SECTION("returns false") { + JsonArray arr; + REQUIRE(static_cast(arr) == false); + } + + SECTION("returns true") { + DynamicJsonDocument doc(4096); + JsonArray arr = doc.to(); + REQUIRE(static_cast(arr) == true); + } +} + +TEST_CASE("JsonArrayConst::operator bool()") { + SECTION("returns false") { + JsonArrayConst arr; + REQUIRE(static_cast(arr) == false); + } + + SECTION("returns true") { + DynamicJsonDocument doc(4096); + JsonArrayConst arr = doc.to(); + REQUIRE(static_cast(arr) == true); + } +} diff --git a/extras/tests/JsonObject/isNull.cpp b/extras/tests/JsonObject/isNull.cpp index 92c6876d..7c73c51d 100644 --- a/extras/tests/JsonObject/isNull.cpp +++ b/extras/tests/JsonObject/isNull.cpp @@ -6,29 +6,53 @@ #include 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(); 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(); REQUIRE(obj.isNull() == false); } } + +TEST_CASE("JsonObject::operator bool()") { + SECTION("returns false") { + JsonObject obj; + REQUIRE(static_cast(obj) == false); + } + + SECTION("returns true") { + DynamicJsonDocument doc(4096); + JsonObject obj = doc.to(); + REQUIRE(static_cast(obj) == true); + } +} + +TEST_CASE("JsonObjectConst::operator bool()") { + SECTION("returns false") { + JsonObjectConst obj; + REQUIRE(static_cast(obj) == false); + } + + SECTION("returns true") { + DynamicJsonDocument doc(4096); + JsonObjectConst obj = doc.to(); + REQUIRE(static_cast(obj) == true); + } +} diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index 2d75180b..7284c6b5 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/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; } diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index e96f64e7..95bfe57b 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/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; }