8000 Changed as<bool>() to return true for any non-null value (closes #1005) · joglosemarduino/ArduinoJson@ed18e77 · GitHub
[go: up one dir, main page]

Skip to content

Commit ed18e77

Browse files
committed
Changed as<bool>() to return true for any non-null value (closes bblanchon#1005)
1 parent fcbec6e commit ed18e77

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ HEAD
55
----
66

77
* Use absolute instead of relative includes (issue #1072)
8+
* Changed `JsonVariant::as<bool>()` to return `true` for any non-null value (issue #1005)
89

910
v6.11.5 (2019-08-23)
1011
-------

src/ArduinoJson/Variant/VariantImpl.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,10 @@ inline bool VariantData::asBoolean() const {
4040
return _content.asInteger != 0;
4141
case VALUE_IS_FLOAT:
4242
return _content.asFloat != 0;
43-
case VALUE_IS_LINKED_STRING:
44-
case VALUE_IS_OWNED_STRING:
45-
return strcmp("true", _content.asString) == 0;
46-
default:
43+
case VALUE_IS_NULL:
4744
return false;
45+
default:
46+
return true;
4847
}
4948
}
5049

test/JsonVariant/as.cpp

Lines changed: 17 additions & 10 deletions
< 8000 td data-grid-cell-id="diff-5f127b02d6ea6a87b10f2973a6cf588b4b08cbb5db1bad5f494035d43f2a5f3c-131-127-2" data-line-anchor="diff-5f127b02d6ea6a87b10f2973a6cf588b4b08cbb5db1bad5f494035d43f2a5f3cR127" data-selected="false" role="gridcell" style="background-color:var(--bgColor-default);padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">
variant.set(-1e300);
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,8 @@ TEST_CASE("JsonVariant::as()") {
7777
SECTION("set(0L)") {
7878
variant.set(0L);
7979

80-
SECTION("as<bool>()") {
81-
REQUIRE(false == variant.as<bool>());
82-
}
83-
84-
SECTION("as<double>()") {
85-
REQUIRE(variant.as<double>() == 0.0);
86-
}
80+
REQUIRE(variant.as<bool>() == false);
81+
REQUIRE(variant.as<double>() == 0.0);
8782
}
8883

8984
SECTION("set(null)") {
@@ -104,7 +99,7 @@ TEST_CASE("JsonVariant::as()") {
10499
SECTION("set(\"hello\")") {
105100
variant.set("hello");
106101

107-
REQUIRE(variant.as<bool>() == false);
102+
REQUIRE(variant.as<bool>() == true);
108103
REQUIRE(variant.as<long>() == 0L);
109104
REQUIRE(variant.as<const char*>() == std::string("hello"));
110105
REQUIRE(variant.as<char*>() == std::string("hello"));
@@ -114,6 +109,7 @@ TEST_CASE("JsonVariant::as()") {
114109
SECTION("set(std::string(\"4.2\"))") {
115110
variant.set(std::string("4.2"));
116111

112+
REQUIRE(variant.as<bool>() == true);
117113
REQUIRE(variant.as<long>() == 4L);
118114
REQUIRE(variant.as<double>() == 4.2);
119115
REQUIRE(variant.as<char*>() == std::string("4.2"));
@@ -130,6 +126,7 @@ TEST_CASE("JsonVariant::as()") {
130126
SECTION("set(-1e300)") {
131127
132128

129+
REQUIRE(variant.as<bool>() == true);
133130
REQUIRE(variant.as<double>() == -1e300);
134131
REQUIRE(variant.as<float>() < 0);
135132
REQUIRE(my::isinf(variant.as<float>()));
@@ -138,14 +135,16 @@ TEST_CASE("JsonVariant::as()") {
138135
SECTION("set(1e300)") {
139136
variant.set(1e300);
140137

138+
REQUIRE(variant.as<bool>() == true);
141139
REQUIRE(variant.as<double>() == 1e300);
142140
REQUIRE(variant.as<float>() > 0);
143141
REQUIRE(my::isinf(variant.as<float>()));
144142
}
145143

146-
SECTION("set(1e300)") {
144+
SECTION("set(1e-300)") {
147145
variant.set(1e-300);
148146

147+
REQUIRE(variant.as<bool>() == true);
149148
REQUIRE(variant.as<double>() == 1e-300);
150149
REQUIRE(variant.as<float>() == 0);
151150
}
@@ -154,6 +153,10 @@ TEST_CASE("JsonVariant::as()") {
154153
JsonObject obj = variant.to<JsonObject>();
155154
obj["key"] = "value";
156155

156+
SECTION("as<bool>()") {
157+
REQUIRE(variant.as<bool>() == true);
158+
}
159+
157160
SECTION("as<std::string>()") {
158161
REQUIRE(variant.as<std::string>() == std::string("{\"key\":\"value\"}"));
159162
}
@@ -170,6 +173,10 @@ TEST_CASE("JsonVariant::as()") {
170173
arr.add(4);
171174
arr.add(2);
172175

176+
SECTION("as<bool>()") {
177+
REQUIRE(variant.as<bool>() == true);
178+
}
179+
173180
SECTION("as<std::string>()") {
174181
REQUIRE(variant.as<std::string>() == std::string("[4,2]"));
175182
}
@@ -199,7 +206,7 @@ TEST_CASE("JsonVariant::as()") {
199206

200207
JsonVariantConst cvar = variant;
201208

202-
REQUIRE(cvar.as<bool>() == false);
209+
REQUIRE(cvar.as<bool>() == true);
203210
REQUIRE(cvar.as<long>() == 0L);
204211
REQUIRE(cvar.as<const char*>() == std::string("hello"));
205212
REQUIRE(cvar.as<char*>() == std::string("hello"));

0 commit comments

Comments
 (0)
0