// ArduinoJson - https://arduinojson.org // Copyright © 2014-2023, Benoit BLANCHON // MIT License #include #include #include "Allocators.hpp" using namespace Catch::Matchers; using ArduinoJson::detail::sizeofObject; TEST_CASE("deserializeJson(JsonDocument&)") { SpyingAllocator allocator; JsonDocument doc(&allocator); SECTION("Edge cases") { SECTION("null char*") { DeserializationError err = deserializeJson(doc, static_cast(0)); REQUIRE(err != DeserializationError::Ok); } SECTION("null const char*") { DeserializationError err = deserializeJson(doc, static_cast(0)); REQUIRE(err != DeserializationError::Ok); } SECTION("Empty input") { DeserializationError err = deserializeJson(doc, ""); REQUIRE(err == DeserializationError::EmptyInput); } SECTION("Only spaces") { DeserializationError err = deserializeJson(doc, " \t\n\r"); REQUIRE(err == DeserializationError::EmptyInput); } SECTION("issue #628") { DeserializationError err = deserializeJson(doc, "null"); REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is() == false); } SECTION("Garbage") { DeserializationError err = deserializeJson(doc, "%*$£¤"); REQUIRE(err == DeserializationError::InvalidInput); } } SECTION("Booleans") { SECTION("True") { DeserializationError err = deserializeJson(doc, "true"); REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == true); } SECTION("False") { DeserializationError err = deserializeJson(doc, "false"); REQUIRE(err == DeserializationError::Ok); REQUIRE(doc.is()); REQUIRE(doc.as() == false); } } SECTION("Premature null-terminator") { SECTION("In escape sequence") { DeserializationError err = deserializeJson(doc, "\"\\"); REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In double quoted string") { DeserializationError err = deserializeJson(doc, "\"hello"); REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In single quoted string") { DeserializationError err = deserializeJson(doc, "'hello"); REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Premature end of input") { SECTION("In escape sequence") { DeserializationError err = deserializeJson(doc, "\"\\n\"", 2); REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In double quoted string") { DeserializationError err = deserializeJson(doc, "\"hello\"", 6); REQUIRE(err == DeserializationError::IncompleteInput); } SECTION("In single quoted string") { DeserializationError err = deserializeJson(doc, "'hello'", 6); REQUIRE(err == DeserializationError::IncompleteInput); } } SECTION("Should clear the JsonVariant") { deserializeJson(doc, "[1,2,3]"); deserializeJson(doc, "{}"); REQUIRE(doc.is()); REQUIRE(allocator.log() == AllocatorLog() << AllocatorLog::Allocate(sizeofPool()) << AllocatorLog::Deallocate(sizeofPool())); } }