• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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