Changed as<bool>() to return true for any non-null value (closes #1005)

This commit is contained in:
Benoit Blanchon
2019-08-28 13:05:07 +02:00
parent fcbec6eb6d
commit ed18e77655
3 changed files with 21 additions and 14 deletions

View File

@ -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)
------- -------

View File

@ -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;
} }
} }

View File

@ -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"));