|
|
@@ -6,6 +6,8 @@
|
|
|
#include <stdint.h>
|
|
|
#include <catch.hpp>
|
|
|
|
|
|
+#include "Allocators.hpp"
|
|
|
+
|
|
|
TEST_CASE("JsonVariant::add(T)") {
|
|
|
JsonDocument doc;
|
|
|
JsonVariant var = doc.to<JsonVariant>();
|
|
|
@@ -56,15 +58,58 @@ TEST_CASE("JsonVariant::add<T>()") {
|
|
|
REQUIRE(doc.as<std::string>() == "[[1,2]]");
|
|
|
}
|
|
|
|
|
|
- SECTION("JsonObject") {
|
|
|
- JsonObject object = var.add<JsonObject>();
|
|
|
- object["hello"] = "world";
|
|
|
- REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
|
|
|
- }
|
|
|
-
|
|
|
SECTION("JsonVariant") {
|
|
|
JsonVariant variant = var.add<JsonVariant>();
|
|
|
variant.set(42);
|
|
|
REQUIRE(doc.as<std::string>() == "[42]");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+TEST_CASE("JsonObject::add(JsonObject) ") {
|
|
|
+ JsonDocument doc1;
|
|
|
+ doc1[std::string("hello")] = std::string("world");
|
|
|
+
|
|
|
+ TimebombAllocator allocator(10);
|
|
|
+ SpyingAllocator spy(&allocator);
|
|
|
+ JsonDocument doc2(&spy);
|
|
|
+ JsonVariant variant = doc2.to<JsonVariant>();
|
|
|
+
|
|
|
+ SECTION("success") {
|
|
|
+ bool result = variant.add(doc1.as<JsonObject>());
|
|
|
+
|
|
|
+ REQUIRE(result == true);
|
|
|
+ REQUIRE(doc2.as<std::string>() == "[{\"hello\":\"world\"}]");
|
|
|
+ REQUIRE(spy.log() == AllocatorLog{
|
|
|
+ Allocate(sizeofPool()),
|
|
|
+ Allocate(sizeofString("hello")),
|
|
|
+ Allocate(sizeofString("world")),
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ SECTION("partial failure") { // issue #2081
|
|
|
+ allocator.setCountdown(2);
|
|
|
+
|
|
|
+ bool result = variant.add(doc1.as<JsonObject>());
|
|
|
+
|
|
|
+ REQUIRE(result == false);
|
|
|
+ REQUIRE(doc2.as<std::string>() == "[]");
|
|
|
+ REQUIRE(spy.log() == AllocatorLog{
|
|
|
+ Allocate(sizeofPool()),
|
|
|
+ Allocate(sizeofString("hello")),
|
|
|
+ AllocateFail(sizeofString("world")),
|
|
|
+ Deallocate(sizeofString("hello")),
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ SECTION("complete failure") {
|
|
|
+ allocator.setCountdown(0);
|
|
|
+
|
|
|
+ bool result = variant.add(doc1.as<JsonObject>());
|
|
|
+
|
|
|
+ REQUIRE(result == false);
|
|
|
+ REQUIRE(doc2.as<std::string>() == "[]");
|
|
|
+ REQUIRE(spy.log() == AllocatorLog{
|
|
|
+ AllocateFail(sizeofPool()),
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|