From b94f1498542be0e83fe8060a50bce5ff2d5a1c39 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Fri, 8 May 2026 15:31:02 +0100 Subject: config: allow hashes for parsing colors (#14337) --- tests/config/shared/ParserUtils.cpp | 69 +++++++++++++++++++++++++++++++++++++ tests/helpers/MiscFunctions.cpp | 46 ------------------------- 2 files changed, 69 insertions(+), 46 deletions(-) create mode 100644 tests/config/shared/ParserUtils.cpp (limited to 'tests') diff --git a/tests/config/shared/ParserUtils.cpp b/tests/config/shared/ParserUtils.cpp new file mode 100644 index 00000000..76b516b4 --- /dev/null +++ b/tests/config/shared/ParserUtils.cpp @@ -0,0 +1,69 @@ + +#include + +#include + +using namespace Config; + +TEST(ParserUtils, parseIntDecimal) { + EXPECT_EQ(ParserUtils::parseInt("42").value(), 42); + EXPECT_EQ(ParserUtils::parseInt("0").value(), 0); + EXPECT_EQ(ParserUtils::parseInt("-1").value(), -1); +} + +TEST(ParserUtils, parseIntHex) { + EXPECT_EQ(ParserUtils::parseInt("0xFF").value(), 255); + EXPECT_EQ(ParserUtils::parseInt("0x00").value(), 0); + EXPECT_EQ(ParserUtils::parseInt("0x10").value(), 16); +} + +TEST(ParserUtils, parseIntBooleanStrings) { + // "true", "yes", "on" -> 1; "false", "no", "off" -> 0 + EXPECT_EQ(ParserUtils::parseInt("true").value(), 1); + EXPECT_EQ(ParserUtils::parseInt("yes").value(), 1); + EXPECT_EQ(ParserUtils::parseInt("on").value(), 1); + EXPECT_EQ(ParserUtils::parseInt("false").value(), 0); + EXPECT_EQ(ParserUtils::parseInt("no").value(), 0); + EXPECT_EQ(ParserUtils::parseInt("off").value(), 0); +} + +TEST(ParserUtils, parseIntInvalid) { + EXPECT_FALSE(ParserUtils::parseInt("").has_value()); + EXPECT_FALSE(ParserUtils::parseInt("abc").has_value()); + EXPECT_FALSE(ParserUtils::parseInt("rgba(20,20,20,5)").has_value()); + EXPECT_FALSE(ParserUtils::parseInt("#fff").has_value()); +} + +TEST(ParserUtils, parseColor) { + EXPECT_EQ(ParserUtils::parseColor("0xDEADBEEF").value_or(0), 0xDEADBEEF); + EXPECT_EQ(ParserUtils::parseColor("rgba(20, 21, 22, 0.5)").value_or(0), 0x7F141516); + EXPECT_EQ(ParserUtils::parseColor("rgb(20, 21, 22)").value_or(0), 0xFF141516); + EXPECT_EQ(ParserUtils::parseColor("rgb(141516)").value_or(0), 0xFF141516); + EXPECT_EQ(ParserUtils::parseColor("rgba(1415167f)").value_or(0), 0x7F141516); + EXPECT_EQ(ParserUtils::parseColor("4279506198").value_or(0), 0xFF141516); + EXPECT_EQ(ParserUtils::parseColor("1").value_or(0), 0x1); + EXPECT_EQ(ParserUtils::parseColor("#fed").value_or(0), 0xFFFFEEDD); + EXPECT_EQ(ParserUtils::parseColor("#FED").value_or(0), 0xFFFFEEDD); + EXPECT_EQ(ParserUtils::parseColor("#deffad").value_or(0), 0xFFDEFFAD); + EXPECT_EQ(ParserUtils::parseColor("#DEFFaD").value_or(0), 0xFFDEFFAD); + EXPECT_EQ(ParserUtils::parseColor("#DEFFaDAA").value_or(0), 0xAADEFFAD); + EXPECT_EQ(ParserUtils::parseColor("#DEFFaDaa").value_or(0), 0xAADEFFAD); +} + +TEST(ParserUtils, parseColorBad) { + EXPECT_FALSE(!!ParserUtils::parseColor("mak")); + EXPECT_FALSE(!!ParserUtils::parseColor("true")); + EXPECT_FALSE(!!ParserUtils::parseColor("on")); + EXPECT_FALSE(!!ParserUtils::parseColor("fucker")); + EXPECT_FALSE(!!ParserUtils::parseColor("I sniff glue")); + EXPECT_FALSE(!!ParserUtils::parseColor("0DEADBEEF")); + EXPECT_FALSE(!!ParserUtils::parseColor("6270000000")); + EXPECT_FALSE(!!ParserUtils::parseColor("rgba(20, 21, 22)")); + EXPECT_FALSE(!!ParserUtils::parseColor("rgb(20, 21, 22, 0.2)")); + EXPECT_FALSE(!!ParserUtils::parseColor("#afed")); + EXPECT_FALSE(!!ParserUtils::parseColor("#FE")); + EXPECT_FALSE(!!ParserUtils::parseColor("#defd")); + EXPECT_FALSE(!!ParserUtils::parseColor("#DEFFD")); + EXPECT_FALSE(!!ParserUtils::parseColor("#DEFFaDAAe")); + EXPECT_FALSE(!!ParserUtils::parseColor("#DEFFaDa")); +} \ No newline at end of file diff --git a/tests/helpers/MiscFunctions.cpp b/tests/helpers/MiscFunctions.cpp index e0857987..4eefb5d3 100644 --- a/tests/helpers/MiscFunctions.cpp +++ b/tests/helpers/MiscFunctions.cpp @@ -97,49 +97,3 @@ TEST(Helpers, truthyFalse) { EXPECT_FALSE(truthy("")); EXPECT_FALSE(truthy("random")); } - -// configStringToInt - -TEST(Helpers, configStringToIntDecimal) { - EXPECT_EQ(configStringToInt("42").value(), 42); - EXPECT_EQ(configStringToInt("0").value(), 0); - EXPECT_EQ(configStringToInt("-1").value(), -1); -} - -TEST(Helpers, configStringToIntHex) { - EXPECT_EQ(configStringToInt("0xFF").value(), 255); - EXPECT_EQ(configStringToInt("0x00").value(), 0); - EXPECT_EQ(configStringToInt("0x10").value(), 16); -} - -TEST(Helpers, configStringToIntRgba) { - auto result = configStringToInt("rgba(255, 0, 0, 1.0)"); - EXPECT_TRUE(result.has_value()); -} - -TEST(Helpers, configStringToIntBooleanStrings) { - // "true", "yes", "on" -> 1; "false", "no", "off" -> 0 - EXPECT_EQ(configStringToInt("true").value(), 1); - EXPECT_EQ(configStringToInt("yes").value(), 1); - EXPECT_EQ(configStringToInt("on").value(), 1); - EXPECT_EQ(configStringToInt("false").value(), 0); - EXPECT_EQ(configStringToInt("no").value(), 0); - EXPECT_EQ(configStringToInt("off").value(), 0); -} - -TEST(Helpers, configStringToIntInvalid) { - EXPECT_FALSE(configStringToInt("").has_value()); - EXPECT_FALSE(configStringToInt("abc").has_value()); -} - -// configStringToVector2D - -TEST(Helpers, configStringToVector2DValid) { - EXPECT_EQ(configStringToVector2D("1920 1080"), Vector2D(1920, 1080)); - EXPECT_EQ(configStringToVector2D("0 0"), Vector2D(0, 0)); -} - -TEST(Helpers, configStringToVector2DInvalid) { - EXPECT_THROW(configStringToVector2D("notvalid"), std::invalid_argument); - EXPECT_THROW(configStringToVector2D(""), std::invalid_argument); -} -- cgit v1.2.3