|
12 | 12 | #include "absl/strings/escaping.h"
|
13 | 13 | #include "absl/strings/str_cat.h"
|
14 | 14 | #include "absl/strings/string_view.h"
|
| 15 | +#include "google/protobuf/java_features.pb.h" |
| 16 | +#include "google/protobuf/cpp_features.pb.h" |
15 | 17 | #include "editions/defaults_test_embedded.h"
|
16 | 18 | #include "editions/defaults_test_embedded_base64.h"
|
| 19 | +#include "google/protobuf/extension_set.h" |
| 20 | +#include "google/protobuf/message.h" |
| 21 | +#include "google/protobuf/test_textproto.h" |
17 | 22 | #include "google/protobuf/unittest_features.pb.h"
|
18 | 23 | #include "google/protobuf/stubs/status_macros.h"
|
19 | 24 |
|
| 25 | + |
20 | 26 | // Must be included last.
|
21 | 27 | #include "google/protobuf/port_def.inc"
|
22 | 28 |
|
@@ -182,6 +188,63 @@ TEST(DefaultsTest, EmbeddedBase64) {
|
182 | 188 | pb::VALUE3);
|
183 | 189 | }
|
184 | 190 |
|
| 191 | +// Lock down that overridable defaults never change in released editions. After |
| 192 | +// an edition has been released these tests should never need to be touched. |
| 193 | +class OverridableDefaultsTest : public ::testing::Test { |
| 194 | + public: |
| 195 | + OverridableDefaultsTest() = default; |
| 196 | + static void SetUpTestSuite() { |
| 197 | + google::protobuf::LinkExtensionReflection(pb::cpp); |
| 198 | + google::protobuf::LinkExtensionReflection(pb::java); |
| 199 | + DescriptorPool::generated_pool(); |
| 200 | + } |
| 201 | +}; |
| 202 | + |
| 203 | +// TODO Enable these once they become fixed internally. |
| 204 | +TEST_F(OverridableDefaultsTest, Proto2) { |
| 205 | + auto feature_defaults = ReadDefaults("protobuf_defaults"); |
| 206 | + ASSERT_OK(feature_defaults); |
| 207 | + ASSERT_GE(feature_defaults->defaults().size(), 1); |
| 208 | + const auto& defaults = feature_defaults->defaults(0); |
| 209 | + ASSERT_EQ(defaults.edition(), EDITION_PROTO2); |
| 210 | + |
| 211 | + EXPECT_THAT(defaults.overridable_features(), EqualsProto(R"pb([pb.cpp] {} |
| 212 | + [pb.java] {} |
| 213 | + )pb")); |
| 214 | +} |
| 215 | +TEST_F(OverridableDefaultsTest, Proto3) { |
| 216 | + auto feature_defaults = ReadDefaults("protobuf_defaults"); |
| 217 | + ASSERT_OK(feature_defaults); |
| 218 | + ASSERT_GE(feature_defaults->defaults().size(), 2); |
| 219 | + const auto& defaults = feature_defaults->defaults(1); |
| 220 | + ASSERT_EQ(defaults.edition(), EDITION_PROTO3); |
| 221 | + |
| 222 | + EXPECT_THAT(defaults.overridable_features(), EqualsProto(R"pb([pb.cpp] {} |
| 223 | + [pb.java] {} |
| 224 | + )pb")); |
| 225 | +} |
| 226 | + |
| 227 | +// Lock down that 2023 overridable defaults never change. Once Edition 2023 has |
| 228 | +// been released this test should never need to be touched. |
| 229 | +TEST_F(OverridableDefaultsTest, Edition2023) { |
| 230 | + auto feature_defaults = ReadDefaults("protobuf_defaults"); |
| 231 | + ASSERT_OK(feature_defaults); |
| 232 | + ASSERT_GE(feature_defaults->defaults().size(), 3); |
| 233 | + const auto& defaults = feature_defaults->defaults(2); |
| 234 | + ASSERT_EQ(defaults.edition(), EDITION_2023); |
| 235 | + |
| 236 | + EXPECT_THAT(defaults.overridable_features(), EqualsProto(R"pb( |
| 237 | + field_presence: EXPLICIT |
| 238 | + enum_type: OPEN |
| 239 | + repeated_field_encoding: PACKED |
| 240 | + utf8_validation: VERIFY |
| 241 | + message_encoding: LENGTH_PREFIXED |
| 242 | + json_format: ALLOW |
| 243 | + [pb.cpp] { legacy_closed_enum: false string_type: STRING } |
| 244 | + [pb.java] { legacy_closed_enum: false utf8_validation: DEFAULT } |
| 245 | + )pb")); |
| 246 | +} |
| 247 | + |
185 | 248 | } // namespace
|
186 | 249 | } // namespace protobuf
|
187 | 250 | } // namespace google
|
0 commit comments