feat: implement display name specializations for enums (#6238)

This commit is contained in:
pajlada
2025-06-08 12:17:53 +02:00
committed by GitHub
parent 44c4745d27
commit f4cdae14ca
5 changed files with 292 additions and 10 deletions
+60
View File
@@ -3,11 +3,14 @@
#include "common/FlagsEnum.hpp"
#include "common/Literals.hpp"
#include "Test.hpp"
#include "util/QMagicEnumTagged.hpp"
using namespace chatterino;
using namespace literals;
using qmagicenum::enumCast;
using qmagicenum::enumDisplayName;
using qmagicenum::enumDisplayNameString;
using qmagicenum::enumFlagsName;
using qmagicenum::enumName;
using qmagicenum::enumNames;
@@ -38,6 +41,19 @@ enum class MyCustom {
Second = 9,
};
constexpr chatterino::qmagicenum::customize_t qmagicenumDisplayName(
MyCustom value) noexcept
{
switch (value)
{
case MyCustom::First:
return "First (Display Name)";
default:
return {};
}
}
enum MyOpen {
OpenOne = 11,
OpenTwo = 12,
@@ -198,3 +214,47 @@ TEST(QMagicEnum, caseInsensitive)
static_assert(checkInsensitive(MyCustom::Second, u"MySecond.*"));
static_assert(checkInsensitive(OpenOne, u"openone"));
}
TEST(QMagicEnumTagged, displayName)
{
// MyCustom has a display name specialization for First, but not for Default or Second
static_assert(eq(enumDisplayName<MyCustom::Default>(), u"Default"));
static_assert(eq(enumDisplayName(MyCustom::Default), u"Default"));
static_assert(eq(enumDisplayName(static_cast<MyCustom>(1)), u"Default"));
static_assert(
eq(enumDisplayName<MyCustom::First>(), u"First (Display Name)"));
static_assert(
eq(enumDisplayName(MyCustom::First), u"First (Display Name)"));
static_assert(
eq(enumDisplayName(static_cast<MyCustom>(4)), u"First (Display Name)"));
static_assert(eq(enumDisplayName<MyCustom::Second>(), u"mysecond.*"));
static_assert(eq(enumDisplayName(MyCustom::Second), u"mysecond.*"));
static_assert(eq(enumDisplayName(static_cast<MyCustom>(9)), u"mysecond.*"));
// MyFlag does not have a display name specialization
static_assert(eq(enumDisplayName<MyFlag::None>(), u"None"));
static_assert(eq(enumDisplayName<MyFlag::One>(), u"One"));
static_assert(eq(enumDisplayName<MyFlag::Two>(), u"Two"));
static_assert(eq(enumDisplayName<MyFlag::Four>(), u"Four"));
}
TEST(QMagicEnumTagged, enumDisplayNameString)
{
auto withSpecDN = enumDisplayNameString<MyCustom::First>();
ASSERT_EQ(withSpecDN, u"First (Display Name)");
auto withSpec = enumName<MyCustom::First>();
ASSERT_EQ(withSpec, u"myfirst");
auto withoutSpecDN = enumDisplayNameString<MyFlag::Eight>();
ASSERT_EQ(withoutSpecDN, u"Eight");
auto withoutSpec = enumName<MyFlag::Eight>();
ASSERT_EQ(withoutSpec, u"Eight");
auto secondWithSpecDN = enumDisplayNameString<MyCustom::Second>();
ASSERT_EQ(secondWithSpecDN, u"mysecond.*");
auto secondWithSpec = enumName<MyCustom::Second>();
ASSERT_EQ(secondWithSpec, u"mysecond.*");
}