#include "helpers.hpp" #include "utils/conversion.hpp" #include using namespace testing; class TestConversion : public Test { public: enum class Enum { zero = 0, one, two }; Enum toEnum(int x) { return utils::toEnum(x); } Enum toEnum(const std::string& value) { return utils::toEnum(convDataEnum, value); } std::string enumToString(Enum value) { return std::string(utils::enumToString(convDataEnum, value)); } static constexpr std::array, 3> convDataEnum = { {std::make_pair("zero", Enum::zero), std::make_pair("one", Enum::one), std::make_pair("two", Enum::two)}}; }; namespace utils { template <> struct EnumTraits { static constexpr auto propertyName = ConstexprString{"Enum"}; }; } // namespace utils TEST_F(TestConversion, passValueInRangeExpectToGetValidOutput) { EXPECT_EQ(toEnum(0), Enum::zero); EXPECT_EQ(toEnum(2), Enum::two); } TEST_F(TestConversion, passInvalidValueExpectToThrowException) { EXPECT_THROW(toEnum(-1), errors::InvalidArgument); EXPECT_THROW(toEnum(3), errors::InvalidArgument); } TEST_F(TestConversion, convertsToUnderlyingType) { EXPECT_THAT(utils::toUnderlying(Enum::one), Eq(1)); EXPECT_THAT(utils::toUnderlying(Enum::two), Eq(2)); EXPECT_THAT(utils::toUnderlying(Enum::zero), Eq(0)); } TEST_F(TestConversion, convertsEnumToString) { EXPECT_THAT(enumToString(Enum::one), Eq("one")); EXPECT_THAT(enumToString(Enum::two), Eq("two")); EXPECT_THAT(enumToString(Enum::zero), Eq("zero")); } TEST_F(TestConversion, convertsStringToEnum) { EXPECT_THAT(toEnum("one"), Eq(Enum::one)); EXPECT_THAT(toEnum("two"), Eq(Enum::two)); EXPECT_THAT(toEnum("zero"), Eq(Enum::zero)); } TEST_F(TestConversion, enumToStringThrowsWhenUknownEnumPassed) { EXPECT_THROW(enumToString(static_cast(77)), errors::InvalidArgument); } TEST_F(TestConversion, toEnumThrowsWhenUknownStringPassed) { EXPECT_THROW(toEnum("four"), errors::InvalidArgument); }