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