From e3370c2e26bbfaa63bc9f8e4ac0f8dc066ba3eeb Mon Sep 17 00:00:00 2001 From: Tony Liao Date: Sun, 19 Apr 2026 13:09:05 -0700 Subject: [PATCH] Add a bit more unit test coverage for Edition 2024 defaults. (We also have some existing test coverage already in descriptor_unittest.cc but these other edition-specific tests seem to be missing edition 2024.) PiperOrigin-RevId: 902261564 --- editions/BUILD | 24 +++++++++++++ editions/defaults_test.cc | 27 ++++++++++++++ editions/generated_files_test.cc | 36 +++++++++++++++++++ .../test_editions_2024_default_features.proto | 24 +++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 editions/input/test_editions_2024_default_features.proto diff --git a/editions/BUILD b/editions/BUILD index 99c7c2c702..85fd1fc2e6 100644 --- a/editions/BUILD +++ b/editions/BUILD @@ -43,6 +43,16 @@ compile_edition_defaults( protoc = "//src/google/protobuf/compiler:protoc_minimal", ) +compile_edition_defaults( + name = "test_defaults_2024", + testonly = True, + srcs = ["//src/google/protobuf:unittest_features_proto"], + maximum_edition = "2024", + minimum_edition = "2024", + # Test with HEAD protoc for any behavior change, other usages don't need this. + protoc = "//src/google/protobuf/compiler:protoc_minimal", +) + compile_edition_defaults( name = "test_defaults_future", testonly = True, @@ -166,6 +176,7 @@ cc_test( data = [ ":protobuf_defaults", ":test_defaults_2023", + ":test_defaults_2024", ":test_defaults_far_future", ":test_defaults_future", ], @@ -378,10 +389,23 @@ cc_proto_library( deps = [":test_editions_default_features_proto"], ) +proto_library( + name = "test_editions_2024_default_features_proto", + testonly = True, + srcs = ["input/test_editions_2024_default_features.proto"], +) + +cc_proto_library( + name = "test_editions_2024_default_features_cc_proto", + testonly = True, + deps = [":test_editions_2024_default_features_proto"], +) + cc_test( name = "generated_files_test", srcs = ["generated_files_test.cc"], deps = [ + ":test_editions_2024_default_features_cc_proto", ":test_editions_default_features_cc_proto", ":test_messages_proto2_editions_cc_proto", ":test_messages_proto3_editions_cc_proto", diff --git a/editions/defaults_test.cc b/editions/defaults_test.cc index 9bf91367c9..457108725e 100644 --- a/editions/defaults_test.cc +++ b/editions/defaults_test.cc @@ -67,6 +67,33 @@ TEST(DefaultsTest, Check2023) { pb::VALUE3); } +TEST(DefaultsTest, Check2024) { + auto defaults = ReadDefaults("test_defaults_2024"); + ASSERT_OK(defaults); + ASSERT_EQ(defaults->defaults().size(), 5); + ASSERT_EQ(defaults->minimum_edition(), EDITION_2024); + ASSERT_EQ(defaults->maximum_edition(), EDITION_2024); + + EXPECT_EQ(defaults->defaults()[0].edition(), EDITION_LEGACY); + EXPECT_EQ(defaults->defaults()[1].edition(), EDITION_PROTO3); + EXPECT_EQ(defaults->defaults()[2].edition(), EDITION_2023); + EXPECT_EQ(defaults->defaults()[2].overridable_features().field_presence(), + FeatureSet::EXPLICIT); + EXPECT_EQ(defaults->defaults()[2] + .overridable_features() + .GetExtension(pb::test) + .file_feature(), + pb::VALUE3); + EXPECT_EQ(defaults->defaults()[3].edition(), EDITION_2024); + EXPECT_EQ( + defaults->defaults()[3].overridable_features().enforce_naming_style(), + FeatureSet::STYLE2024); + EXPECT_EQ(defaults->defaults()[3] + .overridable_features() + .default_symbol_visibility(), + FeatureSet::VisibilityFeature::EXPORT_TOP_LEVEL); +} + TEST(DefaultsTest, CheckFuture) { auto defaults = ReadDefaults("test_defaults_future"); ASSERT_OK(defaults); diff --git a/editions/generated_files_test.cc b/editions/generated_files_test.cc index ec8d257871..794798fe6f 100644 --- a/editions/generated_files_test.cc +++ b/editions/generated_files_test.cc @@ -11,6 +11,7 @@ #include "google/protobuf/descriptor.h" #include "editions/golden/test_messages_proto2_editions.pb.h" #include "editions/golden/test_messages_proto3_editions.pb.h" +#include "editions/input/test_editions_2024_default_features.pb.h" #include "editions/input/test_editions_default_features.pb.h" #include "google/protobuf/internal_feature_helper.h" #include "google/protobuf/test_textproto.h" @@ -22,6 +23,7 @@ namespace google { namespace protobuf { namespace { +using ::protobuf_editions_test::Editions2024DefaultMessage; using ::protobuf_editions_test::EditionsDefaultMessage; using ::protobuf_test_messages::editions::proto2::TestAllRequiredTypesProto2; using ::protobuf_test_messages::editions::proto2::TestAllTypesProto2; @@ -157,6 +159,40 @@ TEST(Generated, EditionDefaults2023InternalFeatures) { )pb")); } +TEST(Generated, EditionDefaults2024) { + const Descriptor* desc = Editions2024DefaultMessage::descriptor(); + EXPECT_TRUE(desc->FindFieldByName("int32_field")->has_presence()); + EXPECT_TRUE( + desc->FindFieldByName("string_field")->requires_utf8_validation()); + EXPECT_FALSE(desc->FindFieldByName("enum_field") + ->legacy_enum_field_treated_as_closed()); + EXPECT_FALSE(desc->FindFieldByName("enum_field")->enum_type()->is_closed()); + EXPECT_TRUE(desc->FindFieldByName("repeated_int32_field")->is_packed()); + EXPECT_EQ(desc->FindFieldByName("sub_message_field")->type(), + FieldDescriptor::TYPE_MESSAGE); +} + +TEST(Generated, EditionDefaults2024InternalFeatures) { + EXPECT_THAT(internal::InternalFeatureHelper::GetFeatures( + *Editions2024DefaultMessage::descriptor()), + google::protobuf::EqualsProto(R"pb( + field_presence: EXPLICIT + enum_type: OPEN + repeated_field_encoding: PACKED + utf8_validation: VERIFY + message_encoding: LENGTH_PREFIXED + json_format: ALLOW + enforce_naming_style: STYLE2024 + default_symbol_visibility: EXPORT_TOP_LEVEL + [pb.cpp] { + legacy_closed_enum: false + string_type: VIEW + enum_name_uses_string_view: true + repeated_type: LEGACY + } + )pb")); +} + } // namespace } // namespace protobuf } // namespace google diff --git a/editions/input/test_editions_2024_default_features.proto b/editions/input/test_editions_2024_default_features.proto new file mode 100644 index 0000000000..76feb4feb6 --- /dev/null +++ b/editions/input/test_editions_2024_default_features.proto @@ -0,0 +1,24 @@ +edition = "2024"; + +package protobuf_editions_test; + +// This file tests the default Edition2024 features in the absence of any +// dependencies. + +enum Editions2024DefaultEnum { + EDITIONS2024_DEFAULT_ENUM_UNKNOWN = 0; + EDITIONS2024_DEFAULT_ENUM_VALUE1 = 1; +} + +message Editions2024DefaultMessage { + int32 int32_field = 1; + string string_field = 2; + Editions2024DefaultEnum enum_field = 3; + + repeated int32 repeated_int32_field = 4; + + message SubMessage { + int32 nested_int32_field = 1; + } + SubMessage sub_message_field = 6; +}