forked from bblanchon/ArduinoJson
Return JsonArray
and JsonObject
by value (closes #309)
This commit is contained in:
@ -7,10 +7,10 @@ add_executable(JsonVariantTests
|
||||
compare.cpp
|
||||
copy.cpp
|
||||
is.cpp
|
||||
isnull.cpp
|
||||
or.cpp
|
||||
set_get.cpp
|
||||
subscript.cpp
|
||||
success.cpp
|
||||
undefined.cpp
|
||||
)
|
||||
|
||||
|
@ -193,7 +193,7 @@ TEST_CASE("JsonVariant::as()") {
|
||||
|
||||
SECTION("ObjectAsString") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& obj = doc.to<JsonObject>();
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
|
||||
obj["key"] = "value";
|
||||
|
||||
@ -203,7 +203,7 @@ TEST_CASE("JsonVariant::as()") {
|
||||
|
||||
SECTION("ArrayAsString") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& arr = doc.to<JsonArray>();
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
arr.add(4);
|
||||
arr.add(2);
|
||||
|
||||
@ -213,19 +213,19 @@ TEST_CASE("JsonVariant::as()") {
|
||||
|
||||
SECTION("ArrayAsJsonArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& arr = doc.to<JsonArray>();
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
|
||||
JsonVariant variant = arr;
|
||||
REQUIRE(&arr == &variant.as<JsonArray&>());
|
||||
REQUIRE(&arr == &variant.as<JsonArray>()); // <- shorthand
|
||||
REQUIRE(arr == variant.as<JsonArray>());
|
||||
REQUIRE(arr == variant.as<JsonArray>()); // <- shorthand
|
||||
}
|
||||
|
||||
SECTION("ObjectAsJsonObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& obj = doc.to<JsonObject>();
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
|
||||
JsonVariant variant = obj;
|
||||
REQUIRE(&obj == &variant.as<JsonObject&>());
|
||||
REQUIRE(&obj == &variant.as<JsonObject>()); // <- shorthand
|
||||
REQUIRE(obj == variant.as<JsonObject>());
|
||||
REQUIRE(obj == variant.as<JsonObject>()); // <- shorthand
|
||||
}
|
||||
}
|
||||
|
@ -213,9 +213,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
|
||||
SECTION("ArrayInVariant") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonArray& array1 = doc1.to<JsonArray>();
|
||||
JsonArray array1 = doc1.to<JsonArray>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray& array2 = doc2.to<JsonArray>();
|
||||
JsonArray array2 = doc2.to<JsonArray>();
|
||||
|
||||
JsonVariant variant1 = array1;
|
||||
JsonVariant variant2 = array1;
|
||||
@ -230,9 +230,9 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
|
||||
SECTION("ObjectInVariant") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonObject& obj1 = doc1.to<JsonObject>();
|
||||
JsonObject obj1 = doc1.to<JsonObject>();
|
||||
DynamicJsonDocument doc2;
|
||||
JsonObject& obj2 = doc2.to<JsonObject>();
|
||||
JsonObject obj2 = doc2.to<JsonObject>();
|
||||
|
||||
JsonVariant variant1 = obj1;
|
||||
JsonVariant variant2 = obj1;
|
||||
@ -247,10 +247,10 @@ TEST_CASE("JsonVariant comparisons") {
|
||||
|
||||
SECTION("VariantsOfDifferentTypes") {
|
||||
DynamicJsonDocument doc1;
|
||||
JsonObject& obj = doc1.to<JsonObject>();
|
||||
JsonObject obj = doc1.to<JsonObject>();
|
||||
|
||||
DynamicJsonDocument doc2;
|
||||
JsonArray& arr = doc2.to<JsonArray>();
|
||||
JsonArray arr = doc2.to<JsonArray>();
|
||||
JsonVariant variants[] = {
|
||||
true, 42, 666.667, "hello", arr, obj,
|
||||
};
|
||||
|
@ -43,7 +43,7 @@ TEST_CASE("JsonVariant copy") {
|
||||
|
||||
SECTION("ObjectsAreCopiedByReference") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& object = doc.to<JsonObject>();
|
||||
JsonObject object = doc.to<JsonObject>();
|
||||
|
||||
_variant1 = object;
|
||||
|
||||
@ -54,7 +54,7 @@ TEST_CASE("JsonVariant copy") {
|
||||
|
||||
SECTION("ArraysAreCopiedByReference") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& array = doc.to<JsonArray>();
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
|
||||
_variant1 = array;
|
||||
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
void checkIsArray(JsonVariant var) {
|
||||
REQUIRE(var.is<JsonArray>());
|
||||
REQUIRE(var.is<JsonArray&>());
|
||||
REQUIRE(var.is<JsonArray>());
|
||||
REQUIRE(var.is<const JsonArray>());
|
||||
REQUIRE(var.is<const JsonArray>());
|
||||
REQUIRE(var.is<const JsonArray&>());
|
||||
|
||||
REQUIRE_FALSE(var.is<bool>());
|
||||
REQUIRE_FALSE(var.is<double>());
|
||||
@ -71,7 +71,7 @@ void checkIsString(JsonVariant var) {
|
||||
TEST_CASE("JsonVariant::is()") {
|
||||
SECTION("JsonArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& array = doc.to<JsonArray>();
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
checkIsArray(array);
|
||||
}
|
||||
|
||||
|
@ -5,40 +5,40 @@
|
||||
#include <ArduinoJson.h>
|
||||
#include <catch.hpp>
|
||||
|
||||
TEST_CASE("JsonVariant::success()") {
|
||||
TEST_CASE("JsonVariant::isNull()") {
|
||||
SECTION("ReturnsFalse_WhenUndefined") {
|
||||
JsonVariant variant;
|
||||
REQUIRE(false == variant.success());
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenInteger") {
|
||||
JsonVariant variant = 0;
|
||||
REQUIRE(true == variant.success());
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenEmptyArray") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& array = doc.to<JsonArray>();
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
|
||||
JsonVariant variant = array;
|
||||
REQUIRE(true == variant.success());
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsTrue_WhenEmptyObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& obj = doc.to<JsonObject>();
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
|
||||
JsonVariant variant = obj;
|
||||
REQUIRE(true == variant.success());
|
||||
REQUIRE(variant.isNull() == false);
|
||||
}
|
||||
|
||||
SECTION("ReturnsFalse_WhenInvalidArray") {
|
||||
JsonVariant variant = JsonArray::invalid();
|
||||
REQUIRE(false == variant.success());
|
||||
JsonVariant variant = JsonArray();
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
|
||||
SECTION("ReturnsFalse_WhenInvalidObject") {
|
||||
JsonVariant variant = JsonObject::invalid();
|
||||
REQUIRE(false == variant.success());
|
||||
JsonVariant variant = JsonObject();
|
||||
REQUIRE(variant.isNull() == true);
|
||||
}
|
||||
}
|
@ -123,8 +123,8 @@ TEST_CASE("JsonVariant set()/get()") {
|
||||
|
||||
SECTION("CanStoreObject") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject &object = doc.to<JsonObject>();
|
||||
JsonObject object = doc.to<JsonObject>();
|
||||
|
||||
checkReference<JsonObject>(object);
|
||||
checkValue<JsonObject>(object);
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
TEST_CASE("JsonVariant::operator[]") {
|
||||
SECTION("Array") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& array = doc.to<JsonArray>();
|
||||
JsonArray array = doc.to<JsonArray>();
|
||||
array.add("element at index 0");
|
||||
array.add("element at index 1");
|
||||
|
||||
@ -19,14 +19,14 @@ TEST_CASE("JsonVariant::operator[]") {
|
||||
REQUIRE(std::string("element at index 1") == var[1]);
|
||||
REQUIRE(std::string("element at index 0") ==
|
||||
var[static_cast<unsigned char>(0)]); // issue #381
|
||||
REQUIRE_FALSE(var[666].success());
|
||||
REQUIRE_FALSE(var[3].success());
|
||||
REQUIRE_FALSE(var["0"].success());
|
||||
REQUIRE(var[666].isNull());
|
||||
REQUIRE(var[3].isNull());
|
||||
REQUIRE(var["0"].isNull());
|
||||
}
|
||||
|
||||
SECTION("Object") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& object = doc.to<JsonObject>();
|
||||
JsonObject object = doc.to<JsonObject>();
|
||||
object["a"] = "element at key \"a\"";
|
||||
object["b"] = "element at key \"b\"";
|
||||
|
||||
@ -35,27 +35,27 @@ TEST_CASE("JsonVariant::operator[]") {
|
||||
REQUIRE(2 == var.size());
|
||||
REQUIRE(std::string("element at key \"a\"") == var["a"]);
|
||||
REQUIRE(std::string("element at key \"b\"") == var["b"]);
|
||||
REQUIRE_FALSE(var["c"].success());
|
||||
REQUIRE_FALSE(var[0].success());
|
||||
REQUIRE(var["c"].isNull());
|
||||
REQUIRE(var[0].isNull());
|
||||
}
|
||||
|
||||
SECTION("Undefined") {
|
||||
JsonVariant var = JsonVariant();
|
||||
REQUIRE(0 == var.size());
|
||||
REQUIRE_FALSE(var["0"].success());
|
||||
REQUIRE_FALSE(var[0].success());
|
||||
REQUIRE(var["0"].isNull());
|
||||
REQUIRE(var[0].isNull());
|
||||
}
|
||||
|
||||
SECTION("String") {
|
||||
JsonVariant var = "hello world";
|
||||
REQUIRE(0 == var.size());
|
||||
REQUIRE_FALSE(var["0"].success());
|
||||
REQUIRE_FALSE(var[0].success());
|
||||
REQUIRE(var["0"].isNull());
|
||||
REQUIRE(var[0].isNull());
|
||||
}
|
||||
|
||||
SECTION("ObjectSetValue") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonObject& obj = doc.to<JsonObject>();
|
||||
JsonObject obj = doc.to<JsonObject>();
|
||||
JsonVariant var = obj;
|
||||
var["hello"] = "world";
|
||||
REQUIRE(1 == var.size());
|
||||
@ -64,7 +64,7 @@ TEST_CASE("JsonVariant::operator[]") {
|
||||
|
||||
SECTION("ArraySetValue") {
|
||||
DynamicJsonDocument doc;
|
||||
JsonArray& arr = doc.to<JsonArray>();
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
arr.add("hello");
|
||||
JsonVariant var = arr;
|
||||
var[0] = "world";
|
||||
|
@ -29,26 +29,26 @@ TEST_CASE("JsonVariant undefined") {
|
||||
}
|
||||
|
||||
SECTION("AsArrayReturnInvalid") {
|
||||
REQUIRE(JsonArray::invalid() == variant.as<JsonArray&>());
|
||||
REQUIRE(JsonArray() == variant.as<JsonArray>());
|
||||
}
|
||||
|
||||
SECTION("AsConstArrayReturnInvalid") {
|
||||
REQUIRE(JsonArray::invalid() == variant.as<const JsonArray&>());
|
||||
REQUIRE(JsonArray() == variant.as<const JsonArray>());
|
||||
}
|
||||
|
||||
SECTION("AsObjectReturnInvalid") {
|
||||
REQUIRE(JsonObject::invalid() == variant.as<JsonObject&>());
|
||||
REQUIRE(JsonObject() == variant.as<JsonObject>());
|
||||
}
|
||||
|
||||
SECTION("AsConstObjectReturnInvalid") {
|
||||
REQUIRE(JsonObject::invalid() == variant.as<const JsonObject&>());
|
||||
REQUIRE(JsonObject() == variant.as<const JsonObject>());
|
||||
}
|
||||
|
||||
SECTION("AsArrayWrapperReturnInvalid") {
|
||||
REQUIRE(JsonArray::invalid() == variant.as<JsonArray>());
|
||||
REQUIRE(JsonArray() == variant.as<JsonArray>());
|
||||
}
|
||||
|
||||
SECTION("AsObjectWrapperReturnInvalid") {
|
||||
REQUIRE(JsonObject::invalid() == variant.as<JsonObject>());
|
||||
REQUIRE(JsonObject() == variant.as<JsonObject>());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user