From 0a8f19db7aeafb89fb2a4bb9aab581e9bb94879e Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Sun, 30 Jun 2024 22:23:01 -0600 Subject: [PATCH] Test constructing strings from `nullptr` --- test/System/String.test.cpp | 120 ++++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 33 deletions(-) diff --git a/test/System/String.test.cpp b/test/System/String.test.cpp index 9d7111ade..06c822ace 100644 --- a/test/System/String.test.cpp +++ b/test/System/String.test.cpp @@ -240,17 +240,35 @@ TEST_CASE("[System] sf::String") SECTION("ANSI C string constructor") { - const sf::String string = "def"; - CHECK(std::string(string) == "def"s); - CHECK(std::wstring(string) == L"def"s); - CHECK(string.toAnsiString() == "def"s); - CHECK(string.toWideString() == L"def"s); - CHECK(string.toUtf8() == sf::U8String{'d', 'e', 'f'}); - CHECK(string.toUtf16() == u"def"s); - CHECK(string.toUtf32() == U"def"s); - CHECK(string.getSize() == 3); - CHECK(!string.isEmpty()); - CHECK(string.getData() != nullptr); + SECTION("Nullptr") + { + const sf::String string = static_cast(nullptr); + CHECK(std::string(string).empty()); + CHECK(std::wstring(string).empty()); + CHECK(string.toAnsiString().empty()); + CHECK(string.toWideString().empty()); + CHECK(string.toUtf8().empty()); + CHECK(string.toUtf16().empty()); + CHECK(string.toUtf32().empty()); + CHECK(string.getSize() == 0); + CHECK(string.isEmpty()); + CHECK(string.getData() != nullptr); + } + + SECTION("Non-empty string") + { + const sf::String string = "def"; + CHECK(std::string(string) == "def"s); + CHECK(std::wstring(string) == L"def"s); + CHECK(string.toAnsiString() == "def"s); + CHECK(string.toWideString() == L"def"s); + CHECK(string.toUtf8() == sf::U8String{'d', 'e', 'f'}); + CHECK(string.toUtf16() == u"def"s); + CHECK(string.toUtf32() == U"def"s); + CHECK(string.getSize() == 3); + CHECK(!string.isEmpty()); + CHECK(string.getData() != nullptr); + } } SECTION("ANSI string constructor") @@ -285,17 +303,35 @@ TEST_CASE("[System] sf::String") SECTION("Wide C string constructor") { - const sf::String string = L"j\xFAl"; - CHECK(std::string(string) == select("j\xFAl"s, "j\0l"s)); - CHECK(std::wstring(string) == L"j\xFAl"s); - CHECK(string.toAnsiString() == select("j\xFAl"s, "j\0l"s)); - CHECK(string.toWideString() == L"j\xFAl"s); - CHECK(string.toUtf8() == sf::U8String{'j', 0xC3, 0xBA, 'l'}); - CHECK(string.toUtf16() == u"j\xFAl"s); - CHECK(string.toUtf32() == U"j\xFAl"s); - CHECK(string.getSize() == 3); - CHECK(!string.isEmpty()); - CHECK(string.getData() != nullptr); + SECTION("Nullptr") + { + const sf::String string = static_cast(nullptr); + CHECK(std::string(string).empty()); + CHECK(std::wstring(string).empty()); + CHECK(string.toAnsiString().empty()); + CHECK(string.toWideString().empty()); + CHECK(string.toUtf8().empty()); + CHECK(string.toUtf16().empty()); + CHECK(string.toUtf32().empty()); + CHECK(string.getSize() == 0); + CHECK(string.isEmpty()); + CHECK(string.getData() != nullptr); + } + + SECTION("Non-empty string") + { + const sf::String string = L"j\xFAl"; + CHECK(std::string(string) == select("j\xFAl"s, "j\0l"s)); + CHECK(std::wstring(string) == L"j\xFAl"s); + CHECK(string.toAnsiString() == select("j\xFAl"s, "j\0l"s)); + CHECK(string.toWideString() == L"j\xFAl"s); + CHECK(string.toUtf8() == sf::U8String{'j', 0xC3, 0xBA, 'l'}); + CHECK(string.toUtf16() == u"j\xFAl"s); + CHECK(string.toUtf32() == U"j\xFAl"s); + CHECK(string.getSize() == 3); + CHECK(!string.isEmpty()); + CHECK(string.getData() != nullptr); + } } SECTION("Wide string constructor") @@ -330,17 +366,35 @@ TEST_CASE("[System] sf::String") SECTION("UTF-32 C string constructor") { - const sf::String string = U"\U0010ABCDrs"; - CHECK(std::string(string) == "\0rs"s); - CHECK(std::wstring(string) == select(L"rs"s, L"\U0010ABCDrs"s)); - CHECK(string.toAnsiString() == "\0rs"s); - CHECK(string.toWideString() == select(L"rs"s, L"\U0010ABCDrs"s)); - CHECK(string.toUtf8() == sf::U8String{0xF4, 0x8A, 0xAF, 0x8D, 'r', 's'}); - CHECK(string.toUtf16() == u"\U0010ABCDrs"s); - CHECK(string.toUtf32() == U"\U0010ABCDrs"s); - CHECK(string.getSize() == 3); - CHECK(!string.isEmpty()); - CHECK(string.getData() != nullptr); + SECTION("Nullptr") + { + const sf::String string = static_cast(nullptr); + CHECK(std::string(string).empty()); + CHECK(std::wstring(string).empty()); + CHECK(string.toAnsiString().empty()); + CHECK(string.toWideString().empty()); + CHECK(string.toUtf8().empty()); + CHECK(string.toUtf16().empty()); + CHECK(string.toUtf32().empty()); + CHECK(string.getSize() == 0); + CHECK(string.isEmpty()); + CHECK(string.getData() != nullptr); + } + + SECTION("Non-empty string") + { + const sf::String string = U"\U0010ABCDrs"; + CHECK(std::string(string) == "\0rs"s); + CHECK(std::wstring(string) == select(L"rs"s, L"\U0010ABCDrs"s)); + CHECK(string.toAnsiString() == "\0rs"s); + CHECK(string.toWideString() == select(L"rs"s, L"\U0010ABCDrs"s)); + CHECK(string.toUtf8() == sf::U8String{0xF4, 0x8A, 0xAF, 0x8D, 'r', 's'}); + CHECK(string.toUtf16() == u"\U0010ABCDrs"s); + CHECK(string.toUtf32() == U"\U0010ABCDrs"s); + CHECK(string.getSize() == 3); + CHECK(!string.isEmpty()); + CHECK(string.getData() != nullptr); + } } SECTION("UTF-32 string constructor")