feat: implement display name specializations for enums (#6238)
This commit is contained in:
@@ -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.*");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user