forked from bblanchon/ArduinoJson
Changed as<bool>() to return true for any non-null value (closes #1005)
This commit is contained in:
@ -5,6 +5,7 @@ HEAD
|
|||||||
----
|
----
|
||||||
|
|
||||||
* Use absolute instead of relative includes (issue #1072)
|
* Use absolute instead of relative includes (issue #1072)
|
||||||
|
* Changed `JsonVariant::as<bool>()` to return `true` for any non-null value (issue #1005)
|
||||||
|
|
||||||
v6.11.5 (2019-08-23)
|
v6.11.5 (2019-08-23)
|
||||||
-------
|
-------
|
||||||
|
@ -40,11 +40,10 @@ inline bool VariantData::asBoolean() const {
|
|||||||
return _content.asInteger != 0;
|
return _content.asInteger != 0;
|
||||||
case VALUE_IS_FLOAT:
|
case VALUE_IS_FLOAT:
|
||||||
return _content.asFloat != 0;
|
return _content.asFloat != 0;
|
||||||
case VALUE_IS_LINKED_STRING:
|
case VALUE_IS_NULL:
|
||||||
case VALUE_IS_OWNED_STRING:
|
|
||||||
return strcmp("true", _content.asString) == 0;
|
|
||||||
default:
|
|
||||||
return false;
|
return false;
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,13 +77,8 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
SECTION("set(0L)") {
|
SECTION("set(0L)") {
|
||||||
variant.set(0L);
|
variant.set(0L);
|
||||||
|
|
||||||
SECTION("as<bool>()") {
|
REQUIRE(variant.as<bool>() == false);
|
||||||
REQUIRE(false == variant.as<bool>());
|
REQUIRE(variant.as<double>() == 0.0);
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("as<double>()") {
|
|
||||||
REQUIRE(variant.as<double>() == 0.0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("set(null)") {
|
SECTION("set(null)") {
|
||||||
@ -104,7 +99,7 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
SECTION("set(\"hello\")") {
|
SECTION("set(\"hello\")") {
|
||||||
variant.set("hello");
|
variant.set("hello");
|
||||||
|
|
||||||
REQUIRE(variant.as<bool>() == false);
|
REQUIRE(variant.as<bool>() == true);
|
||||||
REQUIRE(variant.as<long>() == 0L);
|
REQUIRE(variant.as<long>() == 0L);
|
||||||
REQUIRE(variant.as<const char*>() == std::string("hello"));
|
REQUIRE(variant.as<const char*>() == std::string("hello"));
|
||||||
REQUIRE(variant.as<char*>() == std::string("hello"));
|
REQUIRE(variant.as<char*>() == std::string("hello"));
|
||||||
@ -114,6 +109,7 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
SECTION("set(std::string(\"4.2\"))") {
|
SECTION("set(std::string(\"4.2\"))") {
|
||||||
variant.set(std::string("4.2"));
|
variant.set(std::string("4.2"));
|
||||||
|
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
REQUIRE(variant.as<long>() == 4L);
|
REQUIRE(variant.as<long>() == 4L);
|
||||||
REQUIRE(variant.as<double>() == 4.2);
|
REQUIRE(variant.as<double>() == 4.2);
|
||||||
REQUIRE(variant.as<char*>() == std::string("4.2"));
|
REQUIRE(variant.as<char*>() == std::string("4.2"));
|
||||||
@ -130,6 +126,7 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
SECTION("set(-1e300)") {
|
SECTION("set(-1e300)") {
|
||||||
variant.set(-1e300);
|
variant.set(-1e300);
|
||||||
|
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
REQUIRE(variant.as<double>() == -1e300);
|
REQUIRE(variant.as<double>() == -1e300);
|
||||||
REQUIRE(variant.as<float>() < 0);
|
REQUIRE(variant.as<float>() < 0);
|
||||||
REQUIRE(my::isinf(variant.as<float>()));
|
REQUIRE(my::isinf(variant.as<float>()));
|
||||||
@ -138,14 +135,16 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
SECTION("set(1e300)") {
|
SECTION("set(1e300)") {
|
||||||
variant.set(1e300);
|
variant.set(1e300);
|
||||||
|
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
REQUIRE(variant.as<double>() == 1e300);
|
REQUIRE(variant.as<double>() == 1e300);
|
||||||
REQUIRE(variant.as<float>() > 0);
|
REQUIRE(variant.as<float>() > 0);
|
||||||
REQUIRE(my::isinf(variant.as<float>()));
|
REQUIRE(my::isinf(variant.as<float>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("set(1e300)") {
|
SECTION("set(1e-300)") {
|
||||||
variant.set(1e-300);
|
variant.set(1e-300);
|
||||||
|
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
REQUIRE(variant.as<double>() == 1e-300);
|
REQUIRE(variant.as<double>() == 1e-300);
|
||||||
REQUIRE(variant.as<float>() == 0);
|
REQUIRE(variant.as<float>() == 0);
|
||||||
}
|
}
|
||||||
@ -154,6 +153,10 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
JsonObject obj = variant.to<JsonObject>();
|
JsonObject obj = variant.to<JsonObject>();
|
||||||
obj["key"] = "value";
|
obj["key"] = "value";
|
||||||
|
|
||||||
|
SECTION("as<bool>()") {
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("as<std::string>()") {
|
SECTION("as<std::string>()") {
|
||||||
REQUIRE(variant.as<std::string>() == std::string("{\"key\":\"value\"}"));
|
REQUIRE(variant.as<std::string>() == std::string("{\"key\":\"value\"}"));
|
||||||
}
|
}
|
||||||
@ -170,6 +173,10 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
arr.add(4);
|
arr.add(4);
|
||||||
arr.add(2);
|
arr.add(2);
|
||||||
|
|
||||||
|
SECTION("as<bool>()") {
|
||||||
|
REQUIRE(variant.as<bool>() == true);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("as<std::string>()") {
|
SECTION("as<std::string>()") {
|
||||||
REQUIRE(variant.as<std::string>() == std::string("[4,2]"));
|
REQUIRE(variant.as<std::string>() == std::string("[4,2]"));
|
||||||
}
|
}
|
||||||
@ -199,7 +206,7 @@ TEST_CASE("JsonVariant::as()") {
|
|||||||
|
|
||||||
JsonVariantConst cvar = variant;
|
JsonVariantConst cvar = variant;
|
||||||
|
|
||||||
REQUIRE(cvar.as<bool>() == false);
|
REQUIRE(cvar.as<bool>() == true);
|
||||||
REQUIRE(cvar.as<long>() == 0L);
|
REQUIRE(cvar.as<long>() == 0L);
|
||||||
REQUIRE(cvar.as<const char*>() == std::string("hello"));
|
REQUIRE(cvar.as<const char*>() == std::string("hello"));
|
||||||
REQUIRE(cvar.as<char*>() == std::string("hello"));
|
REQUIRE(cvar.as<char*>() == std::string("hello"));
|
||||||
|
Reference in New Issue
Block a user