32 """Unittest for reflection.py, which also indirectly tests the output of the
33 pure-Python protocol compiler.
64 warnings.simplefilter(
'error', DeprecationWarning)
67 class _MiniDecoder(object):
68 """Decodes a stream of values from a string.
70 Once upon a time we actually had a class called decoder.Decoder. Then we
71 got rid of it during a redesign that made decoding much, much faster overall.
72 But a couple tests in this file used it to check that the serialized form of
73 a message was correct. So, this class implements just the methods that were
74 used by said tests, so that we don't have to rewrite the tests.
85 ReadInt32 = ReadVarint
86 ReadInt64 = ReadVarint
87 ReadUInt32 = ReadVarint
88 ReadUInt64 = ReadVarint
91 return wire_format.ZigZagDecode(self.
ReadVarint())
93 ReadSInt32 = ReadSInt64
96 return wire_format.UnpackTag(self.
ReadVarint())
99 result = struct.unpack(
'<f', self.
_bytes[self.
_pos:self.
_pos+4])[0]
104 result = struct.unpack(
'<d', self.
_bytes[self.
_pos:self.
_pos+8])[0]
112 @_parameterized.named_parameters(
113 (
'_proto2', unittest_pb2),
114 (
'_proto3', unittest_proto3_arena_pb2))
115 @testing_refleaks.TestCase
119 self.assertEqual(
len(values),
len(others))
121 self.assertEqual(values[i], others[i])
125 proto = message_module.TestAllTypes(
127 optional_double=54.321,
128 optional_string=
'optional_string',
131 self.assertEqual(24, proto.optional_int32)
132 self.assertEqual(54.321, proto.optional_double)
133 self.assertEqual(
'optional_string', proto.optional_string)
134 if message_module
is unittest_pb2:
135 self.assertFalse(proto.HasField(
"optional_float"))
139 proto = message_module.TestAllTypes(
140 repeated_int32=[1, 2, 3, 4],
141 repeated_double=[1.23, 54.321],
142 repeated_bool=[
True,
False,
False],
143 repeated_string=[
"optional_string"],
146 self.assertEqual([1, 2, 3, 4], list(proto.repeated_int32))
147 self.assertEqual([1.23, 54.321], list(proto.repeated_double))
148 self.assertEqual([
True,
False,
False], list(proto.repeated_bool))
149 self.assertEqual([
"optional_string"], list(proto.repeated_string))
150 self.assertEqual([], list(proto.repeated_float))
154 proto = message_module.TestAllTypes(
156 optional_string=
'optional_string',
157 repeated_double=[1.23, 54.321],
158 repeated_bool=[
True,
False,
False],
159 repeated_nested_message=[
160 message_module.TestAllTypes.NestedMessage(
161 bb=message_module.TestAllTypes.FOO),
162 message_module.TestAllTypes.NestedMessage(
163 bb=message_module.TestAllTypes.BAR)],
164 repeated_foreign_message=[
165 message_module.ForeignMessage(c=-43),
166 message_module.ForeignMessage(c=45324),
167 message_module.ForeignMessage(c=12)],
168 optional_nested_message=
None)
170 self.assertEqual(24, proto.optional_int32)
171 self.assertEqual(
'optional_string', proto.optional_string)
172 self.assertEqual([1.23, 54.321], list(proto.repeated_double))
173 self.assertEqual([
True,
False,
False], list(proto.repeated_bool))
175 [message_module.TestAllTypes.NestedMessage(
176 bb=message_module.TestAllTypes.FOO),
177 message_module.TestAllTypes.NestedMessage(
178 bb=message_module.TestAllTypes.BAR)],
179 list(proto.repeated_nested_message))
181 [message_module.ForeignMessage(c=-43),
182 message_module.ForeignMessage(c=45324),
183 message_module.ForeignMessage(c=12)],
184 list(proto.repeated_foreign_message))
185 self.assertFalse(proto.HasField(
"optional_nested_message"))
189 TypeError, message_module.TestAllTypes, optional_int32=
'foo')
191 TypeError, message_module.TestAllTypes, optional_string=1234)
193 TypeError, message_module.TestAllTypes, optional_nested_message=1234)
195 TypeError, message_module.TestAllTypes, repeated_int32=1234)
197 TypeError, message_module.TestAllTypes, repeated_int32=[
'foo'])
199 TypeError, message_module.TestAllTypes, repeated_string=1234)
201 TypeError, message_module.TestAllTypes, repeated_string=[1234])
203 TypeError, message_module.TestAllTypes, repeated_nested_message=1234)
205 TypeError, message_module.TestAllTypes, repeated_nested_message=[1234])
208 message = message_module.TestAllTypes(optional_int32=12)
209 self.assertEqual(2, message.ByteSize())
211 message = message_module.TestAllTypes(
212 optional_nested_message=message_module.TestAllTypes.NestedMessage())
213 self.assertEqual(3, message.ByteSize())
215 message = message_module.TestAllTypes(repeated_int32=[12])
217 if message_module
is unittest_pb2:
218 self.assertEqual(3, message.ByteSize())
220 message = message_module.TestAllTypes(
221 repeated_nested_message=[message_module.TestAllTypes.NestedMessage()])
222 self.assertEqual(3, message.ByteSize())
225 proto = message_module.TestAllTypes()
226 nested = proto.optional_nested_message
233 proto = message_module.TestAllTypes()
234 proto.oneof_uint32 = 10
235 proto.oneof_nested_message.bb = 11
236 self.assertEqual(11, proto.oneof_nested_message.bb)
237 self.assertFalse(proto.HasField(
'oneof_uint32'))
238 nested = proto.oneof_nested_message
239 proto.oneof_string =
'abc'
240 self.assertEqual(
'abc', proto.oneof_string)
241 self.assertEqual(11, nested.bb)
242 self.assertFalse(proto.HasField(
'oneof_nested_message'))
245 self, message_module):
246 proto = message_module.TestAllTypes()
247 nested = proto.optional_nested_message
248 proto.ClearField(
'optional_nested_message')
255 proto = message_module.TestAllTypes()
256 nested = proto.optional_nested_message
259 proto = message_module.TestAllTypes()
260 nested = proto.optional_nested_message
262 self.assertTrue(proto.HasField(
'optional_nested_message'))
263 proto.ClearField(
'optional_nested_message')
264 self.assertEqual(5, nested.bb)
265 self.assertEqual(0, proto.optional_nested_message.bb)
266 self.assertIsNot(nested, proto.optional_nested_message)
268 self.assertFalse(proto.HasField(
'optional_nested_message'))
269 self.assertEqual(0, proto.optional_nested_message.bb)
272 proto = message_module.TestAllTypes()
273 self.assertFalse(proto.HasField(
'optional_nested_message'))
274 proto.ClearField(
'optional_nested_message')
275 self.assertFalse(proto.HasField(
'optional_nested_message'))
282 proto1 = message_module.TestAllTypes()
283 proto2 = message_module.TestAllTypes()
284 proto2.optional_nested_message.bb = 5
285 proto1.MergeFrom(proto2)
286 self.assertTrue(proto1.HasField(
'optional_nested_message'))
287 proto1.ClearField(
'optional_nested_message')
288 self.assertFalse(proto1.HasField(
'optional_nested_message'))
295 if api_implementation.Type() !=
'python':
297 proto = message_module.TestAllTypes()
298 proto.optional_lazy_message.bb = 5
299 proto.ClearField(
'optional_lazy_message')
304 proto = message_module.TestAllTypes()
305 proto.optional_fixed32 = 1
306 proto.optional_int32 = 5
307 proto.optional_string =
'foo'
309 nested_message = proto.optional_nested_message
311 [ (proto.DESCRIPTOR.fields_by_name[
'optional_int32' ], 5),
312 (proto.DESCRIPTOR.fields_by_name[
'optional_fixed32'], 1),
313 (proto.DESCRIPTOR.fields_by_name[
'optional_string' ],
'foo') ],
316 proto.optional_nested_message.bb = 123
318 [ (proto.DESCRIPTOR.fields_by_name[
'optional_int32' ], 5),
319 (proto.DESCRIPTOR.fields_by_name[
'optional_fixed32'], 1),
320 (proto.DESCRIPTOR.fields_by_name[
'optional_string' ],
'foo'),
321 (proto.DESCRIPTOR.fields_by_name[
'optional_nested_message' ],
326 proto = message_module.TestAllTypes()
327 proto.repeated_fixed32.append(1)
328 proto.repeated_int32.append(5)
329 proto.repeated_int32.append(11)
330 proto.repeated_string.extend([
'foo',
'bar'])
331 proto.repeated_string.extend([])
332 proto.repeated_string.append(
'baz')
333 proto.repeated_string.extend(
str(x)
for x
in range(2))
334 proto.optional_int32 = 21
337 [ (proto.DESCRIPTOR.fields_by_name[
'optional_int32' ], 21),
338 (proto.DESCRIPTOR.fields_by_name[
'repeated_int32' ], [5, 11]),
339 (proto.DESCRIPTOR.fields_by_name[
'repeated_fixed32'], [1]),
340 (proto.DESCRIPTOR.fields_by_name[
'repeated_string' ],
341 [
'foo',
'bar',
'baz',
'0',
'1']) ],
345 proto = message_module.TestAllTypes()
346 self.assertRaises(ValueError, proto.ClearField,
'nonexistent_field')
347 self.assertRaises(ValueError, proto.ClearField, b
'nonexistent_field')
352 proto = message_module.TestAllTypes()
354 self.assertRaises(AttributeError, setattr, proto,
'repeated_int32', 10)
356 self.assertRaises(AttributeError, setattr, proto,
'repeated_int32', [10])
358 self.assertRaises(AttributeError, setattr, proto,
359 'optional_nested_message', 23)
362 self.assertRaises(AttributeError, setattr, proto.repeated_nested_message,
365 self.assertRaises(AttributeError, setattr, proto.repeated_float,
366 'some_attribute', 34)
368 self.assertRaises(AttributeError, setattr, proto,
'nonexistent_field', 23)
371 proto = message_module.TestAllTypes()
372 self.assertRaises(TypeError, setattr, proto,
'optional_int32', 1.1)
373 self.assertRaises(TypeError, setattr, proto,
'optional_int32',
'foo')
374 self.assertRaises(TypeError, setattr, proto,
'optional_string', 10)
375 self.assertRaises(TypeError, setattr, proto,
'optional_bytes', 10)
376 self.assertRaises(TypeError, setattr, proto,
'optional_bool',
'foo')
377 self.assertRaises(TypeError, setattr, proto,
'optional_float',
'foo')
378 self.assertRaises(TypeError, setattr, proto,
'optional_double',
'foo')
380 if (api_implementation.Type() ==
'python' or
381 (sys.version_info.major, sys.version_info.minor) >= (3, 10)):
382 self.assertRaises(TypeError, setattr, proto,
'optional_bool', 1.1)
384 proto.optional_bool = 1.1
387 """Verifies setting of scalar integers.
390 integer_fn: A function to wrap the integers that will be assigned.
391 message_module: unittest_pb2 or unittest_proto3_arena_pb2
393 def TestGetAndDeserialize(field_name, value, expected_type):
394 proto = message_module.TestAllTypes()
395 value = integer_fn(value)
396 setattr(proto, field_name, value)
397 self.assertIsInstance(getattr(proto, field_name), expected_type)
398 proto2 = message_module.TestAllTypes()
399 proto2.ParseFromString(proto.SerializeToString())
400 self.assertIsInstance(getattr(proto2, field_name), expected_type)
402 TestGetAndDeserialize(
'optional_int32', 1, int)
403 TestGetAndDeserialize(
'optional_int32', 1 << 30, int)
404 TestGetAndDeserialize(
'optional_uint32', 1 << 30, int)
406 if struct.calcsize(
'L') == 4:
409 TestGetAndDeserialize(
'optional_uint32', 1 << 31, integer_64)
412 TestGetAndDeserialize(
'optional_uint32', 1 << 31, int)
413 TestGetAndDeserialize(
'optional_int64', 1 << 30, integer_64)
414 TestGetAndDeserialize(
'optional_int64', 1 << 60, integer_64)
415 TestGetAndDeserialize(
'optional_uint64', 1 << 30, integer_64)
416 TestGetAndDeserialize(
'optional_uint64', 1 << 60, integer_64)
425 pb = message_module.TestAllTypes()
428 with self.assertRaises(TypeError):
429 pb.optional_uint64 =
'2'
432 with self.assertRaisesRegexp(RuntimeError,
'my_error'):
436 """Verifies bounds checking for scalar integer fields.
439 integer_fn: A function to wrap the integers that will be assigned.
440 message_module: unittest_pb2 or unittest_proto3_arena_pb2
442 def TestMinAndMaxIntegers(field_name, expected_min, expected_max):
443 pb = message_module.TestAllTypes()
444 expected_min = integer_fn(expected_min)
445 expected_max = integer_fn(expected_max)
446 setattr(pb, field_name, expected_min)
447 self.assertEqual(expected_min, getattr(pb, field_name))
448 setattr(pb, field_name, expected_max)
449 self.assertEqual(expected_max, getattr(pb, field_name))
450 self.assertRaises((ValueError, TypeError), setattr, pb, field_name,
452 self.assertRaises((ValueError, TypeError), setattr, pb, field_name,
455 TestMinAndMaxIntegers(
'optional_int32', -(1 << 31), (1 << 31) - 1)
456 TestMinAndMaxIntegers(
'optional_uint32', 0, 0xffffffff)
457 TestMinAndMaxIntegers(
'optional_int64', -(1 << 63), (1 << 63) - 1)
458 TestMinAndMaxIntegers(
'optional_uint64', 0, 0xffffffffffffffff)
461 pb = message_module.TestAllTypes()
462 with self.assertRaises((ValueError, TypeError)):
463 pb.optional_uint64 = integer_fn(-(1 << 63))
465 pb = message_module.TestAllTypes()
466 pb.optional_nested_enum = integer_fn(1)
467 self.assertEqual(1, pb.optional_nested_enum)
477 proto = message_module.TestAllTypes()
478 self.assertRaises(TypeError, proto.repeated_int32.append, 1.1)
479 self.assertRaises(TypeError, proto.repeated_int32.append,
'foo')
480 self.assertRaises(TypeError, proto.repeated_string, 10)
481 self.assertRaises(TypeError, proto.repeated_bytes, 10)
483 proto.repeated_int32.append(10)
484 proto.repeated_int32[0] = 23
485 self.assertRaises(IndexError, proto.repeated_int32.__setitem__, 500, 23)
486 self.assertRaises(TypeError, proto.repeated_int32.__setitem__, 0,
'abc')
487 self.assertRaises(TypeError, proto.repeated_int32.__setitem__, 0, [])
488 self.assertRaises(TypeError, proto.repeated_int32.__setitem__,
491 proto.repeated_string.append(
'2')
492 self.assertRaises(TypeError, proto.repeated_string.__setitem__, 0, 10)
498 proto = message_module.TestAllTypes()
499 self.assertEqual(0, proto.optional_int32)
500 proto.optional_int32 = 1
501 self.assertEqual(1, proto.optional_int32)
503 proto.optional_uint64 = 0xffffffffffff
504 self.assertEqual(0xffffffffffff, proto.optional_uint64)
505 proto.optional_uint64 = 0xffffffffffffffff
506 self.assertEqual(0xffffffffffffffff, proto.optional_uint64)
510 proto = message_module.TestAllTypes()
511 self.assertEqual(1, proto.FOO)
512 self.assertEqual(1, message_module.TestAllTypes.FOO)
513 self.assertEqual(2, proto.BAR)
514 self.assertEqual(2, message_module.TestAllTypes.BAR)
515 self.assertEqual(3, proto.BAZ)
516 self.assertEqual(3, message_module.TestAllTypes.BAZ)
521 message_module.ForeignEnum.Name(message_module.FOREIGN_FOO))
524 message_module.ForeignEnum.Name(message_module.FOREIGN_BAR))
527 message_module.ForeignEnum.Name(message_module.FOREIGN_BAZ))
528 self.assertRaises(ValueError,
529 message_module.ForeignEnum.Name, 11312)
531 proto = message_module.TestAllTypes()
532 self.assertEqual(
'FOO',
533 proto.NestedEnum.Name(proto.FOO))
534 self.assertEqual(
'FOO',
535 message_module.TestAllTypes.NestedEnum.Name(proto.FOO))
536 self.assertEqual(
'BAR',
537 proto.NestedEnum.Name(proto.BAR))
538 self.assertEqual(
'BAR',
539 message_module.TestAllTypes.NestedEnum.Name(proto.BAR))
540 self.assertEqual(
'BAZ',
541 proto.NestedEnum.Name(proto.BAZ))
542 self.assertEqual(
'BAZ',
543 message_module.TestAllTypes.NestedEnum.Name(proto.BAZ))
544 self.assertRaises(ValueError,
545 proto.NestedEnum.Name, 11312)
546 self.assertRaises(ValueError,
547 message_module.TestAllTypes.NestedEnum.Name, 11312)
550 self.assertRaises(TypeError, message_module.TestAllTypes.NestedEnum.Name,
552 self.assertRaises(TypeError, message_module.TestAllTypes.NestedEnum.Name,
554 self.assertEqual(
'FOO', message_module.TestAllTypes.NestedEnum.Name(
True))
557 self.assertEqual(message_module.FOREIGN_FOO,
558 message_module.ForeignEnum.Value(
'FOREIGN_FOO'))
559 self.assertEqual(message_module.FOREIGN_FOO,
560 message_module.ForeignEnum.FOREIGN_FOO)
562 self.assertEqual(message_module.FOREIGN_BAR,
563 message_module.ForeignEnum.Value(
'FOREIGN_BAR'))
564 self.assertEqual(message_module.FOREIGN_BAR,
565 message_module.ForeignEnum.FOREIGN_BAR)
567 self.assertEqual(message_module.FOREIGN_BAZ,
568 message_module.ForeignEnum.Value(
'FOREIGN_BAZ'))
569 self.assertEqual(message_module.FOREIGN_BAZ,
570 message_module.ForeignEnum.FOREIGN_BAZ)
572 self.assertRaises(ValueError,
573 message_module.ForeignEnum.Value,
'FO')
574 with self.assertRaises(AttributeError):
575 message_module.ForeignEnum.FO
577 proto = message_module.TestAllTypes()
578 self.assertEqual(proto.FOO,
579 proto.NestedEnum.Value(
'FOO'))
580 self.assertEqual(proto.FOO,
581 proto.NestedEnum.FOO)
583 self.assertEqual(proto.FOO,
584 message_module.TestAllTypes.NestedEnum.Value(
'FOO'))
585 self.assertEqual(proto.FOO,
586 message_module.TestAllTypes.NestedEnum.FOO)
588 self.assertEqual(proto.BAR,
589 proto.NestedEnum.Value(
'BAR'))
590 self.assertEqual(proto.BAR,
591 proto.NestedEnum.BAR)
593 self.assertEqual(proto.BAR,
594 message_module.TestAllTypes.NestedEnum.Value(
'BAR'))
595 self.assertEqual(proto.BAR,
596 message_module.TestAllTypes.NestedEnum.BAR)
598 self.assertEqual(proto.BAZ,
599 proto.NestedEnum.Value(
'BAZ'))
600 self.assertEqual(proto.BAZ,
601 proto.NestedEnum.BAZ)
603 self.assertEqual(proto.BAZ,
604 message_module.TestAllTypes.NestedEnum.Value(
'BAZ'))
605 self.assertEqual(proto.BAZ,
606 message_module.TestAllTypes.NestedEnum.BAZ)
608 self.assertRaises(ValueError,
609 proto.NestedEnum.Value,
'Foo')
610 with self.assertRaises(AttributeError):
611 proto.NestedEnum.Value.Foo
613 self.assertRaises(ValueError,
614 message_module.TestAllTypes.NestedEnum.Value,
'Foo')
615 with self.assertRaises(AttributeError):
616 message_module.TestAllTypes.NestedEnum.Value.Foo
619 if message_module == unittest_pb2:
620 keys = [
'FOREIGN_FOO',
'FOREIGN_BAR',
'FOREIGN_BAZ']
622 items = [(
'FOREIGN_FOO', 4), (
'FOREIGN_BAR', 5), (
'FOREIGN_BAZ', 6)]
624 keys = [
'FOREIGN_ZERO',
'FOREIGN_FOO',
'FOREIGN_BAR',
'FOREIGN_BAZ']
625 values = [0, 4, 5, 6]
626 items = [(
'FOREIGN_ZERO', 0), (
'FOREIGN_FOO', 4),
627 (
'FOREIGN_BAR', 5), (
'FOREIGN_BAZ', 6)]
628 self.assertEqual(keys,
629 list(message_module.ForeignEnum.keys()))
630 self.assertEqual(values,
631 list(message_module.ForeignEnum.values()))
632 self.assertEqual(items,
633 list(message_module.ForeignEnum.items()))
635 proto = message_module.TestAllTypes()
636 if message_module == unittest_pb2:
637 keys = [
'FOO',
'BAR',
'BAZ',
'NEG']
638 values = [1, 2, 3, -1]
639 items = [(
'FOO', 1), (
'BAR', 2), (
'BAZ', 3), (
'NEG', -1)]
641 keys = [
'ZERO',
'FOO',
'BAR',
'BAZ',
'NEG']
642 values = [0, 1, 2, 3, -1]
643 items = [(
'ZERO', 0), (
'FOO', 1), (
'BAR', 2), (
'BAZ', 3), (
'NEG', -1)]
644 self.assertEqual(keys, list(proto.NestedEnum.keys()))
645 self.assertEqual(values, list(proto.NestedEnum.values()))
646 self.assertEqual(items,
647 list(proto.NestedEnum.items()))
650 proto1 = message_module.TestAllTypes()
651 test_util.SetAllFields(proto1)
653 string1 = proto1.SerializeToString()
654 proto2 = message_module.TestAllTypes.FromString(string1)
657 self.assertEqual(proto2, proto1)
661 proto1 = message_module.TestAllTypes()
662 proto1.optional_int32 = 1
664 proto2 = message_module.TestAllTypes()
666 proto2.optional_string =
'value'
668 proto2.MergeFrom(proto1)
669 self.assertEqual(1, proto2.optional_int32)
670 self.assertEqual(
'value', proto2.optional_string)
674 proto1 = message_module.TestAllTypes()
675 proto1.repeated_int32.append(1)
676 proto1.repeated_int32.append(2)
678 proto2 = message_module.TestAllTypes()
679 proto2.repeated_int32.append(0)
680 proto2.MergeFrom(proto1)
682 self.assertEqual(0, proto2.repeated_int32[0])
683 self.assertEqual(1, proto2.repeated_int32[1])
684 self.assertEqual(2, proto2.repeated_int32[2])
688 proto1 = message_module.TestAllTypes()
689 m = proto1.repeated_nested_message.add()
691 m = proto1.repeated_nested_message.add()
694 proto2 = message_module.TestAllTypes()
695 m = proto2.repeated_nested_message.add()
697 proto2.MergeFrom(proto1)
698 self.assertEqual(999, proto2.repeated_nested_message[0].bb)
699 self.assertEqual(123, proto2.repeated_nested_message[1].bb)
700 self.assertEqual(321, proto2.repeated_nested_message[2].bb)
702 proto3 = message_module.TestAllTypes()
703 proto3.repeated_nested_message.MergeFrom(proto2.repeated_nested_message)
704 self.assertEqual(999, proto3.repeated_nested_message[0].bb)
705 self.assertEqual(123, proto3.repeated_nested_message[1].bb)
706 self.assertEqual(321, proto3.repeated_nested_message[2].bb)
710 proto1 = message_module.TestAllTypes()
711 test_util.SetAllFields(proto1)
712 proto2 = message_module.TestAllTypes()
713 proto2.MergeFrom(proto1)
716 self.assertEqual(proto2, proto1)
719 string1 = proto1.SerializeToString()
720 string2 = proto2.SerializeToString()
721 self.assertEqual(string1, string2)
724 message1 = message_module.TestAllTypes()
725 message2 = message_module.TestAllTypes()
729 message1.optional_nested_message
730 self.assertFalse(message1.HasField(
'optional_nested_message'))
733 message2.MergeFrom(message1)
734 self.assertFalse(message2.HasField(
'optional_nested_message'))
738 proto1 = message_module.TestAllTypes()
739 proto1.optional_int32 = 1
740 proto1.optional_string =
'important-text'
742 proto2 = message_module.TestAllTypes()
743 proto2.optional_string =
'value'
745 proto2.CopyFrom(proto1)
746 self.assertEqual(1, proto2.optional_int32)
747 self.assertEqual(
'important-text', proto2.optional_string)
751 proto1 = message_module.TestAllTypes()
752 proto1.repeated_int32.append(1)
753 proto1.repeated_int32.append(2)
755 proto2 = message_module.TestAllTypes()
756 proto2.repeated_int32.append(0)
757 proto2.CopyFrom(proto1)
759 self.assertEqual(1, proto2.repeated_int32[0])
760 self.assertEqual(2, proto2.repeated_int32[1])
764 proto1 = message_module.TestAllTypes()
765 test_util.SetAllFields(proto1)
766 proto2 = message_module.TestAllTypes()
767 proto2.CopyFrom(proto1)
770 self.assertEqual(proto2, proto1)
773 string1 = proto1.SerializeToString()
774 string2 = proto2.SerializeToString()
775 self.assertEqual(string1, string2)
778 proto1 = message_module.TestAllTypes()
779 proto1.repeated_int32.append(1)
780 proto1.optional_int32 = 2
781 proto1.optional_string =
'important-text'
783 proto1.CopyFrom(proto1)
784 self.assertEqual(1, proto1.repeated_int32[0])
785 self.assertEqual(2, proto1.optional_int32)
786 self.assertEqual(
'important-text', proto1.optional_string)
789 proto1 = message_module.TestAllTypes()
790 proto1.optional_int32 = 1
791 proto2 = copy.deepcopy(proto1)
792 self.assertEqual(1, proto2.optional_int32)
794 proto1.repeated_int32.append(2)
795 proto1.repeated_int32.append(3)
796 container = copy.deepcopy(proto1.repeated_int32)
797 self.assertEqual([2, 3], container)
798 container.remove(container[0])
799 self.assertEqual([3], container)
801 message1 = proto1.repeated_nested_message.add()
803 messages = copy.deepcopy(proto1.repeated_nested_message)
804 self.assertEqual(proto1.repeated_nested_message, messages)
806 self.assertNotEqual(proto1.repeated_nested_message, messages)
807 messages.remove(messages[0])
808 self.assertEqual(
len(messages), 0)
813 proto = message_module.TestAllTypes()
814 nested = proto.optional_nested_message
816 self.assertIsNot(nested, proto.optional_nested_message)
818 self.assertFalse(proto.HasField(
'optional_nested_message'))
819 self.assertEqual(0, proto.optional_nested_message.bb)
821 proto = message_module.TestAllTypes()
822 nested = proto.optional_nested_message
824 foreign = proto.optional_foreign_message
827 self.assertIsNot(nested, proto.optional_nested_message)
828 self.assertIsNot(foreign, proto.optional_foreign_message)
829 self.assertEqual(5, nested.bb)
830 self.assertEqual(6, foreign.c)
833 self.assertFalse(proto.HasField(
'optional_nested_message'))
834 self.assertEqual(0, proto.optional_nested_message.bb)
835 self.assertFalse(proto.HasField(
'optional_foreign_message'))
836 self.assertEqual(0, proto.optional_foreign_message.c)
839 proto = message_module.TestAllTypes()
842 self.assertRaises(TypeError,
843 setattr, proto,
'optional_bytes',
u'unicode object')
846 self.assertEqual(
type(proto.optional_string), str)
848 proto.optional_string =
str(
'Testing')
849 self.assertEqual(proto.optional_string,
str(
'Testing'))
852 proto.optional_string =
str(
'Testing')
853 self.assertEqual(proto.optional_string,
str(
'Testing'))
856 self.assertRaises(ValueError,
857 setattr, proto,
'optional_string', b
'a\x80a')
859 utf8_bytes =
u'Тест'.
encode(
'utf-8')
860 proto.optional_string = utf8_bytes
862 proto.optional_string =
u'Тест'
864 proto.optional_string =
'abc'
867 proto = message_module.TestAllTypes(optional_bytes=b
'\x00\x7f\x80\xff')
868 self.assertEqual(
u'optional_bytes: "\\000\\177\\200\\377"\n',
str(proto))
871 proto = message_module.TestAllTypes()
872 proto.optional_nested_message.MergeFrom(
873 message_module.TestAllTypes.NestedMessage())
874 self.assertTrue(proto.HasField(
'optional_nested_message'))
876 proto = message_module.TestAllTypes()
877 proto.optional_nested_message.CopyFrom(
878 message_module.TestAllTypes.NestedMessage())
879 self.assertTrue(proto.HasField(
'optional_nested_message'))
881 proto = message_module.TestAllTypes()
882 bytes_read = proto.optional_nested_message.MergeFromString(b
'')
883 self.assertEqual(0, bytes_read)
884 self.assertTrue(proto.HasField(
'optional_nested_message'))
886 proto = message_module.TestAllTypes()
887 proto.optional_nested_message.ParseFromString(b
'')
888 self.assertTrue(proto.HasField(
'optional_nested_message'))
890 serialized = proto.SerializeToString()
891 proto2 = message_module.TestAllTypes()
894 proto2.MergeFromString(serialized))
895 self.assertTrue(proto2.HasField(
'optional_nested_message'))
899 @testing_refleaks.TestCase
904 proto = unittest_pb2.TestAllTypes(
905 repeated_nested_message=[
906 unittest_pb2.TestAllTypes.NestedMessage(
907 bb=unittest_pb2.TestAllTypes.FOO),
908 unittest_pb2.TestAllTypes.NestedMessage(
909 bb=unittest_pb2.TestAllTypes.BAR)],
910 repeated_foreign_message=[
911 unittest_pb2.ForeignMessage(c=-43),
912 unittest_pb2.ForeignMessage(c=45324),
913 unittest_pb2.ForeignMessage(c=12)],
915 unittest_pb2.TestAllTypes.RepeatedGroup(),
916 unittest_pb2.TestAllTypes.RepeatedGroup(a=1),
917 unittest_pb2.TestAllTypes.RepeatedGroup(a=2)])
920 [unittest_pb2.TestAllTypes.NestedMessage(
921 bb=unittest_pb2.TestAllTypes.FOO),
922 unittest_pb2.TestAllTypes.NestedMessage(
923 bb=unittest_pb2.TestAllTypes.BAR)],
924 list(proto.repeated_nested_message))
926 [unittest_pb2.ForeignMessage(c=-43),
927 unittest_pb2.ForeignMessage(c=45324),
928 unittest_pb2.ForeignMessage(c=12)],
929 list(proto.repeated_foreign_message))
931 [unittest_pb2.TestAllTypes.RepeatedGroup(),
932 unittest_pb2.TestAllTypes.RepeatedGroup(a=1),
933 unittest_pb2.TestAllTypes.RepeatedGroup(a=2)],
934 list(proto.repeatedgroup))
937 self.assertEqual(
len(values),
len(others))
939 self.assertEqual(values[i], others[i])
943 proto = unittest_pb2.TestAllTypes()
944 self.assertFalse(proto.HasField(
'optional_int32'))
945 self.assertEqual(0, proto.optional_int32)
948 self.assertFalse(proto.HasField(
'optional_int32'))
949 proto.optional_int32 = 1
951 self.assertTrue(proto.HasField(
'optional_int32'))
952 proto.ClearField(
'optional_int32')
954 self.assertFalse(proto.HasField(
'optional_int32'))
990 def TestCompositeHasBits(composite_field_name, scalar_field_name):
991 proto = unittest_pb2.TestAllTypes()
995 composite_field = getattr(proto, composite_field_name)
996 original_scalar_value = getattr(composite_field, scalar_field_name)
997 self.assertEqual(0, original_scalar_value)
999 self.assertFalse(composite_field.HasField(scalar_field_name))
1001 self.assertFalse(proto.HasField(composite_field_name))
1007 setattr(composite_field, scalar_field_name, new_val)
1008 self.assertEqual(new_val, getattr(composite_field, scalar_field_name))
1010 old_composite_field = composite_field
1012 self.assertTrue(composite_field.HasField(scalar_field_name))
1013 self.assertTrue(proto.HasField(composite_field_name))
1016 proto.ClearField(composite_field_name)
1019 composite_field = getattr(proto, composite_field_name)
1020 self.assertFalse(composite_field.HasField(scalar_field_name))
1021 self.assertFalse(proto.HasField(composite_field_name))
1023 self.assertEqual(0, getattr(composite_field, scalar_field_name))
1025 self.assertIsNot(old_composite_field, composite_field)
1026 setattr(old_composite_field, scalar_field_name, new_val)
1027 self.assertFalse(composite_field.HasField(scalar_field_name))
1028 self.assertFalse(proto.HasField(composite_field_name))
1029 self.assertEqual(0, getattr(composite_field, scalar_field_name))
1032 TestCompositeHasBits(
'optionalgroup',
'a')
1033 TestCompositeHasBits(
'optional_nested_message',
'bb')
1034 TestCompositeHasBits(
'optional_foreign_message',
'c')
1035 TestCompositeHasBits(
'optional_import_message',
'd')
1039 proto = unittest_pb2.TestNestedMessageHasBits()
1040 proto.optional_nested_message.nestedmessage_repeated_int32.append(5)
1042 [5], proto.optional_nested_message.nestedmessage_repeated_int32)
1043 self.assertTrue(proto.HasField(
'optional_nested_message'))
1047 proto.ClearField(
'optional_nested_message')
1048 self.assertFalse(proto.HasField(
'optional_nested_message'))
1049 proto.optional_nested_message.nestedmessage_repeated_foreignmessage.add()
1050 self.assertTrue(proto.HasField(
'optional_nested_message'))
1054 recursive_proto = unittest_pb2.TestMutualRecursionA()
1055 self.assertFalse(recursive_proto.HasField(
'bb'))
1056 self.assertEqual(0, recursive_proto.bb.a.bb.a.bb.optional_int32)
1057 self.assertFalse(recursive_proto.HasField(
'bb'))
1058 recursive_proto.bb.a.bb.a.bb.optional_int32 = 5
1059 self.assertEqual(5, recursive_proto.bb.a.bb.a.bb.optional_int32)
1060 self.assertTrue(recursive_proto.HasField(
'bb'))
1061 self.assertTrue(recursive_proto.bb.HasField(
'a'))
1062 self.assertTrue(recursive_proto.bb.a.HasField(
'bb'))
1063 self.assertTrue(recursive_proto.bb.a.bb.HasField(
'a'))
1064 self.assertTrue(recursive_proto.bb.a.bb.a.HasField(
'bb'))
1065 self.assertFalse(recursive_proto.bb.a.bb.a.bb.HasField(
'a'))
1066 self.assertTrue(recursive_proto.bb.a.bb.a.bb.HasField(
'optional_int32'))
1069 proto = unittest_pb2.TestAllExtensions()
1070 proto.Extensions[unittest_pb2.optional_fixed32_extension] = 1
1071 proto.Extensions[unittest_pb2.optional_int32_extension ] = 5
1072 proto.Extensions[unittest_pb2.optional_string_extension ] =
'foo'
1074 [ (unittest_pb2.optional_int32_extension , 5),
1075 (unittest_pb2.optional_fixed32_extension, 1),
1076 (unittest_pb2.optional_string_extension ,
'foo') ],
1078 del proto.Extensions[unittest_pb2.optional_fixed32_extension]
1080 [(unittest_pb2.optional_int32_extension, 5),
1081 (unittest_pb2.optional_string_extension,
'foo')],
1085 proto = unittest_pb2.TestAllExtensions()
1086 proto.Extensions[unittest_pb2.repeated_fixed32_extension].append(1)
1087 proto.Extensions[unittest_pb2.repeated_int32_extension ].append(5)
1088 proto.Extensions[unittest_pb2.repeated_int32_extension ].append(11)
1089 proto.Extensions[unittest_pb2.repeated_string_extension ].append(
'foo')
1090 proto.Extensions[unittest_pb2.repeated_string_extension ].append(
'bar')
1091 proto.Extensions[unittest_pb2.repeated_string_extension ].append(
'baz')
1092 proto.Extensions[unittest_pb2.optional_int32_extension ] = 21
1094 [ (unittest_pb2.optional_int32_extension , 21),
1095 (unittest_pb2.repeated_int32_extension , [5, 11]),
1096 (unittest_pb2.repeated_fixed32_extension, [1]),
1097 (unittest_pb2.repeated_string_extension , [
'foo',
'bar',
'baz']) ],
1099 del proto.Extensions[unittest_pb2.repeated_int32_extension]
1100 del proto.Extensions[unittest_pb2.repeated_string_extension]
1102 [(unittest_pb2.optional_int32_extension, 21),
1103 (unittest_pb2.repeated_fixed32_extension, [1])],
1107 proto = unittest_pb2.TestFieldOrderings()
1108 test_util.SetAllFieldsAndExtensions(proto)
1109 unittest_pb2.my_extension_int
1111 [ (proto.DESCRIPTOR.fields_by_name[
'my_int' ], 1),
1112 (unittest_pb2.my_extension_int , 23),
1113 (proto.DESCRIPTOR.fields_by_name[
'my_string'],
'foo'),
1114 (unittest_pb2.my_extension_string ,
'bar'),
1115 (proto.DESCRIPTOR.fields_by_name[
'my_float' ], 1.0) ],
1119 proto = unittest_pb2.TestAllTypes()
1120 self.assertEqual(0, proto.optional_int32)
1121 self.assertEqual(0, proto.optional_int64)
1122 self.assertEqual(0, proto.optional_uint32)
1123 self.assertEqual(0, proto.optional_uint64)
1124 self.assertEqual(0, proto.optional_sint32)
1125 self.assertEqual(0, proto.optional_sint64)
1126 self.assertEqual(0, proto.optional_fixed32)
1127 self.assertEqual(0, proto.optional_fixed64)
1128 self.assertEqual(0, proto.optional_sfixed32)
1129 self.assertEqual(0, proto.optional_sfixed64)
1130 self.assertEqual(0.0, proto.optional_float)
1131 self.assertEqual(0.0, proto.optional_double)
1132 self.assertEqual(
False, proto.optional_bool)
1133 self.assertEqual(
'', proto.optional_string)
1134 self.assertEqual(b
'', proto.optional_bytes)
1136 self.assertEqual(41, proto.default_int32)
1137 self.assertEqual(42, proto.default_int64)
1138 self.assertEqual(43, proto.default_uint32)
1139 self.assertEqual(44, proto.default_uint64)
1140 self.assertEqual(-45, proto.default_sint32)
1141 self.assertEqual(46, proto.default_sint64)
1142 self.assertEqual(47, proto.default_fixed32)
1143 self.assertEqual(48, proto.default_fixed64)
1144 self.assertEqual(49, proto.default_sfixed32)
1145 self.assertEqual(-50, proto.default_sfixed64)
1146 self.assertEqual(51.5, proto.default_float)
1147 self.assertEqual(52e3, proto.default_double)
1148 self.assertEqual(
True, proto.default_bool)
1149 self.assertEqual(
'hello', proto.default_string)
1150 self.assertEqual(b
'world', proto.default_bytes)
1151 self.assertEqual(unittest_pb2.TestAllTypes.BAR, proto.default_nested_enum)
1152 self.assertEqual(unittest_pb2.FOREIGN_BAR, proto.default_foreign_enum)
1153 self.assertEqual(unittest_import_pb2.IMPORT_BAR,
1154 proto.default_import_enum)
1156 proto = unittest_pb2.TestExtremeDefaultValues()
1157 self.assertEqual(
u'\u1234', proto.utf8_string)
1160 proto = unittest_pb2.TestAllTypes()
1161 self.assertRaises(ValueError, proto.HasField,
'nonexistent_field')
1167 proto = unittest_pb2.TestRequiredForeign()
1169 proto.repeated_message.add()
1170 proto2 = unittest_pb2.TestRequiredForeign()
1171 proto.CopyFrom(proto2)
1172 self.assertRaises(IndexError,
lambda: proto.repeated_message[5])
1175 proto = unittest_pb2.TestAllTypes()
1177 proto.ClearField(
'optional_int32')
1178 proto.optional_int32 = 1
1179 self.assertTrue(proto.HasField(
'optional_int32'))
1180 proto.ClearField(
'optional_int32')
1181 self.assertEqual(0, proto.optional_int32)
1182 self.assertFalse(proto.HasField(
'optional_int32'))
1186 proto = unittest_pb2.TestAllTypes()
1188 self.assertFalse(proto.repeated_int32)
1189 self.assertEqual(0,
len(proto.repeated_int32))
1190 proto.repeated_int32.append(5)
1191 proto.repeated_int32.append(10)
1192 proto.repeated_int32.append(15)
1193 self.assertTrue(proto.repeated_int32)
1194 self.assertEqual(3,
len(proto.repeated_int32))
1196 self.assertEqual([5, 10, 15], proto.repeated_int32)
1199 self.assertEqual(5, proto.repeated_int32[0])
1200 self.assertEqual(15, proto.repeated_int32[-1])
1202 self.assertRaises(IndexError, proto.repeated_int32.__getitem__, 1234)
1203 self.assertRaises(IndexError, proto.repeated_int32.__getitem__, -1234)
1205 self.assertRaises(TypeError, proto.repeated_int32.__getitem__,
'foo')
1206 self.assertRaises(TypeError, proto.repeated_int32.__getitem__,
None)
1209 proto.repeated_int32[1] = 20
1210 self.assertEqual([5, 20, 15], proto.repeated_int32)
1213 proto.repeated_int32.insert(1, 25)
1214 self.assertEqual([5, 25, 20, 15], proto.repeated_int32)
1217 proto.repeated_int32.append(30)
1218 self.assertEqual([25, 20, 15], proto.repeated_int32[1:4])
1219 self.assertEqual([5, 25, 20, 15, 30], proto.repeated_int32[:])
1222 proto.repeated_int32[1:4] = (i
for i
in range(3))
1223 self.assertEqual([5, 0, 1, 2, 30], proto.repeated_int32)
1226 proto.repeated_int32[1:4] = [35, 40, 45]
1227 self.assertEqual([5, 35, 40, 45, 30], proto.repeated_int32)
1231 for i
in proto.repeated_int32:
1233 self.assertEqual([5, 35, 40, 45, 30], result)
1236 del proto.repeated_int32[2]
1237 self.assertEqual([5, 35, 45, 30], proto.repeated_int32)
1240 del proto.repeated_int32[2:]
1241 self.assertEqual([5, 35], proto.repeated_int32)
1244 proto.repeated_int32.extend([3, 13])
1245 self.assertEqual([5, 35, 3, 13], proto.repeated_int32)
1248 proto.ClearField(
'repeated_int32')
1249 self.assertFalse(proto.repeated_int32)
1250 self.assertEqual(0,
len(proto.repeated_int32))
1252 proto.repeated_int32.append(1)
1253 self.assertEqual(1, proto.repeated_int32[-1])
1255 proto.repeated_int32[-1] = 2
1256 self.assertEqual(2, proto.repeated_int32[-1])
1259 proto.repeated_int32[:] = [0, 1, 2, 3]
1260 del proto.repeated_int32[-1]
1261 self.assertEqual([0, 1, 2], proto.repeated_int32)
1263 del proto.repeated_int32[-2]
1264 self.assertEqual([0, 2], proto.repeated_int32)
1266 self.assertRaises(IndexError, proto.repeated_int32.__delitem__, -3)
1267 self.assertRaises(IndexError, proto.repeated_int32.__delitem__, 300)
1269 del proto.repeated_int32[-2:-1]
1270 self.assertEqual([2], proto.repeated_int32)
1272 del proto.repeated_int32[100:10000]
1273 self.assertEqual([2], proto.repeated_int32)
1276 proto = unittest_pb2.TestAllTypes()
1278 self.assertFalse(proto.repeated_int32)
1279 self.assertEqual(0,
len(proto.repeated_int32))
1280 proto.repeated_int32.append(5)
1281 proto.repeated_int32.append(10)
1282 proto.repeated_int32.append(5)
1283 proto.repeated_int32.append(5)
1285 self.assertEqual(4,
len(proto.repeated_int32))
1286 proto.repeated_int32.remove(5)
1287 self.assertEqual(3,
len(proto.repeated_int32))
1288 self.assertEqual(10, proto.repeated_int32[0])
1289 self.assertEqual(5, proto.repeated_int32[1])
1290 self.assertEqual(5, proto.repeated_int32[2])
1292 proto.repeated_int32.remove(5)
1293 self.assertEqual(2,
len(proto.repeated_int32))
1294 self.assertEqual(10, proto.repeated_int32[0])
1295 self.assertEqual(5, proto.repeated_int32[1])
1297 proto.repeated_int32.remove(10)
1298 self.assertEqual(1,
len(proto.repeated_int32))
1299 self.assertEqual(5, proto.repeated_int32[0])
1302 self.assertRaises(ValueError, proto.repeated_int32.remove, 123)
1305 proto = unittest_pb2.TestAllTypes()
1307 self.assertFalse(proto.repeated_int32)
1308 self.assertEqual(0,
len(proto.repeated_int32))
1310 self.assertIsNone(proto.repeated_int32.reverse())
1312 self.assertFalse(proto.repeated_int32)
1313 self.assertEqual(0,
len(proto.repeated_int32))
1316 proto = unittest_pb2.TestAllTypes()
1318 self.assertFalse(proto.repeated_int32)
1319 self.assertEqual(0,
len(proto.repeated_int32))
1321 proto.repeated_int32.append(1)
1322 proto.repeated_int32.append(2)
1323 proto.repeated_int32.append(3)
1324 proto.repeated_int32.append(4)
1326 self.assertEqual(4,
len(proto.repeated_int32))
1328 self.assertIsNone(proto.repeated_int32.reverse())
1330 self.assertEqual(4,
len(proto.repeated_int32))
1331 self.assertEqual(4, proto.repeated_int32[0])
1332 self.assertEqual(3, proto.repeated_int32[1])
1333 self.assertEqual(2, proto.repeated_int32[2])
1334 self.assertEqual(1, proto.repeated_int32[3])
1337 proto = unittest_pb2.TestAllTypes()
1338 self.assertFalse(proto.repeated_nested_message)
1339 self.assertEqual(0,
len(proto.repeated_nested_message))
1340 m0 = proto.repeated_nested_message.add()
1341 m1 = proto.repeated_nested_message.add()
1342 self.assertTrue(proto.repeated_nested_message)
1343 self.assertEqual(2,
len(proto.repeated_nested_message))
1345 self.assertIsInstance(m0, unittest_pb2.TestAllTypes.NestedMessage)
1348 self.assertRaises(IndexError, proto.repeated_nested_message.__getitem__,
1350 self.assertRaises(IndexError, proto.repeated_nested_message.__getitem__,
1354 self.assertRaises(TypeError, proto.repeated_nested_message.__getitem__,
1356 self.assertRaises(TypeError, proto.repeated_nested_message.__getitem__,
1360 m2 = proto.repeated_nested_message.add()
1361 m3 = proto.repeated_nested_message.add()
1362 m4 = proto.repeated_nested_message.add()
1364 [m1, m2, m3], proto.repeated_nested_message[1:4])
1366 [m0, m1, m2, m3, m4], proto.repeated_nested_message[:])
1368 [m0, m1], proto.repeated_nested_message[:2])
1370 [m2, m3, m4], proto.repeated_nested_message[2:])
1372 m0, proto.repeated_nested_message[0])
1374 [m0], proto.repeated_nested_message[:1])
1378 for i
in proto.repeated_nested_message:
1383 del proto.repeated_nested_message[2]
1387 del proto.repeated_nested_message[2:]
1391 n1 = unittest_pb2.TestAllTypes.NestedMessage(bb=1)
1392 n2 = unittest_pb2.TestAllTypes.NestedMessage(bb=2)
1393 proto.repeated_nested_message.extend([n1,n2])
1394 self.assertEqual(4,
len(proto.repeated_nested_message))
1395 self.assertEqual(n1, proto.repeated_nested_message[2])
1396 self.assertEqual(n2, proto.repeated_nested_message[3])
1397 self.assertRaises(TypeError,
1398 proto.repeated_nested_message.extend, n1)
1399 self.assertRaises(TypeError,
1400 proto.repeated_nested_message.extend, [0])
1401 wrong_message_type = unittest_pb2.TestAllTypes()
1402 self.assertRaises(TypeError,
1403 proto.repeated_nested_message.extend,
1404 [wrong_message_type])
1407 proto.ClearField(
'repeated_nested_message')
1408 self.assertFalse(proto.repeated_nested_message)
1409 self.assertEqual(0,
len(proto.repeated_nested_message))
1412 proto.repeated_nested_message.add(bb=23)
1413 self.assertEqual(1,
len(proto.repeated_nested_message))
1414 self.assertEqual(23, proto.repeated_nested_message[0].bb)
1415 self.assertRaises(TypeError, proto.repeated_nested_message.add, 23)
1416 with self.assertRaises(Exception):
1417 proto.repeated_nested_message[0] = 23
1420 proto = unittest_pb2.TestAllTypes()
1422 self.assertEqual(0,
len(proto.repeated_nested_message))
1423 m0 = proto.repeated_nested_message.add()
1425 m0.bb =
len(proto.repeated_nested_message)
1426 m1 = proto.repeated_nested_message.add()
1427 m1.bb =
len(proto.repeated_nested_message)
1428 self.assertTrue(m0 != m1)
1429 m2 = proto.repeated_nested_message.add()
1430 m2.bb =
len(proto.repeated_nested_message)
1433 self.assertEqual(3,
len(proto.repeated_nested_message))
1434 proto.repeated_nested_message.remove(m0)
1435 self.assertEqual(2,
len(proto.repeated_nested_message))
1436 self.assertEqual(m1, proto.repeated_nested_message[0])
1437 self.assertEqual(m2, proto.repeated_nested_message[1])
1440 self.assertRaises(ValueError, proto.repeated_nested_message.remove, m0)
1441 self.assertRaises(ValueError, proto.repeated_nested_message.remove,
None)
1442 self.assertEqual(2,
len(proto.repeated_nested_message))
1444 proto.repeated_nested_message.remove(m2)
1445 self.assertEqual(1,
len(proto.repeated_nested_message))
1446 self.assertEqual(m1, proto.repeated_nested_message[0])
1449 proto = unittest_pb2.TestAllTypes()
1451 self.assertFalse(proto.repeated_nested_message)
1452 self.assertEqual(0,
len(proto.repeated_nested_message))
1454 self.assertIsNone(proto.repeated_nested_message.reverse())
1456 self.assertFalse(proto.repeated_nested_message)
1457 self.assertEqual(0,
len(proto.repeated_nested_message))
1460 proto = unittest_pb2.TestAllTypes()
1462 self.assertFalse(proto.repeated_nested_message)
1463 self.assertEqual(0,
len(proto.repeated_nested_message))
1465 m0 = proto.repeated_nested_message.add()
1466 m0.bb =
len(proto.repeated_nested_message)
1467 m1 = proto.repeated_nested_message.add()
1468 m1.bb =
len(proto.repeated_nested_message)
1469 m2 = proto.repeated_nested_message.add()
1470 m2.bb =
len(proto.repeated_nested_message)
1473 self.assertIsNone(proto.repeated_nested_message.reverse())
1480 if api_implementation.Type() !=
'python':
1485 name=
'foo_field', full_name=
'MyProto.foo_field',
1486 index=0, number=1, type=FieldDescriptor.TYPE_INT64,
1487 cpp_type=FieldDescriptor.CPPTYPE_INT64,
1488 label=FieldDescriptor.LABEL_OPTIONAL, default_value=0,
1489 containing_type=
None, message_type=
None, enum_type=
None,
1490 is_extension=
False, extension_scope=
None,
1491 options=descriptor_pb2.FieldOptions(),
1493 create_key=descriptor._internal_create_key)
1495 name=
'MyProto', full_name=
'MyProto', filename=
'ignored',
1496 containing_type=
None, nested_types=[], enum_types=[],
1497 fields=[foo_field_descriptor], extensions=[],
1498 options=descriptor_pb2.MessageOptions(),
1500 create_key=descriptor._internal_create_key)
1504 DESCRIPTOR = mydescriptor
1505 myproto_instance = MyProtoClass()
1506 self.assertEqual(0, myproto_instance.foo_field)
1507 self.assertFalse(myproto_instance.HasField(
'foo_field'))
1508 myproto_instance.foo_field = 23
1509 self.assertEqual(23, myproto_instance.foo_field)
1510 self.assertTrue(myproto_instance.HasField(
'foo_field'))
1512 @testing_refleaks.SkipReferenceLeakChecker(
'MakeDescriptor is not repeatable')
1516 if api_implementation.Type() !=
'python':
1519 def AddDescriptorField(proto, field_name, field_type):
1520 AddDescriptorField.field_index += 1
1521 new_field = proto.field.add()
1522 new_field.name = field_name
1523 new_field.type = field_type
1524 new_field.number = AddDescriptorField.field_index
1525 new_field.label = descriptor_pb2.FieldDescriptorProto.LABEL_OPTIONAL
1527 AddDescriptorField.field_index = 0
1529 desc_proto = descriptor_pb2.DescriptorProto()
1530 desc_proto.name =
'Car'
1531 fdp = descriptor_pb2.FieldDescriptorProto
1532 AddDescriptorField(desc_proto,
'name', fdp.TYPE_STRING)
1533 AddDescriptorField(desc_proto,
'year', fdp.TYPE_INT64)
1534 AddDescriptorField(desc_proto,
'automatic', fdp.TYPE_BOOL)
1535 AddDescriptorField(desc_proto,
'price', fdp.TYPE_DOUBLE)
1537 AddDescriptorField.field_index += 1
1538 new_field = desc_proto.field.add()
1539 new_field.name =
'owners'
1540 new_field.type = fdp.TYPE_STRING
1541 new_field.number = AddDescriptorField.field_index
1542 new_field.label = descriptor_pb2.FieldDescriptorProto.LABEL_REPEATED
1544 desc = descriptor.MakeDescriptor(desc_proto)
1545 self.assertTrue(
'name' in desc.fields_by_name)
1546 self.assertTrue(
'year' in desc.fields_by_name)
1547 self.assertTrue(
'automatic' in desc.fields_by_name)
1548 self.assertTrue(
'price' in desc.fields_by_name)
1549 self.assertTrue(
'owners' in desc.fields_by_name)
1555 prius = CarMessage()
1556 prius.name =
'prius'
1558 prius.automatic =
True
1559 prius.price = 25134.75
1560 prius.owners.extend([
'bob',
'susan'])
1562 serialized_prius = prius.SerializeToString()
1563 new_prius = reflection.ParseMessage(desc, serialized_prius)
1564 self.assertIsNot(new_prius, prius)
1565 self.assertEqual(prius, new_prius)
1569 self.assertEqual(prius.name, new_prius.name)
1570 self.assertEqual(prius.year, new_prius.year)
1571 self.assertEqual(prius.automatic, new_prius.automatic)
1572 self.assertEqual(prius.price, new_prius.price)
1573 self.assertEqual(prius.owners, new_prius.owners)
1576 extendee_proto = more_extensions_pb2.ExtendedMessage()
1578 extension_int32 = more_extensions_pb2.optional_int_extension
1579 extendee_proto.Extensions[extension_int32] = 23
1581 extension_repeated = more_extensions_pb2.repeated_int_extension
1582 extendee_proto.Extensions[extension_repeated].append(11)
1584 extension_msg = more_extensions_pb2.optional_message_extension
1585 extendee_proto.Extensions[extension_msg].foreign_message_int = 56
1587 self.assertEqual(
len(extendee_proto.Extensions), 3)
1588 del extendee_proto.Extensions[extension_msg]
1589 self.assertEqual(
len(extendee_proto.Extensions), 2)
1590 del extendee_proto.Extensions[extension_repeated]
1591 self.assertEqual(
len(extendee_proto.Extensions), 1)
1596 del extendee_proto.Extensions[extension_repeated]
1597 self.assertEqual(
len(extendee_proto.Extensions), 1)
1598 del extendee_proto.Extensions[extension_int32]
1599 self.assertEqual(
len(extendee_proto.Extensions), 0)
1602 extendee_proto = more_extensions_pb2.ExtendedMessage()
1604 extension_int32 = more_extensions_pb2.optional_int_extension
1605 extendee_proto.Extensions[extension_int32] = 23
1607 extension_repeated = more_extensions_pb2.repeated_int_extension
1608 extendee_proto.Extensions[extension_repeated].append(11)
1610 extension_msg = more_extensions_pb2.optional_message_extension
1611 extendee_proto.Extensions[extension_msg].foreign_message_int = 56
1614 extendee_proto.optional_int32 = 1
1615 extendee_proto.repeated_string.append(
'hi')
1617 expected = (extension_int32, extension_msg, extension_repeated)
1619 for item
in extendee_proto.Extensions:
1620 self.assertEqual(item.name, expected[count].name)
1621 self.assertIn(item, extendee_proto.Extensions)
1623 self.assertEqual(count, 3)
1626 extendee_proto = more_extensions_pb2.ExtendedMessage()
1627 self.assertRaises(KeyError, extendee_proto.Extensions.__contains__, 0)
1629 field = more_extensions_pb2.ExtendedMessage.DESCRIPTOR.fields_by_name[
1631 self.assertRaises(KeyError, extendee_proto.Extensions.__contains__, field)
1634 extendee_proto = unittest_pb2.TestAllExtensions()
1635 extension = unittest_pb2.optional_int32_extension
1636 self.assertFalse(extendee_proto.HasExtension(extension))
1637 self.assertNotIn(extension, extendee_proto.Extensions)
1638 self.assertEqual(0, extendee_proto.Extensions[extension])
1641 self.assertFalse(extendee_proto.HasExtension(extension))
1642 self.assertNotIn(extension, extendee_proto.Extensions)
1644 extendee_proto.Extensions[extension] = 23
1645 self.assertEqual(23, extendee_proto.Extensions[extension])
1646 self.assertTrue(extendee_proto.HasExtension(extension))
1647 self.assertIn(extension, extendee_proto.Extensions)
1649 extendee_proto.ClearExtension(extension)
1650 self.assertEqual(0, extendee_proto.Extensions[extension])
1651 self.assertFalse(extendee_proto.HasExtension(extension))
1652 self.assertNotIn(extension, extendee_proto.Extensions)
1655 extendee_proto = unittest_pb2.TestAllExtensions()
1656 extension = unittest_pb2.repeated_string_extension
1657 self.assertEqual(0,
len(extendee_proto.Extensions[extension]))
1658 self.assertNotIn(extension, extendee_proto.Extensions)
1659 extendee_proto.Extensions[extension].append(
'foo')
1660 self.assertEqual([
'foo'], extendee_proto.Extensions[extension])
1661 self.assertIn(extension, extendee_proto.Extensions)
1662 string_list = extendee_proto.Extensions[extension]
1663 extendee_proto.ClearExtension(extension)
1664 self.assertEqual(0,
len(extendee_proto.Extensions[extension]))
1665 self.assertNotIn(extension, extendee_proto.Extensions)
1666 self.assertIsNot(string_list, extendee_proto.Extensions[extension])
1668 self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions,
1672 extendee_proto = unittest_pb2.TestAllExtensions()
1673 extension = unittest_pb2.optional_foreign_message_extension
1674 self.assertFalse(extendee_proto.HasExtension(extension))
1675 self.assertNotIn(extension, extendee_proto.Extensions)
1676 self.assertEqual(0, extendee_proto.Extensions[extension].c)
1679 self.assertFalse(extendee_proto.HasExtension(extension))
1680 self.assertNotIn(extension, extendee_proto.Extensions)
1681 extendee_proto.Extensions[extension].c = 23
1682 self.assertEqual(23, extendee_proto.Extensions[extension].c)
1683 self.assertTrue(extendee_proto.HasExtension(extension))
1684 self.assertIn(extension, extendee_proto.Extensions)
1686 foreign_message = extendee_proto.Extensions[extension]
1687 extendee_proto.ClearExtension(extension)
1688 self.assertIsNot(foreign_message, extendee_proto.Extensions[extension])
1691 foreign_message.c = 42
1692 self.assertEqual(42, foreign_message.c)
1693 self.assertTrue(foreign_message.HasField(
'c'))
1694 self.assertFalse(extendee_proto.HasExtension(extension))
1695 self.assertNotIn(extension, extendee_proto.Extensions)
1697 self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions,
1701 extendee_proto = unittest_pb2.TestAllExtensions()
1702 extension = unittest_pb2.repeatedgroup_extension
1703 self.assertEqual(0,
len(extendee_proto.Extensions[extension]))
1704 group = extendee_proto.Extensions[extension].
add()
1706 self.assertEqual(23, extendee_proto.Extensions[extension][0].a)
1708 self.assertEqual(42, extendee_proto.Extensions[extension][0].a)
1709 group_list = extendee_proto.Extensions[extension]
1710 extendee_proto.ClearExtension(extension)
1711 self.assertEqual(0,
len(extendee_proto.Extensions[extension]))
1712 self.assertIsNot(group_list, extendee_proto.Extensions[extension])
1714 self.assertRaises(TypeError, operator.setitem, extendee_proto.Extensions,
1718 extendee_proto = unittest_pb2.TestAllExtensions()
1719 extension = unittest_pb2.TestRequired.single
1722 self.assertFalse(extendee_proto.HasExtension(extension))
1723 self.assertNotIn(extension, extendee_proto.Extensions)
1724 required = extendee_proto.Extensions[extension]
1725 self.assertEqual(0, required.a)
1726 self.assertFalse(extendee_proto.HasExtension(extension))
1727 self.assertNotIn(extension, extendee_proto.Extensions)
1729 self.assertEqual(23, extendee_proto.Extensions[extension].a)
1730 self.assertTrue(extendee_proto.HasExtension(extension))
1731 self.assertIn(extension, extendee_proto.Extensions)
1732 extendee_proto.ClearExtension(extension)
1733 self.assertIsNot(required, extendee_proto.Extensions[extension])
1734 self.assertFalse(extendee_proto.HasExtension(extension))
1735 self.assertNotIn(extension, extendee_proto.Extensions)
1738 pool = unittest_pb2.DESCRIPTOR.pool
1740 pool.FindExtensionByNumber(
1741 unittest_pb2.TestAllExtensions.DESCRIPTOR, 1))
1743 pool.FindExtensionByName(
1744 'protobuf_unittest.optional_int32_extension').containing_type,
1745 unittest_pb2.TestAllExtensions.DESCRIPTOR)
1748 self.assertEqual(0,
len(
1749 pool.FindAllExtensions(unittest_pb2.TestAllTypes.DESCRIPTOR)))
1757 toplevel = more_extensions_pb2.TopLevelMessage()
1758 self.assertFalse(toplevel.HasField(
'submessage'))
1759 self.assertEqual(0, toplevel.submessage.Extensions[
1760 more_extensions_pb2.optional_int_extension])
1761 self.assertFalse(toplevel.HasField(
'submessage'))
1762 toplevel.submessage.Extensions[
1763 more_extensions_pb2.optional_int_extension] = 23
1764 self.assertEqual(23, toplevel.submessage.Extensions[
1765 more_extensions_pb2.optional_int_extension])
1766 self.assertTrue(toplevel.HasField(
'submessage'))
1769 toplevel = more_extensions_pb2.TopLevelMessage()
1770 self.assertFalse(toplevel.HasField(
'submessage'))
1771 self.assertEqual([], toplevel.submessage.Extensions[
1772 more_extensions_pb2.repeated_int_extension])
1773 self.assertFalse(toplevel.HasField(
'submessage'))
1774 toplevel.submessage.Extensions[
1775 more_extensions_pb2.repeated_int_extension].append(23)
1776 self.assertEqual([23], toplevel.submessage.Extensions[
1777 more_extensions_pb2.repeated_int_extension])
1778 self.assertTrue(toplevel.HasField(
'submessage'))
1781 toplevel = more_extensions_pb2.TopLevelMessage()
1782 self.assertFalse(toplevel.HasField(
'submessage'))
1783 self.assertEqual(0, toplevel.submessage.Extensions[
1784 more_extensions_pb2.optional_message_extension].foreign_message_int)
1785 self.assertFalse(toplevel.HasField(
'submessage'))
1786 toplevel.submessage.Extensions[
1787 more_extensions_pb2.optional_message_extension].foreign_message_int = 23
1788 self.assertEqual(23, toplevel.submessage.Extensions[
1789 more_extensions_pb2.optional_message_extension].foreign_message_int)
1790 self.assertTrue(toplevel.HasField(
'submessage'))
1793 toplevel = more_extensions_pb2.TopLevelMessage()
1794 self.assertFalse(toplevel.HasField(
'submessage'))
1795 self.assertEqual(0,
len(toplevel.submessage.Extensions[
1796 more_extensions_pb2.repeated_message_extension]))
1797 self.assertFalse(toplevel.HasField(
'submessage'))
1798 foreign = toplevel.submessage.Extensions[
1799 more_extensions_pb2.repeated_message_extension].
add()
1800 self.assertEqual(foreign, toplevel.submessage.Extensions[
1801 more_extensions_pb2.repeated_message_extension][0])
1802 self.assertTrue(toplevel.HasField(
'submessage'))
1805 toplevel = more_extensions_pb2.TopLevelMessage()
1806 extendee_proto = toplevel.submessage
1807 extension = more_extensions_pb2.optional_message_extension
1808 extension_proto = extendee_proto.Extensions[extension]
1809 extendee_proto.ClearExtension(extension)
1810 extension_proto.foreign_message_int = 23
1812 self.assertIsNot(extension_proto, extendee_proto.Extensions[extension])
1815 extendee_proto = unittest_pb2.TestAllExtensions()
1819 self.assertRaises(KeyError, extendee_proto.HasExtension, 1234)
1820 self.assertRaises(KeyError, extendee_proto.ClearExtension, 1234)
1821 self.assertRaises(KeyError, extendee_proto.Extensions.__getitem__, 1234)
1822 self.assertRaises(KeyError, extendee_proto.Extensions.__setitem__, 1234, 5)
1826 for unknown_handle
in (more_extensions_pb2.optional_int_extension,
1827 more_extensions_pb2.optional_message_extension,
1828 more_extensions_pb2.repeated_int_extension,
1829 more_extensions_pb2.repeated_message_extension):
1830 self.assertRaises(KeyError, extendee_proto.HasExtension,
1832 self.assertRaises(KeyError, extendee_proto.ClearExtension,
1834 self.assertRaises(KeyError, extendee_proto.Extensions.__getitem__,
1836 self.assertRaises(KeyError, extendee_proto.Extensions.__setitem__,
1842 self.assertRaises(KeyError, extendee_proto.HasExtension,
1843 unittest_pb2.repeated_string_extension)
1847 proto1 = unittest_pb2.TestAllTypes()
1848 proto1.optionalgroup.a = 12
1849 proto2 = unittest_pb2.TestAllTypes()
1850 proto2.MergeFrom(proto1)
1851 self.assertEqual(12, proto2.optionalgroup.a)
1854 proto1 = unittest_pb2.TestAllExtensions()
1855 proto1.Extensions[unittest_pb2.optional_int32_extension] = 1
1857 proto2 = unittest_pb2.TestAllExtensions()
1858 proto2.MergeFrom(proto1)
1860 1, proto2.Extensions[unittest_pb2.optional_int32_extension])
1863 proto1 = unittest_pb2.TestAllExtensions()
1864 proto1.Extensions[unittest_pb2.repeated_int32_extension].append(1)
1865 proto1.Extensions[unittest_pb2.repeated_int32_extension].append(2)
1867 proto2 = unittest_pb2.TestAllExtensions()
1868 proto2.Extensions[unittest_pb2.repeated_int32_extension].append(0)
1869 proto2.MergeFrom(proto1)
1871 3,
len(proto2.Extensions[unittest_pb2.repeated_int32_extension]))
1873 0, proto2.Extensions[unittest_pb2.repeated_int32_extension][0])
1875 1, proto2.Extensions[unittest_pb2.repeated_int32_extension][1])
1877 2, proto2.Extensions[unittest_pb2.repeated_int32_extension][2])
1880 proto1 = unittest_pb2.TestAllExtensions()
1881 ext1 = proto1.Extensions[
1882 unittest_pb2.repeated_nested_message_extension]
1888 proto2 = unittest_pb2.TestAllExtensions()
1889 ext2 = proto2.Extensions[
1890 unittest_pb2.repeated_nested_message_extension]
1894 proto2.MergeFrom(proto1)
1895 ext2 = proto2.Extensions[
1896 unittest_pb2.repeated_nested_message_extension]
1897 self.assertEqual(3,
len(ext2))
1898 self.assertEqual(111, ext2[0].bb)
1899 self.assertEqual(222, ext2[1].bb)
1900 self.assertEqual(333, ext2[2].bb)
1905 if api_implementation.Type() ==
'python':
1907 proto1 = unittest_pb2.TestAllTypes()
1908 proto2 = unittest_pb2.TestAllExtensions()
1909 self.assertRaises(TypeError, proto1.CopyFrom, proto2)
1912 proto = unittest_pb2.TestAllTypes()
1915 if api_implementation.Type() ==
'python':
1916 test_util.SetAllFields(proto)
1918 test_util.SetAllNonLazyFields(proto)
1921 self.assertEqual(proto.ByteSize(), 0)
1922 empty_proto = unittest_pb2.TestAllTypes()
1923 self.assertEqual(proto, empty_proto)
1926 proto = unittest_pb2.TestAllExtensions()
1927 test_util.SetAllExtensions(proto)
1930 self.assertEqual(proto.ByteSize(), 0)
1931 empty_proto = unittest_pb2.TestAllExtensions()
1932 self.assertEqual(proto, empty_proto)
1935 m = unittest_pb2.TestOneof2()
1936 m.foo_message.qux_int = 5
1937 sub_message = m.foo_message
1939 self.assertEqual(m.foo_lazy_message.qux_int, 0)
1940 self.assertEqual(m.foo_message.qux_int, 5)
1942 m.foo_lazy_message.qux_int = 6
1943 self.assertEqual(m.foo_message.qux_int, 0)
1945 self.assertEqual(sub_message.qux_int, 5)
1946 sub_message.qux_int = 7
1949 self.assertTrue(proto.IsInitialized())
1951 proto.SerializeToString()
1952 proto.SerializePartialToString()
1956 self.assertFalse(proto.IsInitialized())
1957 self.assertFalse(proto.IsInitialized(errors))
1958 self.assertEqual(error_size,
len(errors))
1961 proto.SerializePartialToString()
1965 proto = unittest_pb2.TestAllTypes()
1967 proto = unittest_pb2.TestAllExtensions()
1971 proto = unittest_pb2.TestRequired()
1973 proto.a = proto.b = proto.c = 2
1977 proto = unittest_pb2.TestRequiredForeign()
1979 proto.optional_message.a = 1
1981 proto.optional_message.b = 0
1982 proto.optional_message.c = 0
1986 message1 = proto.repeated_message.add()
1988 message1.a = message1.b = message1.c = 0
1992 proto = unittest_pb2.TestAllExtensions()
1993 extension = unittest_pb2.TestRequired.multi
1994 message1 = proto.Extensions[extension].
add()
1995 message2 = proto.Extensions[extension].
add()
2007 proto = unittest_pb2.TestAllExtensions()
2008 extension = unittest_pb2.TestRequired.single
2009 proto.Extensions[extension].a = 1
2011 proto.Extensions[extension].b = 2
2012 proto.Extensions[extension].c = 3
2017 proto = unittest_pb2.TestRequired()
2018 self.assertFalse(proto.IsInitialized(errors))
2019 self.assertEqual(errors, [
'a',
'b',
'c'])
2020 self.assertRaises(TypeError, proto.IsInitialized, 1, 2, 3)
2023 api_implementation.Type() !=
'cpp' or api_implementation.Version() != 2,
2024 'Errors are only available from the most recent C++ implementation.')
2026 file_name =
'test_file_descriptor_errors.proto'
2027 package_name =
'test_file_descriptor_errors.proto'
2028 file_descriptor_proto = descriptor_pb2.FileDescriptorProto()
2029 file_descriptor_proto.name = file_name
2030 file_descriptor_proto.package = package_name
2031 m1 = file_descriptor_proto.message_type.add()
2037 serialized_pb=file_descriptor_proto.SerializeToString())
2039 another_file_name =
'another_test_file_descriptor_errors.proto'
2040 file_descriptor_proto.name = another_file_name
2041 m2 = file_descriptor_proto.message_type.add()
2043 with self.assertRaises(TypeError)
as cm:
2047 serialized_pb=file_descriptor_proto.SerializeToString())
2048 self.assertTrue(hasattr(cm,
'exception'),
'%s not raised' %
2049 getattr(cm.expected,
'__name__', cm.expected))
2050 self.assertIn(
'test_file_descriptor_errors.proto',
str(cm.exception))
2054 self.assertIn(
'test_file_descriptor_errors.msg1',
str(cm.exception))
2057 proto = message_set_extensions_pb2.TestMessageSet()
2058 extension_message = message_set_extensions_pb2.TestMessageSetExtension2
2059 extension = extension_message.message_set_extension
2062 test_utf8_bytes = test_utf8.encode(
'utf-8')
2065 proto.Extensions[extension].str = test_utf8
2069 serialized = proto.SerializeToString()
2072 self.assertEqual(proto.ByteSize(),
len(serialized))
2074 raw = unittest_mset_pb2.RawMessageSet()
2075 bytes_read = raw.MergeFromString(serialized)
2076 self.assertEqual(
len(serialized), bytes_read)
2078 message2 = message_set_extensions_pb2.TestMessageSetExtension2()
2080 self.assertEqual(1,
len(raw.item))
2082 self.assertEqual(raw.item[0].type_id, 98418634)
2085 self.assertTrue(raw.item[0].message.endswith(test_utf8_bytes))
2086 bytes_read = message2.MergeFromString(raw.item[0].message)
2087 self.assertEqual(
len(raw.item[0].message), bytes_read)
2089 self.assertEqual(
type(message2.str), str)
2090 self.assertEqual(message2.str, test_utf8)
2099 badbytes = raw.item[0].message.replace(
2100 test_utf8_bytes,
len(test_utf8_bytes) * b
'\xff')
2102 unicode_decode_failed =
False
2104 message2.MergeFromString(badbytes)
2105 except UnicodeDecodeError:
2106 unicode_decode_failed =
True
2107 string_field = message2.str
2108 self.assertTrue(unicode_decode_failed
or type(string_field)
is bytes)
2111 proto = unittest_pb2.TestAllTypes()
2112 self.assertFalse(proto.HasField(
'optionalgroup'))
2113 proto.optionalgroup.SetInParent()
2114 self.assertTrue(proto.HasField(
'optionalgroup'))
2117 """Test that we can import nested messages from their __init__.py.
2119 Such setup is not trivial since at the time of processing of __init__.py one
2120 can't refer to its submodules by name in code, so expressions like
2121 google.protobuf.internal.import_test_package.inner_pb2
2122 don't work. They do work in imports, so we have assign an alias at import
2123 and then use that alias in generated code.
2130 msg = import_test_package.myproto.Outer()
2132 self.assertEqual(57, msg.inner.value)
2138 @testing_refleaks.TestCase
2146 self.assertRaises(TypeError, hash, self.
first_proto)
2155 @testing_refleaks.TestCase
2158 """Equality tests using completely-full protos as a starting point."""
2167 self.assertRaises(TypeError, hash, self.
first_proto)
2174 third_proto = unittest_pb2.TestRequired()
2175 self.assertNotEqual(self.
first_proto, third_proto)
2196 self.
first_proto.optional_nested_message.ClearField(
'bb')
2214 self.
first_proto.repeated_nested_message[0].bb += 1
2216 self.
first_proto.repeated_nested_message[0].bb -= 1
2235 self.
second_proto.optional_nested_message.ClearField(
'bb')
2238 self.
first_proto.optional_nested_message.ClearField(
'bb')
2242 @testing_refleaks.TestCase
2246 first_proto = unittest_pb2.TestAllExtensions()
2247 second_proto = unittest_pb2.TestAllExtensions()
2248 self.assertEqual(first_proto, second_proto)
2249 test_util.SetAllExtensions(first_proto)
2250 self.assertNotEqual(first_proto, second_proto)
2251 test_util.SetAllExtensions(second_proto)
2252 self.assertEqual(first_proto, second_proto)
2255 first_proto.Extensions[unittest_pb2.optional_int32_extension] += 1
2256 self.assertNotEqual(first_proto, second_proto)
2257 first_proto.Extensions[unittest_pb2.optional_int32_extension] -= 1
2258 self.assertEqual(first_proto, second_proto)
2261 first_proto.ClearExtension(unittest_pb2.optional_int32_extension)
2262 second_proto.Extensions[unittest_pb2.optional_int32_extension] = 0
2263 self.assertNotEqual(first_proto, second_proto)
2264 first_proto.Extensions[unittest_pb2.optional_int32_extension] = 0
2265 self.assertEqual(first_proto, second_proto)
2269 first_proto = unittest_pb2.TestAllExtensions()
2270 second_proto = unittest_pb2.TestAllExtensions()
2272 0, first_proto.Extensions[unittest_pb2.optional_int32_extension])
2273 self.assertEqual(first_proto, second_proto)
2276 @testing_refleaks.TestCase
2280 first_proto = unittest_pb2.TestMutualRecursionA()
2281 second_proto = unittest_pb2.TestMutualRecursionA()
2282 self.assertEqual(first_proto, second_proto)
2283 first_proto.bb.a.bb.optional_int32 = 23
2284 self.assertNotEqual(first_proto, second_proto)
2285 second_proto.bb.a.bb.optional_int32 = 23
2286 self.assertEqual(first_proto, second_proto)
2289 @testing_refleaks.TestCase
2293 self.
proto = unittest_pb2.TestAllTypes()
2306 proto = unittest_pb2.TestAllTypes()
2307 self.assertEqual(0, proto.ByteSize())
2308 proto_kwargs = unittest_pb2.TestAllTypes(optional_int64 = 1)
2310 self.assertEqual(2, proto_kwargs.ByteSize())
2313 def Test(i, expected_varint_size):
2315 self.
proto.optional_int64 = i
2318 self.assertEqual(expected_varint_size + 1, self.
Size())
2321 for i, num_bytes
in zip(
range(7, 63, 7),
range(1, 10000)):
2322 Test((1 << i) - 1, num_bytes)
2325 Test(-(1 << 63), 10)
2328 self.
proto.optional_string =
''
2330 self.assertEqual(2, self.
Size())
2332 self.
proto.optional_string =
'abc'
2334 self.assertEqual(2 +
len(self.
proto.optional_string), self.
Size())
2336 self.
proto.optional_string =
'x' * 128
2338 self.assertEqual(3 +
len(self.
proto.optional_string), self.
Size())
2341 self.
proto.optional_fixed32 = 1234
2343 self.assertEqual(5, self.
Size())
2344 self.
proto = unittest_pb2.TestAllTypes()
2346 self.
proto.optional_fixed64 = 1234
2348 self.assertEqual(9, self.
Size())
2349 self.
proto = unittest_pb2.TestAllTypes()
2351 self.
proto.optional_float = 1.234
2353 self.assertEqual(5, self.
Size())
2354 self.
proto = unittest_pb2.TestAllTypes()
2356 self.
proto.optional_double = 1.234
2358 self.assertEqual(9, self.
Size())
2359 self.
proto = unittest_pb2.TestAllTypes()
2361 self.
proto.optional_sint32 = 64
2363 self.assertEqual(3, self.
Size())
2364 self.
proto = unittest_pb2.TestAllTypes()
2368 self.
proto.optional_nested_message.bb = (1 << 14)
2372 self.assertEqual(3 + 1 + 1 + 2, self.
Size())
2376 self.
proto.optionalgroup.a = (1 << 21)
2379 self.assertEqual(4 + 2 + 2*2, self.
Size())
2382 self.
proto.repeated_int32.append(10)
2383 self.
proto.repeated_int32.append(128)
2385 self.assertEqual(1 + 2 + 2*2, self.
Size())
2388 self.
proto.repeated_int32.extend([10, 128])
2390 self.assertEqual(1 + 2 + 2*2, self.
Size())
2393 self.
proto.repeated_int32.append(10)
2394 self.
proto.repeated_int32.append(128)
2396 self.assertEqual(1 + 2 + 2*2, self.
Size())
2397 self.
proto.repeated_int32.remove(128)
2398 self.assertEqual(1 + 2, self.
Size())
2402 foreign_message_0 = self.
proto.repeated_nested_message.add()
2404 foreign_message_1 = self.
proto.repeated_nested_message.add()
2405 foreign_message_1.bb = 7
2406 self.assertEqual(2 + 1 + 2 + 1 + 1 + 1, self.
Size())
2410 foreign_message_0 = self.
proto.repeated_nested_message.add()
2412 foreign_message_1 = self.
proto.repeated_nested_message.add()
2413 foreign_message_1.bb = 9
2414 self.assertEqual(2 + 1 + 2 + 1 + 1 + 1, self.
Size())
2415 repeated_nested_message = copy.deepcopy(
2416 self.
proto.repeated_nested_message)
2419 del self.
proto.repeated_nested_message[0]
2420 self.assertEqual(2 + 1 + 1 + 1, self.
Size())
2423 foreign_message_2 = self.
proto.repeated_nested_message.add()
2424 foreign_message_2.bb = 12
2428 self.assertEqual(2 + 1 + 1 + 1 + 2 + 1 + 1 + 1, self.
Size())
2431 del self.
proto.repeated_nested_message[1]
2432 self.assertEqual(2 + 1 + 1 + 1, self.
Size())
2434 del self.
proto.repeated_nested_message[0]
2435 self.assertEqual(0, self.
Size())
2437 self.assertEqual(2,
len(repeated_nested_message))
2438 del repeated_nested_message[0:1]
2440 if api_implementation.Type() ==
'python':
2441 self.assertEqual(1,
len(repeated_nested_message))
2442 del repeated_nested_message[-1]
2444 if api_implementation.Type() ==
'python':
2445 self.assertEqual(0,
len(repeated_nested_message))
2449 group_0 = self.
proto.repeatedgroup.add()
2452 group_1 = self.
proto.repeatedgroup.add()
2454 self.assertEqual(2 + 2 + 2 + 2 + 1 + 2, self.
Size())
2457 proto = unittest_pb2.TestAllExtensions()
2458 self.assertEqual(0, proto.ByteSize())
2459 extension = unittest_pb2.optional_int32_extension
2460 proto.Extensions[extension] = 23
2462 self.assertEqual(2, proto.ByteSize())
2463 field = unittest_pb2.TestAllTypes.DESCRIPTOR.fields_by_name[
2465 with self.assertRaises(KeyError):
2466 proto.Extensions[field] = 23
2470 self.
proto.optional_int32 = 1
2472 self.
proto.optional_int32 = 128
2478 extension = more_extensions_pb2.optional_int_extension
2488 self.
proto.repeated_int32.append(1)
2490 self.
proto.repeated_int32.append(1)
2492 self.
proto.repeated_int32[1] = 128
2498 extension = more_extensions_pb2.repeated_int_extension
2511 self.
proto.optional_foreign_message.c = 1
2513 self.
proto.optional_foreign_message.c = 128
2515 self.
proto.optional_foreign_message.ClearField(
'c')
2520 if api_implementation.Type() ==
'python':
2522 child = self.
proto.optional_foreign_message
2528 extension = more_extensions_pb2.optional_message_extension
2531 child.foreign_message_int = 1
2533 child.foreign_message_int = 128
2540 child0 = self.
proto.repeated_foreign_message.add()
2542 self.
proto.repeated_foreign_message.add()
2550 extension = more_extensions_pb2.repeated_message_extension
2552 child0 = child_list.add()
2556 child0.foreign_message_int = 1
2558 child0.ClearField(
'foreign_message_int')
2570 int_size = 1 + 2 + 3
2576 double_size = 8 + 8 + 3
2585 unittest_pb2.packed_fixed32_extension]
2586 extension.extend([1, 2, 3, 4])
2602 @testing_refleaks.TestCase
2606 first_proto = unittest_pb2.TestAllTypes()
2607 second_proto = unittest_pb2.TestAllTypes()
2608 serialized = first_proto.SerializeToString()
2609 self.assertEqual(first_proto.ByteSize(),
len(serialized))
2612 second_proto.MergeFromString(serialized))
2613 self.assertEqual(first_proto, second_proto)
2616 first_proto = unittest_pb2.TestAllTypes()
2617 second_proto = unittest_pb2.TestAllTypes()
2618 test_util.SetAllFields(first_proto)
2619 serialized = first_proto.SerializeToString()
2620 self.assertEqual(first_proto.ByteSize(),
len(serialized))
2623 second_proto.MergeFromString(serialized))
2624 self.assertEqual(first_proto, second_proto)
2627 first_proto = unittest_pb2.TestAllExtensions()
2628 second_proto = unittest_pb2.TestAllExtensions()
2629 test_util.SetAllExtensions(first_proto)
2630 serialized = first_proto.SerializeToString()
2633 second_proto.MergeFromString(serialized))
2634 self.assertEqual(first_proto, second_proto)
2637 first_proto = unittest_pb2.TestAllTypes()
2638 second_proto = unittest_pb2.TestAllTypes()
2639 first_proto.optionalgroup.a = 242
2640 serialized = first_proto.SerializeToString()
2643 second_proto.MergeFromString(serialized))
2644 self.assertEqual(first_proto, second_proto)
2647 first_proto = unittest_pb2.TestAllTypes()
2649 first_proto.optional_int32 = -1
2650 first_proto.optional_int64 = -(2 << 40)
2651 first_proto.optional_sint32 = -3
2652 first_proto.optional_sint64 = -(4 << 40)
2653 first_proto.optional_sfixed32 = -5
2654 first_proto.optional_sfixed64 = -(6 << 40)
2656 second_proto = unittest_pb2.TestAllTypes.FromString(
2657 first_proto.SerializeToString())
2659 self.assertEqual(first_proto, second_proto)
2663 if api_implementation.Type() !=
'python':
2666 first_proto = unittest_pb2.TestAllTypes()
2667 test_util.SetAllFields(first_proto)
2668 serialized = memoryview(first_proto.SerializeToString())
2670 for truncation_point
in range(
len(serialized) + 1):
2672 second_proto = unittest_pb2.TestAllTypes()
2673 unknown_fields = unittest_pb2.TestEmptyMessage()
2674 pos = second_proto._InternalParse(serialized, 0, truncation_point)
2676 self.assertEqual(truncation_point, pos)
2681 pos2 = unknown_fields._InternalParse(serialized, 0, truncation_point)
2682 self.assertEqual(truncation_point, pos2)
2684 self.fail(
'Parsing unknown fields failed when parsing known fields '
2689 serialized, 0, truncation_point)
2692 proto = more_messages_pb2.OutOfOrderFields()
2696 proto.optional_sint32 = 5
2697 proto.Extensions[more_messages_pb2.optional_uint64] = 4
2698 proto.optional_uint32 = 3
2699 proto.Extensions[more_messages_pb2.optional_int64] = 2
2700 proto.optional_int32 = 1
2701 serialized = proto.SerializeToString()
2702 self.assertEqual(proto.ByteSize(),
len(serialized))
2704 ReadTag = d.ReadFieldNumberAndWireType
2705 self.assertEqual((1, wire_format.WIRETYPE_VARINT),
ReadTag())
2706 self.assertEqual(1, d.ReadInt32())
2707 self.assertEqual((2, wire_format.WIRETYPE_VARINT),
ReadTag())
2708 self.assertEqual(2, d.ReadInt64())
2709 self.assertEqual((3, wire_format.WIRETYPE_VARINT),
ReadTag())
2710 self.assertEqual(3, d.ReadUInt32())
2711 self.assertEqual((4, wire_format.WIRETYPE_VARINT),
ReadTag())
2712 self.assertEqual(4, d.ReadUInt64())
2713 self.assertEqual((5, wire_format.WIRETYPE_VARINT),
ReadTag())
2714 self.assertEqual(5, d.ReadSInt32())
2718 proto = unittest_pb2.TestFieldOrderings()
2719 test_util.SetAllFieldsAndExtensions(proto)
2720 serialized = proto.SerializeToString()
2721 test_util.ExpectAllFieldsAndExtensionsInOrder(serialized)
2724 first_proto = unittest_pb2.TestAllTypes()
2725 first_proto.repeated_string.append(
'foobar')
2726 first_proto.optional_int32 = 23
2727 first_proto.optional_nested_message.bb = 42
2728 serialized = first_proto.SerializeToString()
2730 second_proto = unittest_pb2.TestAllTypes()
2731 second_proto.repeated_string.append(
'baz')
2732 second_proto.optional_int32 = 100
2733 second_proto.optional_nested_message.bb = 999
2735 bytes_parsed = second_proto.MergeFromString(serialized)
2736 self.assertEqual(
len(serialized), bytes_parsed)
2739 self.assertEqual([
'baz',
'foobar'], list(second_proto.repeated_string))
2741 self.assertEqual(23, second_proto.optional_int32)
2744 self.assertEqual(42, second_proto.optional_nested_message.bb)
2747 proto = message_set_extensions_pb2.TestMessageSet()
2748 extension_message1 = message_set_extensions_pb2.TestMessageSetExtension1
2749 extension_message2 = message_set_extensions_pb2.TestMessageSetExtension2
2750 extension1 = extension_message1.message_set_extension
2751 extension2 = extension_message2.message_set_extension
2752 extension3 = message_set_extensions_pb2.message_set_extension3
2753 proto.Extensions[extension1].i = 123
2754 proto.Extensions[extension2].str =
'foo'
2755 proto.Extensions[extension3].text =
'bar'
2759 serialized = proto.SerializeToString()
2761 raw = unittest_mset_pb2.RawMessageSet()
2762 self.assertEqual(
False,
2763 raw.DESCRIPTOR.GetOptions().message_set_wire_format)
2766 raw.MergeFromString(serialized))
2767 self.assertEqual(3,
len(raw.item))
2769 message1 = message_set_extensions_pb2.TestMessageSetExtension1()
2771 len(raw.item[0].message),
2772 message1.MergeFromString(raw.item[0].message))
2773 self.assertEqual(123, message1.i)
2775 message2 = message_set_extensions_pb2.TestMessageSetExtension2()
2777 len(raw.item[1].message),
2778 message2.MergeFromString(raw.item[1].message))
2779 self.assertEqual(
'foo', message2.str)
2781 message3 = message_set_extensions_pb2.TestMessageSetExtension3()
2783 len(raw.item[2].message),
2784 message3.MergeFromString(raw.item[2].message))
2785 self.assertEqual(
'bar', message3.text)
2788 proto2 = message_set_extensions_pb2.TestMessageSet()
2791 proto2.MergeFromString(serialized))
2792 self.assertEqual(123, proto2.Extensions[extension1].i)
2793 self.assertEqual(
'foo', proto2.Extensions[extension2].str)
2794 self.assertEqual(
'bar', proto2.Extensions[extension3].text)
2797 self.assertEqual(proto2.ByteSize(),
len(serialized))
2798 self.assertEqual(proto.ByteSize(),
len(serialized))
2803 raw = unittest_mset_pb2.RawMessageSet()
2806 item = raw.item.add()
2807 item.type_id = 98418603
2808 extension_message1 = message_set_extensions_pb2.TestMessageSetExtension1
2809 message1 = message_set_extensions_pb2.TestMessageSetExtension1()
2811 item.message = message1.SerializeToString()
2814 item = raw.item.add()
2815 item.type_id = 98418604
2816 extension_message1 = message_set_extensions_pb2.TestMessageSetExtension1
2817 message1 = message_set_extensions_pb2.TestMessageSetExtension1()
2819 item.message = message1.SerializeToString()
2822 item = raw.item.add()
2823 item.type_id = 98418605
2824 message1 = message_set_extensions_pb2.TestMessageSetExtension2()
2825 message1.str =
'foo'
2826 item.message = message1.SerializeToString()
2828 serialized = raw.SerializeToString()
2831 proto = message_set_extensions_pb2.TestMessageSet()
2834 proto.MergeFromString(serialized))
2837 extension_message1 = message_set_extensions_pb2.TestMessageSetExtension1
2838 extension1 = extension_message1.message_set_extension
2839 self.assertEqual(12345, proto.Extensions[extension1].i)
2842 proto = unittest_pb2.TestAllTypes()
2843 test_util.SetAllFields(proto)
2845 serialized = proto.SerializeToString()
2849 proto2 = unittest_pb2.TestEmptyMessage()
2854 proto2.MergeFromString(serialized))
2857 proto = unittest_pb2.TestAllTypes()
2858 proto.optional_int64 = 0x0fffffffffffffff
2859 serialized = proto.SerializeToString()
2862 proto2 = unittest_pb2.TestEmptyMessage()
2866 proto2.MergeFromString(serialized))
2869 """This method checks if the exception type and message are as expected."""
2872 except exc_class
as ex:
2874 self.assertEqual(exception,
str(ex))
2877 raise self.failureException(
'%s not raised' %
str(exc_class))
2880 proto = unittest_pb2.TestRequired()
2883 proto.SerializeToString,
2884 'Message protobuf_unittest.TestRequired is missing required fields: '
2887 partial = proto.SerializePartialToString()
2889 proto2 = unittest_pb2.TestRequired()
2890 self.assertFalse(proto2.HasField(
'a'))
2892 proto2.ParseFromString(partial)
2893 self.assertFalse(proto2.HasField(
'a'))
2898 proto.SerializeToString,
2899 'Message protobuf_unittest.TestRequired is missing required fields: b,c')
2901 partial = proto.SerializePartialToString()
2906 proto.SerializeToString,
2907 'Message protobuf_unittest.TestRequired is missing required fields: c')
2909 partial = proto.SerializePartialToString()
2912 serialized = proto.SerializeToString()
2914 partial = proto.SerializePartialToString()
2916 proto2 = unittest_pb2.TestRequired()
2919 proto2.MergeFromString(serialized))
2920 self.assertEqual(1, proto2.a)
2921 self.assertEqual(2, proto2.b)
2922 self.assertEqual(3, proto2.c)
2925 proto2.MergeFromString(partial))
2926 self.assertEqual(1, proto2.a)
2927 self.assertEqual(2, proto2.b)
2928 self.assertEqual(3, proto2.c)
2931 proto = unittest_pb2.TestRequiredForeign()
2934 proto.SerializeToString()
2936 proto.optional_message.a = 1
2939 proto.SerializeToString,
2940 'Message protobuf_unittest.TestRequiredForeign '
2941 'is missing required fields: '
2942 'optional_message.b,optional_message.c')
2944 proto.optional_message.b = 2
2945 proto.optional_message.c = 3
2946 proto.SerializeToString()
2948 proto.repeated_message.add().a = 1
2949 proto.repeated_message.add().b = 2
2952 proto.SerializeToString,
2953 'Message protobuf_unittest.TestRequiredForeign is missing required fields: '
2954 'repeated_message[0].b,repeated_message[0].c,'
2955 'repeated_message[1].a,repeated_message[1].c')
2957 proto.repeated_message[0].b = 2
2958 proto.repeated_message[0].c = 3
2959 proto.repeated_message[1].a = 1
2960 proto.repeated_message[1].c = 3
2961 proto.SerializeToString()
2964 first_proto = unittest_pb2.TestPackedTypes()
2965 second_proto = unittest_pb2.TestPackedTypes()
2966 test_util.SetAllPackedFields(first_proto)
2967 serialized = first_proto.SerializeToString()
2968 self.assertEqual(first_proto.ByteSize(),
len(serialized))
2969 bytes_read = second_proto.MergeFromString(serialized)
2970 self.assertEqual(second_proto.ByteSize(), bytes_read)
2971 self.assertEqual(first_proto, second_proto)
2974 first_proto = unittest_pb2.TestPackedExtensions()
2975 second_proto = unittest_pb2.TestPackedExtensions()
2976 test_util.SetAllPackedExtensions(first_proto)
2977 serialized = first_proto.SerializeToString()
2978 bytes_read = second_proto.MergeFromString(serialized)
2979 self.assertEqual(second_proto.ByteSize(), bytes_read)
2980 self.assertEqual(first_proto, second_proto)
2983 first_proto = unittest_pb2.TestPackedTypes()
2984 first_proto.packed_int32.extend([1, 2])
2985 first_proto.packed_double.append(3.0)
2986 serialized = first_proto.SerializeToString()
2988 second_proto = unittest_pb2.TestPackedTypes()
2989 second_proto.packed_int32.append(3)
2990 second_proto.packed_double.extend([1.0, 2.0])
2991 second_proto.packed_sint32.append(4)
2995 second_proto.MergeFromString(serialized))
2996 self.assertEqual([3, 1, 2], second_proto.packed_int32)
2997 self.assertEqual([1.0, 2.0, 3.0], second_proto.packed_double)
2998 self.assertEqual([4], second_proto.packed_sint32)
3001 proto = unittest_pb2.TestPackedTypes()
3002 proto.packed_int32.extend([1, 2, 150, 3])
3003 proto.packed_double.extend([1.0, 1000.0])
3004 proto.packed_float.append(2.0)
3005 serialized = proto.SerializeToString()
3006 self.assertEqual(proto.ByteSize(),
len(serialized))
3008 ReadTag = d.ReadFieldNumberAndWireType
3009 self.assertEqual((90, wire_format.WIRETYPE_LENGTH_DELIMITED),
ReadTag())
3010 self.assertEqual(1+1+1+2, d.ReadInt32())
3011 self.assertEqual(1, d.ReadInt32())
3012 self.assertEqual(2, d.ReadInt32())
3013 self.assertEqual(150, d.ReadInt32())
3014 self.assertEqual(3, d.ReadInt32())
3015 self.assertEqual((100, wire_format.WIRETYPE_LENGTH_DELIMITED),
ReadTag())
3016 self.assertEqual(4, d.ReadInt32())
3017 self.assertEqual(2.0, d.ReadFloat())
3018 self.assertEqual((101, wire_format.WIRETYPE_LENGTH_DELIMITED),
ReadTag())
3019 self.assertEqual(8+8, d.ReadInt32())
3020 self.assertEqual(1.0, d.ReadDouble())
3021 self.assertEqual(1000.0, d.ReadDouble())
3022 self.assertTrue(d.EndOfStream())
3025 unpacked = unittest_pb2.TestUnpackedTypes()
3026 test_util.SetAllUnpackedFields(unpacked)
3027 packed = unittest_pb2.TestPackedTypes()
3028 serialized = unpacked.SerializeToString()
3031 packed.MergeFromString(serialized))
3032 expected = unittest_pb2.TestPackedTypes()
3033 test_util.SetAllPackedFields(expected)
3034 self.assertEqual(expected, packed)
3037 packed = unittest_pb2.TestPackedTypes()
3038 test_util.SetAllPackedFields(packed)
3039 unpacked = unittest_pb2.TestUnpackedTypes()
3040 serialized = packed.SerializeToString()
3043 unpacked.MergeFromString(serialized))
3044 expected = unittest_pb2.TestUnpackedTypes()
3045 test_util.SetAllUnpackedFields(expected)
3046 self.assertEqual(expected, unpacked)
3049 proto = unittest_pb2.TestAllTypes()
3050 self.assertEqual(unittest_pb2.TestAllTypes.NestedMessage.BB_FIELD_NUMBER, 1)
3051 self.assertEqual(unittest_pb2.TestAllTypes.OPTIONAL_INT32_FIELD_NUMBER, 1)
3052 self.assertEqual(unittest_pb2.TestAllTypes.OPTIONALGROUP_FIELD_NUMBER, 16)
3054 unittest_pb2.TestAllTypes.OPTIONAL_NESTED_MESSAGE_FIELD_NUMBER, 18)
3056 unittest_pb2.TestAllTypes.OPTIONAL_NESTED_ENUM_FIELD_NUMBER, 21)
3057 self.assertEqual(unittest_pb2.TestAllTypes.REPEATED_INT32_FIELD_NUMBER, 31)
3058 self.assertEqual(unittest_pb2.TestAllTypes.REPEATEDGROUP_FIELD_NUMBER, 46)
3060 unittest_pb2.TestAllTypes.REPEATED_NESTED_MESSAGE_FIELD_NUMBER, 48)
3062 unittest_pb2.TestAllTypes.REPEATED_NESTED_ENUM_FIELD_NUMBER, 51)
3065 self.assertEqual(unittest_pb2.TestRequired.single.number, 1000)
3066 self.assertEqual(unittest_pb2.TestRequired.SINGLE_FIELD_NUMBER, 1000)
3067 self.assertEqual(unittest_pb2.TestRequired.multi.number, 1001)
3068 self.assertEqual(unittest_pb2.TestRequired.MULTI_FIELD_NUMBER, 1001)
3069 self.assertEqual(unittest_pb2.optional_int32_extension.number, 1)
3070 self.assertEqual(unittest_pb2.OPTIONAL_INT32_EXTENSION_FIELD_NUMBER, 1)
3071 self.assertEqual(unittest_pb2.optionalgroup_extension.number, 16)
3072 self.assertEqual(unittest_pb2.OPTIONALGROUP_EXTENSION_FIELD_NUMBER, 16)
3073 self.assertEqual(unittest_pb2.optional_nested_message_extension.number, 18)
3075 unittest_pb2.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 18)
3076 self.assertEqual(unittest_pb2.optional_nested_enum_extension.number, 21)
3077 self.assertEqual(unittest_pb2.OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBER,
3079 self.assertEqual(unittest_pb2.repeated_int32_extension.number, 31)
3080 self.assertEqual(unittest_pb2.REPEATED_INT32_EXTENSION_FIELD_NUMBER, 31)
3081 self.assertEqual(unittest_pb2.repeatedgroup_extension.number, 46)
3082 self.assertEqual(unittest_pb2.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46)
3083 self.assertEqual(unittest_pb2.repeated_nested_message_extension.number, 48)
3085 unittest_pb2.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48)
3086 self.assertEqual(unittest_pb2.repeated_nested_enum_extension.number, 51)
3087 self.assertEqual(unittest_pb2.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER,
3091 cls = unittest_pb2.TestAllTypes
3092 self.assertIs(cls.optional_int32.DESCRIPTOR,
3093 cls.DESCRIPTOR.fields_by_name[
'optional_int32'])
3094 self.assertEqual(cls.OPTIONAL_INT32_FIELD_NUMBER,
3095 cls.optional_int32.DESCRIPTOR.number)
3096 self.assertIs(cls.optional_nested_message.DESCRIPTOR,
3097 cls.DESCRIPTOR.fields_by_name[
'optional_nested_message'])
3098 self.assertEqual(cls.OPTIONAL_NESTED_MESSAGE_FIELD_NUMBER,
3099 cls.optional_nested_message.DESCRIPTOR.number)
3100 self.assertIs(cls.repeated_int32.DESCRIPTOR,
3101 cls.DESCRIPTOR.fields_by_name[
'repeated_int32'])
3102 self.assertEqual(cls.REPEATED_INT32_FIELD_NUMBER,
3103 cls.repeated_int32.DESCRIPTOR.number)
3106 msg = unittest_pb2.TestAllTypes()
3107 msg.optional_int32 = 42
3108 self.assertEqual(unittest_pb2.TestAllTypes.optional_int32.__get__(msg), 42)
3109 unittest_pb2.TestAllTypes.optional_int32.__set__(msg, 25)
3110 self.assertEqual(msg.optional_int32, 25)
3111 with self.assertRaises(AttributeError):
3112 del msg.optional_int32
3114 unittest_pb2.ForeignMessage.c.__get__(msg)
3123 proto = unittest_pb2.TestAllTypes(
3125 optional_string=
'foo',
3127 optional_bytes=b
'bar',
3128 optional_nested_message=unittest_pb2.TestAllTypes.NestedMessage(bb=1),
3129 optional_foreign_message=unittest_pb2.ForeignMessage(c=1),
3130 optional_nested_enum=unittest_pb2.TestAllTypes.FOO,
3131 optional_foreign_enum=unittest_pb2.FOREIGN_FOO,
3132 repeated_int32=[1, 2, 3])
3133 self.assertTrue(proto.IsInitialized())
3134 self.assertTrue(proto.HasField(
'optional_int32'))
3135 self.assertTrue(proto.HasField(
'optional_string'))
3136 self.assertTrue(proto.HasField(
'optional_bool'))
3137 self.assertTrue(proto.HasField(
'optional_bytes'))
3138 self.assertTrue(proto.HasField(
'optional_nested_message'))
3139 self.assertTrue(proto.HasField(
'optional_foreign_message'))
3140 self.assertTrue(proto.HasField(
'optional_nested_enum'))
3141 self.assertTrue(proto.HasField(
'optional_foreign_enum'))
3142 self.assertEqual(1, proto.optional_int32)
3143 self.assertEqual(
'foo', proto.optional_string)
3144 self.assertEqual(
True, proto.optional_bool)
3145 self.assertEqual(b
'bar', proto.optional_bytes)
3146 self.assertEqual(1, proto.optional_nested_message.bb)
3147 self.assertEqual(1, proto.optional_foreign_message.c)
3148 self.assertEqual(unittest_pb2.TestAllTypes.FOO,
3149 proto.optional_nested_enum)
3150 self.assertEqual(unittest_pb2.FOREIGN_FOO, proto.optional_foreign_enum)
3151 self.assertEqual([1, 2, 3], proto.repeated_int32)
3154 def InitalizeEmptyMessageWithExtraKeywordArg():
3155 unused_proto = unittest_pb2.TestEmptyMessage(unknown=
'unknown')
3158 InitalizeEmptyMessageWithExtraKeywordArg,
3159 'Protocol message TestEmptyMessage has no "unknown" field.')
3162 proto = unittest_pb2.TestRequired(a=1, b=1, c=1)
3163 self.assertTrue(proto.IsInitialized())
3164 self.assertTrue(proto.HasField(
'a'))
3165 self.assertTrue(proto.HasField(
'b'))
3166 self.assertTrue(proto.HasField(
'c'))
3167 self.assertFalse(proto.HasField(
'dummy2'))
3168 self.assertEqual(1, proto.a)
3169 self.assertEqual(1, proto.b)
3170 self.assertEqual(1, proto.c)
3173 proto = unittest_pb2.TestRequiredForeign(
3174 optional_message=unittest_pb2.TestRequired(a=1, b=1, c=1))
3175 self.assertTrue(proto.IsInitialized())
3176 self.assertTrue(proto.HasField(
'optional_message'))
3177 self.assertTrue(proto.optional_message.IsInitialized())
3178 self.assertTrue(proto.optional_message.HasField(
'a'))
3179 self.assertTrue(proto.optional_message.HasField(
'b'))
3180 self.assertTrue(proto.optional_message.HasField(
'c'))
3181 self.assertFalse(proto.optional_message.HasField(
'dummy2'))
3182 self.assertEqual(unittest_pb2.TestRequired(a=1, b=1, c=1),
3183 proto.optional_message)
3184 self.assertEqual(1, proto.optional_message.a)
3185 self.assertEqual(1, proto.optional_message.b)
3186 self.assertEqual(1, proto.optional_message.c)
3189 proto = unittest_pb2.TestAllTypes(repeated_int32=[1, 2, 3])
3190 self.assertTrue(proto.IsInitialized())
3191 self.assertEqual(1, proto.repeated_int32[0])
3192 self.assertEqual(2, proto.repeated_int32[1])
3193 self.assertEqual(3, proto.repeated_int32[2])
3196 @testing_refleaks.TestCase
3200 proto = message_set_extensions_pb2.TestMessageSet()
3201 self.assertEqual(
True,
3202 proto.DESCRIPTOR.GetOptions().message_set_wire_format)
3203 proto = unittest_pb2.TestAllTypes()
3204 self.assertEqual(
False,
3205 proto.DESCRIPTOR.GetOptions().message_set_wire_format)
3208 proto = unittest_pb2.TestAllTypes()
3209 proto.optional_int32 = 1
3210 proto.optional_double = 3.0
3211 for field_descriptor, _
in proto.ListFields():
3212 self.assertEqual(
False, field_descriptor.GetOptions().packed)
3214 proto = unittest_pb2.TestPackedTypes()
3215 proto.packed_int32.append(1)
3216 proto.packed_double.append(3.0)
3217 for field_descriptor, _
in proto.ListFields():
3218 self.assertEqual(
True, field_descriptor.GetOptions().packed)
3219 self.assertEqual(descriptor.FieldDescriptor.LABEL_REPEATED,
3220 field_descriptor.label)
3224 @testing_refleaks.TestCase
3228 api_implementation.Type() ==
'cpp' and api_implementation.Version() == 2,
3229 'C++ implementation requires a call to MakeDescriptor()')
3230 @testing_refleaks.SkipReferenceLeakChecker(
'MakeClass is not repeatable')
3233 'leaf',
'package.parent.child.leaf',
'',
3234 containing_type=
None, fields=[],
3235 nested_types=[], enum_types=[],
3238 create_key=descriptor._internal_create_key)
3240 'child',
'package.parent.child',
'',
3241 containing_type=
None, fields=[],
3242 nested_types=[leaf_desc], enum_types=[],
3245 create_key=descriptor._internal_create_key)
3247 'sibling',
'package.parent.sibling',
3248 '', containing_type=
None, fields=[],
3249 nested_types=[], enum_types=[],
3252 create_key=descriptor._internal_create_key)
3254 'parent',
'package.parent',
'',
3255 containing_type=
None, fields=[],
3256 nested_types=[child_desc, sibling_desc],
3257 enum_types=[], extensions=[],
3259 create_key=descriptor._internal_create_key)
3260 reflection.MakeClass(parent_desc)
3263 """Get a serialized representation of a test FileDescriptorProto.
3266 name: All calls to this must use a unique message name, to avoid
3267 collisions in the cpp descriptor pool.
3269 A string containing the serialized form of a test FileDescriptorProto.
3271 file_descriptor_str = (
3273 ' name: "' + name +
'"'
3277 ' label: LABEL_REPEATED'
3278 ' type: TYPE_UINT32'
3283 ' label: LABEL_OPTIONAL'
3284 ' type: TYPE_MESSAGE'
3292 ' label: LABEL_OPTIONAL'
3293 ' type: TYPE_MESSAGE'
3299 ' name: "deep_enum"'
3308 ' label: LABEL_OPTIONAL'
3309 ' type: TYPE_UINT32'
3314 file_descriptor = descriptor_pb2.FileDescriptorProto()
3315 text_format.Merge(file_descriptor_str, file_descriptor)
3316 return file_descriptor.SerializeToString()
3318 @testing_refleaks.SkipReferenceLeakChecker(
'MakeDescriptor is not repeatable')
3322 """Test that the generated class can parse a flat message."""
3328 if api_implementation.Type() !=
'python':
3330 file_descriptor = descriptor_pb2.FileDescriptorProto()
3332 msg_descriptor = descriptor.MakeDescriptor(
3333 file_descriptor.message_type[0])
3337 DESCRIPTOR = msg_descriptor
3338 msg = MessageClass()
3343 text_format.Merge(msg_str, msg)
3344 self.assertEqual(msg.flat, [0, 1, 2])
3346 @testing_refleaks.SkipReferenceLeakChecker(
'MakeDescriptor is not repeatable')
3348 """Test that the generated class can parse a flat message."""
3349 file_descriptor = descriptor_pb2.FileDescriptorProto()
3351 msg_descriptor = descriptor.MakeDescriptor(
3352 file_descriptor.message_type[0])
3353 msg_class = reflection.MakeClass(msg_descriptor)
3359 text_format.Merge(msg_str, msg)
3360 self.assertEqual(msg.flat, [0, 1, 2])
3362 @testing_refleaks.SkipReferenceLeakChecker(
'MakeDescriptor is not repeatable')
3364 """Test that the generated class can parse a nested message."""
3365 file_descriptor = descriptor_pb2.FileDescriptorProto()
3367 msg_descriptor = descriptor.MakeDescriptor(
3368 file_descriptor.message_type[0])
3369 msg_class = reflection.MakeClass(msg_descriptor)
3377 text_format.Merge(msg_str, msg)
3378 self.assertEqual(msg.bar.baz.deep, 4)
3380 if __name__ ==
'__main__':