| 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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 215 |
| 216 TEST(GeneratedMessageReflectionTest, SwapFields) { | 216 TEST(GeneratedMessageReflectionTest, SwapFields) { |
| 217 unittest::TestAllTypes message1, message2; | 217 unittest::TestAllTypes message1, message2; |
| 218 message1.set_optional_double(12.3); | 218 message1.set_optional_double(12.3); |
| 219 message1.mutable_repeated_int32()->Add(10); | 219 message1.mutable_repeated_int32()->Add(10); |
| 220 message1.mutable_repeated_int32()->Add(20); | 220 message1.mutable_repeated_int32()->Add(20); |
| 221 | 221 |
| 222 message2.set_optional_string("hello"); | 222 message2.set_optional_string("hello"); |
| 223 message2.mutable_repeated_int64()->Add(30); | 223 message2.mutable_repeated_int64()->Add(30); |
| 224 | 224 |
| 225 std::vector<const FieldDescriptor*> fields; | 225 vector<const FieldDescriptor*> fields; |
| 226 const Descriptor* descriptor = message1.GetDescriptor(); | 226 const Descriptor* descriptor = message1.GetDescriptor(); |
| 227 fields.push_back(descriptor->FindFieldByName("optional_double")); | 227 fields.push_back(descriptor->FindFieldByName("optional_double")); |
| 228 fields.push_back(descriptor->FindFieldByName("repeated_int32")); | 228 fields.push_back(descriptor->FindFieldByName("repeated_int32")); |
| 229 fields.push_back(descriptor->FindFieldByName("optional_string")); | 229 fields.push_back(descriptor->FindFieldByName("optional_string")); |
| 230 fields.push_back(descriptor->FindFieldByName("optional_uint64")); | 230 fields.push_back(descriptor->FindFieldByName("optional_uint64")); |
| 231 | 231 |
| 232 const Reflection* reflection = message1.GetReflection(); | 232 const Reflection* reflection = message1.GetReflection(); |
| 233 reflection->SwapFields(&message1, &message2, fields); | 233 reflection->SwapFields(&message1, &message2, fields); |
| 234 | 234 |
| 235 EXPECT_FALSE(message1.has_optional_double()); | 235 EXPECT_FALSE(message1.has_optional_double()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 248 EXPECT_EQ(1, message2.repeated_int64_size()); | 248 EXPECT_EQ(1, message2.repeated_int64_size()); |
| 249 EXPECT_FALSE(message2.has_optional_uint64()); | 249 EXPECT_FALSE(message2.has_optional_uint64()); |
| 250 } | 250 } |
| 251 | 251 |
| 252 TEST(GeneratedMessageReflectionTest, SwapFieldsAll) { | 252 TEST(GeneratedMessageReflectionTest, SwapFieldsAll) { |
| 253 unittest::TestAllTypes message1; | 253 unittest::TestAllTypes message1; |
| 254 unittest::TestAllTypes message2; | 254 unittest::TestAllTypes message2; |
| 255 | 255 |
| 256 TestUtil::SetAllFields(&message2); | 256 TestUtil::SetAllFields(&message2); |
| 257 | 257 |
| 258 std::vector<const FieldDescriptor*> fields; | 258 vector<const FieldDescriptor*> fields; |
| 259 const Reflection* reflection = message1.GetReflection(); | 259 const Reflection* reflection = message1.GetReflection(); |
| 260 reflection->ListFields(message2, &fields); | 260 reflection->ListFields(message2, &fields); |
| 261 reflection->SwapFields(&message1, &message2, fields); | 261 reflection->SwapFields(&message1, &message2, fields); |
| 262 | 262 |
| 263 TestUtil::ExpectAllFieldsSet(message1); | 263 TestUtil::ExpectAllFieldsSet(message1); |
| 264 TestUtil::ExpectClear(message2); | 264 TestUtil::ExpectClear(message2); |
| 265 } | 265 } |
| 266 | 266 |
| 267 TEST(GeneratedMessageReflectionTest, SwapFieldsAllExtension) { | 267 TEST(GeneratedMessageReflectionTest, SwapFieldsAllExtension) { |
| 268 unittest::TestAllExtensions message1; | 268 unittest::TestAllExtensions message1; |
| 269 unittest::TestAllExtensions message2; | 269 unittest::TestAllExtensions message2; |
| 270 | 270 |
| 271 TestUtil::SetAllExtensions(&message1); | 271 TestUtil::SetAllExtensions(&message1); |
| 272 | 272 |
| 273 std::vector<const FieldDescriptor*> fields; | 273 vector<const FieldDescriptor*> fields; |
| 274 const Reflection* reflection = message1.GetReflection(); | 274 const Reflection* reflection = message1.GetReflection(); |
| 275 reflection->ListFields(message1, &fields); | 275 reflection->ListFields(message1, &fields); |
| 276 reflection->SwapFields(&message1, &message2, fields); | 276 reflection->SwapFields(&message1, &message2, fields); |
| 277 | 277 |
| 278 TestUtil::ExpectExtensionsClear(message1); | 278 TestUtil::ExpectExtensionsClear(message1); |
| 279 TestUtil::ExpectAllExtensionsSet(message2); | 279 TestUtil::ExpectAllExtensionsSet(message2); |
| 280 } | 280 } |
| 281 | 281 |
| 282 TEST(GeneratedMessageReflectionTest, SwapOneof) { | 282 TEST(GeneratedMessageReflectionTest, SwapOneof) { |
| 283 unittest::TestOneof2 message1, message2; | 283 unittest::TestOneof2 message1, message2; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 299 reflection->Swap(&message1, &message2); | 299 reflection->Swap(&message1, &message2); |
| 300 | 300 |
| 301 TestUtil::ExpectOneofSet2(message1); | 301 TestUtil::ExpectOneofSet2(message1); |
| 302 TestUtil::ExpectOneofSet1(message2); | 302 TestUtil::ExpectOneofSet1(message2); |
| 303 } | 303 } |
| 304 | 304 |
| 305 TEST(GeneratedMessageReflectionTest, SwapFieldsOneof) { | 305 TEST(GeneratedMessageReflectionTest, SwapFieldsOneof) { |
| 306 unittest::TestOneof2 message1, message2; | 306 unittest::TestOneof2 message1, message2; |
| 307 TestUtil::SetOneof1(&message1); | 307 TestUtil::SetOneof1(&message1); |
| 308 | 308 |
| 309 std::vector<const FieldDescriptor*> fields; | 309 vector<const FieldDescriptor*> fields; |
| 310 const Descriptor* descriptor = message1.GetDescriptor(); | 310 const Descriptor* descriptor = message1.GetDescriptor(); |
| 311 for (int i = 0; i < descriptor->field_count(); i++) { | 311 for (int i = 0; i < descriptor->field_count(); i++) { |
| 312 fields.push_back(descriptor->field(i)); | 312 fields.push_back(descriptor->field(i)); |
| 313 } | 313 } |
| 314 const Reflection* reflection = message1.GetReflection(); | 314 const Reflection* reflection = message1.GetReflection(); |
| 315 reflection->SwapFields(&message1, &message2, fields); | 315 reflection->SwapFields(&message1, &message2, fields); |
| 316 | 316 |
| 317 TestUtil::ExpectOneofClear(message1); | 317 TestUtil::ExpectOneofClear(message1); |
| 318 TestUtil::ExpectOneofSet1(message2); | 318 TestUtil::ExpectOneofSet1(message2); |
| 319 } | 319 } |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 reflection->AddAllocatedMessage(&message, F("repeated_nested_message"), nested
); | 601 reflection->AddAllocatedMessage(&message, F("repeated_nested_message"), nested
); |
| 602 EXPECT_EQ(1, message.repeated_nested_message_size()); | 602 EXPECT_EQ(1, message.repeated_nested_message_size()); |
| 603 EXPECT_EQ(11, message.repeated_nested_message(0).bb()); | 603 EXPECT_EQ(11, message.repeated_nested_message(0).bb()); |
| 604 } | 604 } |
| 605 | 605 |
| 606 TEST(GeneratedMessageReflectionTest, ListFieldsOneOf) { | 606 TEST(GeneratedMessageReflectionTest, ListFieldsOneOf) { |
| 607 unittest::TestOneof2 message; | 607 unittest::TestOneof2 message; |
| 608 TestUtil::SetOneof1(&message); | 608 TestUtil::SetOneof1(&message); |
| 609 | 609 |
| 610 const Reflection* reflection = message.GetReflection(); | 610 const Reflection* reflection = message.GetReflection(); |
| 611 std::vector<const FieldDescriptor*> fields; | 611 vector<const FieldDescriptor*> fields; |
| 612 reflection->ListFields(message, &fields); | 612 reflection->ListFields(message, &fields); |
| 613 EXPECT_EQ(4, fields.size()); | 613 EXPECT_EQ(4, fields.size()); |
| 614 } | 614 } |
| 615 | 615 |
| 616 TEST(GeneratedMessageReflectionTest, Oneof) { | 616 TEST(GeneratedMessageReflectionTest, Oneof) { |
| 617 unittest::TestOneof2 message; | 617 unittest::TestOneof2 message; |
| 618 const Descriptor* descriptor = message.GetDescriptor(); | 618 const Descriptor* descriptor = message.GetDescriptor(); |
| 619 const Reflection* reflection = message.GetReflection(); | 619 const Reflection* reflection = message.GetReflection(); |
| 620 | 620 |
| 621 // Check default values. | 621 // Check default values. |
| (...skipping 166 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 | |
| 865 #ifdef PROTOBUF_HAS_DEATH_TEST | 798 #ifdef PROTOBUF_HAS_DEATH_TEST |
| 866 | 799 |
| 867 TEST(GeneratedMessageReflectionTest, UsageErrors) { | 800 TEST(GeneratedMessageReflectionTest, UsageErrors) { |
| 868 unittest::TestAllTypes message; | 801 unittest::TestAllTypes message; |
| 869 const Reflection* reflection = message.GetReflection(); | 802 const Reflection* reflection = message.GetReflection(); |
| 870 const Descriptor* descriptor = message.GetDescriptor(); | 803 const Descriptor* descriptor = message.GetDescriptor(); |
| 871 | 804 |
| 872 #define f(NAME) descriptor->FindFieldByName(NAME) | 805 #define f(NAME) descriptor->FindFieldByName(NAME) |
| 873 | 806 |
| 874 // Testing every single failure mode would be too much work. Let's just | 807 // 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... |
| 910 | 843 |
| 911 #undef f | 844 #undef f |
| 912 } | 845 } |
| 913 | 846 |
| 914 #endif // PROTOBUF_HAS_DEATH_TEST | 847 #endif // PROTOBUF_HAS_DEATH_TEST |
| 915 | 848 |
| 916 | 849 |
| 917 } // namespace | 850 } // namespace |
| 918 } // namespace protobuf | 851 } // namespace protobuf |
| 919 } // namespace google | 852 } // namespace google |
| OLD | NEW |