blob: 22b108e82a5372739a88361281c3eb56af3b2e28 [file] [log] [blame]
Szymon Dompke1cdd7e42022-06-08 14:43:13 +02001#include "helpers.hpp"
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01002#include "utils/conversion.hpp"
3
4#include <gmock/gmock.h>
5
6using namespace testing;
7
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +00008class TestConversion : public Test
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +01009{
10 public:
11 enum class Enum
12 {
13 zero = 0,
14 one,
15 two
16 };
17
18 Enum toEnum(int x)
19 {
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010020 return utils::toEnum<Enum, utils::minEnumValue(convDataEnum),
21 utils::maxEnumValue(convDataEnum)>(x);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010022 }
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000023
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010024 Enum toEnum(const std::string& value)
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000025 {
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010026 return utils::toEnum(convDataEnum, value);
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000027 }
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)}};
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010039};
40
Krzysztof Grobelny62c08e92022-09-16 10:28:53 +020041namespace utils
42{
43
44template <>
45struct EnumTraits<TestConversion::Enum>
46{
47 static constexpr auto propertyName = ConstexprString{"Enum"};
48};
49
50} // namespace utils
51
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000052TEST_F(TestConversion, passValueInRangeExpectToGetValidOutput)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010053{
54 EXPECT_EQ(toEnum(0), Enum::zero);
55 EXPECT_EQ(toEnum(2), Enum::two);
56}
57
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +010058TEST_F(TestConversion, passInvalidValueExpectToThrowException)
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010059{
Krzysztof Grobelny62c08e92022-09-16 10:28:53 +020060 EXPECT_THROW(toEnum(-1), errors::InvalidArgument);
61 EXPECT_THROW(toEnum(3), errors::InvalidArgument);
Wludzik, Jozefd960e1f2021-01-08 09:25:59 +010062}
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000063
64TEST_F(TestConversion, convertsToUnderlyingType)
65{
66 EXPECT_THAT(utils::toUnderlying(Enum::one), Eq(1));
67 EXPECT_THAT(utils::toUnderlying(Enum::two), Eq(2));
68 EXPECT_THAT(utils::toUnderlying(Enum::zero), Eq(0));
69}
70
71TEST_F(TestConversion, convertsEnumToString)
72{
73 EXPECT_THAT(enumToString(Enum::one), Eq("one"));
74 EXPECT_THAT(enumToString(Enum::two), Eq("two"));
75 EXPECT_THAT(enumToString(Enum::zero), Eq("zero"));
76}
77
78TEST_F(TestConversion, convertsStringToEnum)
79{
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010080 EXPECT_THAT(toEnum("one"), Eq(Enum::one));
81 EXPECT_THAT(toEnum("two"), Eq(Enum::two));
82 EXPECT_THAT(toEnum("zero"), Eq(Enum::zero));
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000083}
84
85TEST_F(TestConversion, enumToStringThrowsWhenUknownEnumPassed)
86{
Krzysztof Grobelny62c08e92022-09-16 10:28:53 +020087 EXPECT_THROW(enumToString(static_cast<Enum>(77)), errors::InvalidArgument);
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000088}
89
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010090TEST_F(TestConversion, toEnumThrowsWhenUknownStringPassed)
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000091{
Krzysztof Grobelny62c08e92022-09-16 10:28:53 +020092 EXPECT_THROW(toEnum("four"), errors::InvalidArgument);
Krzysztof Grobelnye8fc5752021-02-05 14:30:45 +000093}