Просмотр исходного кода

Test that JsonArray can contain inner arrays

Benoit Blanchon 11 лет назад
Родитель
Сommit
bbe034222c
6 измененных файлов с 28 добавлено и 6 удалено
  1. 9 0
      srcs/JsonArray.cpp
  2. 1 0
      srcs/JsonArray.h
  3. 2 0
      srcs/JsonContainer.h
  4. 10 3
      srcs/JsonValue.cpp
  5. 4 1
      srcs/JsonValue.h
  6. 2 2
      tests/JsonArray_Container_Tests.cpp

+ 9 - 0
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);
 }

+ 1 - 0
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);
 };
 

+ 2 - 0
srcs/JsonContainer.h

@@ -6,10 +6,12 @@
 
 struct JsonNode;
 class JsonValue;
+class JsonArray;
 
 class JsonContainer : public Printable
 {
     friend JsonValue;
+    friend JsonArray;
 
 public:
     JsonContainer()

+ 10 - 3
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());

+ 4 - 1
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);

+ 2 - 2
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]);
-}*/
+}