1 #include "catch.hpp" 2 3 #include "internal/catch_enum_values_registry.h" 4 5 enum class EnumClass3 { Value1, Value2, Value3, Value4 }; 6 7 struct UsesSentinel { 8 using const_iterator = int const*; 9 using const_sentinel = std::nullptr_t; 10 beginUsesSentinel11 const_iterator begin() const { return nullptr; } endUsesSentinel12 const_iterator end() const { return nullptr; } 13 }; 14 15 TEST_CASE( "parseEnums", "[Strings][enums]" ) { 16 using namespace Catch::Matchers; 17 using Catch::Detail::parseEnums; 18 19 SECTION( "No enums" ) 20 CHECK_THAT( parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) ); 21 22 SECTION( "One enum value" ) { 23 CHECK_THAT( parseEnums( "ClassName::EnumName::Value1" ), 24 Equals(std::vector<Catch::StringRef>{"Value1"} ) ); 25 CHECK_THAT( parseEnums( "Value1" ), 26 Equals( std::vector<Catch::StringRef>{"Value1"} ) ); 27 CHECK_THAT( parseEnums( "EnumName::Value1" ), 28 Equals(std::vector<Catch::StringRef>{"Value1"} ) ); 29 } 30 31 SECTION( "Multiple enum values" ) { 32 CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), 33 Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) ); 34 CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), 35 Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ); 36 CHECK_THAT( parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), 37 Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) ); 38 } 39 } 40 41 TEST_CASE( "Directly creating an EnumInfo" ) { 42 43 using namespace Catch::Detail; 44 std::unique_ptr<EnumInfo> enumInfo = makeEnumInfo( "EnumName", "EnumName::Value1, EnumName::Value2", {0, 1} ); 45 46 CHECK( enumInfo->lookup(0) == "Value1" ); 47 CHECK( enumInfo->lookup(1) == "Value2" ); 48 CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" ); 49 } 50 51 TEST_CASE("Range type with sentinel") { 52 CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{ }" ); 53 }