| /* | 
 |  * Copyright 2020 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #include <gtest/gtest.h> | 
 | #include <input/NamedEnum.h> | 
 |  | 
 | namespace android { | 
 |  | 
 | // Test enum class maximum enum value smaller than default maximum of 8. | 
 | enum class TestEnums { ZERO = 0x0, ONE = 0x1, TWO = 0x2, THREE = 0x3, SEVEN = 0x7 }; | 
 | // Big enum contains enum values greater than default maximum of 8. | 
 | enum class TestBigEnums { ZERO = 0x0, FIFTEEN = 0xF }; | 
 |  | 
 | // Declared to specialize the maximum enum since the enum size exceeds 8 by default. | 
 | template <> | 
 | constexpr size_t NamedEnum::max<TestBigEnums> = 16; | 
 |  | 
 | namespace test { | 
 | using android::TestBigEnums; | 
 | using android::TestEnums; | 
 |  | 
 | TEST(NamedEnum, RuntimeNamedEnum) { | 
 |     TestEnums e = TestEnums::ZERO; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "ZERO"); | 
 |  | 
 |     e = TestEnums::ONE; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "ONE"); | 
 |  | 
 |     e = TestEnums::THREE; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "THREE"); | 
 |  | 
 |     e = TestEnums::SEVEN; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "SEVEN"); | 
 | } | 
 |  | 
 | // Test big enum | 
 | TEST(NamedEnum, RuntimeBigNamedEnum) { | 
 |     TestBigEnums e = TestBigEnums::ZERO; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "ZERO"); | 
 |  | 
 |     e = TestBigEnums::FIFTEEN; | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), "FIFTEEN"); | 
 | } | 
 |  | 
 | TEST(NamedEnum, RuntimeNamedEnumAsString) { | 
 |     TestEnums e = TestEnums::ZERO; | 
 |     ASSERT_EQ(NamedEnum::string(e), "ZERO"); | 
 |  | 
 |     e = TestEnums::ONE; | 
 |     ASSERT_EQ(NamedEnum::string(e), "ONE"); | 
 |  | 
 |     e = TestEnums::THREE; | 
 |     ASSERT_EQ(NamedEnum::string(e), "THREE"); | 
 |  | 
 |     e = TestEnums::SEVEN; | 
 |     ASSERT_EQ(NamedEnum::string(e), "SEVEN"); | 
 | } | 
 |  | 
 | TEST(NamedEnum, RuntimeBigNamedEnumAsString) { | 
 |     TestBigEnums e = TestBigEnums::ZERO; | 
 |     ASSERT_EQ(NamedEnum::string(e), "ZERO"); | 
 |  | 
 |     e = TestBigEnums::FIFTEEN; | 
 |     ASSERT_EQ(NamedEnum::string(e), "FIFTEEN"); | 
 | } | 
 |  | 
 | TEST(NamedEnum, RuntimeUnknownNamedEnum) { | 
 |     TestEnums e = static_cast<TestEnums>(0x5); | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), std::nullopt); | 
 |     e = static_cast<TestEnums>(0x9); | 
 |     ASSERT_EQ(NamedEnum::enum_name(e), std::nullopt); | 
 | } | 
 |  | 
 | TEST(NamedEnum, RuntimeUnknownNamedEnumAsString) { | 
 |     TestEnums e = static_cast<TestEnums>(0x5); | 
 |     ASSERT_EQ(NamedEnum::string(e), "05"); | 
 |     e = static_cast<TestEnums>(0x9); | 
 |     ASSERT_EQ(NamedEnum::string(e, "0x%08x"), "0x00000009"); | 
 | } | 
 |  | 
 | TEST(NamedEnum, CompileTimeFlagName) { | 
 |     static_assert(NamedEnum::enum_name<TestEnums::TWO>() == "TWO"); | 
 |     static_assert(NamedEnum::enum_name<TestEnums::THREE>() == "THREE"); | 
 | } | 
 |  | 
 | } // namespace test | 
 |  | 
 | } // namespace android |