#include "editions/edition_defaults_test_utils.h" #include "google/protobuf/descriptor.pb.h" #include #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