| Index: third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc b/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc
|
| index 85ebdef1fc926aa08db91817c90f0981fd614ccc..6276b66793724de5cb0d0ffd3cbb9b792c212837 100644
|
| --- a/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/generated_message_reflection_unittest.cc
|
| @@ -795,6 +795,73 @@ TEST(GeneratedMessageReflectionTest, ReleaseOneofMessageTest) {
|
| EXPECT_TRUE(released == NULL);
|
| }
|
|
|
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseMessageTest) {
|
| + ::google::protobuf::Arena arena;
|
| + unittest::TestAllTypes* message =
|
| + ::google::protobuf::Arena::CreateMessage<unittest::TestAllTypes>(&arena);
|
| + TestUtil::ReflectionTester reflection_tester(
|
| + unittest::TestAllTypes::descriptor());
|
| +
|
| + // When nothing is set, we expect all released messages to be NULL.
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::IS_NULL);
|
| +
|
| + // After fields are set we should get non-NULL releases.
|
| + reflection_tester.SetAllFieldsViaReflection(message);
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::NOT_NULL);
|
| +
|
| + // After Clear() we may or may not get a message from ReleaseMessage().
|
| + // This is implementation specific.
|
| + reflection_tester.SetAllFieldsViaReflection(message);
|
| + message->Clear();
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::CAN_BE_NULL);
|
| +}
|
| +
|
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseExtensionMessageTest) {
|
| + ::google::protobuf::Arena arena;
|
| + unittest::TestAllExtensions* message =
|
| + ::google::protobuf::Arena::CreateMessage<unittest::TestAllExtensions>(&arena);
|
| + TestUtil::ReflectionTester reflection_tester(
|
| + unittest::TestAllExtensions::descriptor());
|
| +
|
| + // When nothing is set, we expect all released messages to be NULL.
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::IS_NULL);
|
| +
|
| + // After fields are set we should get non-NULL releases.
|
| + reflection_tester.SetAllFieldsViaReflection(message);
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::NOT_NULL);
|
| +
|
| + // After Clear() we may or may not get a message from ReleaseMessage().
|
| + // This is implementation specific.
|
| + reflection_tester.SetAllFieldsViaReflection(message);
|
| + message->Clear();
|
| + reflection_tester.ExpectMessagesReleasedViaReflection(
|
| + message, TestUtil::ReflectionTester::CAN_BE_NULL);
|
| +}
|
| +
|
| +TEST(GeneratedMessageReflectionTest, ArenaReleaseOneofMessageTest) {
|
| + ::google::protobuf::Arena arena;
|
| + unittest::TestOneof2* message =
|
| + ::google::protobuf::Arena::CreateMessage<unittest::TestOneof2>(&arena);
|
| + TestUtil::ReflectionTester::SetOneofViaReflection(message);
|
| +
|
| + const Descriptor* descriptor = unittest::TestOneof2::descriptor();
|
| + const Reflection* reflection = message->GetReflection();
|
| + Message* released = reflection->ReleaseMessage(
|
| + message, descriptor->FindFieldByName("foo_lazy_message"));
|
| +
|
| + EXPECT_TRUE(released != NULL);
|
| + delete released;
|
| +
|
| + released = reflection->ReleaseMessage(
|
| + message, descriptor->FindFieldByName("foo_lazy_message"));
|
| + EXPECT_TRUE(released == NULL);
|
| +}
|
| +
|
| #ifdef PROTOBUF_HAS_DEATH_TEST
|
|
|
| TEST(GeneratedMessageReflectionTest, UsageErrors) {
|
|
|