diff --git a/CHANGELOG.md b/CHANGELOG.md index e55bdf24..e026cc13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ HEAD ---- * Use absolute instead of relative includes (issue #1072) +* Changed `JsonVariant::as()` to return `true` for any non-null value (issue #1005) v6.11.5 (2019-08-23) ------- diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index ec66b2e0..4e684e76 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -40,11 +40,10 @@ inline bool VariantData::asBoolean() const { return _content.asInteger != 0; case VALUE_IS_FLOAT: return _content.asFloat != 0; - case VALUE_IS_LINKED_STRING: - case VALUE_IS_OWNED_STRING: - return strcmp("true", _content.asString) == 0; - default: + case VALUE_IS_NULL: return false; + default: + return true; } } diff --git a/test/JsonVariant/as.cpp b/test/JsonVariant/as.cpp index 21d2c987..3e306bbe 100644 --- a/test/JsonVariant/as.cpp +++ b/test/JsonVariant/as.cpp @@ -77,13 +77,8 @@ TEST_CASE("JsonVariant::as()") { SECTION("set(0L)") { variant.set(0L); - SECTION("as()") { - REQUIRE(false == variant.as()); - } - - SECTION("as()") { - REQUIRE(variant.as() == 0.0); - } + REQUIRE(variant.as() == false); + REQUIRE(variant.as() == 0.0); } SECTION("set(null)") { @@ -104,7 +99,7 @@ TEST_CASE("JsonVariant::as()") { SECTION("set(\"hello\")") { variant.set("hello"); - REQUIRE(variant.as() == false); + REQUIRE(variant.as() == true); REQUIRE(variant.as() == 0L); REQUIRE(variant.as() == std::string("hello")); REQUIRE(variant.as() == std::string("hello")); @@ -114,6 +109,7 @@ TEST_CASE("JsonVariant::as()") { SECTION("set(std::string(\"4.2\"))") { variant.set(std::string("4.2")); + REQUIRE(variant.as() == true); REQUIRE(variant.as() == 4L); REQUIRE(variant.as() == 4.2); REQUIRE(variant.as() == std::string("4.2")); @@ -130,6 +126,7 @@ TEST_CASE("JsonVariant::as()") { SECTION("set(-1e300)") { variant.set(-1e300); + REQUIRE(variant.as() == true); REQUIRE(variant.as() == -1e300); REQUIRE(variant.as() < 0); REQUIRE(my::isinf(variant.as())); @@ -138,14 +135,16 @@ TEST_CASE("JsonVariant::as()") { SECTION("set(1e300)") { variant.set(1e300); + REQUIRE(variant.as() == true); REQUIRE(variant.as() == 1e300); REQUIRE(variant.as() > 0); REQUIRE(my::isinf(variant.as())); } - SECTION("set(1e300)") { + SECTION("set(1e-300)") { variant.set(1e-300); + REQUIRE(variant.as() == true); REQUIRE(variant.as() == 1e-300); REQUIRE(variant.as() == 0); } @@ -154,6 +153,10 @@ TEST_CASE("JsonVariant::as()") { JsonObject obj = variant.to(); obj["key"] = "value"; + SECTION("as()") { + REQUIRE(variant.as() == true); + } + SECTION("as()") { REQUIRE(variant.as() == std::string("{\"key\":\"value\"}")); } @@ -170,6 +173,10 @@ TEST_CASE("JsonVariant::as()") { arr.add(4); arr.add(2); + SECTION("as()") { + REQUIRE(variant.as() == true); + } + SECTION("as()") { REQUIRE(variant.as() == std::string("[4,2]")); } @@ -199,7 +206,7 @@ TEST_CASE("JsonVariant::as()") { JsonVariantConst cvar = variant; - REQUIRE(cvar.as() == false); + REQUIRE(cvar.as() == true); REQUIRE(cvar.as() == 0L); REQUIRE(cvar.as() == std::string("hello")); REQUIRE(cvar.as() == std::string("hello"));