From 3d9e40a3a87e02a1b521b47e9a5e0a67fbeabd29 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 30 Sep 2014 17:05:33 +0200 Subject: [PATCH] Test that the size is decreased when object are removed --- srcs/JsonObject.cpp | 20 ++++++++++++++++++++ srcs/JsonObject.h | 1 + tests/JsonObjectTests.cpp | 12 ++++++++++++ 3 files changed, 33 insertions(+) diff --git a/srcs/JsonObject.cpp b/srcs/JsonObject.cpp index ee323c70..e9afea66 100644 --- a/srcs/JsonObject.cpp +++ b/srcs/JsonObject.cpp @@ -30,6 +30,26 @@ JsonValue JsonObject::operator[](char const* key) return JsonValue(node); } +void JsonObject::remove(char const* key) +{ + JsonNode* firstChild = _node->content.asObject.child; + JsonNode* lastChild = 0; + + for (JsonNode* child = firstChild; child; child = child->next) + { + const char* childKey = child->content.asKey.key; + + if (!strcmp(childKey, key)) + { + if (lastChild) + lastChild->next = child->next; + else + _node->content.asObject.child = child->next; + } + lastChild = child; + } +} + bool JsonObject::operator==(JsonObject const& other) const { return _node == other._node; diff --git a/srcs/JsonObject.h b/srcs/JsonObject.h index e00a9553..ccd3b866 100644 --- a/srcs/JsonObject.h +++ b/srcs/JsonObject.h @@ -23,6 +23,7 @@ public: size_t size(); JsonValue operator[](const char* key); + void remove(const char* key); bool operator==(const JsonObject& other) const; diff --git a/tests/JsonObjectTests.cpp b/tests/JsonObjectTests.cpp index ae81bdeb..faea4921 100644 --- a/tests/JsonObjectTests.cpp +++ b/tests/JsonObjectTests.cpp @@ -32,6 +32,18 @@ TEST_F(JsonObjectTests, DoNotGrow_WhenSameValueIsAdded) EXPECT_EQ(1, object.size()); } +TEST_F(JsonObjectTests, Shrink_WhenValuesAreRemoved) +{ + object["hello"]; + object["world"]; + + object.remove("hello"); + EXPECT_EQ(1, object.size()); + + object.remove("world"); + EXPECT_EQ(0, object.size()); +} + TEST_F(JsonObjectTests, CanStoreIntegers) { object["hello"] = 123;