49 #include <google/protobuf/unittest.pb.h> 
   71 TEST(GeneratedMessageReflectionTest, Defaults) {
 
   74   TestUtil::ReflectionTester reflection_tester(
 
   77   reflection_tester.ExpectClearViaReflection(
message);
 
   79   const Reflection* reflection = 
message.GetReflection();
 
   84   EXPECT_EQ(&unittest::TestAllTypes::OptionalGroup::default_instance(),
 
   85             &reflection->GetMessage(
message, 
F(
"optionalgroup")));
 
   86   EXPECT_EQ(&unittest::TestAllTypes::NestedMessage::default_instance(),
 
   87             &reflection->GetMessage(
message, 
F(
"optional_nested_message")));
 
   88   EXPECT_EQ(&unittest::ForeignMessage::default_instance(),
 
   89             &reflection->GetMessage(
message, 
F(
"optional_foreign_message")));
 
   90   EXPECT_EQ(&unittest_import::ImportMessage::default_instance(),
 
   91             &reflection->GetMessage(
message, 
F(
"optional_import_message")));
 
   94 TEST(GeneratedMessageReflectionTest, Accessors) {
 
   98   TestUtil::ReflectionTester reflection_tester(
 
  101   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  103   reflection_tester.ExpectAllFieldsSetViaReflection(
message);
 
  105   reflection_tester.ModifyRepeatedFieldsViaReflection(&
message);
 
  106   TestUtil::ExpectRepeatedFieldsModified(
message);
 
  109 TEST(GeneratedMessageReflectionTest, GetStringReference) {
 
  112   unittest::TestAllTypes 
message;
 
  113   message.set_optional_string(
"foo");
 
  114   message.add_repeated_string(
"foo");
 
  116   const Reflection* reflection = 
message.GetReflection();
 
  121       &reflection->GetStringReference(
message, 
F(
"optional_string"), &scratch))
 
  122       << 
"For simple string fields, GetStringReference() should return a " 
  123          "reference to the underlying string.";
 
  125             &reflection->GetRepeatedStringReference(
 
  126                 message, 
F(
"repeated_string"), 0, &scratch))
 
  127       << 
"For simple string fields, GetRepeatedStringReference() should " 
  129          "a reference to the underlying string.";
 
  133 TEST(GeneratedMessageReflectionTest, DefaultsAfterClear) {
 
  136   unittest::TestAllTypes 
message;
 
  137   TestUtil::ReflectionTester reflection_tester(
 
  143   const Reflection* reflection = 
message.GetReflection();
 
  145   EXPECT_NE(&unittest::TestAllTypes::OptionalGroup::default_instance(),
 
  146             &reflection->GetMessage(
message, 
F(
"optionalgroup")));
 
  147   EXPECT_NE(&unittest::TestAllTypes::NestedMessage::default_instance(),
 
  148             &reflection->GetMessage(
message, 
F(
"optional_nested_message")));
 
  149   EXPECT_NE(&unittest::ForeignMessage::default_instance(),
 
  150             &reflection->GetMessage(
message, 
F(
"optional_foreign_message")));
 
  151   EXPECT_NE(&unittest_import::ImportMessage::default_instance(),
 
  152             &reflection->GetMessage(
message, 
F(
"optional_import_message")));
 
  155 TEST(GeneratedMessageReflectionTest, Swap) {
 
  156   unittest::TestAllTypes message1;
 
  157   unittest::TestAllTypes message2;
 
  161   const Reflection* reflection = message1.GetReflection();
 
  162   reflection->Swap(&message1, &message2);
 
  164   TestUtil::ExpectClear(message1);
 
  168 TEST(GeneratedMessageReflectionTest, SwapWithBothSet) {
 
  169   unittest::TestAllTypes message1;
 
  170   unittest::TestAllTypes message2;
 
  174   TestUtil::ModifyRepeatedFields(&message2);
 
  176   const Reflection* reflection = message1.GetReflection();
 
  177   reflection->Swap(&message1, &message2);
 
  179   TestUtil::ExpectRepeatedFieldsModified(message1);
 
  182   message1.set_optional_int32(532819);
 
  184   reflection->Swap(&message1, &message2);
 
  186   EXPECT_EQ(532819, message2.optional_int32());
 
  189 TEST(GeneratedMessageReflectionTest, SwapExtensions) {
 
  190   unittest::TestAllExtensions message1;
 
  191   unittest::TestAllExtensions message2;
 
  195   const Reflection* reflection = message1.GetReflection();
 
  196   reflection->Swap(&message1, &message2);
 
  198   TestUtil::ExpectExtensionsClear(message1);
 
  199   TestUtil::ExpectAllExtensionsSet(message2);
 
  202 TEST(GeneratedMessageReflectionTest, SwapUnknown) {
 
  203   unittest::TestEmptyMessage message1, message2;
 
  205   message1.mutable_unknown_fields()->AddVarint(1234, 1);
 
  207   EXPECT_EQ(1, message1.unknown_fields().field_count());
 
  208   EXPECT_EQ(0, message2.unknown_fields().field_count());
 
  209   const Reflection* reflection = message1.GetReflection();
 
  210   reflection->Swap(&message1, &message2);
 
  211   EXPECT_EQ(0, message1.unknown_fields().field_count());
 
  212   EXPECT_EQ(1, message2.unknown_fields().field_count());
 
  215 TEST(GeneratedMessageReflectionTest, SwapFields) {
 
  216   unittest::TestAllTypes message1, message2;
 
  217   message1.set_optional_double(12.3);
 
  218   message1.mutable_repeated_int32()->Add(10);
 
  219   message1.mutable_repeated_int32()->Add(20);
 
  221   message2.set_optional_string(
"hello");
 
  222   message2.mutable_repeated_int64()->Add(30);
 
  224   std::vector<const FieldDescriptor*> 
fields;
 
  231   const Reflection* reflection = message1.GetReflection();
 
  232   reflection->SwapFields(&message1, &message2, 
fields);
 
  235   EXPECT_EQ(0, message1.repeated_int32_size());
 
  237   EXPECT_EQ(
"hello", message1.optional_string());
 
  238   EXPECT_EQ(0, message1.repeated_int64_size());
 
  242   EXPECT_EQ(12.3, message2.optional_double());
 
  243   EXPECT_EQ(2, message2.repeated_int32_size());
 
  244   EXPECT_EQ(10, message2.repeated_int32(0));
 
  245   EXPECT_EQ(20, message2.repeated_int32(1));
 
  247   EXPECT_EQ(1, message2.repeated_int64_size());
 
  251 TEST(GeneratedMessageReflectionTest, SwapFieldsAll) {
 
  252   unittest::TestAllTypes message1;
 
  253   unittest::TestAllTypes message2;
 
  257   std::vector<const FieldDescriptor*> 
fields;
 
  258   const Reflection* reflection = message1.GetReflection();
 
  259   reflection->ListFields(message2, &
fields);
 
  260   reflection->SwapFields(&message1, &message2, 
fields);
 
  263   TestUtil::ExpectClear(message2);
 
  266 TEST(GeneratedMessageReflectionTest, SwapFieldsAllExtension) {
 
  267   unittest::TestAllExtensions message1;
 
  268   unittest::TestAllExtensions message2;
 
  272   std::vector<const FieldDescriptor*> 
fields;
 
  273   const Reflection* reflection = message1.GetReflection();
 
  274   reflection->ListFields(message1, &
fields);
 
  275   reflection->SwapFields(&message1, &message2, 
fields);
 
  277   TestUtil::ExpectExtensionsClear(message1);
 
  278   TestUtil::ExpectAllExtensionsSet(message2);
 
  281 TEST(GeneratedMessageReflectionTest, SwapOneof) {
 
  282   unittest::TestOneof2 message1, message2;
 
  283   TestUtil::SetOneof1(&message1);
 
  285   const Reflection* reflection = message1.GetReflection();
 
  286   reflection->Swap(&message1, &message2);
 
  288   TestUtil::ExpectOneofClear(message1);
 
  289   TestUtil::ExpectOneofSet1(message2);
 
  292 TEST(GeneratedMessageReflectionTest, SwapOneofBothSet) {
 
  293   unittest::TestOneof2 message1, message2;
 
  294   TestUtil::SetOneof1(&message1);
 
  295   TestUtil::SetOneof2(&message2);
 
  297   const Reflection* reflection = message1.GetReflection();
 
  298   reflection->Swap(&message1, &message2);
 
  300   TestUtil::ExpectOneofSet2(message1);
 
  301   TestUtil::ExpectOneofSet1(message2);
 
  304 TEST(GeneratedMessageReflectionTest, SwapFieldsOneof) {
 
  305   unittest::TestOneof2 message1, message2;
 
  306   TestUtil::SetOneof1(&message1);
 
  308   std::vector<const FieldDescriptor*> 
fields;
 
  313   const Reflection* reflection = message1.GetReflection();
 
  314   reflection->SwapFields(&message1, &message2, 
fields);
 
  316   TestUtil::ExpectOneofClear(message1);
 
  317   TestUtil::ExpectOneofSet1(message2);
 
  320 TEST(GeneratedMessageReflectionTest, RemoveLast) {
 
  321   unittest::TestAllTypes 
message;
 
  322   TestUtil::ReflectionTester reflection_tester(
 
  327   reflection_tester.RemoveLastRepeatedsViaReflection(&
message);
 
  329   TestUtil::ExpectLastRepeatedsRemoved(
message);
 
  332 TEST(GeneratedMessageReflectionTest, RemoveLastExtensions) {
 
  333   unittest::TestAllExtensions 
message;
 
  334   TestUtil::ReflectionTester reflection_tester(
 
  339   reflection_tester.RemoveLastRepeatedsViaReflection(&
message);
 
  341   TestUtil::ExpectLastRepeatedExtensionsRemoved(
message);
 
  344 TEST(GeneratedMessageReflectionTest, ReleaseLast) {
 
  345   unittest::TestAllTypes 
message;
 
  347   TestUtil::ReflectionTester reflection_tester(
descriptor);
 
  351   reflection_tester.ReleaseLastRepeatedsViaReflection(&
message, 
false);
 
  353   TestUtil::ExpectLastRepeatedsReleased(
message);
 
  359   const protobuf_unittest::ForeignMessage* expected =
 
  360       message.mutable_repeated_foreign_message(1);
 
  361   std::unique_ptr<Message> released(
message.GetReflection()->ReleaseLast(
 
  366 TEST(GeneratedMessageReflectionTest, ReleaseLastExtensions) {
 
  367   unittest::TestAllExtensions 
message;
 
  369   TestUtil::ReflectionTester reflection_tester(
descriptor);
 
  373   reflection_tester.ReleaseLastRepeatedsViaReflection(&
message, 
true);
 
  375   TestUtil::ExpectLastRepeatedExtensionsReleased(
message);
 
  381       2, 
message.ExtensionSize(unittest::repeated_foreign_message_extension));
 
  382   const protobuf_unittest::ForeignMessage* expected =
 
  383       message.MutableExtension(unittest::repeated_foreign_message_extension, 1);
 
  384   std::unique_ptr<Message> released(
message.GetReflection()->ReleaseLast(
 
  386                     "repeated_foreign_message_extension")));
 
  390 TEST(GeneratedMessageReflectionTest, SwapRepeatedElements) {
 
  391   unittest::TestAllTypes 
message;
 
  392   TestUtil::ReflectionTester reflection_tester(
 
  398   reflection_tester.SwapRepeatedsViaReflection(&
message);
 
  399   TestUtil::ExpectRepeatedsSwapped(
message);
 
  402   reflection_tester.SwapRepeatedsViaReflection(&
message);
 
  406 TEST(GeneratedMessageReflectionTest, SwapRepeatedElementsExtension) {
 
  407   unittest::TestAllExtensions 
message;
 
  408   TestUtil::ReflectionTester reflection_tester(
 
  414   reflection_tester.SwapRepeatedsViaReflection(&
message);
 
  415   TestUtil::ExpectRepeatedExtensionsSwapped(
message);
 
  418   reflection_tester.SwapRepeatedsViaReflection(&
message);
 
  419   TestUtil::ExpectAllExtensionsSet(
message);
 
  425   unittest::TestAllExtensions 
message;
 
  426   TestUtil::ReflectionTester reflection_tester(
 
  429   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  430   TestUtil::ExpectAllExtensionsSet(
message);
 
  431   reflection_tester.ExpectAllFieldsSetViaReflection(
message);
 
  433   reflection_tester.ModifyRepeatedFieldsViaReflection(&
message);
 
  434   TestUtil::ExpectRepeatedExtensionsModified(
message);
 
  437 TEST(GeneratedMessageReflectionTest, FindExtensionTypeByNumber) {
 
  438   const Reflection* reflection =
 
  439       unittest::TestAllExtensions::default_instance().GetReflection();
 
  443           "optional_int32_extension");
 
  446           "repeated_string_extension");
 
  449             reflection->FindKnownExtensionByNumber(extension1->number()));
 
  451             reflection->FindKnownExtensionByNumber(extension2->number()));
 
  458   EXPECT_TRUE(unittest::TestAllTypes::default_instance()
 
  460                   ->FindKnownExtensionByNumber(extension1->number()) == 
NULL);
 
  463 TEST(GeneratedMessageReflectionTest, FindKnownExtensionByName) {
 
  464   const Reflection* reflection =
 
  465       unittest::TestAllExtensions::default_instance().GetReflection();
 
  469           "optional_int32_extension");
 
  472           "repeated_string_extension");
 
  475             reflection->FindKnownExtensionByName(extension1->full_name()));
 
  477             reflection->FindKnownExtensionByName(extension2->full_name()));
 
  480   EXPECT_TRUE(reflection->FindKnownExtensionByName(
"no_such_ext") == 
NULL);
 
  484   EXPECT_TRUE(unittest::TestAllTypes::default_instance()
 
  486                   ->FindKnownExtensionByName(extension1->full_name()) == 
NULL);
 
  489 TEST(GeneratedMessageReflectionTest, SetAllocatedMessageTest) {
 
  490   unittest::TestAllTypes from_message1;
 
  491   unittest::TestAllTypes from_message2;
 
  492   unittest::TestAllTypes to_message;
 
  493   TestUtil::ReflectionTester reflection_tester(
 
  495   reflection_tester.SetAllFieldsViaReflection(&from_message1);
 
  496   reflection_tester.SetAllFieldsViaReflection(&from_message2);
 
  499   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  503   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  504       &from_message1, &to_message);
 
  505   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  509   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  510       &from_message2, &to_message);
 
  511   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  516   reflection_tester.SetAllocatedOptionalMessageFieldsToNullViaReflection(
 
  518   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  522 TEST(GeneratedMessageReflectionTest, SetAllocatedMessageOnArenaTest) {
 
  523   unittest::TestAllTypes from_message1;
 
  524   unittest::TestAllTypes from_message2;
 
  526   unittest::TestAllTypes* to_message =
 
  527       Arena::CreateMessage<unittest::TestAllTypes>(&arena);
 
  528   TestUtil::ReflectionTester reflection_tester(
 
  530   reflection_tester.SetAllFieldsViaReflection(&from_message1);
 
  531   reflection_tester.SetAllFieldsViaReflection(&from_message2);
 
  534   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  538   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  539       &from_message1, to_message);
 
  540   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  544   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  545       &from_message2, to_message);
 
  546   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  551   reflection_tester.SetAllocatedOptionalMessageFieldsToNullViaReflection(
 
  553   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  557 TEST(GeneratedMessageReflectionTest, SetAllocatedExtensionMessageTest) {
 
  558   unittest::TestAllExtensions from_message1;
 
  559   unittest::TestAllExtensions from_message2;
 
  560   unittest::TestAllExtensions to_message;
 
  561   TestUtil::ReflectionTester reflection_tester(
 
  563   reflection_tester.SetAllFieldsViaReflection(&from_message1);
 
  564   reflection_tester.SetAllFieldsViaReflection(&from_message2);
 
  567   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  571   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  572       &from_message1, &to_message);
 
  573   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  577   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  578       &from_message2, &to_message);
 
  579   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  584   reflection_tester.SetAllocatedOptionalMessageFieldsToNullViaReflection(
 
  586   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  590 TEST(GeneratedMessageReflectionTest, SetAllocatedExtensionMessageOnArenaTest) {
 
  592   unittest::TestAllExtensions* to_message =
 
  593       Arena::CreateMessage<unittest::TestAllExtensions>(&arena);
 
  594   unittest::TestAllExtensions from_message1;
 
  595   unittest::TestAllExtensions from_message2;
 
  596   TestUtil::ReflectionTester reflection_tester(
 
  598   reflection_tester.SetAllFieldsViaReflection(&from_message1);
 
  599   reflection_tester.SetAllFieldsViaReflection(&from_message2);
 
  602   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  606   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  607       &from_message1, to_message);
 
  608   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  612   reflection_tester.SetAllocatedOptionalMessageFieldsToMessageViaReflection(
 
  613       &from_message2, to_message);
 
  614   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  619   reflection_tester.SetAllocatedOptionalMessageFieldsToNullViaReflection(
 
  621   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  625 TEST(GeneratedMessageReflectionTest, AddRepeatedMessage) {
 
  626   unittest::TestAllTypes 
message;
 
  628   const Reflection* reflection = 
message.GetReflection();
 
  629   const Reflection* nested_reflection =
 
  630       unittest::TestAllTypes::NestedMessage::default_instance().GetReflection();
 
  637       reflection->AddMessage(&
message, 
F(
"repeated_nested_message"));
 
  638   nested_reflection->SetInt32(nested, nested_bb, 11);
 
  643 TEST(GeneratedMessageReflectionTest, MutableRepeatedMessage) {
 
  644   unittest::TestAllTypes 
message;
 
  646   const Reflection* reflection = 
message.GetReflection();
 
  647   const Reflection* nested_reflection =
 
  648       unittest::TestAllTypes::NestedMessage::default_instance().GetReflection();
 
  654   message.add_repeated_nested_message()->set_bb(12);
 
  656   Message* nested = reflection->MutableRepeatedMessage(
 
  657       &
message, 
F(
"repeated_nested_message"), 0);
 
  658   EXPECT_EQ(12, nested_reflection->GetInt32(*nested, nested_bb));
 
  659   nested_reflection->SetInt32(nested, nested_bb, 13);
 
  663 TEST(GeneratedMessageReflectionTest, AddAllocatedMessage) {
 
  664   unittest::TestAllTypes 
message;
 
  666   const Reflection* reflection = 
message.GetReflection();
 
  668   unittest::TestAllTypes::NestedMessage* nested =
 
  669       new unittest::TestAllTypes::NestedMessage();
 
  671   reflection->AddAllocatedMessage(&
message, 
F(
"repeated_nested_message"),
 
  677 TEST(GeneratedMessageReflectionTest, ListFieldsOneOf) {
 
  681   const Reflection* reflection = 
message.GetReflection();
 
  682   std::vector<const FieldDescriptor*> 
fields;
 
  687 TEST(GeneratedMessageReflectionTest, 
Oneof) {
 
  690   const Reflection* reflection = 
message.GetReflection();
 
  704       unittest::TestOneof2::FOO,
 
  707   EXPECT_EQ(&unittest::TestOneof2::NestedMessage::default_instance(),
 
  708             &reflection->GetMessage(
 
  710   EXPECT_EQ(&unittest::TestOneof2::FooGroup::default_instance(),
 
  711             &reflection->GetMessage(
message,
 
  713   EXPECT_NE(&unittest::TestOneof2::FooGroup::default_instance(),
 
  714             &reflection->GetMessage(
 
  718   EXPECT_EQ(
"STRING", reflection->GetString(
 
  723             reflection->GetString(
 
  725   EXPECT_EQ(
"BYTES", reflection->GetString(
 
  728       unittest::TestOneof2::BAR,
 
  742   EXPECT_EQ(
"bytes", reflection->GetString(
 
  749   reflection->SetString(&
message,
 
  753             reflection->GetString(
 
  758   TestUtil::ExpectOneofClear(
message);
 
  761 TEST(GeneratedMessageReflectionTest, SetAllocatedOneofMessageTest) {
 
  762   unittest::TestOneof2 from_message1;
 
  763   unittest::TestOneof2 from_message2;
 
  764   unittest::TestOneof2 to_message;
 
  766   const Reflection* reflection = to_message.GetReflection();
 
  768   Message* released = reflection->ReleaseMessage(
 
  771   released = reflection->ReleaseMessage(
 
  781   const Message& sub_message = reflection->GetMessage(
 
  783   released = reflection->ReleaseMessage(
 
  791   reflection->MutableMessage(&from_message2,
 
  798   const Message& sub_message2 = reflection->GetMessage(
 
  800   released = reflection->ReleaseMessage(
 
  807 TEST(GeneratedMessageReflectionTest, SetAllocatedOneofMessageOnArenaTest) {
 
  808   unittest::TestOneof2 from_message1;
 
  809   unittest::TestOneof2 from_message2;
 
  811   unittest::TestOneof2* to_message =
 
  812       Arena::CreateMessage<unittest::TestOneof2>(&arena);
 
  814   const Reflection* reflection = to_message->GetReflection();
 
  816   Message* released = reflection->ReleaseMessage(
 
  819   released = reflection->ReleaseMessage(
 
  829   const Message& sub_message = reflection->GetMessage(
 
  831   released = reflection->ReleaseMessage(
 
  841   reflection->MutableMessage(&from_message2,
 
  848   const Message& sub_message2 = reflection->GetMessage(
 
  850   released = reflection->ReleaseMessage(
 
  859 TEST(GeneratedMessageReflectionTest, ReleaseMessageTest) {
 
  860   unittest::TestAllTypes 
message;
 
  861   TestUtil::ReflectionTester reflection_tester(
 
  865   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  869   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  870   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  875   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  877   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  885 TEST(GeneratedMessageReflectionTest, ReleaseExtensionMessageTest) {
 
  886   unittest::TestAllExtensions 
message;
 
  887   TestUtil::ReflectionTester reflection_tester(
 
  891   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  895   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  896   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  901   reflection_tester.SetAllFieldsViaReflection(&
message);
 
  903   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  908   TestUtil::ExpectAllExtensionsSet(
message);
 
  911 TEST(GeneratedMessageReflectionTest, ReleaseOneofMessageTest) {
 
  916   const Reflection* reflection = 
message.GetReflection();
 
  917   const Message& sub_message = reflection->GetMessage(
 
  919   Message* released = reflection->ReleaseMessage(
 
  926   released = reflection->ReleaseMessage(
 
  931 TEST(GeneratedMessageReflectionTest, ArenaReleaseMessageTest) {
 
  933   unittest::TestAllTypes* 
message =
 
  934       Arena::CreateMessage<unittest::TestAllTypes>(&arena);
 
  935   TestUtil::ReflectionTester reflection_tester(
 
  939   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  943   reflection_tester.SetAllFieldsViaReflection(
message);
 
  944   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  949   reflection_tester.SetAllFieldsViaReflection(
message);
 
  951   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  955 TEST(GeneratedMessageReflectionTest, ArenaReleaseExtensionMessageTest) {
 
  957   unittest::TestAllExtensions* 
message =
 
  958       Arena::CreateMessage<unittest::TestAllExtensions>(&arena);
 
  959   TestUtil::ReflectionTester reflection_tester(
 
  963   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  967   reflection_tester.SetAllFieldsViaReflection(
message);
 
  968   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  973   reflection_tester.SetAllFieldsViaReflection(
message);
 
  975   reflection_tester.ExpectMessagesReleasedViaReflection(
 
  979 TEST(GeneratedMessageReflectionTest, ArenaReleaseOneofMessageTest) {
 
  981   unittest::TestOneof2* 
message =
 
  982       Arena::CreateMessage<unittest::TestOneof2>(&arena);
 
  986   const Reflection* reflection = 
message->GetReflection();
 
  987   Message* released = reflection->ReleaseMessage(
 
  993   released = reflection->ReleaseMessage(
 
  998 #ifdef PROTOBUF_HAS_DEATH_TEST 
 1000 TEST(GeneratedMessageReflectionTest, UsageErrors) {
 
 1001   unittest::TestAllTypes 
message;
 
 1002   const Reflection* reflection = 
message.GetReflection();
 
 1005 #define f(NAME) descriptor->FindFieldByName(NAME) 
 1012       "Protocol Buffer reflection usage error:\n" 
 1013       "  Method      : google::protobuf::Reflection::GetInt32\n" 
 1014       "  Message type: protobuf_unittest\\.TestAllTypes\n" 
 1015       "  Field       : protobuf_unittest\\.TestAllTypes\\.optional_int64\n" 
 1016       "  Problem     : Field is not the right type for this message:\n" 
 1017       "    Expected  : CPPTYPE_INT32\n" 
 1018       "    Field type: CPPTYPE_INT64");
 
 1019   EXPECT_DEATH(reflection->GetInt32(
 
 1021                "Protocol Buffer reflection usage error:\n" 
 1022                "  Method      : google::protobuf::Reflection::GetInt32\n" 
 1023                "  Message type: protobuf_unittest.TestAllTypes\n" 
 1024                "  Field       : protobuf_unittest.TestAllTypes.repeated_int32\n" 
 1025                "  Problem     : Field is repeated; the method requires a " 
 1028       reflection->GetInt32(
 
 1031       "Protocol Buffer reflection usage error:\n" 
 1032       "  Method      : google::protobuf::Reflection::GetInt32\n" 
 1033       "  Message type: protobuf_unittest.TestAllTypes\n" 
 1034       "  Field       : protobuf_unittest.ForeignMessage.c\n" 
 1035       "  Problem     : Field does not match message type.");
 
 1037       reflection->HasField(
 
 1040       "Protocol Buffer reflection usage error:\n" 
 1041       "  Method      : google::protobuf::Reflection::HasField\n" 
 1042       "  Message type: protobuf_unittest.TestAllTypes\n" 
 1043       "  Field       : protobuf_unittest.ForeignMessage.c\n" 
 1044       "  Problem     : Field does not match message type.");
 
 1049 #endif  // PROTOBUF_HAS_DEATH_TEST