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

Side by Side Diff: third_party/protobuf/python/google/protobuf/internal/well_known_types_test.py

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 #! /usr/bin/env python 1 #! /usr/bin/env python
2 # 2 #
3 # Protocol Buffers - Google's data interchange format 3 # Protocol Buffers - Google's data interchange format
4 # Copyright 2008 Google Inc. All rights reserved. 4 # Copyright 2008 Google Inc. All rights reserved.
5 # https://developers.google.com/protocol-buffers/ 5 # https://developers.google.com/protocol-buffers/
6 # 6 #
7 # Redistribution and use in source and binary forms, with or without 7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are 8 # modification, are permitted provided that the following conditions are
9 # met: 9 # met:
10 # 10 #
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 def testInvalidDuration(self): 296 def testInvalidDuration(self):
297 message = duration_pb2.Duration() 297 message = duration_pb2.Duration()
298 self.assertRaisesRegexp( 298 self.assertRaisesRegexp(
299 well_known_types.ParseError, 299 well_known_types.ParseError,
300 'Duration must end with letter "s": 1.', 300 'Duration must end with letter "s": 1.',
301 message.FromJsonString, '1') 301 message.FromJsonString, '1')
302 self.assertRaisesRegexp( 302 self.assertRaisesRegexp(
303 well_known_types.ParseError, 303 well_known_types.ParseError,
304 'Couldn\'t parse duration: 1...2s.', 304 'Couldn\'t parse duration: 1...2s.',
305 message.FromJsonString, '1...2s') 305 message.FromJsonString, '1...2s')
306 text = '-315576000001.000000000s'
307 self.assertRaisesRegexp(
308 well_known_types.Error,
309 r'Duration is not valid\: Seconds -315576000001 must be in range'
310 r' \[-315576000000\, 315576000000\].',
311 message.FromJsonString, text)
312 text = '315576000001.000000000s'
313 self.assertRaisesRegexp(
314 well_known_types.Error,
315 r'Duration is not valid\: Seconds 315576000001 must be in range'
316 r' \[-315576000000\, 315576000000\].',
317 message.FromJsonString, text)
318 message.seconds = -315576000001
319 message.nanos = 0
320 self.assertRaisesRegexp(
321 well_known_types.Error,
322 r'Duration is not valid\: Seconds -315576000001 must be in range'
323 r' \[-315576000000\, 315576000000\].',
324 message.ToJsonString)
306 325
307 326
308 class FieldMaskTest(unittest.TestCase): 327 class FieldMaskTest(unittest.TestCase):
309 328
310 def testStringFormat(self): 329 def testStringFormat(self):
311 mask = field_mask_pb2.FieldMask() 330 mask = field_mask_pb2.FieldMask()
312 self.assertEqual('', mask.ToJsonString()) 331 self.assertEqual('', mask.ToJsonString())
313 mask.paths.append('foo') 332 mask.paths.append('foo')
314 self.assertEqual('foo', mask.ToJsonString()) 333 self.assertEqual('foo', mask.ToJsonString())
315 mask.paths.append('bar') 334 mask.paths.append('bar')
316 self.assertEqual('foo,bar', mask.ToJsonString()) 335 self.assertEqual('foo,bar', mask.ToJsonString())
317 336
318 mask.FromJsonString('') 337 mask.FromJsonString('')
319 self.assertEqual('', mask.ToJsonString()) 338 self.assertEqual('', mask.ToJsonString())
320 mask.FromJsonString('foo') 339 mask.FromJsonString('foo')
321 self.assertEqual(['foo'], mask.paths) 340 self.assertEqual(['foo'], mask.paths)
322 mask.FromJsonString('foo,bar') 341 mask.FromJsonString('foo,bar')
323 self.assertEqual(['foo', 'bar'], mask.paths) 342 self.assertEqual(['foo', 'bar'], mask.paths)
324 343
344 # Test camel case
345 mask.Clear()
346 mask.paths.append('foo_bar')
347 self.assertEqual('fooBar', mask.ToJsonString())
348 mask.paths.append('bar_quz')
349 self.assertEqual('fooBar,barQuz', mask.ToJsonString())
350
351 mask.FromJsonString('')
352 self.assertEqual('', mask.ToJsonString())
353 mask.FromJsonString('fooBar')
354 self.assertEqual(['foo_bar'], mask.paths)
355 mask.FromJsonString('fooBar,barQuz')
356 self.assertEqual(['foo_bar', 'bar_quz'], mask.paths)
357
325 def testDescriptorToFieldMask(self): 358 def testDescriptorToFieldMask(self):
326 mask = field_mask_pb2.FieldMask() 359 mask = field_mask_pb2.FieldMask()
327 msg_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR 360 msg_descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR
328 mask.AllFieldsFromDescriptor(msg_descriptor) 361 mask.AllFieldsFromDescriptor(msg_descriptor)
329 self.assertEqual(75, len(mask.paths)) 362 self.assertEqual(75, len(mask.paths))
330 self.assertTrue(mask.IsValidForDescriptor(msg_descriptor)) 363 self.assertTrue(mask.IsValidForDescriptor(msg_descriptor))
331 for field in msg_descriptor.fields: 364 for field in msg_descriptor.fields:
332 self.assertTrue(field.name in mask.paths) 365 self.assertTrue(field.name in mask.paths)
333 mask.paths.append('optional_nested_message.bb') 366 mask.paths.append('optional_nested_message.bb')
334 self.assertTrue(mask.IsValidForDescriptor(msg_descriptor)) 367 self.assertTrue(mask.IsValidForDescriptor(msg_descriptor))
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 # But they are cleared when replacing message fields. 528 # But they are cleared when replacing message fields.
496 nested_dst.Clear() 529 nested_dst.Clear()
497 nested_dst.payload.optional_int32 = 1234 530 nested_dst.payload.optional_int32 = 1234
498 mask.FromJsonString('payload') 531 mask.FromJsonString('payload')
499 mask.MergeMessage(nested_src, nested_dst, True, False) 532 mask.MergeMessage(nested_src, nested_dst, True, False)
500 self.assertFalse(nested_dst.HasField('payload')) 533 self.assertFalse(nested_dst.HasField('payload'))
501 534
502 nested_src.payload.repeated_int32.append(1234) 535 nested_src.payload.repeated_int32.append(1234)
503 nested_dst.payload.repeated_int32.append(5678) 536 nested_dst.payload.repeated_int32.append(5678)
504 # Repeated fields will be appended by default. 537 # Repeated fields will be appended by default.
505 mask.FromJsonString('payload.repeated_int32') 538 mask.FromJsonString('payload.repeatedInt32')
506 mask.MergeMessage(nested_src, nested_dst) 539 mask.MergeMessage(nested_src, nested_dst)
507 self.assertEqual(2, len(nested_dst.payload.repeated_int32)) 540 self.assertEqual(2, len(nested_dst.payload.repeated_int32))
508 self.assertEqual(5678, nested_dst.payload.repeated_int32[0]) 541 self.assertEqual(5678, nested_dst.payload.repeated_int32[0])
509 self.assertEqual(1234, nested_dst.payload.repeated_int32[1]) 542 self.assertEqual(1234, nested_dst.payload.repeated_int32[1])
510 # Change the behavior to replace repeated fields. 543 # Change the behavior to replace repeated fields.
511 mask.FromJsonString('payload.repeated_int32') 544 mask.FromJsonString('payload.repeatedInt32')
512 mask.MergeMessage(nested_src, nested_dst, False, True) 545 mask.MergeMessage(nested_src, nested_dst, False, True)
513 self.assertEqual(1, len(nested_dst.payload.repeated_int32)) 546 self.assertEqual(1, len(nested_dst.payload.repeated_int32))
514 self.assertEqual(1234, nested_dst.payload.repeated_int32[0]) 547 self.assertEqual(1234, nested_dst.payload.repeated_int32[0])
515 548
549 def testSnakeCaseToCamelCase(self):
550 self.assertEqual('fooBar',
551 well_known_types._SnakeCaseToCamelCase('foo_bar'))
552 self.assertEqual('FooBar',
553 well_known_types._SnakeCaseToCamelCase('_foo_bar'))
554 self.assertEqual('foo3Bar',
555 well_known_types._SnakeCaseToCamelCase('foo3_bar'))
556
557 # No uppercase letter is allowed.
558 self.assertRaisesRegexp(
559 well_known_types.Error,
560 'Fail to print FieldMask to Json string: Path name Foo must '
561 'not contain uppercase letters.',
562 well_known_types._SnakeCaseToCamelCase,
563 'Foo')
564 # Any character after a "_" must be a lowercase letter.
565 # 1. "_" cannot be followed by another "_".
566 # 2. "_" cannot be followed by a digit.
567 # 3. "_" cannot appear as the last character.
568 self.assertRaisesRegexp(
569 well_known_types.Error,
570 'Fail to print FieldMask to Json string: The character after a '
571 '"_" must be a lowercase letter in path name foo__bar.',
572 well_known_types._SnakeCaseToCamelCase,
573 'foo__bar')
574 self.assertRaisesRegexp(
575 well_known_types.Error,
576 'Fail to print FieldMask to Json string: The character after a '
577 '"_" must be a lowercase letter in path name foo_3bar.',
578 well_known_types._SnakeCaseToCamelCase,
579 'foo_3bar')
580 self.assertRaisesRegexp(
581 well_known_types.Error,
582 'Fail to print FieldMask to Json string: Trailing "_" in path '
583 'name foo_bar_.',
584 well_known_types._SnakeCaseToCamelCase,
585 'foo_bar_')
586
587 def testCamelCaseToSnakeCase(self):
588 self.assertEqual('foo_bar',
589 well_known_types._CamelCaseToSnakeCase('fooBar'))
590 self.assertEqual('_foo_bar',
591 well_known_types._CamelCaseToSnakeCase('FooBar'))
592 self.assertEqual('foo3_bar',
593 well_known_types._CamelCaseToSnakeCase('foo3Bar'))
594 self.assertRaisesRegexp(
595 well_known_types.ParseError,
596 'Fail to parse FieldMask: Path name foo_bar must not contain "_"s.',
597 well_known_types._CamelCaseToSnakeCase,
598 'foo_bar')
599
516 600
517 class StructTest(unittest.TestCase): 601 class StructTest(unittest.TestCase):
518 602
519 def testStruct(self): 603 def testStruct(self):
520 struct = struct_pb2.Struct() 604 struct = struct_pb2.Struct()
521 struct_class = struct.__class__ 605 struct_class = struct.__class__
522 606
523 struct['key1'] = 5 607 struct['key1'] = 5
524 struct['key2'] = 'abc' 608 struct['key2'] = 'abc'
525 struct['key3'] = True 609 struct['key3'] = True
526 struct.get_or_create_struct('key4')['subkey'] = 11.0 610 struct.get_or_create_struct('key4')['subkey'] = 11.0
527 struct_list = struct.get_or_create_list('key5') 611 struct_list = struct.get_or_create_list('key5')
528 struct_list.extend([6, 'seven', True, False, None]) 612 struct_list.extend([6, 'seven', True, False, None])
529 struct_list.add_struct()['subkey2'] = 9 613 struct_list.add_struct()['subkey2'] = 9
530 614
531 self.assertTrue(isinstance(struct, well_known_types.Struct)) 615 self.assertTrue(isinstance(struct, well_known_types.Struct))
532 self.assertEquals(5, struct['key1']) 616 self.assertEqual(5, struct['key1'])
533 self.assertEquals('abc', struct['key2']) 617 self.assertEqual('abc', struct['key2'])
534 self.assertIs(True, struct['key3']) 618 self.assertIs(True, struct['key3'])
535 self.assertEquals(11, struct['key4']['subkey']) 619 self.assertEqual(11, struct['key4']['subkey'])
536 inner_struct = struct_class() 620 inner_struct = struct_class()
537 inner_struct['subkey2'] = 9 621 inner_struct['subkey2'] = 9
538 self.assertEquals([6, 'seven', True, False, None, inner_struct], 622 self.assertEqual([6, 'seven', True, False, None, inner_struct],
539 list(struct['key5'].items())) 623 list(struct['key5'].items()))
540 624
541 serialized = struct.SerializeToString() 625 serialized = struct.SerializeToString()
542 626
543 struct2 = struct_pb2.Struct() 627 struct2 = struct_pb2.Struct()
544 struct2.ParseFromString(serialized) 628 struct2.ParseFromString(serialized)
545 629
546 self.assertEquals(struct, struct2) 630 self.assertEqual(struct, struct2)
547 631
548 self.assertTrue(isinstance(struct2, well_known_types.Struct)) 632 self.assertTrue(isinstance(struct2, well_known_types.Struct))
549 self.assertEquals(5, struct2['key1']) 633 self.assertEqual(5, struct2['key1'])
550 self.assertEquals('abc', struct2['key2']) 634 self.assertEqual('abc', struct2['key2'])
551 self.assertIs(True, struct2['key3']) 635 self.assertIs(True, struct2['key3'])
552 self.assertEquals(11, struct2['key4']['subkey']) 636 self.assertEqual(11, struct2['key4']['subkey'])
553 self.assertEquals([6, 'seven', True, False, None, inner_struct], 637 self.assertEqual([6, 'seven', True, False, None, inner_struct],
554 list(struct2['key5'].items())) 638 list(struct2['key5'].items()))
555 639
556 struct_list = struct2['key5'] 640 struct_list = struct2['key5']
557 self.assertEquals(6, struct_list[0]) 641 self.assertEqual(6, struct_list[0])
558 self.assertEquals('seven', struct_list[1]) 642 self.assertEqual('seven', struct_list[1])
559 self.assertEquals(True, struct_list[2]) 643 self.assertEqual(True, struct_list[2])
560 self.assertEquals(False, struct_list[3]) 644 self.assertEqual(False, struct_list[3])
561 self.assertEquals(None, struct_list[4]) 645 self.assertEqual(None, struct_list[4])
562 self.assertEquals(inner_struct, struct_list[5]) 646 self.assertEqual(inner_struct, struct_list[5])
563 647
564 struct_list[1] = 7 648 struct_list[1] = 7
565 self.assertEquals(7, struct_list[1]) 649 self.assertEqual(7, struct_list[1])
566 650
567 struct_list.add_list().extend([1, 'two', True, False, None]) 651 struct_list.add_list().extend([1, 'two', True, False, None])
568 self.assertEquals([1, 'two', True, False, None], 652 self.assertEqual([1, 'two', True, False, None],
569 list(struct_list[6].items())) 653 list(struct_list[6].items()))
570 654
571 text_serialized = str(struct) 655 text_serialized = str(struct)
572 struct3 = struct_pb2.Struct() 656 struct3 = struct_pb2.Struct()
573 text_format.Merge(text_serialized, struct3) 657 text_format.Merge(text_serialized, struct3)
574 self.assertEquals(struct, struct3) 658 self.assertEqual(struct, struct3)
575 659
576 struct.get_or_create_struct('key3')['replace'] = 12 660 struct.get_or_create_struct('key3')['replace'] = 12
577 self.assertEquals(12, struct['key3']['replace']) 661 self.assertEqual(12, struct['key3']['replace'])
578 662
579 663
580 class AnyTest(unittest.TestCase): 664 class AnyTest(unittest.TestCase):
581 665
582 def testAnyMessage(self): 666 def testAnyMessage(self):
583 # Creates and sets message. 667 # Creates and sets message.
584 msg = any_test_pb2.TestAny() 668 msg = any_test_pb2.TestAny()
585 msg_descriptor = msg.DESCRIPTOR 669 msg_descriptor = msg.DESCRIPTOR
586 all_types = unittest_pb2.TestAllTypes() 670 all_types = unittest_pb2.TestAllTypes()
587 all_descriptor = all_types.DESCRIPTOR 671 all_descriptor = all_types.DESCRIPTOR
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 self.assertEqual(msg.type_url, 719 self.assertEqual(msg.type_url,
636 '/%s' % submessage.DESCRIPTOR.full_name) 720 '/%s' % submessage.DESCRIPTOR.full_name)
637 # Test unpacking the type. 721 # Test unpacking the type.
638 unpacked_message = any_test_pb2.TestAny() 722 unpacked_message = any_test_pb2.TestAny()
639 self.assertTrue(msg.Unpack(unpacked_message)) 723 self.assertTrue(msg.Unpack(unpacked_message))
640 self.assertEqual(submessage, unpacked_message) 724 self.assertEqual(submessage, unpacked_message)
641 725
642 726
643 if __name__ == '__main__': 727 if __name__ == '__main__':
644 unittest.main() 728 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698