Fixed assignment of JsonDocument to JsonVariant (issue #1023)

This commit is contained in:
Benoit Blanchon
2019-06-25 08:56:14 +02:00
parent a0a451195b
commit 2507ee2e56
4 changed files with 26 additions and 0 deletions

View File

@ -1,6 +1,11 @@
ArduinoJson: change log ArduinoJson: change log
======================= =======================
HEAD
----
* Fixed assignment of `JsonDocument` to `JsonVariant` (issue #1023)
v6.11.1 (2019-06-21) v6.11.1 (2019-06-21)
------- -------

View File

@ -278,6 +278,10 @@ class JsonDocument : public Visitable {
_data.remove(adaptString(key)); _data.remove(adaptString(key));
} }
FORCE_INLINE operator VariantConstRef() const {
return VariantConstRef(&_data);
}
protected: protected:
JsonDocument(MemoryPool pool) : _pool(pool) { JsonDocument(MemoryPool pool) : _pool(pool) {
_data.setNull(); _data.setNull();

View File

@ -222,6 +222,7 @@ class VariantRef : public VariantRefBase<VariantData>,
// set(ArrayConstRef) // set(ArrayConstRef)
// set(ObjectRef) // set(ObjectRef)
// set(ObjecConstRef) // set(ObjecConstRef)
// set(const JsonDocument&)
template <typename TVariant> template <typename TVariant>
typename enable_if<IsVisitable<TVariant>::value, bool>::type set( typename enable_if<IsVisitable<TVariant>::value, bool>::type set(
const TVariant &value) const; const TVariant &value) const;

View File

@ -108,3 +108,19 @@ TEST_CASE("JsonVariant with not enough memory") {
REQUIRE(v.isNull()); REQUIRE(v.isNull());
} }
} }
TEST_CASE("JsonVariant::set(DynamicJsonDocument)") {
DynamicJsonDocument doc1(1024);
doc1["hello"] = "world";
DynamicJsonDocument doc2(1024);
JsonVariant v = doc2.to<JsonVariant>();
// Should copy the doc
v.set(doc1);
doc1.clear();
std::string json;
serializeJson(doc2, json);
REQUIRE(json == "{\"hello\":\"world\"}");
}