| #include "editions/edition_defaults_test_utils.h" | |
| #include "google/protobuf/descriptor.pb.h" | |
| #include <gtest/gtest.h> | |
| #include "absl/types/optional.h" | |
| #include "google/protobuf/test_textproto.h" | |
| #include "google/protobuf/unittest_features.pb.h" | |
| namespace google { | |
| namespace protobuf { | |
| namespace compiler { | |
| namespace { | |
| TEST(TestUtilsTest, FindEditionDefault) { | |
| FeatureSetDefaults defaults = ParseTextOrDie(R"pb( | |
| defaults { | |
| edition: EDITION_PROTO3 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE2 } | |
| }, | |
| fixed_features { field_presence: IMPLICIT enum_type: OPEN } | |
| } | |
| defaults { | |
| edition: EDITION_2023 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE3 } | |
| }, | |
| fixed_features { field_presence: EXPLICIT enum_type: OPEN } | |
| } | |
| )pb"); | |
| const auto edition_defaults = FindEditionDefault(defaults, EDITION_2023); | |
| ASSERT_TRUE(edition_defaults.has_value()); | |
| EXPECT_EQ(edition_defaults->edition(), EDITION_2023); | |
| EXPECT_EQ(edition_defaults->overridable_features() | |
| .GetExtension(pb::test) | |
| .file_feature(), | |
| pb::EnumFeature::VALUE3); | |
| } | |
| TEST(TestUtilsTest, FindEditionDefaultNull) { | |
| FeatureSetDefaults defaults = ParseTextOrDie(R"pb( | |
| defaults { | |
| edition: EDITION_PROTO3 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE2 } | |
| }, | |
| fixed_features { field_presence: IMPLICIT enum_type: OPEN } | |
| } | |
| defaults { | |
| edition: EDITION_2023 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE3 } | |
| }, | |
| fixed_features { field_presence: EXPLICIT enum_type: OPEN } | |
| } | |
| )pb"); | |
| EXPECT_EQ(FindEditionDefault(defaults, EDITION_99999_TEST_ONLY), | |
| absl::nullopt); | |
| } | |
| TEST(TestUtilsTest, FindEditionDefaultEmptyDefaults) { | |
| FeatureSetDefaults defaults = ParseTextOrDie(R"pb()pb"); | |
| EXPECT_EQ(FindEditionDefault(defaults, EDITION_2023), absl::nullopt); | |
| } | |
| TEST(TestUtilsTest, FindEditionDefaultDuplicateEditions) { | |
| FeatureSetDefaults defaults = ParseTextOrDie(R"pb( | |
| defaults { | |
| edition: EDITION_PROTO3 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE2 } | |
| }, | |
| fixed_features { field_presence: IMPLICIT enum_type: OPEN } | |
| } | |
| defaults { | |
| edition: EDITION_2023 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE3 } | |
| }, | |
| fixed_features { field_presence: EXPLICIT enum_type: OPEN } | |
| }, | |
| defaults { | |
| edition: EDITION_2023 | |
| overridable_features { | |
| [pb.test] { file_feature: VALUE3 } | |
| }, | |
| fixed_features { field_presence: IMPLICIT enum_type: OPEN } | |
| }, | |
| )pb"); | |
| const auto edition_defaults = FindEditionDefault(defaults, EDITION_2023); | |
| ASSERT_TRUE(edition_defaults.has_value()); | |
| EXPECT_EQ(edition_defaults->edition(), EDITION_2023); | |
| EXPECT_EQ(edition_defaults->fixed_features().field_presence(), | |
| FeatureSet::EXPLICIT); | |
| } | |
| } // namespace | |
| } // namespace compiler | |
| } // namespace protobuf | |
| } // namespace google |