From bbe034222cbc7a9e231e41130cbd48d1f84ab0d1 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sun, 5 Oct 2014 15:13:00 +0200 Subject: [PATCH] Test that JsonArray can contain inner arrays --- srcs/JsonArray.cpp | 9 +++++++++ srcs/JsonArray.h | 1 + srcs/JsonContainer.h | 2 ++ srcs/JsonValue.cpp | 13 ++++++++++--- srcs/JsonValue.h | 5 ++++- tests/JsonArray_Container_Tests.cpp | 4 ++-- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/srcs/JsonArray.cpp b/srcs/JsonArray.cpp index bc593ac9..5286ce75 100644 --- a/srcs/JsonArray.cpp +++ b/srcs/JsonArray.cpp @@ -47,4 +47,13 @@ void JsonArray::add(long value) node->content.asInteger = value; addChild(node); +} + +void JsonArray::add(JsonContainer& innerContainer) +{ + JsonNode* node = createNode(JSON_PROXY); + if (!node) return; + + node->content.asProxy.target = innerContainer._node; + addChild(node); } \ No newline at end of file diff --git a/srcs/JsonArray.h b/srcs/JsonArray.h index 78193ee9..7d694a06 100644 --- a/srcs/JsonArray.h +++ b/srcs/JsonArray.h @@ -21,5 +21,6 @@ public: void add(double value, int decimals=2); void add(int value) { add((long) value); } void add(long value); + void add(JsonContainer& innerContainer); }; diff --git a/srcs/JsonContainer.h b/srcs/JsonContainer.h index 2f6a586e..5b4ac9d7 100644 --- a/srcs/JsonContainer.h +++ b/srcs/JsonContainer.h @@ -6,10 +6,12 @@ struct JsonNode; class JsonValue; +class JsonArray; class JsonContainer : public Printable { friend JsonValue; + friend JsonArray; public: JsonContainer() diff --git a/srcs/JsonValue.cpp b/srcs/JsonValue.cpp index 9da885bb..9aa39080 100644 --- a/srcs/JsonValue.cpp +++ b/srcs/JsonValue.cpp @@ -1,6 +1,7 @@ -#include "JsonObject.h" - #include "JsonValue.h" + +#include "JsonArray.h" +#include "JsonObject.h" #include "Internals/JsonNode.h" void JsonValue::operator=(bool value) @@ -40,7 +41,7 @@ void JsonValue::operator=(int value) _node->content.asInteger = value; } -void JsonValue::operator=(const JsonObject& object) +void JsonValue::operator=(const JsonContainer& object) { setAsProxyTo(object._node); } @@ -72,6 +73,7 @@ void JsonValue::operator=(JsonValue const& value) case JSON_ARRAY: case JSON_PROXY: setAsProxyTo(value._node); + break; default: *_node = *value._node; @@ -115,6 +117,11 @@ JsonValue::operator int() const return node->content.asInteger; } +JsonValue::operator JsonArray() const +{ + return JsonArray(getActualNode()); +} + JsonValue::operator JsonObject() const { return JsonObject(getActualNode()); diff --git a/srcs/JsonValue.h b/srcs/JsonValue.h index d34a9384..400574b5 100644 --- a/srcs/JsonValue.h +++ b/srcs/JsonValue.h @@ -1,5 +1,7 @@ #pragma once +class JsonArray; +class JsonContainer; class JsonObject; struct JsonNode; @@ -21,13 +23,14 @@ public: void operator=(const char*); void operator=(double); void operator=(int); - void operator=(const JsonObject&); + void operator=(const JsonContainer&); void operator=(const JsonValue&); operator bool() const; operator const char*() const; operator double() const; operator int() const; + operator JsonArray() const; operator JsonObject() const; void set(double value, int decimals); diff --git a/tests/JsonArray_Container_Tests.cpp b/tests/JsonArray_Container_Tests.cpp index 8e68f317..5fc8245a 100644 --- a/tests/JsonArray_Container_Tests.cpp +++ b/tests/JsonArray_Container_Tests.cpp @@ -63,7 +63,7 @@ TEST_F(JsonArray_Container_Tests, CanStoreStrings) EXPECT_STREQ("h3110", (const char*) array[0]); EXPECT_STREQ("w0r1d", (const char*) array[1]); } -/* + TEST_F(JsonArray_Container_Tests, CanStoreInnerArrays) { JsonArray innerarray1 = json.createArray(); @@ -74,4 +74,4 @@ TEST_F(JsonArray_Container_Tests, CanStoreInnerArrays) EXPECT_EQ(innerarray1, (JsonArray) array[0]); EXPECT_EQ(innerarray2, (JsonArray) array[1]); -}*/ \ No newline at end of file +} \ No newline at end of file