From 5d796781fb3e7df532ac385ea0ff607905b98eea Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 21 Apr 2023 16:23:03 +0200 Subject: [PATCH] Increase coverage --- extras/tests/JsonVariant/unbound.cpp | 10 ++++++++++ .../Collection/CollectionFunctions.hpp | 10 ++++++++-- src/ArduinoJson/Collection/CollectionImpl.hpp | 3 +-- src/ArduinoJson/Object/JsonObject.hpp | 11 ++--------- src/ArduinoJson/Object/JsonObjectConst.hpp | 17 ++++++----------- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/extras/tests/JsonVariant/unbound.cpp b/extras/tests/JsonVariant/unbound.cpp index 90203236..176bd646 100644 --- a/extras/tests/JsonVariant/unbound.cpp +++ b/extras/tests/JsonVariant/unbound.cpp @@ -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"); + } } diff --git a/src/ArduinoJson/Collection/CollectionFunctions.hpp b/src/ArduinoJson/Collection/CollectionFunctions.hpp index f9416276..557ada05 100644 --- a/src/ArduinoJson/Collection/CollectionFunctions.hpp +++ b/src/ArduinoJson/Collection/CollectionFunctions.hpp @@ -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 +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) diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index 8647bdb4..9470cd59 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -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) diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index ba6aef22..0c9cd9e2 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -150,7 +150,7 @@ class JsonObject : public detail::VariantOperators { FORCE_INLINE typename detail::enable_if::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 { FORCE_INLINE typename detail::enable_if::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 { return detail::collectionToVariant(_data); } - template - inline detail::VariantData* getMember(TAdaptedString key) const { - if (!_data) - return 0; - return slotData(_data->get(key)); - } - template void removeMember(TAdaptedString key) const { collectionRemove(_data, _data->get(key), _pool); diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index bb8aca02..a72cad30 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -76,14 +76,14 @@ class JsonObjectConst : public detail::VariantOperators { // https://arduinojson.org/v6/api/jsonobjectconst/containskey/ template 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 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 { FORCE_INLINE typename detail::enable_if::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 { FORCE_INLINE typename detail::enable_if::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 { return collectionToVariant(_data); } - template - const detail::VariantData* getMember(TAdaptedString key) const { - if (!_data) - return 0; - return slotData(_data->get(key)); - } - const detail::CollectionData* _data; };