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

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

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 3 years, 12 months 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 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 # 3 #
4 # Protocol Buffers - Google's data interchange format 4 # Protocol Buffers - Google's data interchange format
5 # Copyright 2008 Google Inc. All rights reserved. 5 # Copyright 2008 Google Inc. All rights reserved.
6 # https://developers.google.com/protocol-buffers/ 6 # https://developers.google.com/protocol-buffers/
7 # 7 #
8 # Redistribution and use in source and binary forms, with or without 8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are 9 # modification, are permitted provided that the following conditions are
10 # met: 10 # met:
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 from google.protobuf import descriptor 53 from google.protobuf import descriptor
54 from google.protobuf import message 54 from google.protobuf import message
55 from google.protobuf import reflection 55 from google.protobuf import reflection
56 from google.protobuf import text_format 56 from google.protobuf import text_format
57 from google.protobuf.internal import api_implementation 57 from google.protobuf.internal import api_implementation
58 from google.protobuf.internal import more_extensions_pb2 58 from google.protobuf.internal import more_extensions_pb2
59 from google.protobuf.internal import more_messages_pb2 59 from google.protobuf.internal import more_messages_pb2
60 from google.protobuf.internal import message_set_extensions_pb2 60 from google.protobuf.internal import message_set_extensions_pb2
61 from google.protobuf.internal import wire_format 61 from google.protobuf.internal import wire_format
62 from google.protobuf.internal import test_util 62 from google.protobuf.internal import test_util
63 from google.protobuf.internal import testing_refleaks
64 from google.protobuf.internal import decoder 63 from google.protobuf.internal import decoder
65 64
66 65
67 BaseTestCase = testing_refleaks.BaseTestCase
68
69
70 class _MiniDecoder(object): 66 class _MiniDecoder(object):
71 """Decodes a stream of values from a string. 67 """Decodes a stream of values from a string.
72 68
73 Once upon a time we actually had a class called decoder.Decoder. Then we 69 Once upon a time we actually had a class called decoder.Decoder. Then we
74 got rid of it during a redesign that made decoding much, much faster overall. 70 got rid of it during a redesign that made decoding much, much faster overall.
75 But a couple tests in this file used it to check that the serialized form of 71 But a couple tests in this file used it to check that the serialized form of
76 a message was correct. So, this class implements just the methods that were 72 a message was correct. So, this class implements just the methods that were
77 used by said tests, so that we don't have to rewrite the tests. 73 used by said tests, so that we don't have to rewrite the tests.
78 """ 74 """
79 75
(...skipping 12 matching lines...) Expand all
92 88
93 def ReadSInt64(self): 89 def ReadSInt64(self):
94 return wire_format.ZigZagDecode(self.ReadVarint()) 90 return wire_format.ZigZagDecode(self.ReadVarint())
95 91
96 ReadSInt32 = ReadSInt64 92 ReadSInt32 = ReadSInt64
97 93
98 def ReadFieldNumberAndWireType(self): 94 def ReadFieldNumberAndWireType(self):
99 return wire_format.UnpackTag(self.ReadVarint()) 95 return wire_format.UnpackTag(self.ReadVarint())
100 96
101 def ReadFloat(self): 97 def ReadFloat(self):
102 result = struct.unpack('<f', self._bytes[self._pos:self._pos+4])[0] 98 result = struct.unpack("<f", self._bytes[self._pos:self._pos+4])[0]
103 self._pos += 4 99 self._pos += 4
104 return result 100 return result
105 101
106 def ReadDouble(self): 102 def ReadDouble(self):
107 result = struct.unpack('<d', self._bytes[self._pos:self._pos+8])[0] 103 result = struct.unpack("<d", self._bytes[self._pos:self._pos+8])[0]
108 self._pos += 8 104 self._pos += 8
109 return result 105 return result
110 106
111 def EndOfStream(self): 107 def EndOfStream(self):
112 return self._pos == len(self._bytes) 108 return self._pos == len(self._bytes)
113 109
114 110
115 class ReflectionTest(BaseTestCase): 111 class ReflectionTest(unittest.TestCase):
116 112
117 def assertListsEqual(self, values, others): 113 def assertListsEqual(self, values, others):
118 self.assertEqual(len(values), len(others)) 114 self.assertEqual(len(values), len(others))
119 for i in range(len(values)): 115 for i in range(len(values)):
120 self.assertEqual(values[i], others[i]) 116 self.assertEqual(values[i], others[i])
121 117
122 def testScalarConstructor(self): 118 def testScalarConstructor(self):
123 # Constructor with only scalar types should succeed. 119 # Constructor with only scalar types should succeed.
124 proto = unittest_pb2.TestAllTypes( 120 proto = unittest_pb2.TestAllTypes(
125 optional_int32=24, 121 optional_int32=24,
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 # proto.nonexistent_field = 23 should fail as well. 610 # proto.nonexistent_field = 23 should fail as well.
615 self.assertRaises(AttributeError, setattr, proto, 'nonexistent_field', 23) 611 self.assertRaises(AttributeError, setattr, proto, 'nonexistent_field', 23)
616 612
617 def testSingleScalarTypeSafety(self): 613 def testSingleScalarTypeSafety(self):
618 proto = unittest_pb2.TestAllTypes() 614 proto = unittest_pb2.TestAllTypes()
619 self.assertRaises(TypeError, setattr, proto, 'optional_int32', 1.1) 615 self.assertRaises(TypeError, setattr, proto, 'optional_int32', 1.1)
620 self.assertRaises(TypeError, setattr, proto, 'optional_int32', 'foo') 616 self.assertRaises(TypeError, setattr, proto, 'optional_int32', 'foo')
621 self.assertRaises(TypeError, setattr, proto, 'optional_string', 10) 617 self.assertRaises(TypeError, setattr, proto, 'optional_string', 10)
622 self.assertRaises(TypeError, setattr, proto, 'optional_bytes', 10) 618 self.assertRaises(TypeError, setattr, proto, 'optional_bytes', 10)
623 619
624 def assertIntegerTypes(self, integer_fn): 620 def testIntegerTypes(self):
625 """Verifies setting of scalar integers.
626
627 Args:
628 integer_fn: A function to wrap the integers that will be assigned.
629 """
630 def TestGetAndDeserialize(field_name, value, expected_type): 621 def TestGetAndDeserialize(field_name, value, expected_type):
631 proto = unittest_pb2.TestAllTypes() 622 proto = unittest_pb2.TestAllTypes()
632 value = integer_fn(value)
633 setattr(proto, field_name, value) 623 setattr(proto, field_name, value)
634 self.assertIsInstance(getattr(proto, field_name), expected_type) 624 self.assertIsInstance(getattr(proto, field_name), expected_type)
635 proto2 = unittest_pb2.TestAllTypes() 625 proto2 = unittest_pb2.TestAllTypes()
636 proto2.ParseFromString(proto.SerializeToString()) 626 proto2.ParseFromString(proto.SerializeToString())
637 self.assertIsInstance(getattr(proto2, field_name), expected_type) 627 self.assertIsInstance(getattr(proto2, field_name), expected_type)
638 628
639 TestGetAndDeserialize('optional_int32', 1, int) 629 TestGetAndDeserialize('optional_int32', 1, int)
640 TestGetAndDeserialize('optional_int32', 1 << 30, int) 630 TestGetAndDeserialize('optional_int32', 1 << 30, int)
641 TestGetAndDeserialize('optional_uint32', 1 << 30, int) 631 TestGetAndDeserialize('optional_uint32', 1 << 30, int)
642 try: 632 try:
643 integer_64 = long 633 integer_64 = long
644 except NameError: # Python3 634 except NameError: # Python3
645 integer_64 = int 635 integer_64 = int
646 if struct.calcsize('L') == 4: 636 if struct.calcsize('L') == 4:
647 # Python only has signed ints, so 32-bit python can't fit an uint32 637 # Python only has signed ints, so 32-bit python can't fit an uint32
648 # in an int. 638 # in an int.
649 TestGetAndDeserialize('optional_uint32', 1 << 31, integer_64) 639 TestGetAndDeserialize('optional_uint32', 1 << 31, long)
650 else: 640 else:
651 # 64-bit python can fit uint32 inside an int 641 # 64-bit python can fit uint32 inside an int
652 TestGetAndDeserialize('optional_uint32', 1 << 31, int) 642 TestGetAndDeserialize('optional_uint32', 1 << 31, int)
653 TestGetAndDeserialize('optional_int64', 1 << 30, integer_64) 643 TestGetAndDeserialize('optional_int64', 1 << 30, integer_64)
654 TestGetAndDeserialize('optional_int64', 1 << 60, integer_64) 644 TestGetAndDeserialize('optional_int64', 1 << 60, integer_64)
655 TestGetAndDeserialize('optional_uint64', 1 << 30, integer_64) 645 TestGetAndDeserialize('optional_uint64', 1 << 30, integer_64)
656 TestGetAndDeserialize('optional_uint64', 1 << 60, integer_64) 646 TestGetAndDeserialize('optional_uint64', 1 << 60, integer_64)
657 647
658 def testIntegerTypes(self): 648 def testSingleScalarBoundsChecking(self):
659 self.assertIntegerTypes(lambda x: x)
660
661 def testNonStandardIntegerTypes(self):
662 self.assertIntegerTypes(test_util.NonStandardInteger)
663
664 def testIllegalValuesForIntegers(self):
665 pb = unittest_pb2.TestAllTypes()
666
667 # Strings are illegal, even when the represent an integer.
668 with self.assertRaises(TypeError):
669 pb.optional_uint64 = '2'
670
671 # The exact error should propagate with a poorly written custom integer.
672 with self.assertRaisesRegexp(RuntimeError, 'my_error'):
673 pb.optional_uint64 = test_util.NonStandardInteger(5, 'my_error')
674
675 def assetIntegerBoundsChecking(self, integer_fn):
676 """Verifies bounds checking for scalar integer fields.
677
678 Args:
679 integer_fn: A function to wrap the integers that will be assigned.
680 """
681 def TestMinAndMaxIntegers(field_name, expected_min, expected_max): 649 def TestMinAndMaxIntegers(field_name, expected_min, expected_max):
682 pb = unittest_pb2.TestAllTypes() 650 pb = unittest_pb2.TestAllTypes()
683 expected_min = integer_fn(expected_min)
684 expected_max = integer_fn(expected_max)
685 setattr(pb, field_name, expected_min) 651 setattr(pb, field_name, expected_min)
686 self.assertEqual(expected_min, getattr(pb, field_name)) 652 self.assertEqual(expected_min, getattr(pb, field_name))
687 setattr(pb, field_name, expected_max) 653 setattr(pb, field_name, expected_max)
688 self.assertEqual(expected_max, getattr(pb, field_name)) 654 self.assertEqual(expected_max, getattr(pb, field_name))
689 self.assertRaises(ValueError, setattr, pb, field_name, expected_min - 1) 655 self.assertRaises(ValueError, setattr, pb, field_name, expected_min - 1)
690 self.assertRaises(ValueError, setattr, pb, field_name, expected_max + 1) 656 self.assertRaises(ValueError, setattr, pb, field_name, expected_max + 1)
691 657
692 TestMinAndMaxIntegers('optional_int32', -(1 << 31), (1 << 31) - 1) 658 TestMinAndMaxIntegers('optional_int32', -(1 << 31), (1 << 31) - 1)
693 TestMinAndMaxIntegers('optional_uint32', 0, 0xffffffff) 659 TestMinAndMaxIntegers('optional_uint32', 0, 0xffffffff)
694 TestMinAndMaxIntegers('optional_int64', -(1 << 63), (1 << 63) - 1) 660 TestMinAndMaxIntegers('optional_int64', -(1 << 63), (1 << 63) - 1)
695 TestMinAndMaxIntegers('optional_uint64', 0, 0xffffffffffffffff) 661 TestMinAndMaxIntegers('optional_uint64', 0, 0xffffffffffffffff)
696 # A bit of white-box testing since -1 is an int and not a long in C++ and
697 # so goes down a different path.
698 pb = unittest_pb2.TestAllTypes()
699 with self.assertRaises(ValueError):
700 pb.optional_uint64 = integer_fn(-(1 << 63))
701 662
702 pb = unittest_pb2.TestAllTypes() 663 pb = unittest_pb2.TestAllTypes()
703 pb.optional_nested_enum = integer_fn(1) 664 pb.optional_nested_enum = 1
704 self.assertEqual(1, pb.optional_nested_enum) 665 self.assertEqual(1, pb.optional_nested_enum)
705 666
706 def testSingleScalarBoundsChecking(self):
707 self.assetIntegerBoundsChecking(lambda x: x)
708
709 def testNonStandardSingleScalarBoundsChecking(self):
710 self.assetIntegerBoundsChecking(test_util.NonStandardInteger)
711
712 def testRepeatedScalarTypeSafety(self): 667 def testRepeatedScalarTypeSafety(self):
713 proto = unittest_pb2.TestAllTypes() 668 proto = unittest_pb2.TestAllTypes()
714 self.assertRaises(TypeError, proto.repeated_int32.append, 1.1) 669 self.assertRaises(TypeError, proto.repeated_int32.append, 1.1)
715 self.assertRaises(TypeError, proto.repeated_int32.append, 'foo') 670 self.assertRaises(TypeError, proto.repeated_int32.append, 'foo')
716 self.assertRaises(TypeError, proto.repeated_string, 10) 671 self.assertRaises(TypeError, proto.repeated_string, 10)
717 self.assertRaises(TypeError, proto.repeated_bytes, 10) 672 self.assertRaises(TypeError, proto.repeated_bytes, 10)
718 673
719 proto.repeated_int32.append(10) 674 proto.repeated_int32.append(10)
720 proto.repeated_int32[0] = 23 675 proto.repeated_int32[0] = 23
721 self.assertRaises(IndexError, proto.repeated_int32.__setitem__, 500, 23) 676 self.assertRaises(IndexError, proto.repeated_int32.__setitem__, 500, 23)
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 965
1011 # Test clearing. 966 # Test clearing.
1012 proto.ClearField('repeated_nested_message') 967 proto.ClearField('repeated_nested_message')
1013 self.assertTrue(not proto.repeated_nested_message) 968 self.assertTrue(not proto.repeated_nested_message)
1014 self.assertEqual(0, len(proto.repeated_nested_message)) 969 self.assertEqual(0, len(proto.repeated_nested_message))
1015 970
1016 # Test constructing an element while adding it. 971 # Test constructing an element while adding it.
1017 proto.repeated_nested_message.add(bb=23) 972 proto.repeated_nested_message.add(bb=23)
1018 self.assertEqual(1, len(proto.repeated_nested_message)) 973 self.assertEqual(1, len(proto.repeated_nested_message))
1019 self.assertEqual(23, proto.repeated_nested_message[0].bb) 974 self.assertEqual(23, proto.repeated_nested_message[0].bb)
1020 self.assertRaises(TypeError, proto.repeated_nested_message.add, 23)
1021 975
1022 def testRepeatedCompositeRemove(self): 976 def testRepeatedCompositeRemove(self):
1023 proto = unittest_pb2.TestAllTypes() 977 proto = unittest_pb2.TestAllTypes()
1024 978
1025 self.assertEqual(0, len(proto.repeated_nested_message)) 979 self.assertEqual(0, len(proto.repeated_nested_message))
1026 m0 = proto.repeated_nested_message.add() 980 m0 = proto.repeated_nested_message.add()
1027 # Need to set some differentiating variable so m0 != m1 != m2: 981 # Need to set some differentiating variable so m0 != m1 != m2:
1028 m0.bb = len(proto.repeated_nested_message) 982 m0.bb = len(proto.repeated_nested_message)
1029 m1 = proto.repeated_nested_message.add() 983 m1 = proto.repeated_nested_message.add()
1030 m1.bb = len(proto.repeated_nested_message) 984 m1.bb = len(proto.repeated_nested_message)
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 self.assertEqual(0, required.a) 1175 self.assertEqual(0, required.a)
1222 self.assertTrue(not extendee_proto.HasExtension(extension)) 1176 self.assertTrue(not extendee_proto.HasExtension(extension))
1223 required.a = 23 1177 required.a = 23
1224 self.assertEqual(23, extendee_proto.Extensions[extension].a) 1178 self.assertEqual(23, extendee_proto.Extensions[extension].a)
1225 self.assertTrue(extendee_proto.HasExtension(extension)) 1179 self.assertTrue(extendee_proto.HasExtension(extension))
1226 extendee_proto.ClearExtension(extension) 1180 extendee_proto.ClearExtension(extension)
1227 self.assertTrue(required is not extendee_proto.Extensions[extension]) 1181 self.assertTrue(required is not extendee_proto.Extensions[extension])
1228 self.assertTrue(not extendee_proto.HasExtension(extension)) 1182 self.assertTrue(not extendee_proto.HasExtension(extension))
1229 1183
1230 def testRegisteredExtensions(self): 1184 def testRegisteredExtensions(self):
1231 pool = unittest_pb2.DESCRIPTOR.pool 1185 self.assertTrue('protobuf_unittest.optional_int32_extension' in
1232 self.assertTrue( 1186 unittest_pb2.TestAllExtensions._extensions_by_name)
1233 pool.FindExtensionByNumber( 1187 self.assertTrue(1 in unittest_pb2.TestAllExtensions._extensions_by_number)
1234 unittest_pb2.TestAllExtensions.DESCRIPTOR, 1))
1235 self.assertIs(
1236 pool.FindExtensionByName(
1237 'protobuf_unittest.optional_int32_extension').containing_type,
1238 unittest_pb2.TestAllExtensions.DESCRIPTOR)
1239 # Make sure extensions haven't been registered into types that shouldn't 1188 # Make sure extensions haven't been registered into types that shouldn't
1240 # have any. 1189 # have any.
1241 self.assertEqual(0, len( 1190 self.assertEqual(0, len(unittest_pb2.TestAllTypes._extensions_by_name))
1242 pool.FindAllExtensions(unittest_pb2.TestAllTypes.DESCRIPTOR)))
1243 1191
1244 # If message A directly contains message B, and 1192 # If message A directly contains message B, and
1245 # a.HasField('b') is currently False, then mutating any 1193 # a.HasField('b') is currently False, then mutating any
1246 # extension in B should change a.HasField('b') to True 1194 # extension in B should change a.HasField('b') to True
1247 # (and so on up the object tree). 1195 # (and so on up the object tree).
1248 def testHasBitsForAncestorsOfExtendedMessage(self): 1196 def testHasBitsForAncestorsOfExtendedMessage(self):
1249 # Optional scalar extension. 1197 # Optional scalar extension.
1250 toplevel = more_extensions_pb2.TopLevelMessage() 1198 toplevel = more_extensions_pb2.TopLevelMessage()
1251 self.assertTrue(not toplevel.HasField('submessage')) 1199 self.assertTrue(not toplevel.HasField('submessage'))
1252 self.assertEqual(0, toplevel.submessage.Extensions[ 1200 self.assertEqual(0, toplevel.submessage.Extensions[
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1596 self.assertTrue(foreign is not proto.optional_foreign_message) 1544 self.assertTrue(foreign is not proto.optional_foreign_message)
1597 self.assertEqual(5, nested.bb) 1545 self.assertEqual(5, nested.bb)
1598 self.assertEqual(6, foreign.c) 1546 self.assertEqual(6, foreign.c)
1599 nested.bb = 15 1547 nested.bb = 15
1600 foreign.c = 16 1548 foreign.c = 16
1601 self.assertFalse(proto.HasField('optional_nested_message')) 1549 self.assertFalse(proto.HasField('optional_nested_message'))
1602 self.assertEqual(0, proto.optional_nested_message.bb) 1550 self.assertEqual(0, proto.optional_nested_message.bb)
1603 self.assertFalse(proto.HasField('optional_foreign_message')) 1551 self.assertFalse(proto.HasField('optional_foreign_message'))
1604 self.assertEqual(0, proto.optional_foreign_message.c) 1552 self.assertEqual(0, proto.optional_foreign_message.c)
1605 1553
1606 def testDisconnectingInOneof(self):
1607 m = unittest_pb2.TestOneof2() # This message has two messages in a oneof.
1608 m.foo_message.qux_int = 5
1609 sub_message = m.foo_message
1610 # Accessing another message's field does not clear the first one
1611 self.assertEqual(m.foo_lazy_message.qux_int, 0)
1612 self.assertEqual(m.foo_message.qux_int, 5)
1613 # But mutating another message in the oneof detaches the first one.
1614 m.foo_lazy_message.qux_int = 6
1615 self.assertEqual(m.foo_message.qux_int, 0)
1616 # The reference we got above was detached and is still valid.
1617 self.assertEqual(sub_message.qux_int, 5)
1618 sub_message.qux_int = 7
1619
1620 def testOneOf(self): 1554 def testOneOf(self):
1621 proto = unittest_pb2.TestAllTypes() 1555 proto = unittest_pb2.TestAllTypes()
1622 proto.oneof_uint32 = 10 1556 proto.oneof_uint32 = 10
1623 proto.oneof_nested_message.bb = 11 1557 proto.oneof_nested_message.bb = 11
1624 self.assertEqual(11, proto.oneof_nested_message.bb) 1558 self.assertEqual(11, proto.oneof_nested_message.bb)
1625 self.assertFalse(proto.HasField('oneof_uint32')) 1559 self.assertFalse(proto.HasField('oneof_uint32'))
1626 nested = proto.oneof_nested_message 1560 nested = proto.oneof_nested_message
1627 proto.oneof_string = 'abc' 1561 proto.oneof_string = 'abc'
1628 self.assertEqual('abc', proto.oneof_string) 1562 self.assertEqual('abc', proto.oneof_string)
1629 self.assertEqual(11, nested.bb) 1563 self.assertEqual(11, nested.bb)
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
1868 from google.protobuf.internal import import_test_package 1802 from google.protobuf.internal import import_test_package
1869 # pylint: enable=g-import-not-at-top 1803 # pylint: enable=g-import-not-at-top
1870 msg = import_test_package.myproto.Outer() 1804 msg = import_test_package.myproto.Outer()
1871 # Just check the default value. 1805 # Just check the default value.
1872 self.assertEqual(57, msg.inner.value) 1806 self.assertEqual(57, msg.inner.value)
1873 1807
1874 # Since we had so many tests for protocol buffer equality, we broke these out 1808 # Since we had so many tests for protocol buffer equality, we broke these out
1875 # into separate TestCase classes. 1809 # into separate TestCase classes.
1876 1810
1877 1811
1878 class TestAllTypesEqualityTest(BaseTestCase): 1812 class TestAllTypesEqualityTest(unittest.TestCase):
1879 1813
1880 def setUp(self): 1814 def setUp(self):
1881 self.first_proto = unittest_pb2.TestAllTypes() 1815 self.first_proto = unittest_pb2.TestAllTypes()
1882 self.second_proto = unittest_pb2.TestAllTypes() 1816 self.second_proto = unittest_pb2.TestAllTypes()
1883 1817
1884 def testNotHashable(self): 1818 def testNotHashable(self):
1885 self.assertRaises(TypeError, hash, self.first_proto) 1819 self.assertRaises(TypeError, hash, self.first_proto)
1886 1820
1887 def testSelfEquality(self): 1821 def testSelfEquality(self):
1888 self.assertEqual(self.first_proto, self.first_proto) 1822 self.assertEqual(self.first_proto, self.first_proto)
1889 1823
1890 def testEmptyProtosEqual(self): 1824 def testEmptyProtosEqual(self):
1891 self.assertEqual(self.first_proto, self.second_proto) 1825 self.assertEqual(self.first_proto, self.second_proto)
1892 1826
1893 1827
1894 class FullProtosEqualityTest(BaseTestCase): 1828 class FullProtosEqualityTest(unittest.TestCase):
1895 1829
1896 """Equality tests using completely-full protos as a starting point.""" 1830 """Equality tests using completely-full protos as a starting point."""
1897 1831
1898 def setUp(self): 1832 def setUp(self):
1899 self.first_proto = unittest_pb2.TestAllTypes() 1833 self.first_proto = unittest_pb2.TestAllTypes()
1900 self.second_proto = unittest_pb2.TestAllTypes() 1834 self.second_proto = unittest_pb2.TestAllTypes()
1901 test_util.SetAllFields(self.first_proto) 1835 test_util.SetAllFields(self.first_proto)
1902 test_util.SetAllFields(self.second_proto) 1836 test_util.SetAllFields(self.second_proto)
1903 1837
1904 def testNotHashable(self): 1838 def testNotHashable(self):
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1970 # Ensure that we test "has" bits as well as value for 1904 # Ensure that we test "has" bits as well as value for
1971 # nonrepeated composite field. 1905 # nonrepeated composite field.
1972 self.first_proto.ClearField('optional_nested_message') 1906 self.first_proto.ClearField('optional_nested_message')
1973 self.second_proto.optional_nested_message.ClearField('bb') 1907 self.second_proto.optional_nested_message.ClearField('bb')
1974 self.assertNotEqual(self.first_proto, self.second_proto) 1908 self.assertNotEqual(self.first_proto, self.second_proto)
1975 self.first_proto.optional_nested_message.bb = 0 1909 self.first_proto.optional_nested_message.bb = 0
1976 self.first_proto.optional_nested_message.ClearField('bb') 1910 self.first_proto.optional_nested_message.ClearField('bb')
1977 self.assertEqual(self.first_proto, self.second_proto) 1911 self.assertEqual(self.first_proto, self.second_proto)
1978 1912
1979 1913
1980 class ExtensionEqualityTest(BaseTestCase): 1914 class ExtensionEqualityTest(unittest.TestCase):
1981 1915
1982 def testExtensionEquality(self): 1916 def testExtensionEquality(self):
1983 first_proto = unittest_pb2.TestAllExtensions() 1917 first_proto = unittest_pb2.TestAllExtensions()
1984 second_proto = unittest_pb2.TestAllExtensions() 1918 second_proto = unittest_pb2.TestAllExtensions()
1985 self.assertEqual(first_proto, second_proto) 1919 self.assertEqual(first_proto, second_proto)
1986 test_util.SetAllExtensions(first_proto) 1920 test_util.SetAllExtensions(first_proto)
1987 self.assertNotEqual(first_proto, second_proto) 1921 self.assertNotEqual(first_proto, second_proto)
1988 test_util.SetAllExtensions(second_proto) 1922 test_util.SetAllExtensions(second_proto)
1989 self.assertEqual(first_proto, second_proto) 1923 self.assertEqual(first_proto, second_proto)
1990 1924
(...skipping 12 matching lines...) Expand all
2003 1937
2004 # Ensure that differences in cached values 1938 # Ensure that differences in cached values
2005 # don't matter if "has" bits are both false. 1939 # don't matter if "has" bits are both false.
2006 first_proto = unittest_pb2.TestAllExtensions() 1940 first_proto = unittest_pb2.TestAllExtensions()
2007 second_proto = unittest_pb2.TestAllExtensions() 1941 second_proto = unittest_pb2.TestAllExtensions()
2008 self.assertEqual( 1942 self.assertEqual(
2009 0, first_proto.Extensions[unittest_pb2.optional_int32_extension]) 1943 0, first_proto.Extensions[unittest_pb2.optional_int32_extension])
2010 self.assertEqual(first_proto, second_proto) 1944 self.assertEqual(first_proto, second_proto)
2011 1945
2012 1946
2013 class MutualRecursionEqualityTest(BaseTestCase): 1947 class MutualRecursionEqualityTest(unittest.TestCase):
2014 1948
2015 def testEqualityWithMutualRecursion(self): 1949 def testEqualityWithMutualRecursion(self):
2016 first_proto = unittest_pb2.TestMutualRecursionA() 1950 first_proto = unittest_pb2.TestMutualRecursionA()
2017 second_proto = unittest_pb2.TestMutualRecursionA() 1951 second_proto = unittest_pb2.TestMutualRecursionA()
2018 self.assertEqual(first_proto, second_proto) 1952 self.assertEqual(first_proto, second_proto)
2019 first_proto.bb.a.bb.optional_int32 = 23 1953 first_proto.bb.a.bb.optional_int32 = 23
2020 self.assertNotEqual(first_proto, second_proto) 1954 self.assertNotEqual(first_proto, second_proto)
2021 second_proto.bb.a.bb.optional_int32 = 23 1955 second_proto.bb.a.bb.optional_int32 = 23
2022 self.assertEqual(first_proto, second_proto) 1956 self.assertEqual(first_proto, second_proto)
2023 1957
2024 1958
2025 class ByteSizeTest(BaseTestCase): 1959 class ByteSizeTest(unittest.TestCase):
2026 1960
2027 def setUp(self): 1961 def setUp(self):
2028 self.proto = unittest_pb2.TestAllTypes() 1962 self.proto = unittest_pb2.TestAllTypes()
2029 self.extended_proto = more_extensions_pb2.ExtendedMessage() 1963 self.extended_proto = more_extensions_pb2.ExtendedMessage()
2030 self.packed_proto = unittest_pb2.TestPackedTypes() 1964 self.packed_proto = unittest_pb2.TestPackedTypes()
2031 self.packed_extended_proto = unittest_pb2.TestPackedExtensions() 1965 self.packed_extended_proto = unittest_pb2.TestPackedExtensions()
2032 1966
2033 def Size(self): 1967 def Size(self):
2034 return self.proto.ByteSize() 1968 return self.proto.ByteSize()
2035 1969
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
2311 # * Handling of unrecognized tags ("uninterpreted_bytes"). 2245 # * Handling of unrecognized tags ("uninterpreted_bytes").
2312 # * Handling of MessageSets. 2246 # * Handling of MessageSets.
2313 # * Consistent ordering of tags in the wire format, 2247 # * Consistent ordering of tags in the wire format,
2314 # including ordering between extensions and non-extension 2248 # including ordering between extensions and non-extension
2315 # fields. 2249 # fields.
2316 # * Consistent serialization of negative numbers, especially 2250 # * Consistent serialization of negative numbers, especially
2317 # negative int32s. 2251 # negative int32s.
2318 # * Handling of empty submessages (with and without "has" 2252 # * Handling of empty submessages (with and without "has"
2319 # bits set). 2253 # bits set).
2320 2254
2321 class SerializationTest(BaseTestCase): 2255 class SerializationTest(unittest.TestCase):
2322 2256
2323 def testSerializeEmtpyMessage(self): 2257 def testSerializeEmtpyMessage(self):
2324 first_proto = unittest_pb2.TestAllTypes() 2258 first_proto = unittest_pb2.TestAllTypes()
2325 second_proto = unittest_pb2.TestAllTypes() 2259 second_proto = unittest_pb2.TestAllTypes()
2326 serialized = first_proto.SerializeToString() 2260 serialized = first_proto.SerializeToString()
2327 self.assertEqual(first_proto.ByteSize(), len(serialized)) 2261 self.assertEqual(first_proto.ByteSize(), len(serialized))
2328 self.assertEqual( 2262 self.assertEqual(
2329 len(serialized), 2263 len(serialized),
2330 second_proto.MergeFromString(serialized)) 2264 second_proto.MergeFromString(serialized))
2331 self.assertEqual(first_proto, second_proto) 2265 self.assertEqual(first_proto, second_proto)
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
2872 self.assertEqual(1, proto.optional_message.c) 2806 self.assertEqual(1, proto.optional_message.c)
2873 2807
2874 def testInitRepeatedKwargs(self): 2808 def testInitRepeatedKwargs(self):
2875 proto = unittest_pb2.TestAllTypes(repeated_int32=[1, 2, 3]) 2809 proto = unittest_pb2.TestAllTypes(repeated_int32=[1, 2, 3])
2876 self.assertTrue(proto.IsInitialized()) 2810 self.assertTrue(proto.IsInitialized())
2877 self.assertEqual(1, proto.repeated_int32[0]) 2811 self.assertEqual(1, proto.repeated_int32[0])
2878 self.assertEqual(2, proto.repeated_int32[1]) 2812 self.assertEqual(2, proto.repeated_int32[1])
2879 self.assertEqual(3, proto.repeated_int32[2]) 2813 self.assertEqual(3, proto.repeated_int32[2])
2880 2814
2881 2815
2882 class OptionsTest(BaseTestCase): 2816 class OptionsTest(unittest.TestCase):
2883 2817
2884 def testMessageOptions(self): 2818 def testMessageOptions(self):
2885 proto = message_set_extensions_pb2.TestMessageSet() 2819 proto = message_set_extensions_pb2.TestMessageSet()
2886 self.assertEqual(True, 2820 self.assertEqual(True,
2887 proto.DESCRIPTOR.GetOptions().message_set_wire_format) 2821 proto.DESCRIPTOR.GetOptions().message_set_wire_format)
2888 proto = unittest_pb2.TestAllTypes() 2822 proto = unittest_pb2.TestAllTypes()
2889 self.assertEqual(False, 2823 self.assertEqual(False,
2890 proto.DESCRIPTOR.GetOptions().message_set_wire_format) 2824 proto.DESCRIPTOR.GetOptions().message_set_wire_format)
2891 2825
2892 def testPackedOptions(self): 2826 def testPackedOptions(self):
2893 proto = unittest_pb2.TestAllTypes() 2827 proto = unittest_pb2.TestAllTypes()
2894 proto.optional_int32 = 1 2828 proto.optional_int32 = 1
2895 proto.optional_double = 3.0 2829 proto.optional_double = 3.0
2896 for field_descriptor, _ in proto.ListFields(): 2830 for field_descriptor, _ in proto.ListFields():
2897 self.assertEqual(False, field_descriptor.GetOptions().packed) 2831 self.assertEqual(False, field_descriptor.GetOptions().packed)
2898 2832
2899 proto = unittest_pb2.TestPackedTypes() 2833 proto = unittest_pb2.TestPackedTypes()
2900 proto.packed_int32.append(1) 2834 proto.packed_int32.append(1)
2901 proto.packed_double.append(3.0) 2835 proto.packed_double.append(3.0)
2902 for field_descriptor, _ in proto.ListFields(): 2836 for field_descriptor, _ in proto.ListFields():
2903 self.assertEqual(True, field_descriptor.GetOptions().packed) 2837 self.assertEqual(True, field_descriptor.GetOptions().packed)
2904 self.assertEqual(descriptor.FieldDescriptor.LABEL_REPEATED, 2838 self.assertEqual(descriptor.FieldDescriptor.LABEL_REPEATED,
2905 field_descriptor.label) 2839 field_descriptor.label)
2906 2840
2907 2841
2908 2842
2909 class ClassAPITest(BaseTestCase): 2843 class ClassAPITest(unittest.TestCase):
2910 2844
2911 @unittest.skipIf( 2845 @unittest.skipIf(
2912 api_implementation.Type() == 'cpp' and api_implementation.Version() == 2, 2846 api_implementation.Type() == 'cpp' and api_implementation.Version() == 2,
2913 'C++ implementation requires a call to MakeDescriptor()') 2847 'C++ implementation requires a call to MakeDescriptor()')
2914 def testMakeClassWithNestedDescriptor(self): 2848 def testMakeClassWithNestedDescriptor(self):
2915 leaf_desc = descriptor.Descriptor('leaf', 'package.parent.child.leaf', '', 2849 leaf_desc = descriptor.Descriptor('leaf', 'package.parent.child.leaf', '',
2916 containing_type=None, fields=[], 2850 containing_type=None, fields=[],
2917 nested_types=[], enum_types=[], 2851 nested_types=[], enum_types=[],
2918 extensions=[]) 2852 extensions=[])
2919 child_desc = descriptor.Descriptor('child', 'package.parent.child', '', 2853 child_desc = descriptor.Descriptor('child', 'package.parent.child', '',
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2982 ' label: LABEL_OPTIONAL' 2916 ' label: LABEL_OPTIONAL'
2983 ' type: TYPE_UINT32' 2917 ' type: TYPE_UINT32'
2984 ' }' 2918 ' }'
2985 ' }' 2919 ' }'
2986 ' }' 2920 ' }'
2987 '}') 2921 '}')
2988 file_descriptor = descriptor_pb2.FileDescriptorProto() 2922 file_descriptor = descriptor_pb2.FileDescriptorProto()
2989 text_format.Merge(file_descriptor_str, file_descriptor) 2923 text_format.Merge(file_descriptor_str, file_descriptor)
2990 return file_descriptor.SerializeToString() 2924 return file_descriptor.SerializeToString()
2991 2925
2992 @testing_refleaks.SkipReferenceLeakChecker('MakeDescriptor is not repeatable')
2993 # This test can only run once; the second time, it raises errors about
2994 # conflicting message descriptors.
2995 def testParsingFlatClassWithExplicitClassDeclaration(self): 2926 def testParsingFlatClassWithExplicitClassDeclaration(self):
2996 """Test that the generated class can parse a flat message.""" 2927 """Test that the generated class can parse a flat message."""
2997 # TODO(xiaofeng): This test fails with cpp implemetnation in the call 2928 # TODO(xiaofeng): This test fails with cpp implemetnation in the call
2998 # of six.with_metaclass(). The other two callsites of with_metaclass 2929 # of six.with_metaclass(). The other two callsites of with_metaclass
2999 # in this file are both excluded from cpp test, so it might be expected 2930 # in this file are both excluded from cpp test, so it might be expected
3000 # to fail. Need someone more familiar with the python code to take a 2931 # to fail. Need someone more familiar with the python code to take a
3001 # look at this. 2932 # look at this.
3002 if api_implementation.Type() != 'python': 2933 if api_implementation.Type() != 'python':
3003 return 2934 return
3004 file_descriptor = descriptor_pb2.FileDescriptorProto() 2935 file_descriptor = descriptor_pb2.FileDescriptorProto()
3005 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('A')) 2936 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('A'))
3006 msg_descriptor = descriptor.MakeDescriptor( 2937 msg_descriptor = descriptor.MakeDescriptor(
3007 file_descriptor.message_type[0]) 2938 file_descriptor.message_type[0])
3008 2939
3009 class MessageClass(six.with_metaclass(reflection.GeneratedProtocolMessageTyp e, message.Message)): 2940 class MessageClass(six.with_metaclass(reflection.GeneratedProtocolMessageTyp e, message.Message)):
3010 DESCRIPTOR = msg_descriptor 2941 DESCRIPTOR = msg_descriptor
3011 msg = MessageClass() 2942 msg = MessageClass()
3012 msg_str = ( 2943 msg_str = (
3013 'flat: 0 ' 2944 'flat: 0 '
3014 'flat: 1 ' 2945 'flat: 1 '
3015 'flat: 2 ') 2946 'flat: 2 ')
3016 text_format.Merge(msg_str, msg) 2947 text_format.Merge(msg_str, msg)
3017 self.assertEqual(msg.flat, [0, 1, 2]) 2948 self.assertEqual(msg.flat, [0, 1, 2])
3018 2949
3019 @testing_refleaks.SkipReferenceLeakChecker('MakeDescriptor is not repeatable')
3020 def testParsingFlatClass(self): 2950 def testParsingFlatClass(self):
3021 """Test that the generated class can parse a flat message.""" 2951 """Test that the generated class can parse a flat message."""
3022 file_descriptor = descriptor_pb2.FileDescriptorProto() 2952 file_descriptor = descriptor_pb2.FileDescriptorProto()
3023 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('B')) 2953 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('B'))
3024 msg_descriptor = descriptor.MakeDescriptor( 2954 msg_descriptor = descriptor.MakeDescriptor(
3025 file_descriptor.message_type[0]) 2955 file_descriptor.message_type[0])
3026 msg_class = reflection.MakeClass(msg_descriptor) 2956 msg_class = reflection.MakeClass(msg_descriptor)
3027 msg = msg_class() 2957 msg = msg_class()
3028 msg_str = ( 2958 msg_str = (
3029 'flat: 0 ' 2959 'flat: 0 '
3030 'flat: 1 ' 2960 'flat: 1 '
3031 'flat: 2 ') 2961 'flat: 2 ')
3032 text_format.Merge(msg_str, msg) 2962 text_format.Merge(msg_str, msg)
3033 self.assertEqual(msg.flat, [0, 1, 2]) 2963 self.assertEqual(msg.flat, [0, 1, 2])
3034 2964
3035 @testing_refleaks.SkipReferenceLeakChecker('MakeDescriptor is not repeatable')
3036 def testParsingNestedClass(self): 2965 def testParsingNestedClass(self):
3037 """Test that the generated class can parse a nested message.""" 2966 """Test that the generated class can parse a nested message."""
3038 file_descriptor = descriptor_pb2.FileDescriptorProto() 2967 file_descriptor = descriptor_pb2.FileDescriptorProto()
3039 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('C')) 2968 file_descriptor.ParseFromString(self._GetSerializedFileDescriptor('C'))
3040 msg_descriptor = descriptor.MakeDescriptor( 2969 msg_descriptor = descriptor.MakeDescriptor(
3041 file_descriptor.message_type[0]) 2970 file_descriptor.message_type[0])
3042 msg_class = reflection.MakeClass(msg_descriptor) 2971 msg_class = reflection.MakeClass(msg_descriptor)
3043 msg = msg_class() 2972 msg = msg_class()
3044 msg_str = ( 2973 msg_str = (
3045 'bar {' 2974 'bar {'
3046 ' baz {' 2975 ' baz {'
3047 ' deep: 4' 2976 ' deep: 4'
3048 ' }' 2977 ' }'
3049 '}') 2978 '}')
3050 text_format.Merge(msg_str, msg) 2979 text_format.Merge(msg_str, msg)
3051 self.assertEqual(msg.bar.baz.deep, 4) 2980 self.assertEqual(msg.bar.baz.deep, 4)
3052 2981
3053 if __name__ == '__main__': 2982 if __name__ == '__main__':
3054 unittest.main() 2983 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698