Test that integers in JsonValue are copied

This commit is contained in:
Benoit Blanchon
2014-09-28 21:18:43 +02:00
parent e190b20ae1
commit 42ce5ab31f
3 changed files with 66 additions and 18 deletions

View File

@ -36,13 +36,36 @@ void JsonValue::operator=(int value)
void JsonValue::operator=(const JsonObject& object) void JsonValue::operator=(const JsonObject& object)
{ {
if (_node) setAsProxyTo(object._node);
}
void JsonValue::operator=(JsonValue const& value)
{
if (!_node)
{ {
_node->type = JSON_PROXY; _node = value._node;
_node->content.asProxy.target = object._node; return;
} }
_node = object._node; JsonNodeType nodeType = value._node ? value._node->type : JSON_UNDEFINED;
switch (nodeType)
{
case JSON_UNDEFINED:
_node->type = JSON_UNDEFINED;
break;
case JSON_INTEGER:
_node->type = JSON_INTEGER;
_node->content.asInteger = value._node->content.asInteger;
break;
case JSON_OBJECT:
case JSON_ARRAY:
case JSON_PROXY:
setAsProxyTo(value._node);
}
} }
JsonValue::operator bool() const JsonValue::operator bool() const
@ -86,6 +109,17 @@ JsonValue::operator JsonObject() const
return JsonObject(getActualNode()); return JsonObject(getActualNode());
} }
void JsonValue::setAsProxyTo(JsonNode* target)
{
if (_node)
{
_node->type = JSON_PROXY;
_node->content.asProxy.target = target;
}
_node = target;
}
JsonNode* JsonValue::getActualNode() const JsonNode* JsonValue::getActualNode() const
{ {
JsonNode* target = _node; JsonNode* target = _node;

View File

@ -21,6 +21,7 @@ public:
void operator=(double); void operator=(double);
void operator=(int); void operator=(int);
void operator=(const JsonObject&); void operator=(const JsonObject&);
void operator=(const JsonValue&);
operator bool() const; operator bool() const;
operator const char*() const; operator const char*() const;
@ -31,6 +32,7 @@ public:
private: private:
JsonNode* _node; JsonNode* _node;
void setAsProxyTo(JsonNode*);
JsonNode* getActualNode() const; JsonNode* getActualNode() const;
}; };

View File

@ -7,52 +7,64 @@ class JsonValueTests : public ::testing::Test
protected: protected:
virtual void SetUp() virtual void SetUp()
{ {
jsonValue = json.createValue(); jsonValue1 = json.createValue();
jsonValue2 = json.createValue();
} }
StaticJsonBuffer<42> json; StaticJsonBuffer<42> json;
JsonValue jsonValue; JsonValue jsonValue1;
JsonValue jsonValue2;
}; };
TEST_F(JsonValueTests, CanStoreInteger) TEST_F(JsonValueTests, CanStoreInteger)
{ {
jsonValue = 123; jsonValue1 = 123;
EXPECT_EQ(123, (int) jsonValue); EXPECT_EQ(123, (int) jsonValue1);
} }
TEST_F(JsonValueTests, CanStoreDouble) TEST_F(JsonValueTests, CanStoreDouble)
{ {
jsonValue = 123.45; jsonValue1 = 123.45;
EXPECT_EQ(123.45, (double) jsonValue); EXPECT_EQ(123.45, (double) jsonValue1);
} }
TEST_F(JsonValueTests, CanStoreTrue) TEST_F(JsonValueTests, CanStoreTrue)
{ {
jsonValue = true; jsonValue1 = true;
EXPECT_TRUE((bool) jsonValue); EXPECT_TRUE((bool) jsonValue1);
} }
TEST_F(JsonValueTests, CanStoreFalse) TEST_F(JsonValueTests, CanStoreFalse)
{ {
jsonValue = false; jsonValue1 = false;
EXPECT_FALSE((bool) jsonValue); EXPECT_FALSE((bool) jsonValue1);
} }
TEST_F(JsonValueTests, CanStoreString) TEST_F(JsonValueTests, CanStoreString)
{ {
jsonValue = "hello"; jsonValue1 = "hello";
EXPECT_STREQ("hello", (const char*) jsonValue); EXPECT_STREQ("hello", (const char*) jsonValue1);
} }
TEST_F(JsonValueTests, CanStoreObject) TEST_F(JsonValueTests, CanStoreObject)
{ {
JsonObject innerObject1 = json.createObject(); JsonObject innerObject1 = json.createObject();
jsonValue = innerObject1; jsonValue1 = innerObject1;
EXPECT_EQ(innerObject1, (JsonObject) jsonValue); EXPECT_EQ(innerObject1, (JsonObject) jsonValue1);
}
TEST_F(JsonValueTests, CanCopyInteger)
{
jsonValue1 = 123;
jsonValue2 = jsonValue1;
jsonValue1 = 456;
EXPECT_EQ(456, (int) jsonValue1);
EXPECT_EQ(123, (int) jsonValue2);
} }