1 #include "utils/conversion.hpp"
2 
3 #include <gmock/gmock.h>
4 
5 using namespace testing;
6 
7 class TestConversion : public Test
8 {
9   public:
10     enum class Enum
11     {
12         zero = 0,
13         one,
14         two
15     };
16 
17     Enum toEnum(int x)
18     {
19         return utils::toEnum<Enum, utils::minEnumValue(convDataEnum),
20                              utils::maxEnumValue(convDataEnum)>(x);
21     }
22 
23     Enum toEnum(const std::string& value)
24     {
25         return utils::toEnum(convDataEnum, value);
26     }
27 
28     std::string enumToString(Enum value)
29     {
30         return std::string(utils::enumToString(convDataEnum, value));
31     }
32 
33     static constexpr std::array<std::pair<std::string_view, Enum>, 3>
34         convDataEnum = {
35             {std::make_pair<std::string_view, Enum>("zero", Enum::zero),
36              std::make_pair<std::string_view, Enum>("one", Enum::one),
37              std::make_pair<std::string_view, Enum>("two", Enum::two)}};
38 };
39 
40 TEST_F(TestConversion, passValueInRangeExpectToGetValidOutput)
41 {
42     EXPECT_EQ(toEnum(0), Enum::zero);
43     EXPECT_EQ(toEnum(2), Enum::two);
44 }
45 
46 TEST_F(TestConversion, passInvalidValueExpectToThrowException)
47 {
48     EXPECT_THROW(toEnum(-1), sdbusplus::exception::SdBusError);
49     EXPECT_THROW(toEnum(3), sdbusplus::exception::SdBusError);
50 }
51 
52 TEST_F(TestConversion, convertsToUnderlyingType)
53 {
54     EXPECT_THAT(utils::toUnderlying(Enum::one), Eq(1));
55     EXPECT_THAT(utils::toUnderlying(Enum::two), Eq(2));
56     EXPECT_THAT(utils::toUnderlying(Enum::zero), Eq(0));
57 }
58 
59 TEST_F(TestConversion, convertsEnumToString)
60 {
61     EXPECT_THAT(enumToString(Enum::one), Eq("one"));
62     EXPECT_THAT(enumToString(Enum::two), Eq("two"));
63     EXPECT_THAT(enumToString(Enum::zero), Eq("zero"));
64 }
65 
66 TEST_F(TestConversion, convertsStringToEnum)
67 {
68     EXPECT_THAT(toEnum("one"), Eq(Enum::one));
69     EXPECT_THAT(toEnum("two"), Eq(Enum::two));
70     EXPECT_THAT(toEnum("zero"), Eq(Enum::zero));
71 }
72 
73 TEST_F(TestConversion, enumToStringThrowsWhenUknownEnumPassed)
74 {
75     EXPECT_THROW(enumToString(static_cast<Enum>(77)),
76                  sdbusplus::exception::SdBusError);
77 }
78 
79 TEST_F(TestConversion, toEnumThrowsWhenUknownStringPassed)
80 {
81     EXPECT_THROW(toEnum("four"), sdbusplus::exception::SdBusError);
82 }
83