Test null

This commit is contained in:
Benoit Blanchon
2022-03-14 19:40:05 +01:00
parent 022eed7977
commit b02d979ceb
3 changed files with 34 additions and 5 deletions

View File

@@ -50,4 +50,28 @@ TEST_CASE("JsonVariant::link()") {
CHECK(variant.as<std::string>() == "{\"hello\":\"WORLD!\"}"); CHECK(variant.as<std::string>() == "{\"hello\":\"WORLD!\"}");
} }
SECTION("target is unbound") {
JsonVariant unbound;
variant["hello"] = "world";
variant.link(unbound);
CHECK(variant.isUnbound() == false);
CHECK(variant.isNull() == true);
CHECK(variant.memoryUsage() == 0);
CHECK(variant.size() == 0);
}
SECTION("variant is unbound") {
JsonVariant unbound;
doc2["hello"] = "world";
unbound.link(doc2);
CHECK(unbound.isUnbound() == true);
CHECK(unbound.isNull() == true);
CHECK(unbound.memoryUsage() == 0);
CHECK(unbound.size() == 0);
}
} }

View File

@@ -244,9 +244,10 @@ class VariantData {
setType(VALUE_IS_NULL); setType(VALUE_IS_NULL);
} }
void setPointer(const VariantData *value) { void setPointer(const VariantData *p) {
ARDUINOJSON_ASSERT(p);
setType(VALUE_IS_POINTER); setType(VALUE_IS_POINTER);
_content.asPointer = value; _content.asPointer = p;
} }
void setString(String s) { void setString(String s) {

View File

@@ -189,9 +189,13 @@ bool CopyStringStoragePolicy::store(TAdaptedString str, MemoryPool *pool,
return copy != 0; return copy != 0;
} }
inline void VariantRef::link(VariantConstRef var) { inline void VariantRef::link(VariantConstRef target) {
if (_data) if (!_data)
_data->setPointer(var._data); return;
if (target._data)
_data->setPointer(target._data);
else
_data->setNull();
} }
} // namespace ARDUINOJSON_NAMESPACE } // namespace ARDUINOJSON_NAMESPACE