Update libs

This commit is contained in:
iranl
2024-12-03 12:20:47 +01:00
parent 8a23eb3d03
commit a14074fd6d
62 changed files with 561 additions and 190 deletions

View File

@@ -6,6 +6,7 @@ add_executable(MiscTests
arithmeticCompare.cpp
conflicts.cpp
issue1967.cpp
issue2129.cpp
JsonString.cpp
NoArduinoHeader.cpp
printable.cpp

View File

@@ -12,77 +12,101 @@
#include "custom_string.hpp"
#include "weird_strcmp.hpp"
using ArduinoJson::JsonString;
using namespace ArduinoJson::detail;
TEST_CASE("ZeroTerminatedRamString") {
SECTION("null") {
ZeroTerminatedRamString s = adaptString(static_cast<const char*>(0));
TEST_CASE("adaptString()") {
SECTION("null const char*") {
auto s = adaptString(static_cast<const char*>(0));
CHECK(s.isNull() == true);
CHECK(s.size() == 0);
CHECK(s.isLinked() == true);
}
SECTION("non-null") {
ZeroTerminatedRamString s = adaptString("bravo");
SECTION("non-null const char*") {
auto s = adaptString("bravo");
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == true);
}
}
TEST_CASE("SizedRamString") {
SECTION("null") {
SizedRamString s = adaptString(static_cast<const char*>(0), 10);
SECTION("null const char* + size") {
auto s = adaptString(static_cast<const char*>(0), 10);
CHECK(s.isNull() == true);
CHECK(s.isLinked() == false);
}
SECTION("non-null") {
SizedRamString s = adaptString("bravo", 5);
SECTION("non-null const char* + size") {
auto s = adaptString("bravo", 5);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
}
TEST_CASE("FlashString") {
SECTION("null") {
FlashString s = adaptString(static_cast<const __FlashStringHelper*>(0));
SECTION("null Flash string") {
auto s = adaptString(static_cast<const __FlashStringHelper*>(0));
CHECK(s.isNull() == true);
CHECK(s.size() == 0);
CHECK(s.isLinked() == false);
}
SECTION("non-null") {
FlashString s = adaptString(F("bravo"));
SECTION("non-null Flash string") {
auto s = adaptString(F("bravo"));
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
}
TEST_CASE("std::string") {
std::string orig("bravo");
SizedRamString s = adaptString(orig);
SECTION("std::string") {
std::string orig("bravo");
auto s = adaptString(orig);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
}
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
TEST_CASE("Arduino String") {
::String orig("bravo");
SizedRamString s = adaptString(orig);
SECTION("Arduino String") {
::String orig("bravo");
auto s = adaptString(orig);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
}
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
TEST_CASE("custom_string") {
custom_string orig("bravo");
SizedRamString s = adaptString(orig);
SECTION("custom_string") {
custom_string orig("bravo");
auto s = adaptString(orig);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
SECTION("JsonString linked") {
JsonString orig("hello", JsonString::Ownership::Linked);
auto s = adaptString(orig);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == true);
}
SECTION("JsonString copied") {
JsonString orig("hello", JsonString::Ownership::Copied);
auto s = adaptString(orig);
CHECK(s.isNull() == false);
CHECK(s.size() == 5);
CHECK(s.isLinked() == false);
}
}
struct EmptyStruct {};
@@ -97,6 +121,7 @@ TEST_CASE("IsString<T>") {
CHECK(IsString<::String>::value == true);
CHECK(IsString<::StringSumHelper>::value == true);
CHECK(IsString<const EmptyStruct*>::value == false);
CHECK(IsString<JsonString>::value == true);
}
TEST_CASE("stringCompare") {

View File

@@ -8,4 +8,4 @@
struct custom_char_traits : std::char_traits<char> {};
typedef std::basic_string<char, custom_char_traits> custom_string;
using custom_string = std::basic_string<char, custom_char_traits>;

View File

@@ -0,0 +1,55 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2024, Benoit BLANCHON
// MIT License
#include <ArduinoJson.h>
#include <catch.hpp>
template <typename T>
class Nullable {
public:
Nullable() : value_{} {}
Nullable(T value) : value_{value} {}
operator T() const {
return value_;
}
operator T&() {
return value_;
}
bool is_valid() const {
return value_ != invalid_value_;
}
T value() const {
return value_;
}
private:
T value_;
static T invalid_value_;
};
template <>
float Nullable<float>::invalid_value_ = std::numeric_limits<float>::lowest();
template <typename T>
void convertToJson(const Nullable<T>& src, JsonVariant dst) {
if (src.is_valid()) {
dst.set(src.value());
} else {
dst.clear();
}
}
TEST_CASE("Issue #2129") {
Nullable<float> nullable_value = Nullable<float>{123.4f};
JsonDocument doc;
doc["value"] = nullable_value;
REQUIRE(doc["value"].as<float>() == Approx(123.4f));
}