Don't use JsonBuffer to create or parse objects and arrays.

* Added DynamicJsonArray and StaticJsonArray
* Added DynamicJsonObject and StaticJsonObject
* Added DynamicJsonVariant and StaticJsonVariant
* Added deserializeJson()
* Removed JsonBuffer::parseArray(), parseObject() and parse()
* Removed JsonBuffer::createArray() and createObject()
This commit is contained in:
Benoit Blanchon
2018-02-26 16:05:16 +01:00
parent baf5adcf33
commit 7a2a64803a
89 changed files with 1612 additions and 1691 deletions

View File

@ -192,9 +192,8 @@ TEST_CASE("JsonVariant::as()") {
}
SECTION("ObjectAsString") {
DynamicJsonBuffer buffer;
DynamicJsonObject obj;
JsonObject& obj = buffer.createObject();
obj["key"] = "value";
JsonVariant variant = obj;
@ -202,9 +201,7 @@ TEST_CASE("JsonVariant::as()") {
}
SECTION("ArrayAsString") {
DynamicJsonBuffer buffer;
JsonArray& arr = buffer.createArray();
DynamicJsonArray arr;
arr.add(4);
arr.add(2);
@ -213,8 +210,7 @@ TEST_CASE("JsonVariant::as()") {
}
SECTION("ArrayAsJsonArray") {
DynamicJsonBuffer buffer;
JsonArray& arr = buffer.createArray();
DynamicJsonArray arr;
JsonVariant variant = arr;
REQUIRE(&arr == &variant.as<JsonArray&>());
@ -222,11 +218,10 @@ TEST_CASE("JsonVariant::as()") {
}
SECTION("ObjectAsJsonObject") {
DynamicJsonBuffer buffer;
JsonObject& arr = buffer.createObject();
DynamicJsonObject obj;
JsonVariant variant = arr;
REQUIRE(&arr == &variant.as<JsonObject&>());
REQUIRE(&arr == &variant.as<JsonObject>()); // <- shorthand
JsonVariant variant = obj;
REQUIRE(&obj == &variant.as<JsonObject&>());
REQUIRE(&obj == &variant.as<JsonObject>()); // <- shorthand
}
}

View File

@ -97,8 +97,8 @@ TEST_CASE("JsonVariant comparisons") {
}
SECTION("StringLiteral") {
DynamicJsonBuffer jsonBuffer;
JsonVariant variant = jsonBuffer.parse("\"hello\"");
DynamicJsonVariant variant;
deserializeJson(variant, "\"hello\"");
REQUIRE(variant == "hello");
REQUIRE_FALSE(variant != "hello");
@ -114,8 +114,8 @@ TEST_CASE("JsonVariant comparisons") {
}
SECTION("String") {
DynamicJsonBuffer jsonBuffer;
JsonVariant variant = jsonBuffer.parse("\"hello\"");
DynamicJsonVariant variant;
deserializeJson(variant, "\"hello\"");
REQUIRE(variant == std::string("hello"));
REQUIRE_FALSE(variant != std::string("hello"));
@ -179,9 +179,7 @@ TEST_CASE("JsonVariant comparisons") {
}
SECTION("ArrayInVariant") {
DynamicJsonBuffer jsonBuffer;
JsonArray& array1 = jsonBuffer.createArray();
JsonArray& array2 = jsonBuffer.createArray();
DynamicJsonArray array1, array2;
JsonVariant variant1 = array1;
JsonVariant variant2 = array1;
@ -195,9 +193,8 @@ TEST_CASE("JsonVariant comparisons") {
}
SECTION("ObjectInVariant") {
DynamicJsonBuffer jsonBuffer;
JsonObject& obj1 = jsonBuffer.createObject();
JsonObject& obj2 = jsonBuffer.createObject();
DynamicJsonObject obj1;
DynamicJsonObject obj2;
JsonVariant variant1 = obj1;
JsonVariant variant2 = obj1;
@ -211,14 +208,10 @@ TEST_CASE("JsonVariant comparisons") {
}
SECTION("VariantsOfDifferentTypes") {
DynamicJsonBuffer jsonBuffer;
DynamicJsonObject obj;
DynamicJsonArray arr;
JsonVariant variants[] = {
true,
42,
666.667,
"hello",
jsonBuffer.createArray(),
jsonBuffer.createObject(),
true, 42, 666.667, "hello", arr, obj,
};
size_t n = sizeof(variants) / sizeof(variants[0]);

View File

@ -6,7 +6,6 @@
#include <catch.hpp>
TEST_CASE("JsonVariant copy") {
DynamicJsonBuffer _jsonBuffer;
JsonVariant _variant1;
JsonVariant _variant2;
@ -43,7 +42,7 @@ TEST_CASE("JsonVariant copy") {
}
SECTION("ObjectsAreCopiedByReference") {
JsonObject &object = _jsonBuffer.createObject();
DynamicJsonObject object;
_variant1 = object;
@ -53,7 +52,7 @@ TEST_CASE("JsonVariant copy") {
}
SECTION("ArraysAreCopiedByReference") {
JsonArray &array = _jsonBuffer.createArray();
DynamicJsonArray array;
_variant1 = array;

View File

@ -72,7 +72,8 @@ TEST_CASE("JsonVariant::is()") {
DynamicJsonBuffer jsonBuffer;
SECTION("JsonArray") {
checkIsArray(jsonBuffer.createArray());
DynamicJsonArray array;
checkIsArray(array);
}
SECTION("bool") {

View File

@ -122,9 +122,8 @@ TEST_CASE("JsonVariant set()/get()") {
#endif
SECTION("CanStoreObject") {
DynamicJsonBuffer jsonBuffer;
JsonObject &object = jsonBuffer.createObject();
DynamicJsonObject object;
checkReference(object);
checkReference<JsonObject>(object);
}
}

View File

@ -6,10 +6,8 @@
#include <catch.hpp>
TEST_CASE("JsonVariant::operator[]") {
DynamicJsonBuffer _jsonBuffer;
SECTION("Array") {
JsonArray &array = _jsonBuffer.createArray();
DynamicJsonArray array;
array.add("element at index 0");
array.add("element at index 1");
@ -26,7 +24,7 @@ TEST_CASE("JsonVariant::operator[]") {
}
SECTION("Object") {
JsonObject &object = _jsonBuffer.createObject();
DynamicJsonObject object;
object["a"] = "element at key \"a\"";
object["b"] = "element at key \"b\"";
@ -54,21 +52,24 @@ TEST_CASE("JsonVariant::operator[]") {
}
SECTION("ObjectSetValue") {
JsonVariant var = _jsonBuffer.createObject();
DynamicJsonObject obj;
JsonVariant var = obj;
var["hello"] = "world";
REQUIRE(1 == var.size());
REQUIRE(std::string("world") == var["hello"]);
}
SECTION("ArraySetValue") {
JsonVariant var = _jsonBuffer.parseArray("[\"hello\"]");
DynamicJsonVariant var;
deserializeJson(var, "[\"hello\"]");
var[0] = "world";
REQUIRE(1 == var.size());
REQUIRE(std::string("world") == var[0]);
}
SECTION("NestedObjectSetValue") {
JsonVariant var = _jsonBuffer.parseArray("[{}]");
DynamicJsonVariant var;
deserializeJson(var, "[{}]");
var[0]["hello"] = "world";
REQUIRE(1 == var.size());
REQUIRE(1 == var[0].size());

View File

@ -17,16 +17,16 @@ TEST_CASE("JsonVariant::success()") {
}
SECTION("ReturnsTrue_WhenEmptyArray") {
DynamicJsonBuffer jsonBuffer;
DynamicJsonArray array;
JsonVariant variant = jsonBuffer.createArray();
JsonVariant variant = array;
REQUIRE(true == variant.success());
}
SECTION("ReturnsTrue_WhenEmptyObject") {
DynamicJsonBuffer jsonBuffer;
DynamicJsonObject obj;
JsonVariant variant = jsonBuffer.createObject();
JsonVariant variant = obj;
REQUIRE(true == variant.success());
}