37 #include <google/protobuf/unittest.pb.h>
52 TEST(ReflectionOpsTest, SanityCheck) {
59 TEST(ReflectionOpsTest, Copy) {
60 unittest::TestAllTypes
message, message2;
73 TEST(ReflectionOpsTest, CopyExtensions) {
74 unittest::TestAllExtensions
message, message2;
80 TestUtil::ExpectAllExtensionsSet(message2);
83 TEST(ReflectionOpsTest, CopyOneof) {
84 unittest::TestOneof2
message, message2;
87 TestUtil::ExpectOneofSet1(message2);
90 TestUtil::ExpectOneofSet2(
message);
92 TestUtil::ExpectOneofSet2(message2);
99 unittest::TestAllTypes
message, message2;
104 message2.set_optional_int32(
message.optional_int32());
105 message.clear_optional_int32();
108 message2.set_optional_string(
message.optional_string());
109 message.set_optional_string(
"something else");
112 message2.add_repeated_int32(
message.repeated_int32(1));
114 message.clear_repeated_int32();
122 TEST(ReflectionOpsTest, MergeExtensions) {
126 unittest::TestAllExtensions
message, message2;
131 message2.SetExtension(
132 unittest::optional_int32_extension,
133 message.GetExtension(unittest::optional_int32_extension));
134 message.ClearExtension(unittest::optional_int32_extension);
137 message2.SetExtension(
138 unittest::optional_string_extension,
139 message.GetExtension(unittest::optional_string_extension));
140 message.SetExtension(unittest::optional_string_extension,
"something else");
143 message2.AddExtension(
144 unittest::repeated_int32_extension,
145 message.GetExtension(unittest::repeated_int32_extension, 1));
146 int32 i =
message.GetExtension(unittest::repeated_int32_extension, 0);
147 message.ClearExtension(unittest::repeated_int32_extension);
148 message.AddExtension(unittest::repeated_int32_extension,
i);
152 TestUtil::ExpectAllExtensionsSet(
message);
155 TEST(ReflectionOpsTest, MergeUnknown) {
157 unittest::TestEmptyMessage message1, message2;
158 message1.mutable_unknown_fields()->AddVarint(1234, 1);
159 message2.mutable_unknown_fields()->AddVarint(1234, 2);
163 ASSERT_EQ(2, message1.unknown_fields().field_count());
165 message1.unknown_fields().field(0).type());
166 EXPECT_EQ(1, message1.unknown_fields().field(0).varint());
168 message1.unknown_fields().field(1).type());
169 EXPECT_EQ(2, message1.unknown_fields().field(1).varint());
172 TEST(ReflectionOpsTest, MergeOneof) {
173 unittest::TestOneof2 message1, message2;
174 TestUtil::SetOneof1(&message1);
178 TestUtil::ExpectOneofSet1(message2);
182 TestUtil::ExpectOneofSet1(message2);
185 TestUtil::SetOneof2(&message1);
187 TestUtil::ExpectOneofSet2(message2);
190 #ifdef PROTOBUF_HAS_DEATH_TEST
192 TEST(ReflectionOpsTest, MergeFromSelf) {
196 unittest::TestAllTypes
message;
201 #endif // PROTOBUF_HAS_DEATH_TEST
204 unittest::TestAllTypes
message;
210 TestUtil::ExpectClear(
message);
214 EXPECT_NE(&unittest::TestAllTypes::OptionalGroup::default_instance(),
216 EXPECT_NE(&unittest::TestAllTypes::NestedMessage::default_instance(),
217 &
message.optional_nested_message());
218 EXPECT_NE(&unittest::ForeignMessage::default_instance(),
219 &
message.optional_foreign_message());
220 EXPECT_NE(&unittest_import::ImportMessage::default_instance(),
221 &
message.optional_import_message());
224 TEST(ReflectionOpsTest, ClearExtensions) {
225 unittest::TestAllExtensions
message;
231 TestUtil::ExpectExtensionsClear(
message);
235 EXPECT_NE(&unittest::OptionalGroup_extension::default_instance(),
236 &
message.GetExtension(unittest::optionalgroup_extension));
237 EXPECT_NE(&unittest::TestAllTypes::NestedMessage::default_instance(),
238 &
message.GetExtension(unittest::optional_nested_message_extension));
240 &unittest::ForeignMessage::default_instance(),
241 &
message.GetExtension(unittest::optional_foreign_message_extension));
242 EXPECT_NE(&unittest_import::ImportMessage::default_instance(),
243 &
message.GetExtension(unittest::optional_import_message_extension));
246 TEST(ReflectionOpsTest, ClearUnknown) {
248 unittest::TestEmptyMessage
message;
249 message.mutable_unknown_fields()->AddVarint(1234, 1);
256 TEST(ReflectionOpsTest, ClearOneof) {
259 TestUtil::ExpectOneofClear(
message);
261 TestUtil::ExpectOneofSet1(
message);
263 TestUtil::ExpectOneofClear(
message);
266 TestUtil::ExpectOneofSet1(
message);
268 TestUtil::ExpectOneofSet2(
message);
270 TestUtil::ExpectOneofClear(
message);
274 unittest::TestAllTypes
message;
278 message.mutable_unknown_fields()->AddVarint(123456, 654321);
279 message.mutable_optional_nested_message()
280 ->mutable_unknown_fields()
281 ->AddVarint(123456, 654321);
282 message.mutable_repeated_nested_message(0)
283 ->mutable_unknown_fields()
284 ->AddVarint(123456, 654321);
288 message.optional_nested_message().unknown_fields().field_count());
290 message.repeated_nested_message(0).unknown_fields().field_count());
298 message.optional_nested_message().unknown_fields().field_count());
300 message.repeated_nested_message(0).unknown_fields().field_count());
303 TEST(ReflectionOpsTest, DiscardUnknownExtensions) {
304 unittest::TestAllExtensions
message;
308 message.mutable_unknown_fields()->AddVarint(123456, 654321);
309 message.MutableExtension(unittest::optional_nested_message_extension)
310 ->mutable_unknown_fields()
311 ->AddVarint(123456, 654321);
312 message.MutableExtension(unittest::repeated_nested_message_extension, 0)
313 ->mutable_unknown_fields()
314 ->AddVarint(123456, 654321);
317 EXPECT_EQ(1,
message.GetExtension(unittest::optional_nested_message_extension)
321 message.GetExtension(unittest::repeated_nested_message_extension, 0)
327 TestUtil::ExpectAllExtensionsSet(
message);
330 EXPECT_EQ(0,
message.GetExtension(unittest::optional_nested_message_extension)
334 message.GetExtension(unittest::repeated_nested_message_extension, 0)
340 unittest::TestRequired
message;
351 TEST(ReflectionOpsTest, ForeignIsInitialized) {
352 unittest::TestRequiredForeign
message;
359 message.mutable_optional_message();
363 message.mutable_optional_message()->set_a(1);
364 message.mutable_optional_message()->set_b(2);
365 message.mutable_optional_message()->set_c(3);
369 unittest::TestRequired* sub_message =
message.add_repeated_message();
373 sub_message->set_a(1);
374 sub_message->set_b(2);
375 sub_message->set_c(3);
379 TEST(ReflectionOpsTest, ExtensionIsInitialized) {
380 unittest::TestAllExtensions
message;
387 message.MutableExtension(unittest::TestRequired::single);
391 message.MutableExtension(unittest::TestRequired::single)->set_a(1);
392 message.MutableExtension(unittest::TestRequired::single)->set_b(2);
393 message.MutableExtension(unittest::TestRequired::single)->set_c(3);
397 message.AddExtension(unittest::TestRequired::multi);
401 message.MutableExtension(unittest::TestRequired::multi, 0)->set_a(1);
402 message.MutableExtension(unittest::TestRequired::multi, 0)->set_b(2);
403 message.MutableExtension(unittest::TestRequired::multi, 0)->set_c(3);
407 TEST(ReflectionOpsTest, OneofIsInitialized) {
408 unittest::TestRequiredOneof
message;
419 message.mutable_foo_message()->set_required_double(0.1);
424 std::vector<std::string>
errors;
430 unittest::TestRequired
message;
434 TEST(ReflectionOpsTest, FindForeignInitializationErrors) {
435 unittest::TestRequiredForeign
message;
436 message.mutable_optional_message();
437 message.add_repeated_message();
438 message.add_repeated_message();
440 "optional_message.a,"
441 "optional_message.b,"
442 "optional_message.c,"
443 "repeated_message[0].a,"
444 "repeated_message[0].b,"
445 "repeated_message[0].c,"
446 "repeated_message[1].a,"
447 "repeated_message[1].b,"
448 "repeated_message[1].c",
452 TEST(ReflectionOpsTest, FindExtensionInitializationErrors) {
453 unittest::TestAllExtensions
message;
454 message.MutableExtension(unittest::TestRequired::single);
455 message.AddExtension(unittest::TestRequired::multi);
456 message.AddExtension(unittest::TestRequired::multi);
458 "(protobuf_unittest.TestRequired.single).a,"
459 "(protobuf_unittest.TestRequired.single).b,"
460 "(protobuf_unittest.TestRequired.single).c,"
461 "(protobuf_unittest.TestRequired.multi)[0].a,"
462 "(protobuf_unittest.TestRequired.multi)[0].b,"
463 "(protobuf_unittest.TestRequired.multi)[0].c,"
464 "(protobuf_unittest.TestRequired.multi)[1].a,"
465 "(protobuf_unittest.TestRequired.multi)[1].b,"
466 "(protobuf_unittest.TestRequired.multi)[1].c",
470 TEST(ReflectionOpsTest, FindOneofInitializationErrors) {
471 unittest::TestRequiredOneof
message;