aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/string/unittests/enum_ut.cpp
diff options
context:
space:
mode:
authorbabenko <babenko@yandex-team.com>2024-10-26 23:13:30 +0300
committerbabenko <babenko@yandex-team.com>2024-10-26 23:30:14 +0300
commit41d598c624442bf6918407466dac3316b8277347 (patch)
tree5895b8823d4f887e1e5ab4f99cbac991dca5ca17 /library/cpp/yt/string/unittests/enum_ut.cpp
parentddabd4ddff87ac13bfc87ef02af352216a0f4e13 (diff)
downloadydb-41d598c624442bf6918407466dac3316b8277347.tar.gz
YT-22885: DEFINE_ENUM_UNKNOWN_VALUE, string-related conversions
commit_hash:14c7e42422af750383f04855b4a7ea6b267b92d2
Diffstat (limited to 'library/cpp/yt/string/unittests/enum_ut.cpp')
-rw-r--r--library/cpp/yt/string/unittests/enum_ut.cpp46
1 files changed, 44 insertions, 2 deletions
diff --git a/library/cpp/yt/string/unittests/enum_ut.cpp b/library/cpp/yt/string/unittests/enum_ut.cpp
index be5387151a..39dbdfd207 100644
--- a/library/cpp/yt/string/unittests/enum_ut.cpp
+++ b/library/cpp/yt/string/unittests/enum_ut.cpp
@@ -27,13 +27,39 @@ DEFINE_BIT_ENUM(ELangs,
((Rust) (0x04))
((Python) (0x08))
((JavaScript) (0x10))
+ ((CppGo) (0x03))
+ ((All) (0x1f))
);
+DEFINE_BIT_ENUM(ELangsWithUnknown,
+ ((None) (0x00))
+ ((Cpp) (0x01))
+ ((Go) (0x02))
+ ((Rust) (0x04))
+ ((Python) (0x08))
+ ((JavaScript) (0x10))
+ ((CppGo) (0x03))
+ ((All) (0x1f))
+ ((Unknown) (0x20))
+);
+DEFINE_ENUM_UNKNOWN_VALUE(ELangsWithUnknown, Unknown);
+
DEFINE_ENUM(ECustomDomainName,
((A) (1) ("value_a"))
((B) (2) ("value_b"))
);
+DEFINE_ENUM(EColorWithUnknown,
+ (Red)
+ (Green)
+ (Unknown)
+);
+DEFINE_ENUM_UNKNOWN_VALUE(EColorWithUnknown, Unknown);
+
+DEFINE_BIT_ENUM(EBitEnumWithoutNone,
+ ((Some)(1))
+);
+
TEST(TFormatTest, Enum)
{
EXPECT_EQ("Red", Format("%v", EColor::Red));
@@ -42,7 +68,8 @@ TEST(TFormatTest, Enum)
EXPECT_EQ("BlackAndWhite", Format("%v", EColor::BlackAndWhite));
EXPECT_EQ("black_and_white", Format("%lv", EColor::BlackAndWhite));
- EXPECT_EQ("EColor(100)", Format("%v", EColor(100)));
+ EXPECT_EQ("EColor::unknown-100", Format("%v", EColor(100)));
+ EXPECT_EQ("Cpp | ELangs::unknown-32", Format("%v", ELangs(0x21)));
EXPECT_EQ("JavaScript", Format("%v", ELangs::JavaScript));
EXPECT_EQ("java_script", Format("%lv", ELangs::JavaScript));
@@ -50,6 +77,8 @@ TEST(TFormatTest, Enum)
EXPECT_EQ("None", Format("%v", ELangs::None));
EXPECT_EQ("none", Format("%lv", ELangs::None));
+ EXPECT_EQ("", Format("%v", EBitEnumWithoutNone()));
+
EXPECT_EQ("Cpp | Go", Format("%v", ELangs::Cpp | ELangs::Go));
EXPECT_EQ("cpp | go", Format("%lv", ELangs::Cpp | ELangs::Go));
@@ -64,6 +93,19 @@ TEST(TFormatEnumTest, FormatEnumWithCustomDomainName)
EXPECT_EQ("value_b", FormatEnum(ECustomDomainName::B));
}
+TEST(TParseEnumTest, ParseUnknown)
+{
+ EXPECT_EQ(std::nullopt, TryParseEnum<EColor>("yellow"));
+ EXPECT_THROW(ParseEnum<EColor>("yellow"), TSimpleException);
+ EXPECT_EQ(std::nullopt, TryParseEnum<EColorWithUnknown>("yellow"));
+ EXPECT_EQ(EColorWithUnknown::Unknown, TryParseEnum<EColorWithUnknown>("yellow", /*enableUnknown*/ true));
+ EXPECT_EQ(EColorWithUnknown::Unknown, ParseEnum<EColorWithUnknown>("yellow"));
+ EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("cpp | haskell"));
+ EXPECT_THROW(ParseEnum<ELangs>("cpp | haskell"), TSimpleException);
+ EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, TryParseEnum<ELangsWithUnknown>("cpp | haskell", /*enableUnknown*/ true));
+ EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, ParseEnum<ELangsWithUnknown>("cpp | haskell"));
+}
+
TEST(TParseEnumTest, ParseEnumWithCustomDomainName)
{
EXPECT_EQ(ECustomDomainName::A, TryParseEnum<ECustomDomainName>("value_a"));
@@ -77,7 +119,7 @@ TEST(TParseEnumTest, ParseBitEnum)
EXPECT_EQ(ELangs::Cpp, TryParseEnum<ELangs>("cpp"));
EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp|rust"));
EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp | rust"));
- EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("unk | rust"));
+ EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("haskell | rust"));
}
////////////////////////////////////////////////////////////////////////////////