// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #include #include #include static const char* null = 0; TEST_CASE("JsonVariant::as()") { DynamicJsonDocument doc; JsonVariant variant = doc.to(); SECTION("DoubleAsBool") { variant.set(4.2); REQUIRE(variant.as()); } SECTION("DoubleAsCstr") { variant.set(4.2); REQUIRE_FALSE(variant.as()); } SECTION("DoubleAsString") { variant.set(4.2); REQUIRE(std::string("4.2") == variant.as()); } SECTION("DoubleAsLong") { variant.set(4.2); REQUIRE(4L == variant.as()); } SECTION("DoubleAsUnsigned") { variant.set(4.2); REQUIRE(4U == variant.as()); } SECTION("DoubleZeroAsBool") { variant.set(0.0); REQUIRE_FALSE(variant.as()); } SECTION("DoubleZeroAsLong") { variant.set(0.0); REQUIRE(0L == variant.as()); } SECTION("FalseAsBool") { variant.set(false); REQUIRE_FALSE(variant.as()); } SECTION("FalseAsDouble") { variant.set(false); REQUIRE(0.0 == variant.as()); } SECTION("FalseAsLong") { variant.set(false); REQUIRE(0L == variant.as()); } SECTION("FalseAsString") { variant.set(false); REQUIRE(std::string("false") == variant.as()); } SECTION("TrueAsBool") { variant.set(true); REQUIRE(variant.as()); } SECTION("TrueAsDouble") { variant.set(true); REQUIRE(1.0 == variant.as()); } SECTION("TrueAsLong") { variant.set(true); REQUIRE(1L == variant.as()); } SECTION("TrueAsString") { variant.set(true); REQUIRE(std::string("true") == variant.as()); } SECTION("LongAsBool") { variant.set(42L); REQUIRE(variant.as()); } SECTION("LongZeroAsBool") { variant.set(0L); REQUIRE_FALSE(variant.as()); } SECTION("PositiveLongAsDouble") { variant.set(42L); REQUIRE(42.0 == variant.as()); } SECTION("NegativeLongAsDouble") { variant.set(-42L); REQUIRE(-42.0 == variant.as()); } SECTION("LongAsString") { variant.set(42L); REQUIRE(std::string("42") == variant.as()); } SECTION("LongZeroAsDouble") { variant.set(0L); REQUIRE(0.0 == variant.as()); } SECTION("NullAsBool") { variant.set(null); REQUIRE_FALSE(variant.as()); } SECTION("NullAsDouble") { variant.set(null); REQUIRE(0.0 == variant.as()); } SECTION("NullAsLong") { variant.set(null); REQUIRE(0L == variant.as()); } SECTION("NullAsString") { variant.set(null); REQUIRE(std::string("null") == variant.as()); } SECTION("NumberStringAsBool") { variant.set("42"); REQUIRE(variant.as()); } SECTION("NumberStringAsLong") { variant.set("42"); REQUIRE(42L == variant.as()); } #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64 SECTION("NumberStringAsInt64Negative") { variant.set("-9223372036854775808"); REQUIRE(-9223372036854775807 - 1 == variant.as()); } SECTION("NumberStringAsInt64Positive") { variant.set("9223372036854775807"); REQUIRE(9223372036854775807 == variant.as()); } #endif SECTION("RandomStringAsBool") { variant.set("hello"); REQUIRE_FALSE(variant.as()); } SECTION("RandomStringAsLong") { variant.set("hello"); REQUIRE(0L == variant.as()); } SECTION("RandomStringAsConstCharPtr") { variant.set("hello"); REQUIRE(std::string("hello") == variant.as()); } SECTION("RandomStringAsCharPtr") { variant.set("hello"); REQUIRE(std::string("hello") == variant.as()); } SECTION("RandomStringAsString") { variant.set("hello"); REQUIRE(std::string("hello") == variant.as()); } SECTION("TrueStringAsBool") { variant.set("true"); REQUIRE(variant.as()); } SECTION("TrueStringAsLong") { variant.set("true"); REQUIRE(1L == variant.as()); } SECTION("ObjectAsString") { DynamicJsonDocument doc2; JsonObject obj = doc2.to(); obj["key"] = "value"; variant.set(obj); REQUIRE(std::string("{\"key\":\"value\"}") == variant.as()); } SECTION("ArrayAsString") { DynamicJsonDocument doc2; JsonArray arr = doc2.to(); arr.add(4); arr.add(2); variant.set(arr); REQUIRE(std::string("[4,2]") == variant.as()); } SECTION("ArrayAsJsonArray") { DynamicJsonDocument doc2; JsonArray arr = doc2.to(); variant.set(arr); REQUIRE(arr == variant.as()); REQUIRE(arr == variant.as()); // <- shorthand } SECTION("ObjectAsJsonObject") { DynamicJsonDocument doc2; JsonObject obj = doc2.to(); variant.set(obj); REQUIRE(obj == variant.as()); REQUIRE(obj == variant.as()); // <- shorthand } }