Add a stub for createNestedObject()

This commit is contained in:
Benoit Blanchon
2023-08-09 15:57:25 +02:00
parent 8cc645c40c
commit 78399c2d78
8 changed files with 187 additions and 0 deletions

View File

@ -17,6 +17,7 @@ endif()
add_executable(DeprecatedTests add_executable(DeprecatedTests
add.cpp add.cpp
createNestedArray.cpp createNestedArray.cpp
createNestedObject.cpp
BasicJsonDocument.cpp BasicJsonDocument.cpp
DynamicJsonDocument.cpp DynamicJsonDocument.cpp
memoryUsage.cpp memoryUsage.cpp

View File

@ -0,0 +1,111 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2023, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
#include <string>
TEST_CASE("JsonDocument::createNestedObject()") {
JsonDocument doc;
SECTION("createNestedObject()") {
JsonObject object = doc.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
SECTION("createNestedObject(const char*)") {
JsonObject object = doc.createNestedObject("key");
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject object = doc.createNestedObject(std::string("key"));
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject object = doc.createNestedObject(vla);
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}
TEST_CASE("JsonArray::createNestedObject()") {
JsonDocument doc;
JsonArray array = doc.to<JsonArray>();
JsonObject object = array.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
TEST_CASE("JsonObject::createNestedObject()") {
JsonDocument doc;
JsonObject object = doc.to<JsonObject>();
SECTION("createNestedObject(const char*)") {
JsonObject nestedObject = object.createNestedObject("key");
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject nestedObject = object.createNestedObject(std::string("key"));
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject nestedObject = object.createNestedObject(vla);
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}
TEST_CASE("JsonVariant::createNestedObject()") {
JsonDocument doc;
JsonVariant variant = doc.to<JsonVariant>();
SECTION("createNestedObject()") {
JsonObject object = variant.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
SECTION("createNestedObject(const char*)") {
JsonObject object = variant.createNestedObject("key");
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject object = variant.createNestedObject(std::string("key"));
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject object = variant.createNestedObject(vla);
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}

View File

@ -170,6 +170,10 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
return add<JsonArray>(); return add<JsonArray>();
} }
// DEPRECATED: use add<JsonObject>() instead
ARDUINOJSON_DEPRECATED("use add<JsonObject>() instead")
JsonObject createNestedObject() const;
// DEPRECATED: always returns zero // DEPRECATED: always returns zero
ARDUINOJSON_DEPRECATED("always returns zero") ARDUINOJSON_DEPRECATED("always returns zero")
size_t memoryUsage() const { size_t memoryUsage() const {

View File

@ -317,6 +317,26 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
return operator[](key).template to<JsonArray>(); return operator[](key).template to<JsonArray>();
} }
// DEPRECATED: use add<JsonObject>() instead
ARDUINOJSON_DEPRECATED("use add<JsonObject>() instead")
JsonObject createNestedObject() {
return add<JsonObject>();
}
// DEPRECATED: use doc[key].to<JsonObject>() instead
template <typename TChar>
ARDUINOJSON_DEPRECATED("use doc[key].to<JsonObject>() instead")
JsonObject createNestedObject(TChar* key) {
return operator[](key).template to<JsonObject>();
}
// DEPRECATED: use doc[key].to<JsonObject>() instead
template <typename TString>
ARDUINOJSON_DEPRECATED("use doc[key].to<JsonObject>() instead")
JsonObject createNestedObject(const TString& key) {
return operator[](key).template to<JsonObject>();
}
// DEPRECATED: always returns zero // DEPRECATED: always returns zero
ARDUINOJSON_DEPRECATED("always returns zero") ARDUINOJSON_DEPRECATED("always returns zero")
size_t memoryUsage() const { size_t memoryUsage() const {

View File

@ -180,6 +180,20 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
return operator[](key).template to<JsonArray>(); return operator[](key).template to<JsonArray>();
} }
// DEPRECATED: use obj[key].to<JsonObject>() instead
template <typename TChar>
ARDUINOJSON_DEPRECATED("use obj[key].to<JsonObject>() instead")
JsonObject createNestedObject(TChar* key) {
return operator[](key).template to<JsonObject>();
}
// DEPRECATED: use obj[key].to<JsonObject>() instead
template <typename TString>
ARDUINOJSON_DEPRECATED("use obj[key].to<JsonObject>() instead")
JsonObject createNestedObject(const TString& key) {
return operator[](key).template to<JsonObject>();
}
// DEPRECATED: always returns zero // DEPRECATED: always returns zero
ARDUINOJSON_DEPRECATED("always returns zero") ARDUINOJSON_DEPRECATED("always returns zero")
size_t memoryUsage() const { size_t memoryUsage() const {

View File

@ -239,6 +239,20 @@ class VariantRefBase : public VariantTag {
ARDUINOJSON_DEPRECATED("use var[key].to<JsonArray>() instead") ARDUINOJSON_DEPRECATED("use var[key].to<JsonArray>() instead")
JsonArray createNestedArray(const TString& key) const; JsonArray createNestedArray(const TString& key) const;
// DEPRECATED: use add<JsonObject>() instead
ARDUINOJSON_DEPRECATED("use add<JsonObject>() instead")
JsonObject createNestedObject() const;
// DEPRECATED: use var[key].to<JsonObject>() instead
template <typename TChar>
ARDUINOJSON_DEPRECATED("use var[key].to<JsonObject>() instead")
JsonObject createNestedObject(TChar* key) const;
// DEPRECATED: use var[key].to<JsonObject>() instead
template <typename TString>
ARDUINOJSON_DEPRECATED("use var[key].to<JsonObject>() instead")
JsonObject createNestedObject(const TString& key) const;
// DEPRECATED: always returns zero // DEPRECATED: always returns zero
ARDUINOJSON_DEPRECATED("always returns zero") ARDUINOJSON_DEPRECATED("always returns zero")
size_t memoryUsage() const { size_t memoryUsage() const {

View File

@ -33,6 +33,25 @@ inline JsonArray VariantRefBase<TDerived>::createNestedArray(
return operator[](key).template to<JsonArray>(); return operator[](key).template to<JsonArray>();
} }
template <typename TDerived>
inline JsonObject VariantRefBase<TDerived>::createNestedObject() const {
return add<JsonObject>();
}
template <typename TDerived>
template <typename TChar>
inline JsonObject VariantRefBase<TDerived>::createNestedObject(
TChar* key) const {
return operator[](key).template to<JsonObject>();
}
template <typename TDerived>
template <typename TString>
inline JsonObject VariantRefBase<TDerived>::createNestedObject(
const TString& key) const {
return operator[](key).template to<JsonObject>();
}
template <typename TDerived> template <typename TDerived>
inline void convertToJson(const VariantRefBase<TDerived>& src, inline void convertToJson(const VariantRefBase<TDerived>& src,
JsonVariant dst) { JsonVariant dst) {

View File

@ -109,4 +109,8 @@ class ARDUINOJSON_DEPRECATED("use JsonDocument instead") DynamicJsonDocument
size_t _capacity; size_t _capacity;
}; };
inline JsonObject JsonArray::createNestedObject() const {
return add<JsonObject>();
}
ARDUINOJSON_END_PUBLIC_NAMESPACE ARDUINOJSON_END_PUBLIC_NAMESPACE