mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	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