• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "catch.hpp"
2 
3 #include "internal/catch_enum_values_registry.h"
4 
5 enum class EnumClass3 { Value1, Value2, Value3, Value4 };
6 
7 
8 TEST_CASE( "parseEnums", "[Strings][enums]" ) {
9     using namespace Catch::Matchers;
10     using Catch::Detail::parseEnums;
11 
12     SECTION( "No enums" )
13         CHECK_THAT( parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) );
14 
15     SECTION( "One enum value" ) {
16         CHECK_THAT( parseEnums( "ClassName::EnumName::Value1" ),
17                 Equals(std::vector<Catch::StringRef>{"Value1"} ) );
18         CHECK_THAT( parseEnums( "Value1" ),
19                 Equals( std::vector<Catch::StringRef>{"Value1"} ) );
20         CHECK_THAT( parseEnums( "EnumName::Value1" ),
21                 Equals(std::vector<Catch::StringRef>{"Value1"} ) );
22     }
23 
24     SECTION( "Multiple enum values" ) {
25         CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ),
26                     Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) );
27         CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ),
28                     Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) );
29         CHECK_THAT( parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ),
30                     Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) );
31     }
32 }
33 
34 TEST_CASE( "Directly creating an EnumInfo" ) {
35 
36     using namespace Catch::Detail;
37     std::unique_ptr<EnumInfo> enumInfo = makeEnumInfo( "EnumName", "EnumName::Value1, EnumName::Value2", {0, 1} );
38 
39     CHECK( enumInfo->lookup(0) == "Value1" );
40     CHECK( enumInfo->lookup(1) == "Value2" );
41     CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" );
42 }
43