Update to ArduinoJson 7.0.4

This commit is contained in:
iranl
2024-04-19 14:44:01 +02:00
parent 1378732081
commit 81be0a689a
444 changed files with 10842 additions and 9422 deletions

View File

@@ -0,0 +1,69 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
#include <string>
using ArduinoJson::detail::is_base_of;
static std::string allocatorLog;
struct CustomAllocator {
CustomAllocator() {
allocatorLog = "";
}
void* allocate(size_t n) {
allocatorLog += "A";
return malloc(n);
}
void deallocate(void* p) {
free(p);
allocatorLog += "D";
}
void* reallocate(void* p, size_t n) {
allocatorLog += "R";
return realloc(p, n);
}
};
TEST_CASE("BasicJsonDocument") {
allocatorLog.clear();
SECTION("is a JsonDocument") {
REQUIRE(
is_base_of<JsonDocument, BasicJsonDocument<CustomAllocator>>::value ==
true);
}
SECTION("deserialize / serialize") {
BasicJsonDocument<CustomAllocator> doc(256);
deserializeJson(doc, "{\"hello\":\"world\"}");
REQUIRE(doc.as<std::string>() == "{\"hello\":\"world\"}");
doc.clear();
REQUIRE(allocatorLog == "ARAARDDD");
}
SECTION("copy") {
BasicJsonDocument<CustomAllocator> doc(256);
doc["hello"] = "world";
auto copy = doc;
REQUIRE(copy.as<std::string>() == "{\"hello\":\"world\"}");
REQUIRE(allocatorLog == "AA");
}
SECTION("capacity") {
BasicJsonDocument<CustomAllocator> doc(256);
REQUIRE(doc.capacity() == 256);
}
SECTION("garbageCollect()") {
BasicJsonDocument<CustomAllocator> doc(256);
doc.garbageCollect();
}
}

View File

@@ -0,0 +1,34 @@
# ArduinoJson - https://arduinojson.org
# Copyright © 2014-2024, Benoit BLANCHON
# MIT License
if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
add_compile_options(
-w
)
endif()
if(MSVC)
add_compile_options(
/wd4996
)
endif()
add_executable(DeprecatedTests
add.cpp
createNestedArray.cpp
createNestedObject.cpp
BasicJsonDocument.cpp
DynamicJsonDocument.cpp
macros.cpp
memoryUsage.cpp
shallowCopy.cpp
StaticJsonDocument.cpp
)
add_test(Deprecated DeprecatedTests)
set_tests_properties(Deprecated
PROPERTIES
LABELS "Catch"
)

View File

