Increase coverage

This commit is contained in:
Benoit Blanchon
2023-04-21 16:23:03 +02:00
parent f5e7570f84
commit 5d796781fb
5 changed files with 27 additions and 24 deletions

View File

@ -44,6 +44,7 @@ TEST_CASE("Unbound JsonVariant") {
CHECK_FALSE(variant.set(42L));
CHECK_FALSE(variant.set(42U));
CHECK_FALSE(variant.set(serialized("42")));
CHECK_FALSE(variant.set(serialized(std::string("42"))));
CHECK_FALSE(variant.set(true));
}
@ -63,4 +64,13 @@ TEST_CASE("Unbound JsonVariant") {
CHECK_FALSE(variant["key"].set(1));
CHECK_FALSE(variant[std::string("key")].set(1));
}
SECTION("containsKey()") {
CHECK_FALSE(variant.containsKey("hello"));
}
SECTION("remove()") {
variant.remove(0);
variant.remove("hello");
}
}

View File

@ -24,8 +24,6 @@ inline VariantData* collectionAddMember(CollectionData* obj, TAdaptedString key,
MemoryPool* pool) {
ARDUINOJSON_ASSERT(!key.isNull());
ARDUINOJSON_ASSERT(obj != nullptr);
if (!obj)
return nullptr;
auto slot = pool->allocVariant();
if (!slot)
return nullptr;
@ -67,6 +65,14 @@ inline bool collectionCopy(CollectionData* dst, const CollectionData* src,
return true;
}
template <typename TAdaptedString>
inline VariantData* collectionGetMember(const CollectionData* obj,
TAdaptedString key) {
if (!obj)
return nullptr;
return slotData(obj->get(key));
}
inline void collectionRemove(CollectionData* data, VariantSlot* slot,
MemoryPool* pool) {
if (!data || !slot)

View File

@ -59,8 +59,7 @@ inline VariantSlot* CollectionData::getPrevious(VariantSlot* target) const {
}
inline void CollectionData::remove(VariantSlot* slot) {
if (!slot)
return;
ARDUINOJSON_ASSERT(slot != nullptr);
VariantSlot* prev = getPrevious(slot);
VariantSlot* next = slot->next();
if (prev)

View File

@ -150,7 +150,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
FORCE_INLINE
typename detail::enable_if<detail::IsString<TString>::value, bool>::type
containsKey(const TString& key) const {
return getMember(detail::adaptString(key)) != 0;
return collectionGetMember(_data, detail::adaptString(key)) != 0;
}
// Returns true if the object contains the specified key.
@ -159,7 +159,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
FORCE_INLINE
typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
containsKey(TChar* key) const {
return getMember(detail::adaptString(key)) != 0;
return collectionGetMember(_data, detail::adaptString(key)) != 0;
}
// Creates an array and adds it to the object.
@ -199,13 +199,6 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
return detail::collectionToVariant(_data);
}
template <typename TAdaptedString>
inline detail::VariantData* getMember(TAdaptedString key) const {
if (!_data)
return 0;
return slotData(_data->get(key));
}
template <typename TAdaptedString>
void removeMember(TAdaptedString key) const {
collectionRemove(_data, _data->get(key), _pool);

View File

@ -76,14 +76,14 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
// https://arduinojson.org/v6/api/jsonobjectconst/containskey/
template <typename TString>
FORCE_INLINE bool containsKey(const TString& key) const {
return getMember(detail::adaptString(key)) != 0;
return collectionGetMember(_data, detail::adaptString(key)) != 0;
}
// Returns true if the object contains the specified key.
// https://arduinojson.org/v6/api/jsonobjectconst/containskey/
template <typename TChar>
FORCE_INLINE bool containsKey(TChar* key) const {
return getMember(detail::adaptString(key)) != 0;
return collectionGetMember(_data, detail::adaptString(key)) != 0;
}
// Gets the member with specified key.
@ -92,7 +92,8 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
JsonVariantConst>::type
operator[](const TString& key) const {
return JsonVariantConst(getMember(detail::adaptString(key)));
return JsonVariantConst(
collectionGetMember(_data, detail::adaptString(key)));
}
// Gets the member with specified key.
@ -101,7 +102,8 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
JsonVariantConst>::type
operator[](TChar* key) const {
return JsonVariantConst(getMember(detail::adaptString(key)));
return JsonVariantConst(
collectionGetMember(_data, detail::adaptString(key)));
}
// Compares objects.
@ -126,13 +128,6 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
return collectionToVariant(_data);
}
template <typename TAdaptedString>
const detail::VariantData* getMember(TAdaptedString key) const {
if (!_data)
return 0;
return slotData(_data->get(key));
}
const detail::CollectionData* _data;
};