2021-03-29 17:14:01 +02:00
|
|
|
// ArduinoJson - https://arduinojson.org
|
2022-01-01 10:00:54 +01:00
|
|
|
// Copyright © 2014-2022, Benoit BLANCHON
|
2019-05-23 21:54:42 +02:00
|
|
|
// MIT License
|
|
|
|
|
2021-07-27 12:06:44 +02:00
|
|
|
#define ARDUINOJSON_ENABLE_PROGMEM 1
|
|
|
|
#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
|
|
|
|
|
2019-08-12 14:21:45 +02:00
|
|
|
#include "custom_string.hpp"
|
2020-02-27 11:44:09 +01:00
|
|
|
#include "weird_strcmp.hpp"
|
2020-02-16 17:56:47 +01:00
|
|
|
|
2022-10-26 17:20:33 +02:00
|
|
|
#include <ArduinoJson/Strings/IsString.hpp>
|
2021-07-27 12:06:44 +02:00
|
|
|
#include <ArduinoJson/Strings/StringAdapters.hpp>
|
2020-02-16 17:56:47 +01:00
|
|
|
|
|
|
|
#include <catch.hpp>
|
2019-05-23 21:54:42 +02:00
|
|
|
|
|
|
|
using namespace ARDUINOJSON_NAMESPACE;
|
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
TEST_CASE("ZeroTerminatedRamString") {
|
2019-05-23 21:54:42 +02:00
|
|
|
SECTION("null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
ZeroTerminatedRamString s = adaptString(static_cast<const char*>(0));
|
2019-05-23 21:54:42 +02:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == true);
|
|
|
|
CHECK(s.size() == 0);
|
2019-05-23 21:54:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("non-null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
ZeroTerminatedRamString s = adaptString("bravo");
|
2019-05-23 21:54:42 +02:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2020-02-27 11:44:09 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
TEST_CASE("SizedRamString") {
|
2020-02-27 11:44:09 +01:00
|
|
|
SECTION("null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
SizedRamString s = adaptString(static_cast<const char*>(0), 10);
|
2020-02-27 11:44:09 +01:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == true);
|
2020-02-27 11:44:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("non-null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
SizedRamString s = adaptString("bravo", 5);
|
2020-02-27 11:44:09 +01:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2020-02-16 17:56:47 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
TEST_CASE("FlashString") {
|
2020-02-16 17:56:47 +01:00
|
|
|
SECTION("null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
FlashString s = adaptString(static_cast<const __FlashStringHelper*>(0));
|
2020-02-16 17:56:47 +01:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == true);
|
|
|
|
CHECK(s.size() == 0);
|
2020-02-16 17:56:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("non-null") {
|
2021-11-21 15:07:56 +01:00
|
|
|
FlashString s = adaptString(F("bravo"));
|
2020-02-16 17:56:47 +01:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2019-05-23 21:54:42 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-12 14:21:45 +02:00
|
|
|
TEST_CASE("std::string") {
|
2021-11-21 15:07:56 +01:00
|
|
|
std::string orig("bravo");
|
|
|
|
SizedRamString s = adaptString(orig);
|
2019-05-23 21:54:42 +02:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2020-07-21 20:15:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("Arduino String") {
|
2021-11-21 15:07:56 +01:00
|
|
|
::String orig("bravo");
|
|
|
|
SizedRamString s = adaptString(orig);
|
2020-07-21 20:15:31 +02:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2019-05-23 21:54:42 +02:00
|
|
|
}
|
2019-08-12 14:21:45 +02:00
|
|
|
|
|
|
|
TEST_CASE("custom_string") {
|
2021-11-21 15:07:56 +01:00
|
|
|
custom_string orig("bravo");
|
|
|
|
SizedRamString s = adaptString(orig);
|
2019-08-12 14:21:45 +02:00
|
|
|
|
2021-11-21 15:07:56 +01:00
|
|
|
CHECK(s.isNull() == false);
|
|
|
|
CHECK(s.size() == 5);
|
2019-08-12 14:21:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("IsString<T>") {
|
|
|
|
SECTION("std::string") {
|
2020-02-27 11:44:09 +01:00
|
|
|
CHECK(IsString<std::string>::value == true);
|
2019-08-12 14:21:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("basic_string<wchar_t>") {
|
2020-02-27 11:44:09 +01:00
|
|
|
CHECK(IsString<std::basic_string<wchar_t> >::value == false);
|
2019-08-12 14:21:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("custom_string") {
|
2020-02-27 11:44:09 +01:00
|
|
|
CHECK(IsString<custom_string>::value == true);
|
2019-08-12 14:21:45 +02:00
|
|
|
}
|
2020-02-16 17:56:47 +01:00
|
|
|
|
|
|
|
SECTION("const __FlashStringHelper*") {
|
2020-02-27 11:44:09 +01:00
|
|
|
CHECK(IsString<const __FlashStringHelper*>::value == true);
|
2020-02-16 17:56:47 +01:00
|
|
|
}
|
2020-07-08 09:38:27 +02:00
|
|
|
|
|
|
|
SECTION("const char*") {
|
|
|
|
CHECK(IsString<const char*>::value == true);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("const char[]") {
|
|
|
|
CHECK(IsString<const char[8]>::value == true);
|
|
|
|
}
|
2019-08-12 14:21:45 +02:00
|
|
|
}
|
2021-11-21 15:07:56 +01:00
|
|
|
|
|
|
|
TEST_CASE("stringCompare") {
|
|
|
|
SECTION("ZeroTerminatedRamString vs ZeroTerminatedRamString") {
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("alpha")) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("bravo")) == 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("charlie")) < 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("ZeroTerminatedRamString vs SizedRamString") {
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("alpha?", 5)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("bravo?", 4)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("bravo?", 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("bravo?", 6)) < 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString("charlie?", 7)) < 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("SizedRamString vs SizedRamString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("alpha?", 5)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("bravo?", 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("charlie?", 7)) < 0);
|
|
|
|
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("bravo!", 4)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("bravo!", 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo!", 5), adaptString("bravo!", 6)) < 0);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("FlashString vs FlashString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString(F("alpha"))) > 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString(F("bravo"))) == 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString(F("charlie"))) < 0);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("FlashString vs SizedRamString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("alpha?", 5)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("bravo?", 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("charlie?", 7)) < 0);
|
|
|
|
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("bravo!", 4)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("bravo!", 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString(F("bravo")), adaptString("bravo!", 6)) < 0);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("ZeroTerminatedRamString vs FlashString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString(F("alpha?"), 5)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString(F("bravo?"), 4)) > 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString(F("bravo?"), 5)) == 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString(F("bravo?"), 6)) < 0);
|
|
|
|
CHECK(stringCompare(adaptString("bravo"), adaptString(F("charlie?"), 7)) < 0);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("stringEquals()") {
|
|
|
|
SECTION("ZeroTerminatedRamString vs ZeroTerminatedRamString") {
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("brav")) == false);
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("bravo")) == true);
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("bravo!")) == false);
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("ZeroTerminatedRamString vs SizedRamString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("bravo!", 4)) == false);
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("bravo!", 5)) == true);
|
|
|
|
CHECK(stringEquals(adaptString("bravo"), adaptString("bravo!", 6)) == false);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("FlashString vs SizedRamString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringEquals(adaptString(F("bravo")), adaptString("bravo!", 4)) == false);
|
|
|
|
CHECK(stringEquals(adaptString(F("bravo")), adaptString("bravo!", 5)) == true);
|
|
|
|
CHECK(stringEquals(adaptString(F("bravo")), adaptString("bravo!", 6)) == false);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("SizedRamString vs SizedRamString") {
|
|
|
|
// clang-format off
|
|
|
|
CHECK(stringEquals(adaptString("bravo?", 5), adaptString("bravo!", 4)) == false);
|
|
|
|
CHECK(stringEquals(adaptString("bravo?", 5), adaptString("bravo!", 5)) == true);
|
|
|
|
CHECK(stringEquals(adaptString("bravo?", 5), adaptString("bravo!", 6)) == false);
|
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
}
|