// ArduinoJson - https://arduinojson.org // Copyright Benoit Blanchon 2014-2021 // MIT License #define ARDUINOJSON_ENABLE_PROGMEM 1 #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 #include "custom_string.hpp" #include "progmem_emulation.hpp" #include "weird_strcmp.hpp" #include <ArduinoJson/Strings/StringAdapters.hpp> #include <catch.hpp> using namespace ARDUINOJSON_NAMESPACE; TEST_CASE("const char*") { SECTION("null") { StringAdapter<const char*> adapter(NULL); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); CHECK(adapter.size() == 0); } SECTION("non-null") { StringAdapter<const char*> adapter("bravo"); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } } TEST_CASE("const char* + size") { SECTION("null") { StringAdapter<const char*, true> adapter(NULL, 10); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); CHECK(adapter.size() == 10); } SECTION("non-null") { StringAdapter<const char*, true> adapter("bravo", 5); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } } TEST_CASE("const __FlashStringHelper*") { SECTION("null") { StringAdapter<const __FlashStringHelper*> adapter(NULL); CHECK(adapter.compare("bravo") < 0); CHECK(adapter.compare(NULL) == 0); CHECK(adapter.size() == 0); } SECTION("non-null") { StringAdapter<const __FlashStringHelper*> adapter = adaptString(F("bravo")); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } } TEST_CASE("std::string") { std::string str("bravo"); StringAdapter<std::string> adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } TEST_CASE("Arduino String") { ::String str("bravo"); StringAdapter< ::String> adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } TEST_CASE("custom_string") { custom_string str("bravo"); StringAdapter<custom_string> adapter(str); CHECK(adapter.compare(NULL) > 0); CHECK(adapter.compare("alpha") > 0); CHECK(adapter.compare("bravo") == 0); CHECK(adapter.compare("charlie") < 0); CHECK(adapter.size() == 5); } TEST_CASE("IsString<T>") { SECTION("std::string") { CHECK(IsString<std::string>::value == true); } SECTION("basic_string<wchar_t>") { CHECK(IsString<std::basic_string<wchar_t> >::value == false); } SECTION("custom_string") { CHECK(IsString<custom_string>::value == true); } SECTION("const __FlashStringHelper*") { CHECK(IsString<const __FlashStringHelper*>::value == true); } SECTION("const char*") { CHECK(IsString<const char*>::value == true); } SECTION("const char[]") { CHECK(IsString<const char[8]>::value == true); } }