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