Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: third_party/protobuf/src/google/protobuf/extension_set_unittest.cc

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 unittest::TestMessageSetExtension1::message_set_extension, 198 unittest::TestMessageSetExtension1::message_set_extension,
199 extension); 199 extension);
200 message.ClearExtension( 200 message.ClearExtension(
201 unittest::TestMessageSetExtension1::message_set_extension); 201 unittest::TestMessageSetExtension1::message_set_extension);
202 released_extension = message.ReleaseExtension( 202 released_extension = message.ReleaseExtension(
203 unittest::TestMessageSetExtension1::message_set_extension); 203 unittest::TestMessageSetExtension1::message_set_extension);
204 EXPECT_TRUE(released_extension != NULL); 204 EXPECT_TRUE(released_extension != NULL);
205 delete released_extension; 205 delete released_extension;
206 } 206 }
207 207
208 TEST(ExtensionSetTest, ArenaUnsafeArenaSetAllocatedAndRelease) {
209 ::google::protobuf::Arena arena;
210 unittest::TestAllExtensions* message =
211 ::google::protobuf::Arena::CreateMessage<unittest::TestAllExtensions>(&are na);
212 unittest::ForeignMessage extension;
213 message->UnsafeArenaSetAllocatedExtension(
214 unittest::optional_foreign_message_extension,
215 &extension);
216 // No copy when set.
217 unittest::ForeignMessage* mutable_extension =
218 message->MutableExtension(unittest::optional_foreign_message_extension);
219 EXPECT_EQ(&extension, mutable_extension);
220 // No copy when unsafe released.
221 unittest::ForeignMessage* released_extension =
222 message->UnsafeArenaReleaseExtension(
223 unittest::optional_foreign_message_extension);
224 EXPECT_EQ(&extension, released_extension);
225 EXPECT_FALSE(message->HasExtension(
226 unittest::optional_foreign_message_extension));
227 // Set the ownership back and let the destructors run. It should not take
228 // ownership, so this should not crash.
229 message->UnsafeArenaSetAllocatedExtension(
230 unittest::optional_foreign_message_extension,
231 &extension);
232 }
233
234 TEST(ExtensionSetTest, UnsafeArenaSetAllocatedAndRelease) {
235 unittest::TestAllExtensions message;
236 unittest::ForeignMessage* extension = new unittest::ForeignMessage();
237 message.UnsafeArenaSetAllocatedExtension(
238 unittest::optional_foreign_message_extension,
239 extension);
240 // No copy when set.
241 unittest::ForeignMessage* mutable_extension =
242 message.MutableExtension(unittest::optional_foreign_message_extension);
243 EXPECT_EQ(extension, mutable_extension);
244 // No copy when unsafe released.
245 unittest::ForeignMessage* released_extension =
246 message.UnsafeArenaReleaseExtension(
247 unittest::optional_foreign_message_extension);
248 EXPECT_EQ(extension, released_extension);
249 EXPECT_FALSE(message.HasExtension(
250 unittest::optional_foreign_message_extension));
251 // Set the ownership back and let the destructors run. It should take
252 // ownership, so this should not leak.
253 message.UnsafeArenaSetAllocatedExtension(
254 unittest::optional_foreign_message_extension,
255 extension);
256 }
257
258 TEST(ExtensionSetTest, ArenaUnsafeArenaReleaseOfHeapAlloc) {
259 ::google::protobuf::Arena arena;
260 unittest::TestAllExtensions* message =
261 ::google::protobuf::Arena::CreateMessage<unittest::TestAllExtensions>(&are na);
262 unittest::ForeignMessage* extension = new unittest::ForeignMessage;
263 message->SetAllocatedExtension(
264 unittest::optional_foreign_message_extension,
265 extension);
266 // The arena should maintain ownership of the heap allocated proto because we
267 // used UnsafeArenaReleaseExtension. The leak checker will ensure this.
268 unittest::ForeignMessage* released_extension =
269 message->UnsafeArenaReleaseExtension(
270 unittest::optional_foreign_message_extension);
271 EXPECT_EQ(extension, released_extension);
272 EXPECT_FALSE(message->HasExtension(
273 unittest::optional_foreign_message_extension));
274 }
275
208 276
209 TEST(ExtensionSetTest, CopyFrom) { 277 TEST(ExtensionSetTest, CopyFrom) {
210 unittest::TestAllExtensions message1, message2; 278 unittest::TestAllExtensions message1, message2;
211 279
212 TestUtil::SetAllExtensions(&message1); 280 TestUtil::SetAllExtensions(&message1);
213 message2.CopyFrom(message1); 281 message2.CopyFrom(message1);
214 TestUtil::ExpectAllExtensionsSet(message2); 282 TestUtil::ExpectAllExtensionsSet(message2);
215 message2.CopyFrom(message1); // exercise copy when fields already exist 283 message2.CopyFrom(message1); // exercise copy when fields already exist
216 TestUtil::ExpectAllExtensionsSet(message2); 284 TestUtil::ExpectAllExtensionsSet(message2);
217 } 285 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 TestUtil::ExpectAllExtensionsSet(message); 324 TestUtil::ExpectAllExtensionsSet(message);
257 message.Swap(&message); 325 message.Swap(&message);
258 TestUtil::ExpectAllExtensionsSet(message); 326 TestUtil::ExpectAllExtensionsSet(message);
259 } 327 }
260 328
261 TEST(ExtensionSetTest, SwapExtension) { 329 TEST(ExtensionSetTest, SwapExtension) {
262 unittest::TestAllExtensions message1; 330 unittest::TestAllExtensions message1;
263 unittest::TestAllExtensions message2; 331 unittest::TestAllExtensions message2;
264 332
265 TestUtil::SetAllExtensions(&message1); 333 TestUtil::SetAllExtensions(&message1);
266 vector<const FieldDescriptor*> fields; 334 std::vector<const FieldDescriptor*> fields;
267 335
268 // Swap empty fields. 336 // Swap empty fields.
269 const Reflection* reflection = message1.GetReflection(); 337 const Reflection* reflection = message1.GetReflection();
270 reflection->SwapFields(&message1, &message2, fields); 338 reflection->SwapFields(&message1, &message2, fields);
271 TestUtil::ExpectAllExtensionsSet(message1); 339 TestUtil::ExpectAllExtensionsSet(message1);
272 TestUtil::ExpectExtensionsClear(message2); 340 TestUtil::ExpectExtensionsClear(message2);
273 341
274 // Swap two extensions. 342 // Swap two extensions.
275 fields.push_back( 343 fields.push_back(
276 reflection->FindKnownExtensionByNumber(12)); 344 reflection->FindKnownExtensionByNumber(12));
(...skipping 11 matching lines...) Expand all
288 } 356 }
289 357
290 TEST(ExtensionSetTest, SwapExtensionWithEmpty) { 358 TEST(ExtensionSetTest, SwapExtensionWithEmpty) {
291 unittest::TestAllExtensions message1; 359 unittest::TestAllExtensions message1;
292 unittest::TestAllExtensions message2; 360 unittest::TestAllExtensions message2;
293 unittest::TestAllExtensions message3; 361 unittest::TestAllExtensions message3;
294 362
295 TestUtil::SetAllExtensions(&message3); 363 TestUtil::SetAllExtensions(&message3);
296 364
297 const Reflection* reflection = message3.GetReflection(); 365 const Reflection* reflection = message3.GetReflection();
298 vector<const FieldDescriptor*> fields; 366 std::vector<const FieldDescriptor*> fields;
299 reflection->ListFields(message3, &fields); 367 reflection->ListFields(message3, &fields);
300 368
301 reflection->SwapFields(&message1, &message2, fields); 369 reflection->SwapFields(&message1, &message2, fields);
302 370
303 TestUtil::ExpectExtensionsClear(message1); 371 TestUtil::ExpectExtensionsClear(message1);
304 TestUtil::ExpectExtensionsClear(message2); 372 TestUtil::ExpectExtensionsClear(message2);
305 } 373 }
306 374
307 TEST(ExtensionSetTest, SwapExtensionBothFull) { 375 TEST(ExtensionSetTest, SwapExtensionBothFull) {
308 unittest::TestAllExtensions message1; 376 unittest::TestAllExtensions message1;
309 unittest::TestAllExtensions message2; 377 unittest::TestAllExtensions message2;
310 378
311 TestUtil::SetAllExtensions(&message1); 379 TestUtil::SetAllExtensions(&message1);
312 TestUtil::SetAllExtensions(&message2); 380 TestUtil::SetAllExtensions(&message2);
313 381
314 const Reflection* reflection = message1.GetReflection(); 382 const Reflection* reflection = message1.GetReflection();
315 vector<const FieldDescriptor*> fields; 383 std::vector<const FieldDescriptor*> fields;
316 reflection->ListFields(message1, &fields); 384 reflection->ListFields(message1, &fields);
317 385
318 reflection->SwapFields(&message1, &message2, fields); 386 reflection->SwapFields(&message1, &message2, fields);
319 387
320 TestUtil::ExpectAllExtensionsSet(message1); 388 TestUtil::ExpectAllExtensionsSet(message1);
321 TestUtil::ExpectAllExtensionsSet(message2); 389 TestUtil::ExpectAllExtensionsSet(message2);
322 } 390 }
323 391
324 TEST(ExtensionSetTest, ArenaSetAllExtension) { 392 TEST(ExtensionSetTest, ArenaSetAllExtension) {
325 ::google::protobuf::Arena arena1; 393 ::google::protobuf::Arena arena1;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 483
416 unittest::TestAllExtensions* message1 = 484 unittest::TestAllExtensions* message1 =
417 Arena::CreateMessage<unittest::TestAllExtensions>(&arena1); 485 Arena::CreateMessage<unittest::TestAllExtensions>(&arena1);
418 unittest::TestAllExtensions* message2 = 486 unittest::TestAllExtensions* message2 =
419 Arena::CreateMessage<unittest::TestAllExtensions>(arena2); 487 Arena::CreateMessage<unittest::TestAllExtensions>(arena2);
420 488
421 TestUtil::SetAllExtensions(message1); 489 TestUtil::SetAllExtensions(message1);
422 TestUtil::SetAllExtensions(message2); 490 TestUtil::SetAllExtensions(message2);
423 491
424 const Reflection* reflection = message1->GetReflection(); 492 const Reflection* reflection = message1->GetReflection();
425 vector<const FieldDescriptor*> fields; 493 std::vector<const FieldDescriptor*> fields;
426 reflection->ListFields(*message1, &fields); 494 reflection->ListFields(*message1, &fields);
427 reflection->SwapFields(message1, message2, fields); 495 reflection->SwapFields(message1, message2, fields);
428 TestUtil::ExpectAllExtensionsSet(*message1); 496 TestUtil::ExpectAllExtensionsSet(*message1);
429 TestUtil::ExpectAllExtensionsSet(*message2); 497 TestUtil::ExpectAllExtensionsSet(*message2);
430 delete arena2; 498 delete arena2;
431 TestUtil::ExpectAllExtensionsSet(*message1); 499 TestUtil::ExpectAllExtensionsSet(*message1);
432 } 500 }
433 501
434 TEST(ExtensionSetTest, SwapExtensionWithSelf) { 502 TEST(ExtensionSetTest, SwapExtensionWithSelf) {
435 unittest::TestAllExtensions message1; 503 unittest::TestAllExtensions message1;
436 504
437 TestUtil::SetAllExtensions(&message1); 505 TestUtil::SetAllExtensions(&message1);
438 506
439 vector<const FieldDescriptor*> fields; 507 std::vector<const FieldDescriptor*> fields;
440 const Reflection* reflection = message1.GetReflection(); 508 const Reflection* reflection = message1.GetReflection();
441 reflection->ListFields(message1, &fields); 509 reflection->ListFields(message1, &fields);
442 reflection->SwapFields(&message1, &message1, fields); 510 reflection->SwapFields(&message1, &message1, fields);
443 511
444 TestUtil::ExpectAllExtensionsSet(message1); 512 TestUtil::ExpectAllExtensionsSet(message1);
445 } 513 }
446 514
447 TEST(ExtensionSetTest, SerializationToArray) { 515 TEST(ExtensionSetTest, SerializationToArray) {
448 // Serialize as TestAllExtensions and parse as TestAllTypes to insure wire 516 // Serialize as TestAllExtensions and parse as TestAllTypes to insure wire
449 // compatibility of extensions. 517 // compatibility of extensions.
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 EXPECT_LE(min_expected_size, empty_repeated_field_size) << #type; \ 789 EXPECT_LE(min_expected_size, empty_repeated_field_size) << #type; \
722 message.AddExtension(unittest::repeated_##type##_extension, value); \ 790 message.AddExtension(unittest::repeated_##type##_extension, value); \
723 message.AddExtension(unittest::repeated_##type##_extension, value); \ 791 message.AddExtension(unittest::repeated_##type##_extension, value); \
724 EXPECT_EQ(empty_repeated_field_size, message.SpaceUsed()) << #type; \ 792 EXPECT_EQ(empty_repeated_field_size, message.SpaceUsed()) << #type; \
725 message.ClearExtension(unittest::repeated_##type##_extension); \ 793 message.ClearExtension(unittest::repeated_##type##_extension); \
726 for (int i = 0; i < 16; ++i) { \ 794 for (int i = 0; i < 16; ++i) { \
727 message.AddExtension(unittest::repeated_##type##_extension, value); \ 795 message.AddExtension(unittest::repeated_##type##_extension, value); \
728 } \ 796 } \
729 int expected_size = sizeof(cpptype) * (16 - \ 797 int expected_size = sizeof(cpptype) * (16 - \
730 kMinRepeatedFieldAllocationSize) + empty_repeated_field_size; \ 798 kMinRepeatedFieldAllocationSize) + empty_repeated_field_size; \
731 EXPECT_EQ(expected_size, message.SpaceUsed()) << #type; \ 799 EXPECT_LE(expected_size, message.SpaceUsed()) << #type; \
732 } while (0) 800 } while (0)
733 801
734 TEST_REPEATED_EXTENSIONS_SPACE_USED(int32 , int32 , 101); 802 TEST_REPEATED_EXTENSIONS_SPACE_USED(int32 , int32 , 101);
735 TEST_REPEATED_EXTENSIONS_SPACE_USED(int64 , int64 , 102); 803 TEST_REPEATED_EXTENSIONS_SPACE_USED(int64 , int64 , 102);
736 TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32 , uint32, 103); 804 TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32 , uint32, 103);
737 TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64 , uint64, 104); 805 TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64 , uint64, 104);
738 TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32 , int32 , 105); 806 TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32 , int32 , 105);
739 TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64 , int64 , 106); 807 TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64 , int64 , 106);
740 TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32 , uint32, 107); 808 TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32 , uint32, 107);
741 TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64 , uint64, 108); 809 TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64 , uint64, 108);
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 const Message* prototype = 1266 const Message* prototype =
1199 dynamic_factory.GetPrototype(dynamic_message_extension->message_type()); 1267 dynamic_factory.GetPrototype(dynamic_message_extension->message_type());
1200 EXPECT_EQ(prototype, &sub_message); 1268 EXPECT_EQ(prototype, &sub_message);
1201 } 1269 }
1202 } 1270 }
1203 1271
1204 } // namespace 1272 } // namespace
1205 } // namespace internal 1273 } // namespace internal
1206 } // namespace protobuf 1274 } // namespace protobuf
1207 } // namespace google 1275 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698