Remove capacity from JsonDocument's constructor

This commit is contained in:
Benoit Blanchon
2023-07-17 18:15:13 +02:00
parent 42b2840009
commit 0f319e7ca4
162 changed files with 438 additions and 500 deletions

View File

@ -9,7 +9,7 @@ typedef ArduinoJson::detail::ElementProxy<JsonDocument&> ElementProxy;
using ArduinoJson::detail::sizeofString;
TEST_CASE("ElementProxy::add()") {
JsonDocument doc(4096);
JsonDocument doc;
doc.add();
ElementProxy ep = doc[0];
@ -35,7 +35,7 @@ TEST_CASE("ElementProxy::add()") {
}
TEST_CASE("ElementProxy::clear()") {
JsonDocument doc(4096);
JsonDocument doc;
doc.add();
ElementProxy ep = doc[0];
@ -55,7 +55,7 @@ TEST_CASE("ElementProxy::clear()") {
}
TEST_CASE("ElementProxy::operator==()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("1 vs 1") {
doc.add(1);
@ -95,7 +95,7 @@ TEST_CASE("ElementProxy::operator==()") {
}
TEST_CASE("ElementProxy::remove()") {
JsonDocument doc(4096);
JsonDocument doc;
doc.add();
ElementProxy ep = doc[0];
@ -143,7 +143,7 @@ TEST_CASE("ElementProxy::remove()") {
}
TEST_CASE("ElementProxy::set()") {
JsonDocument doc(4096);
JsonDocument doc;
ElementProxy ep = doc[0];
SECTION("set(int)") {
@ -168,7 +168,7 @@ TEST_CASE("ElementProxy::set()") {
}
TEST_CASE("ElementProxy::size()") {
JsonDocument doc(4096);
JsonDocument doc;
doc.add();
ElementProxy ep = doc[0];
@ -190,7 +190,7 @@ TEST_CASE("ElementProxy::size()") {
}
TEST_CASE("ElementProxy::memoryUsage()") {
JsonDocument doc(4096);
JsonDocument doc;
doc.add();
ElementProxy ep = doc[0];
@ -205,7 +205,7 @@ TEST_CASE("ElementProxy::memoryUsage()") {
}
TEST_CASE("ElementProxy::operator[]") {
JsonDocument doc(4096);
JsonDocument doc;
ElementProxy ep = doc[1];
SECTION("set member") {
@ -222,7 +222,7 @@ TEST_CASE("ElementProxy::operator[]") {
}
TEST_CASE("ElementProxy cast to JsonVariantConst") {
JsonDocument doc(4096);
JsonDocument doc;
doc[0] = "world";
const ElementProxy ep = doc[0];
@ -233,7 +233,7 @@ TEST_CASE("ElementProxy cast to JsonVariantConst") {
}
TEST_CASE("ElementProxy cast to JsonVariant") {
JsonDocument doc(4096);
JsonDocument doc;
doc[0] = "world";
ElementProxy ep = doc[0];

View File

@ -18,7 +18,7 @@ typedef ArduinoJson::detail::MemberProxy<JsonDocument&, const char*>
MemberProxy;
TEST_CASE("MemberProxy::add()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("add(int)") {
@ -35,7 +35,7 @@ TEST_CASE("MemberProxy::add()") {
}
TEST_CASE("MemberProxy::clear()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("size goes back to zero") {
@ -54,7 +54,7 @@ TEST_CASE("MemberProxy::clear()") {
}
TEST_CASE("MemberProxy::operator==()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("1 vs 1") {
doc["a"] = 1;
@ -94,7 +94,7 @@ TEST_CASE("MemberProxy::operator==()") {
}
TEST_CASE("MemberProxy::containsKey()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("containsKey(const char*)") {
@ -113,7 +113,7 @@ TEST_CASE("MemberProxy::containsKey()") {
}
TEST_CASE("MemberProxy::operator|()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("const char*") {
doc["a"] = "hello";
@ -136,7 +136,7 @@ TEST_CASE("MemberProxy::operator|()") {
JsonObject object = doc.to<JsonObject>();
object["hello"] = "world";
JsonDocument emptyDoc(0);
JsonDocument emptyDoc;
JsonObject anotherObject = object["hello"] | emptyDoc.to<JsonObject>();
REQUIRE(anotherObject.isNull() == false);
@ -145,7 +145,7 @@ TEST_CASE("MemberProxy::operator|()") {
}
TEST_CASE("MemberProxy::remove()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("remove(int)") {
@ -192,7 +192,7 @@ TEST_CASE("MemberProxy::remove()") {
}
TEST_CASE("MemberProxy::set()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("set(int)") {
@ -217,7 +217,7 @@ TEST_CASE("MemberProxy::set()") {
}
TEST_CASE("MemberProxy::size()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("returns 0") {
@ -240,7 +240,7 @@ TEST_CASE("MemberProxy::size()") {
}
TEST_CASE("MemberProxy::memoryUsage()") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("returns 0 when null") {
@ -254,7 +254,7 @@ TEST_CASE("MemberProxy::memoryUsage()") {
}
TEST_CASE("MemberProxy::operator[]") {
JsonDocument doc(4096);
JsonDocument doc;
MemberProxy mp = doc["hello"];
SECTION("set member") {
@ -271,7 +271,7 @@ TEST_CASE("MemberProxy::operator[]") {
}
TEST_CASE("MemberProxy cast to JsonVariantConst") {
JsonDocument doc(4096);
JsonDocument doc;
doc["hello"] = "world";
const MemberProxy mp = doc["hello"];
@ -282,7 +282,7 @@ TEST_CASE("MemberProxy cast to JsonVariantConst") {
}
TEST_CASE("MemberProxy cast to JsonVariant") {
JsonDocument doc(4096);
JsonDocument doc;
doc["hello"] = "world";
MemberProxy mp = doc["hello"];
@ -297,7 +297,7 @@ TEST_CASE("MemberProxy cast to JsonVariant") {
}
TEST_CASE("MemberProxy::createNestedArray()") {
JsonDocument doc(1024);
JsonDocument doc;
JsonArray arr = doc["items"].createNestedArray();
arr.add(42);
@ -305,7 +305,7 @@ TEST_CASE("MemberProxy::createNestedArray()") {
}
TEST_CASE("MemberProxy::createNestedArray(key)") {
JsonDocument doc(1024);
JsonDocument doc;
JsonArray arr = doc["weather"].createNestedArray("temp");
arr.add(42);
@ -313,7 +313,7 @@ TEST_CASE("MemberProxy::createNestedArray(key)") {
}
TEST_CASE("MemberProxy::createNestedObject()") {
JsonDocument doc(1024);
JsonDocument doc;
JsonObject obj = doc["items"].createNestedObject();
obj["value"] = 42;
@ -321,7 +321,7 @@ TEST_CASE("MemberProxy::createNestedObject()") {
}
TEST_CASE("MemberProxy::createNestedObject(key)") {
JsonDocument doc(1024);
JsonDocument doc;
JsonObject obj = doc["status"].createNestedObject("weather");
obj["temp"] = 42;
@ -329,7 +329,7 @@ TEST_CASE("MemberProxy::createNestedObject(key)") {
}
TEST_CASE("Deduplicate keys") {
JsonDocument doc(1024);
JsonDocument doc;
SECTION("std::string") {
doc[0][std::string("example")] = 1;
@ -383,7 +383,7 @@ TEST_CASE("Deduplicate keys") {
TEST_CASE("MemberProxy under memory constraints") {
ControllableAllocator allocator;
JsonDocument doc(4096, &allocator);
JsonDocument doc(&allocator);
SECTION("key allocation fails") {
allocator.disable();

View File

@ -12,7 +12,7 @@ using ArduinoJson::detail::sizeofArray;
using ArduinoJson::detail::sizeofString;
TEST_CASE("JsonDocument::add()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("integer") {
doc.add(42);

View File

@ -7,17 +7,15 @@
#include "Allocators.hpp"
using ArduinoJson::detail::sizeofArray;
using ArduinoJson::detail::sizeofObject;
using ArduinoJson::detail::sizeofString;
TEST_CASE("JsonDocument assignment") {
SpyingAllocator spyingAllocator;
SECTION("Copy assignment same capacity") {
JsonDocument doc1(1024, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
deserializeJson(doc1, "{\"hello\":\"world\"}");
JsonDocument doc2(1024, &spyingAllocator);
JsonDocument doc2(&spyingAllocator);
spyingAllocator.clearLog();
doc2 = doc1;
@ -33,10 +31,9 @@ TEST_CASE("JsonDocument assignment") {
}
SECTION("Copy assignment reallocates when capacity is smaller") {
const size_t capacity = 100 * sizeof(ArduinoJson::detail::VariantSlot);
JsonDocument doc1(capacity, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
deserializeJson(doc1, "[{\"hello\":\"world\"}]");
JsonDocument doc2(sizeofArray(1), &spyingAllocator);
JsonDocument doc2(&spyingAllocator);
spyingAllocator.clearLog();
doc2 = doc1;
@ -51,10 +48,9 @@ TEST_CASE("JsonDocument assignment") {
}
SECTION("Copy assignment reallocates when capacity is larger") {
const size_t capacity1 = 100 * sizeof(ArduinoJson::detail::VariantSlot);
JsonDocument doc1(capacity1, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
deserializeJson(doc1, "{\"hello\":\"world\"}");
JsonDocument doc2(4096, &spyingAllocator);
JsonDocument doc2(&spyingAllocator);
spyingAllocator.clearLog();
doc2 = doc1;
@ -70,9 +66,9 @@ TEST_CASE("JsonDocument assignment") {
SECTION("Move assign") {
{
JsonDocument doc1(4096, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
doc1[std::string("hello")] = std::string("world");
JsonDocument doc2(128, &spyingAllocator);
JsonDocument doc2(&spyingAllocator);
doc2 = std::move(doc1);
@ -92,52 +88,52 @@ TEST_CASE("JsonDocument assignment") {
}
SECTION("Assign from JsonObject") {
JsonDocument doc1(200);
JsonDocument doc1;
JsonObject obj = doc1.to<JsonObject>();
obj["hello"] = "world";
JsonDocument doc2(4096);
JsonDocument doc2;
doc2 = obj;
REQUIRE(doc2.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("Assign from JsonArray") {
JsonDocument doc1(200);
JsonDocument doc1;
JsonArray arr = doc1.to<JsonArray>();
arr.add("hello");
JsonDocument doc2(4096);
JsonDocument doc2;
doc2 = arr;
REQUIRE(doc2.as<std::string>() == "[\"hello\"]");
}
SECTION("Assign from JsonVariant") {
JsonDocument doc1(200);
JsonDocument doc1;
deserializeJson(doc1, "42");
JsonDocument doc2(4096);
JsonDocument doc2;
doc2 = doc1.as<JsonVariant>();
REQUIRE(doc2.as<std::string>() == "42");
}
SECTION("Assign from MemberProxy") {
JsonDocument doc1(200);
JsonDocument doc1;
doc1["value"] = 42;
JsonDocument doc2(4096);
JsonDocument doc2;
doc2 = doc1["value"];
REQUIRE(doc2.as<std::string>() == "42");
}
SECTION("Assign from ElementProxy") {
JsonDocument doc1(200);
JsonDocument doc1;
doc1[0] = 42;
JsonDocument doc2(4096);
JsonDocument doc2;
doc2 = doc1[0];
REQUIRE(doc2.as<std::string>() == "42");

View File

@ -8,7 +8,7 @@
#include <string>
TEST_CASE("Implicit cast to JsonVariant") {
JsonDocument doc(128);
JsonDocument doc;
doc["hello"] = "world";

View File

@ -6,8 +6,8 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::operator==(const JsonDocument&)") {
JsonDocument doc1(4096);
JsonDocument doc2(4096);
JsonDocument doc1;
JsonDocument doc2;
SECTION("Empty") {
REQUIRE(doc1 == doc2);

View File

@ -8,21 +8,19 @@
#include "Allocators.hpp"
using ArduinoJson::detail::addPadding;
using ArduinoJson::detail::sizeofObject;
using ArduinoJson::detail::sizeofString;
TEST_CASE("JsonDocument constructor") {
SpyingAllocator spyingAllocator;
SECTION("JsonDocument(size_t)") {
{ JsonDocument doc(4096, &spyingAllocator); }
{ JsonDocument doc(&spyingAllocator); }
REQUIRE(spyingAllocator.log() == AllocatorLog());
}
SECTION("JsonDocument(const JsonDocument&)") {
const size_t capacity = 100 * sizeof(ArduinoJson::detail::VariantSlot);
{
JsonDocument doc1(capacity, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
doc1.set(std::string("The size of this string is 32!!"));
JsonDocument doc2(doc1);
@ -39,7 +37,7 @@ TEST_CASE("JsonDocument constructor") {
SECTION("JsonDocument(JsonDocument&&)") {
{
JsonDocument doc1(4096, &spyingAllocator);
JsonDocument doc1(&spyingAllocator);
doc1.set(std::string("The size of this string is 32!!"));
JsonDocument doc2(std::move(doc1));
@ -53,7 +51,7 @@ TEST_CASE("JsonDocument constructor") {
}
SECTION("JsonDocument(JsonObject)") {
JsonDocument doc1(200);
JsonDocument doc1;
JsonObject obj = doc1.to<JsonObject>();
obj["hello"] = "world";
@ -66,7 +64,7 @@ TEST_CASE("JsonDocument constructor") {
}
SECTION("Construct from JsonArray") {
JsonDocument doc1(200);
JsonDocument doc1;
JsonArray arr = doc1.to<JsonArray>();
arr.add("hello");
@ -79,7 +77,7 @@ TEST_CASE("JsonDocument constructor") {
}
SECTION("Construct from JsonVariant") {
JsonDocument doc1(200);
JsonDocument doc1;
deserializeJson(doc1, "\"hello\"");
JsonDocument doc2(doc1.as<JsonVariant>(), &spyingAllocator);

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::containsKey()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("returns true on object") {
doc["hello"] = "world";

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::createNestedArray()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("promotes to array") {
doc.createNestedArray();
@ -16,7 +16,7 @@ TEST_CASE("JsonDocument::createNestedArray()") {
}
TEST_CASE("JsonDocument::createNestedArray(key)") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("key is const char*") {
SECTION("promotes to object") {
@ -36,7 +36,7 @@ TEST_CASE("JsonDocument::createNestedArray(key)") {
}
TEST_CASE("JsonDocument::createNestedObject()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("promotes to array") {
doc.createNestedObject();
@ -46,7 +46,7 @@ TEST_CASE("JsonDocument::createNestedObject()") {
}
TEST_CASE("JsonDocument::createNestedObject(key)") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("key is const char*") {
SECTION("promotes to object") {

View File

@ -13,10 +13,9 @@ using ArduinoJson::detail::sizeofObject;
using ArduinoJson::detail::sizeofString;
TEST_CASE("JsonDocument::garbageCollect()") {
const size_t capacity = 100 * sizeof(ArduinoJson::detail::VariantSlot);
ControllableAllocator controllableAllocator;
SpyingAllocator spyingAllocator(&controllableAllocator);
JsonDocument doc(capacity, &spyingAllocator);
JsonDocument doc(&spyingAllocator);
SECTION("when allocation succeeds") {
deserializeJson(doc, "{\"blanket\":1,\"dancing\":2}");

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::isNull()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("returns true if uninitialized") {
REQUIRE(doc.isNull() == true);

View File

@ -3,7 +3,7 @@
#include <catch.hpp>
TEST_CASE("Issue #1120") {
JsonDocument doc(500);
JsonDocument doc;
constexpr char str[] =
"{\"contents\":[{\"module\":\"Packet\"},{\"module\":\"Analog\"}]}";
deserializeJson(doc, str);

View File

@ -9,7 +9,7 @@ using ArduinoJson::detail::sizeofArray;
using ArduinoJson::detail::sizeofObject;
TEST_CASE("JsonDocument::memoryUsage()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("starts at zero") {
REQUIRE(doc.memoryUsage() == 0);

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::nesting()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("return 0 if uninitialized") {
REQUIRE(doc.nesting() == 0);

View File

@ -7,11 +7,9 @@
#include "Allocators.hpp"
using ArduinoJson::detail::sizeofArray;
TEST_CASE("JsonDocument::overflowed()") {
TimebombAllocator allocator(10);
JsonDocument doc(0, &allocator);
JsonDocument doc(&allocator);
SECTION("returns false on a fresh object") {
allocator.setCountdown(0);

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::remove()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("remove(int)") {
doc.add(1);

View File

@ -42,7 +42,7 @@ class ArmoredAllocator : public Allocator {
TEST_CASE("JsonDocument::shrinkToFit()") {
ArmoredAllocator armoredAllocator;
SpyingAllocator spyingAllocator(&armoredAllocator);
JsonDocument doc(4096, &spyingAllocator);
JsonDocument doc(&spyingAllocator);
SECTION("null") {
doc.shrinkToFit();

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::size()") {
JsonDocument doc(4096);
JsonDocument doc;
SECTION("returns 0") {
REQUIRE(doc.size() == 0);

View File

@ -6,7 +6,7 @@
#include <catch.hpp>
TEST_CASE("JsonDocument::operator[]") {
JsonDocument doc(4096);
JsonDocument doc;
const JsonDocument& cdoc = doc;
SECTION("object") {
@ -37,7 +37,7 @@ TEST_CASE("JsonDocument::operator[]") {
}
TEST_CASE("JsonDocument automatically promotes to object") {
JsonDocument doc(4096);
JsonDocument doc;
doc["one"]["two"]["three"] = 4;
@ -45,7 +45,7 @@ TEST_CASE("JsonDocument automatically promotes to object") {
}
TEST_CASE("JsonDocument automatically promotes to array") {
JsonDocument doc(4096);
JsonDocument doc;
doc[2] = 2;

View File

@ -13,7 +13,7 @@ TEST_CASE("std::swap") {
}
SECTION("JsonDocument") {
JsonDocument doc1(0x10), doc2(0x20);
JsonDocument doc1, doc2;
doc1.set("hello");
doc2.set("world");