// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #include #include using namespace Catch::Matchers; TEST_CASE("deserializeJson(DynamicJsonDocument&)") { DynamicJsonDocument doc; SECTION("EmptyObject") { JsonError err = deserializeJson(doc, "{}"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); } SECTION("EmptyArray") { JsonError err = deserializeJson(doc, "[]"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); } SECTION("Integer") { JsonError err = deserializeJson(doc, "-42"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE_FALSE(doc.is()); REQUIRE(doc.as() == -42); } SECTION("Double") { JsonError err = deserializeJson(doc, "-1.23e+4"); REQUIRE(err == JsonError::Ok); REQUIRE_FALSE(doc.is()); REQUIRE(doc.is()); REQUIRE(doc.as() == Approx(-1.23e+4)); } SECTION("Double quoted string") { JsonError err = deserializeJson(doc, "\"hello world\""); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE_THAT(doc.as(), Equals("hello world")); } SECTION("Single quoted string") { JsonError err = deserializeJson(doc, "\'hello world\'"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE_THAT(doc.as(), Equals("hello world")); } SECTION("True") { JsonError err = deserializeJson(doc, "true"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == true); } SECTION("False") { JsonError err = deserializeJson(doc, "false"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == false); } SECTION("OpenBrace") { JsonError err = deserializeJson(doc, "{"); REQUIRE(err != JsonError::Ok); } SECTION("Incomplete string") { JsonError err = deserializeJson(doc, "\"hello"); REQUIRE(err == JsonError::Ok); REQUIRE(doc.is()); REQUIRE_THAT(doc.as(), Equals("hello")); } SECTION("Unterminated escape sequence") { JsonError err = deserializeJson(doc, "\"\\\0\""); REQUIRE(err == JsonError::InvalidInput); } SECTION("Should clear the JsonVariant") { deserializeJson(doc, "[1,2,3]"); deserializeJson(doc, "{}"); REQUIRE(doc.is()); REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(0)); } }