1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "util/enum_name_table.h"
6
7 #include "gmock/gmock.h"
8 #include "gtest/gtest.h"
9
10 namespace openscreen {
11
12 namespace {
13
14 enum class TestEnum { kFoo = -1, kBar, kBaz = 100, kBuzz };
15
16 constexpr EnumNameTable<TestEnum, 4> kTestEnumNames{{
17 {"foo", TestEnum::kFoo},
18 {"bar", TestEnum::kBar},
19 {"baz", TestEnum::kBaz},
20 {"buzz", TestEnum::kBuzz},
21 }};
22
23 constexpr EnumNameTable<TestEnum, 1> kTestEnumNamesMissing{{
24 {"foo", TestEnum::kFoo},
25 }};
26
27 constexpr EnumNameTable<TestEnum, 0> kTestEnumNamesEmpty{};
28
29 } // namespace
30
TEST(EnumNameTable,GetEnumNameValid)31 TEST(EnumNameTable, GetEnumNameValid) {
32 EXPECT_STREQ("foo", GetEnumName(kTestEnumNames, TestEnum::kFoo).value());
33 EXPECT_STREQ("bar", GetEnumName(kTestEnumNames, TestEnum::kBar).value());
34 EXPECT_STREQ("baz", GetEnumName(kTestEnumNames, TestEnum::kBaz).value());
35 EXPECT_STREQ("buzz", GetEnumName(kTestEnumNames, TestEnum::kBuzz).value());
36 }
37
TEST(EnumNameTable,GetEnumNameMissing)38 TEST(EnumNameTable, GetEnumNameMissing) {
39 EXPECT_FALSE(GetEnumName(kTestEnumNamesMissing, TestEnum::kBar).is_value());
40 EXPECT_FALSE(GetEnumName(kTestEnumNamesMissing, TestEnum::kBaz).is_value());
41 EXPECT_FALSE(GetEnumName(kTestEnumNamesMissing, TestEnum::kBuzz).is_value());
42 }
43
TEST(EnumNameTable,GetEnumNameEmpty)44 TEST(EnumNameTable, GetEnumNameEmpty) {
45 EXPECT_FALSE(GetEnumName(kTestEnumNamesEmpty, TestEnum::kBar).is_value());
46 EXPECT_FALSE(GetEnumName(kTestEnumNamesEmpty, TestEnum::kBaz).is_value());
47 EXPECT_FALSE(GetEnumName(kTestEnumNamesEmpty, TestEnum::kBuzz).is_value());
48 }
49
TEST(EnumNameTable,GetEnumValid)50 TEST(EnumNameTable, GetEnumValid) {
51 EXPECT_EQ(TestEnum::kFoo, GetEnum(kTestEnumNames, "foo").value());
52 EXPECT_EQ(TestEnum::kBar, GetEnum(kTestEnumNames, "bar").value());
53 EXPECT_EQ(TestEnum::kBaz, GetEnum(kTestEnumNames, "baz").value());
54 EXPECT_EQ(TestEnum::kBuzz, GetEnum(kTestEnumNames, "buzz").value());
55 }
56
TEST(EnumNameTable,GetEnumMissing)57 TEST(EnumNameTable, GetEnumMissing) {
58 EXPECT_FALSE(GetEnum(kTestEnumNames, "").is_value());
59 EXPECT_FALSE(GetEnum(kTestEnumNames, "1").is_value());
60 EXPECT_FALSE(GetEnum(kTestEnumNames, "foobar").is_value());
61 EXPECT_FALSE(GetEnum(kTestEnumNamesMissing, "bar").is_value());
62 EXPECT_FALSE(GetEnum(kTestEnumNamesMissing, "baz").is_value());
63 EXPECT_FALSE(GetEnum(kTestEnumNamesMissing, "buzz").is_value());
64 }
65
TEST(EnumNameTable,GetEnumEmpty)66 TEST(EnumNameTable, GetEnumEmpty) {
67 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "").is_value());
68 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "1").is_value());
69 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "foobar").is_value());
70 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "foo").is_value());
71 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "bar").is_value());
72 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "baz").is_value());
73 EXPECT_FALSE(GetEnum(kTestEnumNamesEmpty, "buzz").is_value());
74 }
75
76 } // namespace openscreen
77