mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-16 12:02:14 +02:00
Test that integers in JsonValue are copied
This commit is contained in:
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
Reference in New Issue
Block a user