From 7683667b3ca136760f5765a33d954e19d3c9d9ec Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 21 Aug 2018 18:07:41 +0200 Subject: [PATCH] Fixed `serializeJson(obj[key], dst)` (closes #794) --- CHANGELOG.md | 1 + src/ArduinoJson/Json/JsonSerializer.hpp | 2 +- test/JsonSerializer/CMakeLists.txt | 1 + test/JsonSerializer/misc.cpp | 46 +++++++++++++++++++++++++ test/MsgPackSerializer/CMakeLists.txt | 1 + test/MsgPackSerializer/misc.cpp | 46 +++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 test/JsonSerializer/misc.cpp create mode 100644 test/MsgPackSerializer/misc.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index a3757bd2..3bc9ae5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ HEAD * Implemented reference semantics for `JsonVariant` * Replace `JsonPair`'s `key` and `value` with `key()` and `value()` +* Fixed `serializeJson(obj[key], dst)` (issue #794) > ### BREAKING CHANGES > diff --git a/src/ArduinoJson/Json/JsonSerializer.hpp b/src/ArduinoJson/Json/JsonSerializer.hpp index 494075bc..5891ff69 100644 --- a/src/ArduinoJson/Json/JsonSerializer.hpp +++ b/src/ArduinoJson/Json/JsonSerializer.hpp @@ -91,7 +91,7 @@ class JsonSerializer { } // namespace Internals template -size_t serializeJson(TSource &source, TDestination &destination) { +size_t serializeJson(const TSource &source, TDestination &destination) { using namespace Internals; return serialize(source, destination); } diff --git a/test/JsonSerializer/CMakeLists.txt b/test/JsonSerializer/CMakeLists.txt index 1dc605dc..9fe4711b 100644 --- a/test/JsonSerializer/CMakeLists.txt +++ b/test/JsonSerializer/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(JsonSerializerTests JsonObject.cpp JsonObjectPretty.cpp JsonVariant.cpp + misc.cpp std_stream.cpp std_string.cpp ) diff --git a/test/JsonSerializer/misc.cpp b/test/JsonSerializer/misc.cpp new file mode 100644 index 00000000..f4bed63a --- /dev/null +++ b/test/JsonSerializer/misc.cpp @@ -0,0 +1,46 @@ +#include +#include +#include + +template +void check(T value, const std::string &expected) { + DynamicJsonDocument doc; + doc.to().set(value); + char buffer[256] = ""; + size_t returnValue = serializeJson(doc, buffer, sizeof(buffer)); + REQUIRE(expected == buffer); + REQUIRE(expected.size() == returnValue); +} + +TEST_CASE("serializeJson(JsonObjectSubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "{\"hello\":42}"); + JsonObject obj = doc.as(); + std::string result; + + serializeJson(obj["hello"], result); + + REQUIRE(result == "42"); +} + +TEST_CASE("serializeJson(JsonArraySubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "[42]"); + JsonArray arr = doc.as(); + std::string result; + + serializeJson(arr[0], result); + + REQUIRE(result == "42"); +} + +TEST_CASE("serializeJson(JsonVariantSubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "[42]"); + JsonVariant var = doc.as(); + std::string result; + + serializeJson(var[0], result); + + REQUIRE(result == "42"); +} diff --git a/test/MsgPackSerializer/CMakeLists.txt b/test/MsgPackSerializer/CMakeLists.txt index 20a8ce48..8ee09f00 100644 --- a/test/MsgPackSerializer/CMakeLists.txt +++ b/test/MsgPackSerializer/CMakeLists.txt @@ -5,6 +5,7 @@ add_executable(MsgPackSerializerTests destination_types.cpp measure.cpp + misc.cpp serializeArray.cpp serializeObject.cpp serializeVariant.cpp diff --git a/test/MsgPackSerializer/misc.cpp b/test/MsgPackSerializer/misc.cpp new file mode 100644 index 00000000..f6e20bc0 --- /dev/null +++ b/test/MsgPackSerializer/misc.cpp @@ -0,0 +1,46 @@ +#include +#include +#include + +template +void check(T value, const std::string &expected) { + DynamicJsonDocument doc; + doc.to().set(value); + char buffer[256] = ""; + size_t returnValue = serializeMsgPack(doc, buffer, sizeof(buffer)); + REQUIRE(expected == buffer); + REQUIRE(expected.size() == returnValue); +} + +TEST_CASE("serializeMsgPack(JsonObjectSubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "{\"hello\":42}"); + JsonObject obj = doc.as(); + std::string result; + + serializeMsgPack(obj["hello"], result); + + REQUIRE(result == "*"); +} + +TEST_CASE("serializeMsgPack(JsonArraySubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "[42]"); + JsonArray arr = doc.as(); + std::string result; + + serializeMsgPack(arr[0], result); + + REQUIRE(result == "*"); +} + +TEST_CASE("serializeMsgPack(JsonVariantSubscript)") { + DynamicJsonDocument doc; + deserializeJson(doc, "[42]"); + JsonVariant var = doc.as(); + std::string result; + + serializeMsgPack(var[0], result); + + REQUIRE(result == "*"); +}