From 166bdd69190c748c961ce8500dac9d9013b8774c Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sat, 27 Sep 2014 12:16:20 +0200 Subject: [PATCH] Test that adding values to the JsonObject increase the size of the buffer --- srcs/JsonBuffer.cpp | 15 +++++++++++++++ srcs/JsonBuffer.h | 22 ++++++++++++++++++++++ srcs/JsonObject.cpp | 4 +++- srcs/JsonObject.h | 9 ++++----- srcs/StaticJsonBuffer.h | 18 ++++++++---------- srcs/srcs.vcxproj | 2 ++ srcs/srcs.vcxproj.filters | 6 ++++++ tests/StaticJsonBufferTests.cpp | 15 ++++++++++++++- 8 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 srcs/JsonBuffer.cpp create mode 100644 srcs/JsonBuffer.h diff --git a/srcs/JsonBuffer.cpp b/srcs/JsonBuffer.cpp new file mode 100644 index 00000000..54e4eb55 --- /dev/null +++ b/srcs/JsonBuffer.cpp @@ -0,0 +1,15 @@ +#include "JsonBuffer.h" +//#include "JsonNode.h" +#include "JsonObject.h" + + +JsonObject JsonBuffer::createObject() +{ + allocateNode(); + return JsonObject(this); +} + +void JsonBuffer::createNode() +{ + allocateNode(); +} \ No newline at end of file diff --git a/srcs/JsonBuffer.h b/srcs/JsonBuffer.h new file mode 100644 index 00000000..f57b31fe --- /dev/null +++ b/srcs/JsonBuffer.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +class JsonObject; +struct JsonNode; + +class JsonBuffer +{ + friend class JsonObject; + +public: +// virtual ~JsonBuffer() = 0; + + JsonObject createObject(); + +protected: + virtual /*JsonNode&*/void allocateNode() = 0; + + /*JsonNode&*/void createNode(); +}; + diff --git a/srcs/JsonObject.cpp b/srcs/JsonObject.cpp index 230586ea..60279576 100644 --- a/srcs/JsonObject.cpp +++ b/srcs/JsonObject.cpp @@ -1,4 +1,4 @@ -//#include "JsonBuffer.h" +#include "JsonBuffer.h" #include "JsonObject.h" #include "JsonValue.h" //#include "JsonNode.h" @@ -33,6 +33,8 @@ JsonValue JsonObject::operator[](char const* key) { + _buffer->createNode(); + _buffer->createNode(); _size++; return JsonValue(); } \ No newline at end of file diff --git a/srcs/JsonObject.h b/srcs/JsonObject.h index 5ad8d7a6..02047ebd 100644 --- a/srcs/JsonObject.h +++ b/srcs/JsonObject.h @@ -24,9 +24,8 @@ class JsonObject public: - - explicit JsonObject() - : _size(0) + JsonObject(JsonBuffer* buffer) + : _size(0), _buffer(buffer) { } @@ -41,8 +40,8 @@ private: int _size; - // JsonBuffer& _buffer; - // JsonNode& _node; + JsonBuffer* _buffer; + //JsonNode* _node; // // void addNodeAt(char const* key, JsonNode& node); // JsonNode& getNodeAt(const char* key); diff --git a/srcs/StaticJsonBuffer.h b/srcs/StaticJsonBuffer.h index 3b01b035..acfaa98f 100644 --- a/srcs/StaticJsonBuffer.h +++ b/srcs/StaticJsonBuffer.h @@ -4,8 +4,10 @@ #include "JsonObject.h" template -class StaticJsonBuffer //: public JsonBuffer +class StaticJsonBuffer : public JsonBuffer { + friend JsonObject; + public: explicit StaticJsonBuffer() @@ -15,14 +17,6 @@ public: virtual ~StaticJsonBuffer() {} - JsonObject createObject() - { - if (_size < CAPACITY) - _size++; - - return JsonObject(); - } - int capacity() { return CAPACITY; @@ -34,7 +28,11 @@ public: } protected: - //virtual JsonNode& allocateNode(); + virtual /*JsonNode&*/void allocateNode() + { + if (_size < CAPACITY) + _size++; + } private: //JsonNode _buffer[CAPACITY]; diff --git a/srcs/srcs.vcxproj b/srcs/srcs.vcxproj index 335e3cc1..8994ad7b 100644 --- a/srcs/srcs.vcxproj +++ b/srcs/srcs.vcxproj @@ -65,11 +65,13 @@ + + diff --git a/srcs/srcs.vcxproj.filters b/srcs/srcs.vcxproj.filters index eac2a79c..ecf23303 100644 --- a/srcs/srcs.vcxproj.filters +++ b/srcs/srcs.vcxproj.filters @@ -24,10 +24,16 @@ Header Files + + Header Files + Source Files + + Source Files + \ No newline at end of file diff --git a/tests/StaticJsonBufferTests.cpp b/tests/StaticJsonBufferTests.cpp index 2550cc7c..157e8c87 100644 --- a/tests/StaticJsonBufferTests.cpp +++ b/tests/StaticJsonBufferTests.cpp @@ -1,5 +1,6 @@ #include #include +#include TEST(StaticJsonBuffer, CapacityMatchTemplateParameter) { @@ -35,10 +36,22 @@ TEST(StaticJsonBuffer, GivenBufferIsFull_WhenCreateObjectIsCalled_ThenSizeDoesNo EXPECT_EQ(1, json.size()); } -TEST(StaticJsonBuffer, WhenWhenCreateObjectIsCalled_ThenAnEmptyJsonObjectIsReturned) +TEST(StaticJsonBuffer, WhenCreateObjectIsCalled_ThenAnEmptyJsonObjectIsReturned) { StaticJsonBuffer<42> json; JsonObject obj = json.createObject(); EXPECT_EQ(0, obj.size()); +} + +TEST(StaticJsonBuffer, GivenAJsonObject_WhenValuesAreAdded_ThenSizeIsIncreasedByTwo) +{ + StaticJsonBuffer<42> json; + JsonObject obj = json.createObject(); + + obj["hello"]; + EXPECT_EQ(3, json.size()); + + obj["world"]; + EXPECT_EQ(5, json.size()); } \ No newline at end of file