@@ -0,0 +1,37 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
using ArduinoJson::detail::is_base_of;
TEST_CASE("DynamicJsonDocument") {
SECTION("is a JsonDocument") {
REQUIRE(is_base_of<JsonDocument, DynamicJsonDocument>::value == true);
}
SECTION("deserialize / serialize") {
DynamicJsonDocument doc(256);
deserializeJson(doc, "{\"hello\":\"world\"}");
REQUIRE(doc.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("copy") {
DynamicJsonDocument doc(256);
doc["hello"] = "world";
auto copy = doc;
REQUIRE(copy.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("capacity") {
DynamicJsonDocument doc(256);
REQUIRE(doc.capacity() == 256);
}
SECTION("garbageCollect()") {
DynamicJsonDocument doc(256);
doc.garbageCollect();
}
}

View File

@@ -0,0 +1,32 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
using ArduinoJson::detail::is_base_of;
TEST_CASE("StaticJsonDocument") {
SECTION("is a JsonDocument") {
REQUIRE(is_base_of<JsonDocument, StaticJsonDocument<256>>::value == true);
}
SECTION("deserialize / serialize") {
StaticJsonDocument<256> doc;
deserializeJson(doc, "{\"hello\":\"world\"}");
REQUIRE(doc.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("copy") {
StaticJsonDocument<256> doc;
doc["hello"] = "world";
auto copy = doc;
REQUIRE(copy.as<std::string>() == "{\"hello\":\"world\"}");
}
SECTION("capacity") {
StaticJsonDocument<256> doc;
REQUIRE(doc.capacity() == 256);
}
}

View File

@@ -0,0 +1,38 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArray::add()") {
JsonDocument doc;
JsonArray array = doc.to<JsonArray>();
array.add().set(42);
REQUIRE(doc.as<std::string>() == "[42]");
}
TEST_CASE("JsonDocument::add()") {
JsonDocument doc;
doc.add().set(42);
REQUIRE(doc.as<std::string>() == "[42]");
}
TEST_CASE("ElementProxy::add()") {
JsonDocument doc;
doc[0].add().set(42);
REQUIRE(doc.as<std::string>() == "[[42]]");
}
TEST_CASE("MemberProxy::add()") {
JsonDocument doc;
doc["x"].add().set(42);
REQUIRE(doc.as<std::string>() == "{\"x\":[42]}");
}
TEST_CASE("JsonVariant::add()") {
JsonDocument doc;
JsonVariant v = doc.add();
v.add().set(42);
REQUIRE(doc.as<std::string>() == "[[42]]");
}

View File

@@ -0,0 +1,111 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
#include <string>
TEST_CASE("JsonDocument::createNestedArray()") {
JsonDocument doc;
SECTION("createNestedArray()") {
JsonArray array = doc.createNestedArray();
array.add(42);
REQUIRE(doc.as<std::string>() == "[[42]]");
}
SECTION("createNestedArray(const char*)") {
JsonArray array = doc.createNestedArray("key");
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
SECTION("createNestedArray(std::string)") {
JsonArray array = doc.createNestedArray(std::string("key"));
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedArray(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonArray array = doc.createNestedArray(vla);
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#endif
}
TEST_CASE("JsonArray::createNestedArray()") {
JsonDocument doc;
JsonArray array = doc.to<JsonArray>();
JsonArray nestedArray = array.createNestedArray();
nestedArray.add(42);
REQUIRE(doc.as<std::string>() == "[[42]]");
}
TEST_CASE("JsonObject::createNestedArray()") {
JsonDocument doc;
JsonObject object = doc.to<JsonObject>();
SECTION("createNestedArray(const char*)") {
JsonArray array = object.createNestedArray("key");
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
SECTION("createNestedArray(std::string)") {
JsonArray array = object.createNestedArray(std::string("key"));
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedArray(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonArray array = object.createNestedArray(vla);
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#endif
}
TEST_CASE("JsonVariant::createNestedArray()") {
JsonDocument doc;
JsonVariant variant = doc.to<JsonVariant>();
SECTION("createNestedArray()") {
JsonArray array = variant.createNestedArray();
array.add(42);
REQUIRE(doc.as<std::string>() == "[[42]]");
}
SECTION("createNestedArray(const char*)") {
JsonArray array = variant.createNestedArray("key");
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
SECTION("createNestedArray(std::string)") {
JsonArray array = variant.createNestedArray(std::string("key"));
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedArray(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonArray array = variant.createNestedArray(vla);
array.add(42);
REQUIRE(doc.as<std::string>() == "{\"key\":[42]}");
}
#endif
}

View File

@@ -0,0 +1,111 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
#include <string>
TEST_CASE("JsonDocument::createNestedObject()") {
JsonDocument doc;
SECTION("createNestedObject()") {
JsonObject object = doc.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
SECTION("createNestedObject(const char*)") {
JsonObject object = doc.createNestedObject("key");
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject object = doc.createNestedObject(std::string("key"));
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject object = doc.createNestedObject(vla);
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}
TEST_CASE("JsonArray::createNestedObject()") {
JsonDocument doc;
JsonArray array = doc.to<JsonArray>();
JsonObject object = array.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
TEST_CASE("JsonObject::createNestedObject()") {
JsonDocument doc;
JsonObject object = doc.to<JsonObject>();
SECTION("createNestedObject(const char*)") {
JsonObject nestedObject = object.createNestedObject("key");
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject nestedObject = object.createNestedObject(std::string("key"));
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject nestedObject = object.createNestedObject(vla);
nestedObject["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}
TEST_CASE("JsonVariant::createNestedObject()") {
JsonDocument doc;
JsonVariant variant = doc.to<JsonVariant>();
SECTION("createNestedObject()") {
JsonObject object = variant.createNestedObject();
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "[{\"hello\":\"world\"}]");
}
SECTION("createNestedObject(const char*)") {
JsonObject object = variant.createNestedObject("key");
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
SECTION("createNestedObject(std::string)") {
JsonObject object = variant.createNestedObject(std::string("key"));
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#ifdef HAS_VARIABLE_LENGTH_ARRAY
SECTION("createNestedObject(VLA)") {
size_t i = 16;
char vla[i];
strcpy(vla, "key");
JsonObject object = variant.createNestedObject(vla);
object["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"key\":{\"hello\":\"world\"}}");
}
#endif
}

View File

@@ -0,0 +1,18 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JSON_ARRAY_SIZE") {
REQUIRE(JSON_ARRAY_SIZE(10) == ArduinoJson::detail::sizeofArray(10));
}
TEST_CASE("JSON_OBJECT_SIZE") {
REQUIRE(JSON_OBJECT_SIZE(10) == ArduinoJson::detail::sizeofObject(10));
}
TEST_CASE("JSON_STRING_SIZE") {
REQUIRE(JSON_STRING_SIZE(10) == 11); // issue #2054
}

View File

@@ -0,0 +1,51 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("JsonArray::memoryUsage()") {
JsonArray array;
REQUIRE(array.memoryUsage() == 0);
}
TEST_CASE("JsonArrayConst::memoryUsage()") {
JsonArrayConst array;
REQUIRE(array.memoryUsage() == 0);
}
TEST_CASE("JsonDocument::memoryUsage()") {
JsonDocument doc;
REQUIRE(doc.memoryUsage() == 0);
}
TEST_CASE("JsonObject::memoryUsage()") {
JsonObject array;
REQUIRE(array.memoryUsage() == 0);
}
TEST_CASE("JsonObjectConst::memoryUsage()") {
JsonObjectConst array;
REQUIRE(array.memoryUsage() == 0);
}
TEST_CASE("JsonVariant::memoryUsage()") {
JsonVariant doc;
REQUIRE(doc.memoryUsage() == 0);
}
TEST_CASE("JsonVariantConst::memoryUsage()") {
JsonVariantConst doc;
REQUIRE(doc.memoryUsage() == 0);
}
TEST_CASE("ElementProxy::memoryUsage()") {
JsonDocument doc;
REQUIRE(doc[0].memoryUsage() == 0);
}
TEST_CASE("MemberProxy::memoryUsage()") {
JsonDocument doc;
REQUIRE(doc["hello"].memoryUsage() == 0);
}

View File

@@ -0,0 +1,14 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("shallowCopy()") {
JsonDocument doc1, doc2;
doc1["b"] = "c";
doc2["a"].shallowCopy(doc1);
REQUIRE(doc2.as<std::string>() == "{\"a\":{\"b\":\"c\"}}");
}