Return JsonArray and JsonObject by value (closes #309)

This commit is contained in:
Benoit Blanchon
2018-07-02 09:35:21 +02:00
parent 4fe2b1100e
commit b105e6f7c4
93 changed files with 983 additions and 1091 deletions

View File

@ -7,7 +7,7 @@
TEST_CASE("JsonArray::add()") {
DynamicJsonDocument doc;
JsonArray& _array = doc.to<JsonArray>();
JsonArray _array = doc.to<JsonArray>();
SECTION("int") {
_array.add(123);
@ -40,30 +40,30 @@ TEST_CASE("JsonArray::add()") {
SECTION("nested array") {
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
_array.add(arr);
REQUIRE(&arr == &_array[0].as<JsonArray&>());
REQUIRE(_array[0].is<JsonArray&>());
REQUIRE(arr == _array[0].as<JsonArray>());
REQUIRE(_array[0].is<JsonArray>());
REQUIRE_FALSE(_array[0].is<int>());
}
SECTION("nested object") {
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
_array.add(obj);
REQUIRE(&obj == &_array[0].as<JsonObject&>());
REQUIRE(_array[0].is<JsonObject&>());
REQUIRE(obj == _array[0].as<JsonObject>());
REQUIRE(_array[0].is<JsonObject>());
REQUIRE_FALSE(_array[0].is<int>());
}
SECTION("array subscript") {
const char* str = "hello";
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
arr.add(str);
_array.add(arr[0]);
@ -74,7 +74,7 @@ TEST_CASE("JsonArray::add()") {
SECTION("object subscript") {
const char* str = "hello";
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
obj["x"] = str;
_array.add(obj["x"]);

View File

@ -7,10 +7,10 @@
TEST_CASE("JsonArray basics") {
DynamicJsonDocument doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
SECTION("SuccessIsTrue") {
REQUIRE(array.success());
SECTION("isNull()") {
REQUIRE(array.isNull() == false);
}
SECTION("InitialSizeIsZero") {
@ -18,12 +18,12 @@ TEST_CASE("JsonArray basics") {
}
SECTION("CreateNestedArray") {
JsonArray& arr = array.createNestedArray();
REQUIRE(&arr == &array[0].as<JsonArray&>());
JsonArray arr = array.createNestedArray();
REQUIRE(arr == array[0].as<JsonArray>());
}
SECTION("CreateNestedObject") {
JsonObject& obj = array.createNestedObject();
REQUIRE(&obj == &array[0].as<JsonObject&>());
JsonObject obj = array.createNestedObject();
REQUIRE(obj == array[0].as<JsonObject>());
}
}

View File

@ -8,7 +8,7 @@
TEST_CASE("JsonArray::copyFrom()") {
SECTION("OneDimension") {
DynamicJsonDocument doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
char json[32];
int source[] = {1, 2, 3};
@ -22,7 +22,7 @@ TEST_CASE("JsonArray::copyFrom()") {
SECTION("OneDimension_JsonBufferTooSmall") {
const size_t SIZE = JSON_ARRAY_SIZE(2);
StaticJsonDocument<SIZE> doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
char json[32];
int source[] = {1, 2, 3};
@ -35,7 +35,7 @@ TEST_CASE("JsonArray::copyFrom()") {
SECTION("TwoDimensions") {
DynamicJsonDocument doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
char json[32];
int source[][3] = {{1, 2, 3}, {4, 5, 6}};
@ -50,7 +50,7 @@ TEST_CASE("JsonArray::copyFrom()") {
const size_t SIZE =
JSON_ARRAY_SIZE(2) + JSON_ARRAY_SIZE(3) + JSON_ARRAY_SIZE(2);
StaticJsonDocument<SIZE> doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
char json[32];
int source[][3] = {{1, 2, 3}, {4, 5, 6}};

View File

@ -12,7 +12,7 @@ TEST_CASE("JsonArray::copyTo()") {
char json[] = "[1,2,3]";
DeserializationError err = deserializeJson(doc, json);
REQUIRE(err == DeserializationError::Ok);
JsonArray& array = doc.as<JsonArray>();
JsonArray array = doc.as<JsonArray>();
int destination[4] = {0};
size_t result = array.copyTo(destination);
@ -28,7 +28,7 @@ TEST_CASE("JsonArray::copyTo()") {
char json[] = "[1,2,3]";
DeserializationError err = deserializeJson(doc, json);
REQUIRE(err == DeserializationError::Ok);
JsonArray& array = doc.as<JsonArray>();
JsonArray array = doc.as<JsonArray>();
int destination[2] = {0};
size_t result = array.copyTo(destination);
@ -43,7 +43,7 @@ TEST_CASE("JsonArray::copyTo()") {
DeserializationError err = deserializeJson(doc, json);
REQUIRE(err == DeserializationError::Ok);
JsonArray& array = doc.as<JsonArray>();
JsonArray array = doc.as<JsonArray>();
int destination[3][2] = {{0}};
array.copyTo(destination);

View File

@ -7,28 +7,29 @@
using namespace Catch::Matchers;
TEST_CASE("JsonArray::invalid()") {
TEST_CASE("Undefined JsonArray") {
JsonArray array;
SECTION("SubscriptFails") {
REQUIRE_FALSE(JsonArray::invalid()[0].success());
REQUIRE(array[0].isNull());
}
SECTION("AddFails") {
JsonArray& array = JsonArray::invalid();
array.add(1);
REQUIRE(0 == array.size());
}
SECTION("CreateNestedArrayFails") {
REQUIRE_FALSE(JsonArray::invalid().createNestedArray().success());
REQUIRE(array.createNestedArray().isNull());
}
SECTION("CreateNestedObjectFails") {
REQUIRE_FALSE(JsonArray::invalid().createNestedObject().success());
REQUIRE(array.createNestedObject().isNull());
}
SECTION("PrintToWritesBrackets") {
char buffer[32];
serializeJson(JsonArray::invalid(), buffer, sizeof(buffer));
REQUIRE_THAT(buffer, Equals("[]"));
serializeJson(array, buffer, sizeof(buffer));
REQUIRE_THAT(buffer, Equals("null"));
}
}

View File

@ -8,7 +8,7 @@
template <typename TIterator>
static void run_iterator_test() {
StaticJsonDocument<JSON_ARRAY_SIZE(2)> doc;
JsonArray& array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
array.add(12);
array.add(34);

View File

@ -7,7 +7,7 @@
TEST_CASE("JsonArray::remove()") {
DynamicJsonDocument doc;
JsonArray& _array = doc.to<JsonArray>();
JsonArray _array = doc.to<JsonArray>();
_array.add(1);
_array.add(2);
_array.add(3);

View File

@ -9,7 +9,7 @@ using namespace Catch::Matchers;
TEST_CASE("JsonArray::set()") {
DynamicJsonDocument doc;
JsonArray& _array = doc.to<JsonArray>();
JsonArray _array = doc.to<JsonArray>();
_array.add(0);
SECTION("int") {
@ -42,29 +42,29 @@ TEST_CASE("JsonArray::set()") {
SECTION("nested array") {
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
_array.set(0, arr);
REQUIRE(&arr == &_array[0].as<JsonArray&>());
REQUIRE(_array[0].is<JsonArray&>());
REQUIRE(arr == _array[0].as<JsonArray>());
REQUIRE(_array[0].is<JsonArray>());
REQUIRE_FALSE(_array[0].is<int>());
}
SECTION("nested object") {
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
_array.set(0, obj);
REQUIRE(&obj == &_array[0].as<JsonObject&>());
REQUIRE(_array[0].is<JsonObject&>());
REQUIRE(obj == _array[0].as<JsonObject>());
REQUIRE(_array[0].is<JsonObject>());
REQUIRE_FALSE(_array[0].is<int>());
}
SECTION("array subscript") {
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
arr.add("hello");
_array.set(0, arr[0]);
@ -74,7 +74,7 @@ TEST_CASE("JsonArray::set()") {
SECTION("object subscript") {
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
obj["x"] = "hello";
_array.set(0, obj["x"]);

View File

@ -7,7 +7,7 @@
TEST_CASE("JsonArray::size()") {
DynamicJsonDocument doc;
JsonArray& _array = doc.to<JsonArray>();
JsonArray _array = doc.to<JsonArray>();
SECTION("increases after add()") {
_array.add("hello");

View File

@ -12,7 +12,7 @@ static void eraseString(std::string &str) {
TEST_CASE("std::string") {
DynamicJsonDocument doc;
JsonArray &array = doc.to<JsonArray>();
JsonArray array = doc.to<JsonArray>();
SECTION("add()") {
std::string value("hello");

View File

@ -8,7 +8,7 @@
TEST_CASE("JsonArray::operator[]") {
DynamicJsonDocument doc;
JsonArray& _array = doc.to<JsonArray>();
JsonArray _array = doc.to<JsonArray>();
_array.add(0);
SECTION("int") {
@ -53,35 +53,33 @@ TEST_CASE("JsonArray::operator[]") {
SECTION("nested array") {
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
_array[0] = arr;
REQUIRE(&arr == &_array[0].as<JsonArray&>());
REQUIRE(&arr == &_array[0].as<JsonArray>()); // <- short hand
REQUIRE(&arr == &_array[0].as<const JsonArray&>());
REQUIRE(&arr == &_array[0].as<const JsonArray>()); // <- short hand
REQUIRE(true == _array[0].is<JsonArray&>());
REQUIRE(arr == _array[0].as<JsonArray>());
REQUIRE(arr == _array[0].as<JsonArray>()); // <- short hand
// REQUIRE(arr == _array[0].as<const JsonArray>());
// REQUIRE(arr == _array[0].as<const JsonArray>()); // <- short hand
REQUIRE(true == _array[0].is<JsonArray>());
REQUIRE(false == _array[0].is<int>());
}
SECTION("nested object") {
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
_array[0] = obj;
REQUIRE(&obj == &_array[0].as<JsonObject&>());
REQUIRE(&obj == &_array[0].as<JsonObject>()); // <- short hand
REQUIRE(&obj == &_array[0].as<const JsonObject&>());
REQUIRE(&obj == &_array[0].as<const JsonObject>()); // <- short hand
REQUIRE(true == _array[0].is<JsonObject&>());
REQUIRE(obj == _array[0].as<JsonObject>());
REQUIRE(obj == _array[0].as<const JsonObject>()); // <- short hand
REQUIRE(true == _array[0].is<JsonObject>());
REQUIRE(false == _array[0].is<int>());
}
SECTION("array subscript") {
DynamicJsonDocument doc2;
JsonArray& arr = doc2.to<JsonArray>();
JsonArray arr = doc2.to<JsonArray>();
const char* str = "hello";
arr.add(str);
@ -94,7 +92,7 @@ TEST_CASE("JsonArray::operator[]") {
SECTION("object subscript") {
const char* str = "hello";
DynamicJsonDocument doc2;
JsonObject& obj = doc2.to<JsonObject>();
JsonObject obj = doc2.to<JsonObject>();
obj["x"] = str;