From 81285f49fec49f2f0ce14b7e485d8241cf9329af Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 27 Apr 2015 15:57:40 +0200 Subject: [PATCH] Fixed issue #68 --- src/JsonVariant.cpp | 4 +- test/JsonVariant_Undefined_Tests.cpp | 6 +- ...=> StaticJsonBuffer_CreateArray_Tests.cpp} | 8 +- ...> StaticJsonBuffer_CreateObject_Tests.cpp} | 8 +- test/StaticJsonBuffer_ParseArray_Tests.cpp | 72 ++++++++++++++++++ test/StaticJsonBuffer_ParseObject_Tests.cpp | 73 +++++++++++++++++++ 6 files changed, 159 insertions(+), 12 deletions(-) rename test/{StaticJsonBuffer_Array_Tests.cpp => StaticJsonBuffer_CreateArray_Tests.cpp} (77%) rename test/{StaticJsonBuffer_Object_Tests.cpp => StaticJsonBuffer_CreateObject_Tests.cpp} (78%) create mode 100644 test/StaticJsonBuffer_ParseArray_Tests.cpp create mode 100644 test/StaticJsonBuffer_ParseObject_Tests.cpp diff --git a/src/JsonVariant.cpp b/src/JsonVariant.cpp index 3930a551..0989a82d 100644 --- a/src/JsonVariant.cpp +++ b/src/JsonVariant.cpp @@ -64,13 +64,13 @@ void JsonVariant::set(long value) { void JsonVariant::set(JsonArray &array) { if (_type == JSON_INVALID) return; - _type = JSON_ARRAY; + _type = array.success() ? JSON_ARRAY : JSON_INVALID; _content.asArray = &array; } void JsonVariant::set(JsonObject &object) { if (_type == JSON_INVALID) return; - _type = JSON_OBJECT; + _type = object.success() ? JSON_OBJECT : JSON_INVALID; _content.asObject = &object; } diff --git a/test/JsonVariant_Undefined_Tests.cpp b/test/JsonVariant_Undefined_Tests.cpp index 25b203ad..8b687cf5 100644 --- a/test/JsonVariant_Undefined_Tests.cpp +++ b/test/JsonVariant_Undefined_Tests.cpp @@ -62,11 +62,13 @@ TEST_F(JsonVariant_Undefined_Tests, CanBeSetToBool) { } TEST_F(JsonVariant_Undefined_Tests, CanBeSetToArray) { - variant = JsonArray::invalid(); + DynamicJsonBuffer jsonBuffer; + variant = jsonBuffer.createArray(); EXPECT_TRUE(variant.success()); } TEST_F(JsonVariant_Undefined_Tests, CanBeSetToObject) { - variant = JsonObject::invalid(); + DynamicJsonBuffer jsonBuffer; + variant = jsonBuffer.createObject(); EXPECT_TRUE(variant.success()); } diff --git a/test/StaticJsonBuffer_Array_Tests.cpp b/test/StaticJsonBuffer_CreateArray_Tests.cpp similarity index 77% rename from test/StaticJsonBuffer_Array_Tests.cpp rename to test/StaticJsonBuffer_CreateArray_Tests.cpp index 9d38a33f..dffe62ac 100644 --- a/test/StaticJsonBuffer_Array_Tests.cpp +++ b/test/StaticJsonBuffer_CreateArray_Tests.cpp @@ -7,7 +7,7 @@ #include #include -TEST(StaticJsonBuffer_Array_Tests, GrowsWithArray) { +TEST(StaticJsonBuffer_CreateArray_Tests, GrowsWithArray) { StaticJsonBuffer json; JsonArray &array = json.createArray(); @@ -20,21 +20,21 @@ TEST(StaticJsonBuffer_Array_Tests, GrowsWithArray) { ASSERT_EQ(JSON_ARRAY_SIZE(2), json.size()); } -TEST(StaticJsonBuffer_Array_Tests, SucceedWhenBigEnough) { +TEST(StaticJsonBuffer_CreateArray_Tests, SucceedWhenBigEnough) { StaticJsonBuffer json; JsonArray &array = json.createArray(); ASSERT_TRUE(array.success()); } -TEST(StaticJsonBuffer_Array_Tests, FailsWhenTooSmall) { +TEST(StaticJsonBuffer_CreateArray_Tests, FailsWhenTooSmall) { StaticJsonBuffer json; JsonArray &array = json.createArray(); ASSERT_FALSE(array.success()); } -TEST(StaticJsonBuffer_Array_Tests, ArrayDoesntGrowWhenFull) { +TEST(StaticJsonBuffer_CreateArray_Tests, ArrayDoesntGrowWhenFull) { StaticJsonBuffer json; JsonArray &array = json.createArray(); diff --git a/test/StaticJsonBuffer_Object_Tests.cpp b/test/StaticJsonBuffer_CreateObject_Tests.cpp similarity index 78% rename from test/StaticJsonBuffer_Object_Tests.cpp rename to test/StaticJsonBuffer_CreateObject_Tests.cpp index 91e528cd..decb73f1 100644 --- a/test/StaticJsonBuffer_Object_Tests.cpp +++ b/test/StaticJsonBuffer_CreateObject_Tests.cpp @@ -7,7 +7,7 @@ #include #include -TEST(StaticJsonBuffer_Object_Tests, GrowsWithObject) { +TEST(StaticJsonBuffer_CreateObject_Tests, GrowsWithObject) { StaticJsonBuffer json; JsonObject &obj = json.createObject(); @@ -23,21 +23,21 @@ TEST(StaticJsonBuffer_Object_Tests, GrowsWithObject) { ASSERT_EQ(JSON_OBJECT_SIZE(2), json.size()); } -TEST(StaticJsonBuffer_Object_Tests, SucceedWhenBigEnough) { +TEST(StaticJsonBuffer_CreateObject_Tests, SucceedWhenBigEnough) { StaticJsonBuffer json; JsonObject &object = json.createObject(); ASSERT_TRUE(object.success()); } -TEST(StaticJsonBuffer_Object_Tests, FailsWhenTooSmall) { +TEST(StaticJsonBuffer_CreateObject_Tests, FailsWhenTooSmall) { StaticJsonBuffer json; JsonObject &object = json.createObject(); ASSERT_FALSE(object.success()); } -TEST(StaticJsonBuffer_Object_Tests, ObjectDoesntGrowWhenFull) { +TEST(StaticJsonBuffer_CreateObject_Tests, ObjectDoesntGrowWhenFull) { StaticJsonBuffer json; JsonObject &obj = json.createObject(); diff --git a/test/StaticJsonBuffer_ParseArray_Tests.cpp b/test/StaticJsonBuffer_ParseArray_Tests.cpp new file mode 100644 index 00000000..ee170471 --- /dev/null +++ b/test/StaticJsonBuffer_ParseArray_Tests.cpp @@ -0,0 +1,72 @@ +// Copyright Benoit Blanchon 2014-2015 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson + +#include +#include + +class StaticJsonBuffer_ParseArray_Tests : public testing::Test { + protected: + void with(JsonBuffer& jsonBuffer) { _jsonBuffer = &jsonBuffer; } + + void whenInputIs(const char* json) { strcpy(_jsonString, json); } + + void parseMustSucceed() { + EXPECT_TRUE(_jsonBuffer->parseArray(_jsonString).success()); + } + + void parseMustFail() { + EXPECT_FALSE(_jsonBuffer->parseArray(_jsonString).success()); + } + + private: + JsonBuffer* _jsonBuffer; + char _jsonString[256]; +}; + +TEST_F(StaticJsonBuffer_ParseArray_Tests, TooSmallBufferForEmptyArray) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("[]"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseArray_Tests, BufferOfTheRightSizeForEmptyArray) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("[]"); + parseMustSucceed(); +} + +TEST_F(StaticJsonBuffer_ParseArray_Tests, TooSmallBufferForArrayWithOneValue) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("[1]"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseArray_Tests, + BufferOfTheRightSizeForArrayWithOneValue) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("[1]"); + parseMustSucceed(); +} + +TEST_F(StaticJsonBuffer_ParseArray_Tests, + TooSmallBufferForArrayWithNestedObject) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("[{}]"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseArray_Tests, + BufferOfTheRightSizeForArrayWithNestedObject) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("[{}]"); + parseMustSucceed(); +} \ No newline at end of file diff --git a/test/StaticJsonBuffer_ParseObject_Tests.cpp b/test/StaticJsonBuffer_ParseObject_Tests.cpp new file mode 100644 index 00000000..342cdb2b --- /dev/null +++ b/test/StaticJsonBuffer_ParseObject_Tests.cpp @@ -0,0 +1,73 @@ +// Copyright Benoit Blanchon 2014-2015 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson + +#include +#include + +class StaticJsonBuffer_ParseObject_Tests : public testing::Test { + protected: + void with(JsonBuffer& jsonBuffer) { _jsonBuffer = &jsonBuffer; } + + void whenInputIs(const char* json) { strcpy(_jsonString, json); } + + void parseMustSucceed() { + EXPECT_TRUE(_jsonBuffer->parseObject(_jsonString).success()); + } + + void parseMustFail() { + EXPECT_FALSE(_jsonBuffer->parseObject(_jsonString).success()); + } + + private: + JsonBuffer* _jsonBuffer; + char _jsonString[256]; +}; + +TEST_F(StaticJsonBuffer_ParseObject_Tests, TooSmallBufferForEmptyObject) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("{}"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseObject_Tests, BufferOfTheRightSizeForEmptyObject) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("{}"); + parseMustSucceed(); +} + +TEST_F(StaticJsonBuffer_ParseObject_Tests, + TooSmallBufferForObjectWithOneValue) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("{\"a\":1}"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseObject_Tests, + BufferOfTheRightSizeForObjectWithOneValue) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("{\"a\":1}"); + parseMustSucceed(); +} + +TEST_F(StaticJsonBuffer_ParseObject_Tests, + TooSmallBufferForObjectWithNestedObject) { + StaticJsonBuffer bufferTooSmall; + with(bufferTooSmall); + whenInputIs("{\"a\":[]}"); + parseMustFail(); +} + +TEST_F(StaticJsonBuffer_ParseObject_Tests, + BufferOfTheRightSizeForObjectWithNestedObject) { + StaticJsonBuffer bufferOfRightSize; + with(bufferOfRightSize); + whenInputIs("{\"a\":[]}"); + parseMustSucceed(); +} \ No newline at end of file