From 09e4fbaa1a11199dbd1de9c49f34222385afd839 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 11 Mar 2022 14:36:09 +0100 Subject: [PATCH] JsonVariant::as --- extras/tests/JsonVariant/as.cpp | 56 +++++++++++++++++++++++++ src/ArduinoJson/Variant/VariantData.hpp | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/extras/tests/JsonVariant/as.cpp b/extras/tests/JsonVariant/as.cpp index c9956778..f6a735f1 100644 --- a/extras/tests/JsonVariant/as.cpp +++ b/extras/tests/JsonVariant/as.cpp @@ -267,4 +267,60 @@ TEST_CASE("JsonVariant::as()") { REQUIRE(variant.as() == ONE); } + + SECTION("linked object") { + StaticJsonDocument<128> doc2; + doc2["hello"] = "world"; + variant.link(doc2); + + SECTION("as()") { + CHECK(variant.as() == "{\"hello\":\"world\"}"); + } + + SECTION("as()") { + JsonArray a = variant.as(); + CHECK(a.isNull() == true); + } + + SECTION("as()") { + JsonObject o = variant.as(); + CHECK(o.isNull() == true); + } + + SECTION("as()") { + JsonObjectConst o = variant.as(); + CHECK(o.isNull() == false); + CHECK(o.size() == 1); + CHECK(o["hello"] == "world"); + } + } + + SECTION("linked array") { + StaticJsonDocument<128> doc2; + doc2.add("hello"); + doc2.add("world"); + variant.link(doc2); + + SECTION("as()") { + CHECK(variant.as() == "[\"hello\",\"world\"]"); + } + + SECTION("as()") { + JsonArray a = variant.as(); + CHECK(a.isNull() == true); + } + + SECTION("as()") { + JsonArrayConst a = variant.as(); + CHECK(a.isNull() == false); + CHECK(a.size() == 2); + CHECK(a[0] == "hello"); + CHECK(a[1] == "world"); + } + + SECTION("as()") { + JsonObject o = variant.as(); + CHECK(o.isNull() == true); + } + } } diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 4a3f1299..213f2a00 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -98,7 +98,7 @@ class VariantData { } CollectionData *asObject() { - return isObject() ? &_content.asCollection : 0; + return isObjectStrict() ? &_content.asCollection : 0; } const CollectionData *asObject() const {