From bcf1339e89b8610ec4c9730f25a0233c7a5c39a3 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Sat, 1 Apr 2023 15:14:21 +0200 Subject: [PATCH] Test: split `JsonDocument.cpp` into multiple files --- extras/tests/JsonDocument/CMakeLists.txt | 5 +- extras/tests/JsonDocument/JsonDocument.cpp | 205 --------------------- extras/tests/JsonDocument/assignment.cpp | 90 +++++++++ extras/tests/JsonDocument/capacity.cpp | 22 +++ extras/tests/JsonDocument/constructor.cpp | 53 ++++++ extras/tests/JsonDocument/memoryUsage.cpp | 52 ++++++ 6 files changed, 221 insertions(+), 206 deletions(-) delete mode 100644 extras/tests/JsonDocument/JsonDocument.cpp create mode 100644 extras/tests/JsonDocument/assignment.cpp create mode 100644 extras/tests/JsonDocument/capacity.cpp create mode 100644 extras/tests/JsonDocument/constructor.cpp create mode 100644 extras/tests/JsonDocument/memoryUsage.cpp diff --git a/extras/tests/JsonDocument/CMakeLists.txt b/extras/tests/JsonDocument/CMakeLists.txt index cac1bf13..2aa81c2d 100644 --- a/extras/tests/JsonDocument/CMakeLists.txt +++ b/extras/tests/JsonDocument/CMakeLists.txt @@ -5,15 +5,18 @@ add_executable(JsonDocumentTests add.cpp allocator.cpp + assignment.cpp + capacity.cpp cast.cpp compare.cpp + constructor.cpp containsKey.cpp createNested.cpp - JsonDocument.cpp ElementProxy.cpp isNull.cpp issue1120.cpp MemberProxy.cpp + memoryUsage.cpp nesting.cpp overflowed.cpp remove.cpp diff --git a/extras/tests/JsonDocument/JsonDocument.cpp b/extras/tests/JsonDocument/JsonDocument.cpp deleted file mode 100644 index ab9fc3a6..00000000 --- a/extras/tests/JsonDocument/JsonDocument.cpp +++ /dev/null @@ -1,205 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#include -#include - -using ArduinoJson::detail::addPadding; -using ArduinoJson::detail::sizeofArray; -using ArduinoJson::detail::sizeofObject; - -TEST_CASE("JsonDocument") { - JsonDocument doc(4096); - - SECTION("serializeJson()") { - JsonObject obj = doc.to(); - obj["hello"] = "world"; - - std::string json; - serializeJson(doc, json); - - REQUIRE(json == "{\"hello\":\"world\"}"); - } - - SECTION("memoryUsage()") { - SECTION("starts at zero") { - REQUIRE(doc.memoryUsage() == 0); - } - - SECTION("sizeofArray(0)") { - doc.to(); - REQUIRE(doc.memoryUsage() == sizeofArray(0)); - } - - SECTION("sizeofArray(1)") { - doc.to().add(42); - REQUIRE(doc.memoryUsage() == sizeofArray(1)); - } - - SECTION("sizeofArray(1) + sizeofArray(0)") { - doc.to().createNestedArray(); - REQUIRE(doc.memoryUsage() == sizeofArray(1) + sizeofArray(0)); - } - } - - SECTION("capacity()") { - SECTION("matches constructor argument") { - JsonDocument doc2(256); - REQUIRE(doc2.capacity() == 256); - } - - SECTION("rounds up constructor argument") { - JsonDocument doc2(253); - REQUIRE(doc2.capacity() == 256); - } - } - - SECTION("memoryUsage()") { - SECTION("Increases after adding value to array") { - JsonArray arr = doc.to(); - - REQUIRE(doc.memoryUsage() == sizeofArray(0)); - arr.add(42); - REQUIRE(doc.memoryUsage() == sizeofArray(1)); - arr.add(43); - REQUIRE(doc.memoryUsage() == sizeofArray(2)); - } - - SECTION("Increases after adding value to object") { - JsonObject obj = doc.to(); - - REQUIRE(doc.memoryUsage() == sizeofObject(0)); - obj["a"] = 1; - REQUIRE(doc.memoryUsage() == sizeofObject(1)); - obj["b"] = 2; - REQUIRE(doc.memoryUsage() == sizeofObject(2)); - } - } -} - -TEST_CASE("JsonDocument constructor") { - SECTION("Copy constructor") { - JsonDocument doc1(1234); - deserializeJson(doc1, "{\"hello\":\"world\"}"); - - JsonDocument doc2 = doc1; - - REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); - - REQUIRE(doc2.capacity() == doc1.capacity()); - } - - SECTION("Construct from JsonObject") { - JsonDocument doc1(200); - JsonObject obj = doc1.to(); - obj["hello"] = "world"; - - JsonDocument doc2 = obj; - - REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); - REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); - } - - SECTION("Construct from JsonArray") { - JsonDocument doc1(200); - JsonArray arr = doc1.to(); - arr.add("hello"); - - JsonDocument doc2 = arr; - - REQUIRE(doc2.as() == "[\"hello\"]"); - REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); - } - - SECTION("Construct from JsonVariant") { - JsonDocument doc1(200); - deserializeJson(doc1, "42"); - - JsonDocument doc2 = doc1.as(); - - REQUIRE(doc2.as() == "42"); - REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); - } -} - -TEST_CASE("JsonDocument assignment") { - SECTION("Copy assignment reallocates when capacity is smaller") { - JsonDocument doc1(1234); - deserializeJson(doc1, "{\"hello\":\"world\"}"); - JsonDocument doc2(8); - - doc2 = doc1; - - REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); - REQUIRE(doc2.capacity() == doc1.capacity()); - } - - SECTION("Copy assignment reallocates when capacity is larger") { - JsonDocument doc1(100); - deserializeJson(doc1, "{\"hello\":\"world\"}"); - JsonDocument doc2(1234); - - doc2 = doc1; - - REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); - REQUIRE(doc2.capacity() == doc1.capacity()); - } - - SECTION("Assign from JsonObject") { - JsonDocument doc1(200); - JsonObject obj = doc1.to(); - obj["hello"] = "world"; - - JsonDocument doc2(4096); - doc2 = obj; - - REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); - REQUIRE(doc2.capacity() == 4096); - } - - SECTION("Assign from JsonArray") { - JsonDocument doc1(200); - JsonArray arr = doc1.to(); - arr.add("hello"); - - JsonDocument doc2(4096); - doc2 = arr; - - REQUIRE(doc2.as() == "[\"hello\"]"); - REQUIRE(doc2.capacity() == 4096); - } - - SECTION("Assign from JsonVariant") { - JsonDocument doc1(200); - deserializeJson(doc1, "42"); - - JsonDocument doc2(4096); - doc2 = doc1.as(); - - REQUIRE(doc2.as() == "42"); - REQUIRE(doc2.capacity() == 4096); - } - - SECTION("Assign from MemberProxy") { - JsonDocument doc1(200); - doc1["value"] = 42; - - JsonDocument doc2(4096); - doc2 = doc1["value"]; - - REQUIRE(doc2.as() == "42"); - REQUIRE(doc2.capacity() == 4096); - } - - SECTION("Assign from ElementProxy") { - JsonDocument doc1(200); - doc1[0] = 42; - - JsonDocument doc2(4096); - doc2 = doc1[0]; - - REQUIRE(doc2.as() == "42"); - REQUIRE(doc2.capacity() == 4096); - } -} diff --git a/extras/tests/JsonDocument/assignment.cpp b/extras/tests/JsonDocument/assignment.cpp new file mode 100644 index 00000000..631ae715 --- /dev/null +++ b/extras/tests/JsonDocument/assignment.cpp @@ -0,0 +1,90 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2023, Benoit BLANCHON +// MIT License + +#include +#include + +using ArduinoJson::detail::sizeofArray; +using ArduinoJson::detail::sizeofObject; + +TEST_CASE("JsonDocument assignment") { + SECTION("Copy assignment reallocates when capacity is smaller") { + JsonDocument doc1(1234); + deserializeJson(doc1, "{\"hello\":\"world\"}"); + JsonDocument doc2(8); + + doc2 = doc1; + + REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); + REQUIRE(doc2.capacity() == doc1.capacity()); + } + + SECTION("Copy assignment reallocates when capacity is larger") { + JsonDocument doc1(100); + deserializeJson(doc1, "{\"hello\":\"world\"}"); + JsonDocument doc2(1234); + + doc2 = doc1; + + REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); + REQUIRE(doc2.capacity() == doc1.capacity()); + } + + SECTION("Assign from JsonObject") { + JsonDocument doc1(200); + JsonObject obj = doc1.to(); + obj["hello"] = "world"; + + JsonDocument doc2(4096); + doc2 = obj; + + REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); + REQUIRE(doc2.capacity() == 4096); + } + + SECTION("Assign from JsonArray") { + JsonDocument doc1(200); + JsonArray arr = doc1.to(); + arr.add("hello"); + + JsonDocument doc2(4096); + doc2 = arr; + + REQUIRE(doc2.as() == "[\"hello\"]"); + REQUIRE(doc2.capacity() == 4096); + } + + SECTION("Assign from JsonVariant") { + JsonDocument doc1(200); + deserializeJson(doc1, "42"); + + JsonDocument doc2(4096); + doc2 = doc1.as(); + + REQUIRE(doc2.as() == "42"); + REQUIRE(doc2.capacity() == 4096); + } + + SECTION("Assign from MemberProxy") { + JsonDocument doc1(200); + doc1["value"] = 42; + + JsonDocument doc2(4096); + doc2 = doc1["value"]; + + REQUIRE(doc2.as() == "42"); + REQUIRE(doc2.capacity() == 4096); + } + + SECTION("Assign from ElementProxy") { + JsonDocument doc1(200); + doc1[0] = 42; + + JsonDocument doc2(4096); + doc2 = doc1[0]; + + REQUIRE(doc2.as() == "42"); + REQUIRE(doc2.capacity() == 4096); + } +} diff --git a/extras/tests/JsonDocument/capacity.cpp b/extras/tests/JsonDocument/capacity.cpp new file mode 100644 index 00000000..b8d780b9 --- /dev/null +++ b/extras/tests/JsonDocument/capacity.cpp @@ -0,0 +1,22 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2023, Benoit BLANCHON +// MIT License + +#include +#include + +TEST_CASE("JsonDocument") { + JsonDocument doc(4096); + + SECTION("capacity()") { + SECTION("matches constructor argument") { + JsonDocument doc2(256); + REQUIRE(doc2.capacity() == 256); + } + + SECTION("rounds up constructor argument") { + JsonDocument doc2(253); + REQUIRE(doc2.capacity() == 256); + } + } +} diff --git a/extras/tests/JsonDocument/constructor.cpp b/extras/tests/JsonDocument/constructor.cpp new file mode 100644 index 00000000..5026fc40 --- /dev/null +++ b/extras/tests/JsonDocument/constructor.cpp @@ -0,0 +1,53 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2023, Benoit BLANCHON +// MIT License + +#include +#include + +using ArduinoJson::detail::addPadding; + +TEST_CASE("JsonDocument constructor") { + SECTION("Copy constructor") { + JsonDocument doc1(1234); + deserializeJson(doc1, "{\"hello\":\"world\"}"); + + JsonDocument doc2 = doc1; + + REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); + + REQUIRE(doc2.capacity() == doc1.capacity()); + } + + SECTION("Construct from JsonObject") { + JsonDocument doc1(200); + JsonObject obj = doc1.to(); + obj["hello"] = "world"; + + JsonDocument doc2 = obj; + + REQUIRE(doc2.as() == "{\"hello\":\"world\"}"); + REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); + } + + SECTION("Construct from JsonArray") { + JsonDocument doc1(200); + JsonArray arr = doc1.to(); + arr.add("hello"); + + JsonDocument doc2 = arr; + + REQUIRE(doc2.as() == "[\"hello\"]"); + REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); + } + + SECTION("Construct from JsonVariant") { + JsonDocument doc1(200); + deserializeJson(doc1, "42"); + + JsonDocument doc2 = doc1.as(); + + REQUIRE(doc2.as() == "42"); + REQUIRE(doc2.capacity() == addPadding(doc1.memoryUsage())); + } +} diff --git a/extras/tests/JsonDocument/memoryUsage.cpp b/extras/tests/JsonDocument/memoryUsage.cpp new file mode 100644 index 00000000..41e0393b --- /dev/null +++ b/extras/tests/JsonDocument/memoryUsage.cpp @@ -0,0 +1,52 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2023, Benoit BLANCHON +// MIT License + +#include +#include + +using ArduinoJson::detail::sizeofArray; +using ArduinoJson::detail::sizeofObject; + +TEST_CASE("JsonDocument::memoryUsage()") { + JsonDocument doc(4096); + + SECTION("starts at zero") { + REQUIRE(doc.memoryUsage() == 0); + } + + SECTION("sizeofArray(0)") { + doc.to(); + REQUIRE(doc.memoryUsage() == sizeofArray(0)); + } + + SECTION("sizeofArray(1)") { + doc.to().add(42); + REQUIRE(doc.memoryUsage() == sizeofArray(1)); + } + + SECTION("sizeofArray(1) + sizeofArray(0)") { + doc.to().createNestedArray(); + REQUIRE(doc.memoryUsage() == sizeofArray(1) + sizeofArray(0)); + } + + SECTION("Increases after adding value to array") { + JsonArray arr = doc.to(); + + REQUIRE(doc.memoryUsage() == sizeofArray(0)); + arr.add(42); + REQUIRE(doc.memoryUsage() == sizeofArray(1)); + arr.add(43); + REQUIRE(doc.memoryUsage() == sizeofArray(2)); + } + + SECTION("Increases after adding value to object") { + JsonObject obj = doc.to(); + + REQUIRE(doc.memoryUsage() == sizeofObject(0)); + obj["a"] = 1; + REQUIRE(doc.memoryUsage() == sizeofObject(1)); + obj["b"] = 2; + REQUIRE(doc.memoryUsage() == sizeofObject(2)); + } +}