Qt: Better wayland detection to enforce xcb

In certain cases, the platform can be "wayland-egl", "wayland-xcomposite", and other values for which I haven't found a full list yet. Instead of matching only "wayland", we now look for "wayland" anywhere in the `QT_QPA_PLATFORM` string in a case-insensitive manner.

Acknowledgements:
`CaseInsensitiveContains`' implementation was heavily inspired by GNU's non-standard glibc `strcasestr` function, which can be found here licensed under GPLv2 or later: https://ftp.gnu.org/gnu/libc/
This commit is contained in:
Joshua Vandaële
2025-08-04 19:34:31 +02:00
parent 6ca486ffb2
commit f8b85edd0c
4 changed files with 51 additions and 2 deletions

View File

@ -225,3 +225,34 @@ TEST(StringUtil, SplitPathWindowsPathWithDriveLetter)
EXPECT_EQ(extension, "");
}
#endif
TEST(StringUtil, CaseInsensitiveContains_BasicMatches)
{
EXPECT_TRUE(Common::CaseInsensitiveContains("hello world", "hello"));
EXPECT_TRUE(Common::CaseInsensitiveContains("hello world", "world"));
EXPECT_TRUE(Common::CaseInsensitiveContains("HELLO WORLD", "hello"));
EXPECT_TRUE(Common::CaseInsensitiveContains("HeLLo WoRLd", "WORLD"));
}
TEST(StringUtil, CaseInsensitiveContains_SubstringNotFound)
{
EXPECT_FALSE(Common::CaseInsensitiveContains("hello world", "hey"));
}
TEST(StringUtil, CaseInsensitiveContains_EmptyStrings)
{
EXPECT_TRUE(Common::CaseInsensitiveContains("", ""));
EXPECT_TRUE(Common::CaseInsensitiveContains("hello", ""));
EXPECT_FALSE(Common::CaseInsensitiveContains("", "world"));
}
TEST(StringUtil, CaseInsensitiveContains_EntireStringMatch)
{
EXPECT_TRUE(Common::CaseInsensitiveContains("Test", "TEST"));
}
TEST(StringUtil, CaseInsensitiveContains_OverlappingMatches)
{
EXPECT_TRUE(Common::CaseInsensitiveContains("aaaaaa", "aa"));
EXPECT_TRUE(Common::CaseInsensitiveContains("ababababa", "bABa"));
}