| OLD | NEW |
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
| 2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
| 4 // | 4 // |
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
| 7 // met: | 7 // met: |
| 8 // | 8 // |
| 9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
| (...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 | 788 |
| 789 EXPECT_TRUE(released != NULL); | 789 EXPECT_TRUE(released != NULL); |
| 790 EXPECT_EQ(&sub_message, released); | 790 EXPECT_EQ(&sub_message, released); |
| 791 delete released; | 791 delete released; |
| 792 | 792 |
| 793 released = reflection->ReleaseMessage( | 793 released = reflection->ReleaseMessage( |
| 794 &message, descriptor->FindFieldByName("foo_lazy_message")); | 794 &message, descriptor->FindFieldByName("foo_lazy_message")); |
| 795 EXPECT_TRUE(released == NULL); | 795 EXPECT_TRUE(released == NULL); |
| 796 } | 796 } |
| 797 | 797 |
| 798 TEST(GeneratedMessageReflectionTest, ArenaReleaseMessageTest) { |
| 799 ::google::protobuf::Arena arena; |
| 800 unittest::TestAllTypes* message = |
| 801 ::google::protobuf::Arena::CreateMessage<unittest::TestAllTypes>(&arena); |
| 802 TestUtil::ReflectionTester reflection_tester( |
| 803 unittest::TestAllTypes::descriptor()); |
| 804 |
| 805 // When nothing is set, we expect all released messages to be NULL. |
| 806 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 807 message, TestUtil::ReflectionTester::IS_NULL); |
| 808 |
| 809 // After fields are set we should get non-NULL releases. |
| 810 reflection_tester.SetAllFieldsViaReflection(message); |
| 811 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 812 message, TestUtil::ReflectionTester::NOT_NULL); |
| 813 |
| 814 // After Clear() we may or may not get a message from ReleaseMessage(). |
| 815 // This is implementation specific. |
| 816 reflection_tester.SetAllFieldsViaReflection(message); |
| 817 message->Clear(); |
| 818 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 819 message, TestUtil::ReflectionTester::CAN_BE_NULL); |
| 820 } |
| 821 |
| 822 TEST(GeneratedMessageReflectionTest, ArenaReleaseExtensionMessageTest) { |
| 823 ::google::protobuf::Arena arena; |
| 824 unittest::TestAllExtensions* message = |
| 825 ::google::protobuf::Arena::CreateMessage<unittest::TestAllExtensions>(&are
na); |
| 826 TestUtil::ReflectionTester reflection_tester( |
| 827 unittest::TestAllExtensions::descriptor()); |
| 828 |
| 829 // When nothing is set, we expect all released messages to be NULL. |
| 830 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 831 message, TestUtil::ReflectionTester::IS_NULL); |
| 832 |
| 833 // After fields are set we should get non-NULL releases. |
| 834 reflection_tester.SetAllFieldsViaReflection(message); |
| 835 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 836 message, TestUtil::ReflectionTester::NOT_NULL); |
| 837 |
| 838 // After Clear() we may or may not get a message from ReleaseMessage(). |
| 839 // This is implementation specific. |
| 840 reflection_tester.SetAllFieldsViaReflection(message); |
| 841 message->Clear(); |
| 842 reflection_tester.ExpectMessagesReleasedViaReflection( |
| 843 message, TestUtil::ReflectionTester::CAN_BE_NULL); |
| 844 } |
| 845 |
| 846 TEST(GeneratedMessageReflectionTest, ArenaReleaseOneofMessageTest) { |
| 847 ::google::protobuf::Arena arena; |
| 848 unittest::TestOneof2* message = |
| 849 ::google::protobuf::Arena::CreateMessage<unittest::TestOneof2>(&arena); |
| 850 TestUtil::ReflectionTester::SetOneofViaReflection(message); |
| 851 |
| 852 const Descriptor* descriptor = unittest::TestOneof2::descriptor(); |
| 853 const Reflection* reflection = message->GetReflection(); |
| 854 Message* released = reflection->ReleaseMessage( |
| 855 message, descriptor->FindFieldByName("foo_lazy_message")); |
| 856 |
| 857 EXPECT_TRUE(released != NULL); |
| 858 delete released; |
| 859 |
| 860 released = reflection->ReleaseMessage( |
| 861 message, descriptor->FindFieldByName("foo_lazy_message")); |
| 862 EXPECT_TRUE(released == NULL); |
| 863 } |
| 864 |
| 798 #ifdef PROTOBUF_HAS_DEATH_TEST | 865 #ifdef PROTOBUF_HAS_DEATH_TEST |
| 799 | 866 |
| 800 TEST(GeneratedMessageReflectionTest, UsageErrors) { | 867 TEST(GeneratedMessageReflectionTest, UsageErrors) { |
| 801 unittest::TestAllTypes message; | 868 unittest::TestAllTypes message; |
| 802 const Reflection* reflection = message.GetReflection(); | 869 const Reflection* reflection = message.GetReflection(); |
| 803 const Descriptor* descriptor = message.GetDescriptor(); | 870 const Descriptor* descriptor = message.GetDescriptor(); |
| 804 | 871 |
| 805 #define f(NAME) descriptor->FindFieldByName(NAME) | 872 #define f(NAME) descriptor->FindFieldByName(NAME) |
| 806 | 873 |
| 807 // Testing every single failure mode would be too much work. Let's just | 874 // Testing every single failure mode would be too much work. Let's just |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 | 910 |
| 844 #undef f | 911 #undef f |
| 845 } | 912 } |
| 846 | 913 |
| 847 #endif // PROTOBUF_HAS_DEATH_TEST | 914 #endif // PROTOBUF_HAS_DEATH_TEST |
| 848 | 915 |
| 849 | 916 |
| 850 } // namespace | 917 } // namespace |
| 851 } // namespace protobuf | 918 } // namespace protobuf |
| 852 } // namespace google | 919 } // namespace google |
| OLD | NEW |