| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <fidl/test/misc/cpp/fidl.h> |
| |
| #include <zxtest/zxtest.h> |
| |
| namespace fidl { |
| namespace test { |
| namespace misc { |
| namespace { |
| |
| TEST(Enum, Defaults) { |
| StrictEnum strict_enum_default = {}; |
| FlexibleEnum flexible_enum_default = {}; |
| |
| EXPECT_EQ(0u, static_cast<uint32_t>(strict_enum_default)); |
| EXPECT_EQ(0u, static_cast<uint32_t>(flexible_enum_default)); |
| } |
| |
| TEST(FlexibleEnum, IsUnknown) { |
| EXPECT_FALSE(FlexibleEnum::MEMBER_A.IsUnknown()); |
| EXPECT_FALSE(FlexibleEnum::MEMBER_B.IsUnknown()); |
| EXPECT_FALSE(FlexibleEnum::MEMBER_C.IsUnknown()); |
| EXPECT_TRUE(FlexibleEnum::MEMBER_CUSTOM_UNKNOWN.IsUnknown()); |
| EXPECT_TRUE(FlexibleEnum::Unknown().IsUnknown()); |
| } |
| |
| TEST(FlexibleEnum, Equality) { |
| EXPECT_TRUE(FlexibleEnum::MEMBER_A == FlexibleEnum(23)); |
| EXPECT_TRUE(FlexibleEnum::MEMBER_B == FlexibleEnum(34)); |
| EXPECT_TRUE(FlexibleEnum::MEMBER_C == FlexibleEnum(45)); |
| EXPECT_TRUE(FlexibleEnum::Unknown() == FlexibleEnum::MEMBER_CUSTOM_UNKNOWN); |
| |
| EXPECT_FALSE(FlexibleEnum::MEMBER_A != FlexibleEnum(23)); |
| EXPECT_FALSE(FlexibleEnum::MEMBER_B != FlexibleEnum(34)); |
| EXPECT_FALSE(FlexibleEnum::MEMBER_C != FlexibleEnum(45)); |
| EXPECT_FALSE(FlexibleEnum::Unknown() != FlexibleEnum::MEMBER_CUSTOM_UNKNOWN); |
| } |
| |
| TEST(EmptyFlexibleEnum, IsUnknown) { EXPECT_TRUE(EmptyFlexibleEnum::Unknown().IsUnknown()); } |
| |
| TEST(Enum, Switch) { |
| // This is a compilation test ensuring that we can use strict and flexible |
| // enums in switch statements. |
| auto switch_on_strict = [](StrictEnum value) -> uint32_t { |
| switch (value) { |
| case StrictEnum::MEMBER_A: |
| return 4000u; |
| case StrictEnum::MEMBER_B: |
| return 5000u; |
| case StrictEnum::MEMBER_C: |
| return 6000u; |
| } |
| }; |
| EXPECT_EQ(6000u, switch_on_strict(StrictEnum::MEMBER_C)); |
| |
| auto switch_on_flexible = [](FlexibleEnum value) -> uint32_t { |
| switch (value) { |
| case FlexibleEnum::MEMBER_A: |
| return 4000u; |
| case FlexibleEnum::MEMBER_B: |
| return 5000u; |
| default: |
| return 6000u; |
| } |
| }; |
| EXPECT_EQ(6000u, switch_on_flexible(FlexibleEnum::MEMBER_C)); |
| } |
| |
| } // namespace |
| } // namespace misc |
| } // namespace test |
| } // namespace fidl |