32 """Tests python protocol buffers against the golden message.
34 Note that the golden messages exercise every known field type, thus this
35 test ends up exercising and verifying nearly all of the parsing and
36 serialization code in the whole library.
38 TODO(kenton): Merge with wire_format_test? It doesn't make a whole lot of
39 sense to call this a test of the "message" module, which only declares an
43 __author__ =
'gps@google.com (Gregory P. Smith)'
55 cmp =
lambda x, y: (x > y) - (x < y)
75 UCS2_MAXUNICODE = 65535
78 warnings.simplefilter(
'error', DeprecationWarning)
81 @_parameterized.named_parameters(
82 (
'_proto2', unittest_pb2),
83 (
'_proto3', unittest_proto3_arena_pb2))
84 @testing_refleaks.TestCase
85 class MessageTest(unittest.TestCase):
88 if api_implementation.Type() !=
'python':
89 self.skipTest(
"Skipping testBadUtf8String, currently only the python "
90 "api implementation raises UnicodeDecodeError when a "
91 "string field contains bad utf-8.")
92 bad_utf8_data = test_util.GoldenFileData(
'bad_utf8_string')
93 with self.assertRaises(UnicodeDecodeError)
as context:
94 message_module.TestAllTypes.FromString(bad_utf8_data)
95 self.assertIn(
'TestAllTypes.optional_string',
str(context.exception))
101 if message_module
is unittest_pb2:
102 golden_data = test_util.GoldenFileData(
103 'golden_message_oneof_implemented')
105 golden_data = test_util.GoldenFileData(
'golden_message_proto3')
107 golden_message = message_module.TestAllTypes()
108 golden_message.ParseFromString(golden_data)
109 if message_module
is unittest_pb2:
110 test_util.ExpectAllFieldsSet(self, golden_message)
111 self.assertEqual(golden_data, golden_message.SerializeToString())
112 golden_copy = copy.deepcopy(golden_message)
113 self.assertEqual(golden_data, golden_copy.SerializeToString())
116 golden_data = test_util.GoldenFileData(
'golden_packed_fields_message')
117 golden_message = message_module.TestPackedTypes()
118 parsed_bytes = golden_message.ParseFromString(golden_data)
119 all_set = message_module.TestPackedTypes()
120 test_util.SetAllPackedFields(all_set)
121 self.assertEqual(parsed_bytes,
len(golden_data))
122 self.assertEqual(all_set, golden_message)
123 self.assertEqual(golden_data, all_set.SerializeToString())
124 golden_copy = copy.deepcopy(golden_message)
125 self.assertEqual(golden_data, golden_copy.SerializeToString())
128 msg = message_module.TestAllTypes()
129 self.assertRaises(TypeError, msg.FromString, 0)
130 self.assertRaises(Exception, msg.FromString,
'0')
133 end_tag = encoder.TagBytes(1, 4)
134 if api_implementation.Type() ==
'python':
136 msg.FromString(end_tag)
137 self.assertEqual(
'Unexpected end-group tag.',
str(context.exception))
146 golden_data = (b
'\xe2\x02\nOne string'
147 b
'\xe2\x02\nTwo string'
148 b
'\xe2\x02\nRed string'
149 b
'\xe2\x02\x0bBlue string')
150 golden_message = message_module.TestAllTypes()
151 golden_message.repeated_string.extend([
157 self.assertEqual(golden_data,
158 golden_message.SerializeToString(deterministic=
None))
159 self.assertEqual(golden_data,
160 golden_message.SerializeToString(deterministic=
False))
161 self.assertEqual(golden_data,
162 golden_message.SerializeToString(deterministic=
True))
164 class BadArgError(Exception):
167 class BadArg(object):
169 def __nonzero__(self):
175 with self.assertRaises(BadArgError):
176 golden_message.SerializeToString(deterministic=BadArg())
179 golden_data = test_util.GoldenFileData(
'golden_message')
180 golden_message = message_module.TestAllTypes()
181 golden_message.ParseFromString(golden_data)
182 pickled_message = pickle.dumps(golden_message)
184 unpickled_message = pickle.loads(pickled_message)
185 self.assertEqual(unpickled_message, golden_message)
188 golden_message = message_module.TestPickleNestedMessage.NestedMessage(bb=1)
189 pickled_message = pickle.dumps(golden_message)
190 unpickled_message = pickle.loads(pickled_message)
191 self.assertEqual(unpickled_message, golden_message)
194 cls = message_module.TestPickleNestedMessage.NestedMessage
195 golden_message = cls.NestedNestedMessage(cc=1)
196 pickled_message = pickle.dumps(golden_message)
197 unpickled_message = pickle.loads(pickled_message)
198 self.assertEqual(unpickled_message, golden_message)
201 if message_module
is unittest_pb2:
202 golden_data = (b
'\x5D\x00\x00\x80\x7F'
203 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
204 b
'\xCD\x02\x00\x00\x80\x7F'
205 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\x7F')
207 golden_data = (b
'\x5D\x00\x00\x80\x7F'
208 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
209 b
'\xCA\x02\x04\x00\x00\x80\x7F'
210 b
'\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
212 golden_message = message_module.TestAllTypes()
213 golden_message.ParseFromString(golden_data)
214 self.assertEqual(golden_message.optional_float, math.inf)
215 self.assertEqual(golden_message.optional_double, math.inf)
216 self.assertEqual(golden_message.repeated_float[0], math.inf)
217 self.assertEqual(golden_message.repeated_double[0], math.inf)
218 self.assertEqual(golden_data, golden_message.SerializeToString())
221 if message_module
is unittest_pb2:
222 golden_data = (b
'\x5D\x00\x00\x80\xFF'
223 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
224 b
'\xCD\x02\x00\x00\x80\xFF'
225 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\xFF')
227 golden_data = (b
'\x5D\x00\x00\x80\xFF'
228 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
229 b
'\xCA\x02\x04\x00\x00\x80\xFF'
230 b
'\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
232 golden_message = message_module.TestAllTypes()
233 golden_message.ParseFromString(golden_data)
234 self.assertEqual(golden_message.optional_float, -math.inf)
235 self.assertEqual(golden_message.optional_double, -math.inf)
236 self.assertEqual(golden_message.repeated_float[0], -math.inf)
237 self.assertEqual(golden_message.repeated_double[0], -math.inf)
238 self.assertEqual(golden_data, golden_message.SerializeToString())
241 golden_data = (b
'\x5D\x00\x00\xC0\x7F'
242 b
'\x61\x00\x00\x00\x00\x00\x00\xF8\x7F'
243 b
'\xCD\x02\x00\x00\xC0\x7F'
244 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF8\x7F')
245 golden_message = message_module.TestAllTypes()
246 golden_message.ParseFromString(golden_data)
247 self.assertTrue(math.isnan(golden_message.optional_float))
248 self.assertTrue(math.isnan(golden_message.optional_double))
249 self.assertTrue(math.isnan(golden_message.repeated_float[0]))
250 self.assertTrue(math.isnan(golden_message.repeated_double[0]))
256 serialized = golden_message.SerializeToString()
257 message = message_module.TestAllTypes()
258 message.ParseFromString(serialized)
259 self.assertTrue(math.isnan(message.optional_float))
260 self.assertTrue(math.isnan(message.optional_double))
261 self.assertTrue(math.isnan(message.repeated_float[0]))
262 self.assertTrue(math.isnan(message.repeated_double[0]))
265 golden_data = (b
'\xA2\x06\x04\x00\x00\x80\x7F'
266 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
267 golden_message = message_module.TestPackedTypes()
268 golden_message.ParseFromString(golden_data)
269 self.assertEqual(golden_message.packed_float[0], math.inf)
270 self.assertEqual(golden_message.packed_double[0], math.inf)
271 self.assertEqual(golden_data, golden_message.SerializeToString())
274 golden_data = (b
'\xA2\x06\x04\x00\x00\x80\xFF'
275 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
276 golden_message = message_module.TestPackedTypes()
277 golden_message.ParseFromString(golden_data)
278 self.assertEqual(golden_message.packed_float[0], -math.inf)
279 self.assertEqual(golden_message.packed_double[0], -math.inf)
280 self.assertEqual(golden_data, golden_message.SerializeToString())
283 golden_data = (b
'\xA2\x06\x04\x00\x00\xC0\x7F'
284 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF8\x7F')
285 golden_message = message_module.TestPackedTypes()
286 golden_message.ParseFromString(golden_data)
287 self.assertTrue(math.isnan(golden_message.packed_float[0]))
288 self.assertTrue(math.isnan(golden_message.packed_double[0]))
290 serialized = golden_message.SerializeToString()
291 message = message_module.TestPackedTypes()
292 message.ParseFromString(serialized)
293 self.assertTrue(math.isnan(message.packed_float[0]))
294 self.assertTrue(math.isnan(message.packed_double[0]))
297 message = message_module.TestAllTypes()
300 kMostPosExponentNoSigBits = math.pow(2, 127)
301 message.optional_float = kMostPosExponentNoSigBits
302 message.ParseFromString(message.SerializeToString())
303 self.assertTrue(message.optional_float == kMostPosExponentNoSigBits)
306 kMostPosExponentOneSigBit = 1.5 * math.pow(2, 127)
307 message.optional_float = kMostPosExponentOneSigBit
308 message.ParseFromString(message.SerializeToString())
309 self.assertTrue(message.optional_float == kMostPosExponentOneSigBit)
312 message.optional_float = -kMostPosExponentNoSigBits
313 message.ParseFromString(message.SerializeToString())
314 self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits)
316 message.optional_float = -kMostPosExponentOneSigBit
317 message.ParseFromString(message.SerializeToString())
318 self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit)
321 kMostNegExponentNoSigBits = math.pow(2, -127)
322 message.optional_float = kMostNegExponentNoSigBits
323 message.ParseFromString(message.SerializeToString())
324 self.assertTrue(message.optional_float == kMostNegExponentNoSigBits)
327 kMostNegExponentOneSigBit = 1.5 * math.pow(2, -127)
328 message.optional_float = kMostNegExponentOneSigBit
329 message.ParseFromString(message.SerializeToString())
330 self.assertTrue(message.optional_float == kMostNegExponentOneSigBit)
333 message.optional_float = -kMostNegExponentNoSigBits
334 message.ParseFromString(message.SerializeToString())
335 self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits)
337 message.optional_float = -kMostNegExponentOneSigBit
338 message.ParseFromString(message.SerializeToString())
339 self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit)
342 max_float = float.fromhex(
'0x1.fffffep+127')
343 message.optional_float = max_float
344 self.assertAlmostEqual(message.optional_float, max_float)
345 serialized_data = message.SerializeToString()
346 message.ParseFromString(serialized_data)
347 self.assertAlmostEqual(message.optional_float, max_float)
350 message.optional_float = 3.4028235e+39
351 self.assertEqual(message.optional_float, float(
'inf'))
352 serialized_data = message.SerializeToString()
353 message.ParseFromString(serialized_data)
354 self.assertEqual(message.optional_float, float(
'inf'))
356 message.optional_float = -3.4028235e+39
357 self.assertEqual(message.optional_float, float(
'-inf'))
359 message.optional_float = 1.4028235e-39
360 self.assertAlmostEqual(message.optional_float, 1.4028235e-39)
363 message = message_module.TestAllTypes()
366 kMostPosExponentNoSigBits = math.pow(2, 1023)
367 message.optional_double = kMostPosExponentNoSigBits
368 message.ParseFromString(message.SerializeToString())
369 self.assertTrue(message.optional_double == kMostPosExponentNoSigBits)
372 kMostPosExponentOneSigBit = 1.5 * math.pow(2, 1023)
373 message.optional_double = kMostPosExponentOneSigBit
374 message.ParseFromString(message.SerializeToString())
375 self.assertTrue(message.optional_double == kMostPosExponentOneSigBit)
378 message.optional_double = -kMostPosExponentNoSigBits
379 message.ParseFromString(message.SerializeToString())
380 self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits)
382 message.optional_double = -kMostPosExponentOneSigBit
383 message.ParseFromString(message.SerializeToString())
384 self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit)
387 kMostNegExponentNoSigBits = math.pow(2, -1023)
388 message.optional_double = kMostNegExponentNoSigBits
389 message.ParseFromString(message.SerializeToString())
390 self.assertTrue(message.optional_double == kMostNegExponentNoSigBits)
393 kMostNegExponentOneSigBit = 1.5 * math.pow(2, -1023)
394 message.optional_double = kMostNegExponentOneSigBit
395 message.ParseFromString(message.SerializeToString())
396 self.assertTrue(message.optional_double == kMostNegExponentOneSigBit)
399 message.optional_double = -kMostNegExponentNoSigBits
400 message.ParseFromString(message.SerializeToString())
401 self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits)
403 message.optional_double = -kMostNegExponentOneSigBit
404 message.ParseFromString(message.SerializeToString())
405 self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit)
408 message = message_module.TestAllTypes()
409 message.optional_float = 2.0
410 self.assertEqual(
str(message),
'optional_float: 2.0\n')
413 msg = message_module.TestAllTypes()
414 msg.optional_float = 0.12345678912345678
415 old_float = msg.optional_float
416 msg.ParseFromString(msg.SerializeToString())
417 self.assertEqual(old_float, msg.optional_float)
420 msg = message_module.TestAllTypes()
421 msg.optional_double = 0.12345678912345678
422 self.assertEqual(
str(msg),
'optional_double: 0.12345678912345678\n')
425 populated = message_module.TestAllTypes()
426 test_util.SetAllNonLazyFields(populated)
427 empty = message_module.TestEmptyMessage()
428 empty.ParseFromString(populated.SerializeToString())
429 self.assertEqual(
str(empty),
'')
432 msg = message_module.TestAllTypes()
433 msg.repeated_nested_message.append(
434 message_module.TestAllTypes.NestedMessage(bb=1))
435 nested = message_module.TestAllTypes.NestedMessage(bb=2)
436 msg.repeated_nested_message.append(nested)
438 msg.repeated_nested_message.append(1)
441 self.assertEqual(2,
len(msg.repeated_nested_message))
442 self.assertEqual([1, 2],
443 [m.bb
for m
in msg.repeated_nested_message])
446 msg = message_module.TestAllTypes()
447 msg.repeated_nested_message.insert(
448 -1, message_module.TestAllTypes.NestedMessage(bb=1))
449 sub_msg = msg.repeated_nested_message[0]
450 msg.repeated_nested_message.insert(
451 0, message_module.TestAllTypes.NestedMessage(bb=2))
452 msg.repeated_nested_message.insert(
453 99, message_module.TestAllTypes.NestedMessage(bb=3))
454 msg.repeated_nested_message.insert(
455 -2, message_module.TestAllTypes.NestedMessage(bb=-1))
456 msg.repeated_nested_message.insert(
457 -1000, message_module.TestAllTypes.NestedMessage(bb=-1000))
459 msg.repeated_nested_message.insert(1, 999)
462 self.assertEqual(5,
len(msg.repeated_nested_message))
463 self.assertEqual([-1000, 2, -1, 1, 3],
464 [m.bb
for m
in msg.repeated_nested_message])
465 self.assertEqual(
str(msg),
466 'repeated_nested_message {\n'
469 'repeated_nested_message {\n'
472 'repeated_nested_message {\n'
475 'repeated_nested_message {\n'
478 'repeated_nested_message {\n'
481 self.assertEqual(sub_msg.bb, 1)
484 msg = message_module.TestAllTypes()
485 msg.repeated_int32.append(1)
486 msg.repeated_int32.append(3)
487 msg.repeated_nested_message.add(bb=1)
488 msg.repeated_nested_message.add(bb=2)
489 other_msg = message_module.TestAllTypes()
490 other_msg.repeated_nested_message.add(bb=3)
491 other_msg.repeated_nested_message.add(bb=4)
492 other_msg.repeated_int32.append(5)
493 other_msg.repeated_int32.append(7)
495 msg.repeated_int32.MergeFrom(other_msg.repeated_int32)
496 self.assertEqual(4,
len(msg.repeated_int32))
498 msg.repeated_nested_message.MergeFrom(other_msg.repeated_nested_message)
499 self.assertEqual([1, 2, 3, 4],
500 [m.bb
for m
in msg.repeated_nested_message])
503 msg = message_module.TestAllTypes()
505 msg.repeated_nested_message.add(
'wrong')
509 msg.repeated_nested_message.add(value_field=
'wrong')
512 self.assertEqual(
len(msg.repeated_nested_message), 0)
515 msg = message_module.TestAllTypes()
516 msg.repeated_int32.extend([1, 2, 3])
517 self.assertIn(2, msg.repeated_int32)
518 self.assertNotIn(0, msg.repeated_int32)
520 msg.repeated_nested_message.add(bb=1)
521 sub_msg1 = msg.repeated_nested_message[0]
522 sub_msg2 = message_module.TestAllTypes.NestedMessage(bb=2)
523 sub_msg3 = message_module.TestAllTypes.NestedMessage(bb=3)
524 msg.repeated_nested_message.append(sub_msg2)
525 msg.repeated_nested_message.insert(0, sub_msg3)
526 self.assertIn(sub_msg1, msg.repeated_nested_message)
527 self.assertIn(sub_msg2, msg.repeated_nested_message)
528 self.assertIn(sub_msg3, msg.repeated_nested_message)
531 msg = message_module.TestAllTypes()
532 msg.repeated_int32.extend([1, 2, 3])
534 for item
in msg.repeated_int32:
536 self.assertEqual(add, 6)
539 msg = message_module.TestAllTypes()
540 msg.repeated_nested_message.add(bb=1)
541 msg.repeated_nested_message.add(bb=2)
542 msg.repeated_nested_message.add(bb=3)
543 msg.repeated_nested_message.add(bb=4)
545 self.assertEqual([1, 2, 3, 4],
546 [m.bb
for m
in msg.repeated_nested_message])
547 self.assertEqual([4, 3, 2, 1],
548 [m.bb
for m
in reversed(msg.repeated_nested_message)])
549 self.assertEqual([4, 3, 2, 1],
550 [m.bb
for m
in msg.repeated_nested_message[::-1]])
553 """Check some different types with the default comparator."""
554 message = message_module.TestAllTypes()
557 message.repeated_int32.append(1)
558 message.repeated_int32.append(3)
559 message.repeated_int32.append(2)
560 message.repeated_int32.sort()
561 self.assertEqual(message.repeated_int32[0], 1)
562 self.assertEqual(message.repeated_int32[1], 2)
563 self.assertEqual(message.repeated_int32[2], 3)
564 self.assertEqual(
str(message.repeated_int32),
str([1, 2, 3]))
566 message.repeated_float.append(1.1)
567 message.repeated_float.append(1.3)
568 message.repeated_float.append(1.2)
569 message.repeated_float.sort()
570 self.assertAlmostEqual(message.repeated_float[0], 1.1)
571 self.assertAlmostEqual(message.repeated_float[1], 1.2)
572 self.assertAlmostEqual(message.repeated_float[2], 1.3)
574 message.repeated_string.append(
'a')
575 message.repeated_string.append(
'c')
576 message.repeated_string.append(
'b')
577 message.repeated_string.sort()
578 self.assertEqual(message.repeated_string[0],
'a')
579 self.assertEqual(message.repeated_string[1],
'b')
580 self.assertEqual(message.repeated_string[2],
'c')
581 self.assertEqual(
str(message.repeated_string),
str([
u'a',
u'b',
u'c']))
583 message.repeated_bytes.append(b
'a')
584 message.repeated_bytes.append(b
'c')
585 message.repeated_bytes.append(b
'b')
586 message.repeated_bytes.sort()
587 self.assertEqual(message.repeated_bytes[0], b
'a')
588 self.assertEqual(message.repeated_bytes[1], b
'b')
589 self.assertEqual(message.repeated_bytes[2], b
'c')
590 self.assertEqual(
str(message.repeated_bytes),
str([b
'a', b
'b', b
'c']))
593 """Check some different types with custom comparator."""
594 message = message_module.TestAllTypes()
596 message.repeated_int32.append(-3)
597 message.repeated_int32.append(-2)
598 message.repeated_int32.append(-1)
599 message.repeated_int32.sort(key=abs)
600 self.assertEqual(message.repeated_int32[0], -1)
601 self.assertEqual(message.repeated_int32[1], -2)
602 self.assertEqual(message.repeated_int32[2], -3)
604 message.repeated_string.append(
'aaa')
605 message.repeated_string.append(
'bb')
606 message.repeated_string.append(
'c')
607 message.repeated_string.sort(key=len)
608 self.assertEqual(message.repeated_string[0],
'c')
609 self.assertEqual(message.repeated_string[1],
'bb')
610 self.assertEqual(message.repeated_string[2],
'aaa')
613 """Check passing a custom comparator to sort a repeated composite field."""
614 message = message_module.TestAllTypes()
616 message.repeated_nested_message.add().bb = 1
617 message.repeated_nested_message.add().bb = 3
618 message.repeated_nested_message.add().bb = 2
619 message.repeated_nested_message.add().bb = 6
620 message.repeated_nested_message.add().bb = 5
621 message.repeated_nested_message.add().bb = 4
622 message.repeated_nested_message.sort(key=operator.attrgetter(
'bb'))
623 self.assertEqual(message.repeated_nested_message[0].bb, 1)
624 self.assertEqual(message.repeated_nested_message[1].bb, 2)
625 self.assertEqual(message.repeated_nested_message[2].bb, 3)
626 self.assertEqual(message.repeated_nested_message[3].bb, 4)
627 self.assertEqual(message.repeated_nested_message[4].bb, 5)
628 self.assertEqual(message.repeated_nested_message[5].bb, 6)
629 self.assertEqual(
str(message.repeated_nested_message),
630 '[bb: 1\n, bb: 2\n, bb: 3\n, bb: 4\n, bb: 5\n, bb: 6\n]')
633 """Check passing a custom comparator to sort a repeated composite field."""
634 message = message_module.TestAllTypes()
636 message.repeated_nested_message.add().bb = 21
637 message.repeated_nested_message.add().bb = 20
638 message.repeated_nested_message.add().bb = 13
639 message.repeated_nested_message.add().bb = 33
640 message.repeated_nested_message.add().bb = 11
641 message.repeated_nested_message.add().bb = 24
642 message.repeated_nested_message.add().bb = 10
643 message.repeated_nested_message.sort(key=
lambda z: z.bb // 10)
645 [13, 11, 10, 21, 20, 24, 33],
646 [n.bb
for n
in message.repeated_nested_message])
650 pb = message.SerializeToString()
652 message.MergeFromString(pb)
654 [13, 11, 10, 21, 20, 24, 33],
655 [n.bb
for n
in message.repeated_nested_message])
658 """Check sorting a repeated composite field using list.sort() arguments."""
659 message = message_module.TestAllTypes()
661 get_bb = operator.attrgetter(
'bb')
662 message.repeated_nested_message.add().bb = 1
663 message.repeated_nested_message.add().bb = 3
664 message.repeated_nested_message.add().bb = 2
665 message.repeated_nested_message.add().bb = 6
666 message.repeated_nested_message.add().bb = 5
667 message.repeated_nested_message.add().bb = 4
668 message.repeated_nested_message.sort(key=get_bb)
669 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
671 message.repeated_nested_message.sort(key=get_bb, reverse=
True)
672 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
676 """Check sorting a scalar field using list.sort() arguments."""
677 message = message_module.TestAllTypes()
679 message.repeated_int32.append(-3)
680 message.repeated_int32.append(-2)
681 message.repeated_int32.append(-1)
682 message.repeated_int32.sort(key=abs)
683 self.assertEqual(list(message.repeated_int32), [-1, -2, -3])
684 message.repeated_int32.sort(key=abs, reverse=
True)
685 self.assertEqual(list(message.repeated_int32), [-3, -2, -1])
687 message.repeated_string.append(
'aaa')
688 message.repeated_string.append(
'bb')
689 message.repeated_string.append(
'c')
690 message.repeated_string.sort(key=len)
691 self.assertEqual(list(message.repeated_string), [
'c',
'bb',
'aaa'])
692 message.repeated_string.sort(key=len, reverse=
True)
693 self.assertEqual(list(message.repeated_string), [
'aaa',
'bb',
'c'])
696 m1 = message_module.TestAllTypes()
697 m2 = message_module.TestAllTypes()
698 m1.repeated_int32.append(0)
699 m1.repeated_int32.append(1)
700 m1.repeated_int32.append(2)
701 m2.repeated_int32.append(0)
702 m2.repeated_int32.append(1)
703 m2.repeated_int32.append(2)
704 m1.repeated_nested_message.add().bb = 1
705 m1.repeated_nested_message.add().bb = 2
706 m1.repeated_nested_message.add().bb = 3
707 m2.repeated_nested_message.add().bb = 1
708 m2.repeated_nested_message.add().bb = 2
709 m2.repeated_nested_message.add().bb = 3
712 m = message_module.TestAllTypes()
713 self.assertIsInstance(m.repeated_int32, collections.abc.MutableSequence)
714 self.assertIsInstance(m.repeated_nested_message,
715 collections.abc.MutableSequence)
718 m = message_module.TestAllTypes()
719 with self.assertRaises(TypeError):
720 hash(m.repeated_int32)
721 with self.assertRaises(TypeError):
722 hash(m.repeated_nested_message)
725 m = message_module.NestedTestAllTypes()
726 m.payload.repeated_int32.extend([])
727 self.assertTrue(m.HasField(
'payload'))
730 m1 = message_module.TestAllTypes()
731 m2 = message_module.TestAllTypes()
733 nested = m1.optional_nested_message
734 self.assertEqual(0, nested.bb)
735 m2.optional_nested_message.bb = 1
739 self.assertEqual(1, nested.bb)
742 msg1 = message_module.NestedTestAllTypes()
743 msg2 = message_module.NestedTestAllTypes()
744 nested = msg1.child.payload.optional_nested_message
745 self.assertEqual(0, nested.bb)
746 msg2.child.payload.optional_nested_message.bb = 1
748 self.assertEqual(1, nested.bb)
751 self.assertEqual(msg1.payload.repeated_nested_message,
752 msg1.payload.repeated_nested_message)
753 nested = msg2.payload.repeated_nested_message.add()
756 self.assertEqual(1,
len(msg1.payload.repeated_nested_message))
757 self.assertEqual(1, nested.bb)
760 m1 = message_module.TestAllTypes()
761 m2 = message_module.TestAllTypes()
763 self.assertEqual(0, m1.optional_nested_message.bb)
764 m2.optional_nested_message.bb = 1
767 m1.MergeFromString(m2.SerializeToString())
768 self.assertEqual(1, m1.optional_nested_message.bb)
771 m2 = message_module.TestAllTypes()
772 m2.optional_string =
'scalar string'
773 m2.repeated_string.append(
'repeated string')
774 m2.optional_bytes = b
'scalar bytes'
775 m2.repeated_bytes.append(b
'repeated bytes')
777 serialized = m2.SerializeToString()
778 memview = memoryview(serialized)
779 m1 = message_module.TestAllTypes.FromString(memview)
781 self.assertEqual(m1.optional_bytes, b
'scalar bytes')
782 self.assertEqual(m1.repeated_bytes, [b
'repeated bytes'])
783 self.assertEqual(m1.optional_string,
'scalar string')
784 self.assertEqual(m1.repeated_string, [
'repeated string'])
787 self.assertIsInstance(m1.optional_bytes, bytes)
788 self.assertIsInstance(m1.repeated_bytes[0], bytes)
789 self.assertIsInstance(m1.optional_string, str)
790 self.assertIsInstance(m1.repeated_string[0], str)
793 m1 = message_module.TestAllTypes()
795 self.assertEqual(0, m1.optional_nested_message.bb)
796 self.assertFalse(m1.HasField(
'optional_nested_message'))
798 m1.MergeFromString(b
'')
799 self.assertFalse(m1.HasField(
'optional_nested_message'))
802 """Make sure that a nested message object exists.
804 As soon as a nested message attribute is accessed, it will be present in the
805 _fields dict, without being marked as actually being set.
807 getattr(msg, attribute)
808 self.assertFalse(msg.HasField(attribute))
811 m = message_module.TestAllTypes()
812 self.assertRaises(ValueError, m.WhichOneof,
'no_such_oneof_field')
813 self.assertRaises(Exception, m.WhichOneof, 0)
816 m = message_module.TestAllTypes()
817 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
818 self.assertFalse(m.HasField(
'oneof_field'))
819 self.assertFalse(m.HasField(
'oneof_uint32'))
823 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
824 self.assertTrue(m.HasField(
'oneof_field'))
825 self.assertTrue(m.HasField(
'oneof_uint32'))
826 self.assertFalse(m.HasField(
'oneof_string'))
829 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
830 self.assertTrue(m.HasField(
'oneof_string'))
831 self.assertFalse(m.HasField(
'oneof_uint32'))
834 m = message_module.TestAllTypes()
835 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
838 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
839 self.assertTrue(m.HasField(
'oneof_uint32'))
841 m.oneof_string =
u'foo'
842 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
843 self.assertFalse(m.HasField(
'oneof_uint32'))
844 self.assertTrue(m.HasField(
'oneof_string'))
847 m.oneof_nested_message
848 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
849 self.assertTrue(m.HasField(
'oneof_string'))
850 self.assertFalse(m.HasField(
'oneof_nested_message'))
853 m.oneof_nested_message.bb
854 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
855 self.assertTrue(m.HasField(
'oneof_string'))
856 self.assertFalse(m.HasField(
'oneof_nested_message'))
858 m.oneof_nested_message.bb = 11
859 self.assertEqual(
'oneof_nested_message', m.WhichOneof(
'oneof_field'))
860 self.assertFalse(m.HasField(
'oneof_string'))
861 self.assertTrue(m.HasField(
'oneof_nested_message'))
863 m.oneof_bytes = b
'bb'
864 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
865 self.assertFalse(m.HasField(
'oneof_nested_message'))
866 self.assertTrue(m.HasField(
'oneof_bytes'))
869 m = message_module.TestAllTypes()
873 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
874 self.assertEqual(11, m.oneof_uint32)
877 m = message_module.TestAllTypes()
878 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
879 if message_module
is unittest_pb2:
880 self.assertFalse(m.HasField(
'oneof_field'))
883 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
884 if message_module
is unittest_pb2:
885 self.assertTrue(m.HasField(
'oneof_field'))
887 m.oneof_bytes = b
'bb'
888 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
890 m.ClearField(
'oneof_bytes')
891 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
892 if message_module
is unittest_pb2:
893 self.assertFalse(m.HasField(
'oneof_field'))
896 m = message_module.TestAllTypes()
898 m.ClearField(
'oneof_field')
899 if message_module
is unittest_pb2:
900 self.assertFalse(m.HasField(
'oneof_field'))
901 self.assertFalse(m.HasField(
'oneof_uint32'))
902 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
905 m = message_module.TestAllTypes()
907 m.ClearField(
'oneof_uint32')
908 if message_module
is unittest_pb2:
909 self.assertFalse(m.HasField(
'oneof_field'))
910 self.assertFalse(m.HasField(
'oneof_uint32'))
911 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
914 m = message_module.TestAllTypes()
917 m.ClearField(
'oneof_nested_message')
918 self.assertEqual(11, m.oneof_uint32)
919 if message_module
is unittest_pb2:
920 self.assertTrue(m.HasField(
'oneof_field'))
921 self.assertTrue(m.HasField(
'oneof_uint32'))
922 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
925 m = message_module.TestAllTypes()
927 m2 = message_module.TestAllTypes()
928 m2.ParseFromString(m.SerializeToString())
929 self.assertEqual(
'oneof_uint32', m2.WhichOneof(
'oneof_field'))
932 m = message_module.TestAllTypes()
934 m2 = message_module.TestAllTypes()
936 self.assertEqual(
'oneof_uint32', m2.WhichOneof(
'oneof_field'))
939 m = message_module.NestedTestAllTypes()
940 m.payload.oneof_uint32 = 11
941 m2 = message_module.NestedTestAllTypes()
942 m2.payload.oneof_bytes = b
'bb'
943 m2.child.payload.oneof_bytes = b
'bb'
945 self.assertEqual(
'oneof_uint32', m2.payload.WhichOneof(
'oneof_field'))
946 self.assertEqual(
'oneof_bytes', m2.child.payload.WhichOneof(
'oneof_field'))
949 m = message_module.NestedTestAllTypes()
950 m.payload.oneof_nested_message.bb = 11
951 m.child.payload.oneof_nested_message.bb = 12
952 m2 = message_module.NestedTestAllTypes()
953 m2.payload.oneof_uint32 = 13
955 self.assertEqual(
'oneof_nested_message',
956 m2.payload.WhichOneof(
'oneof_field'))
957 self.assertEqual(
'oneof_nested_message',
958 m2.child.payload.WhichOneof(
'oneof_field'))
961 m = message_module.TestAllTypes(
962 oneof_nested_message=message_module.TestAllTypes.NestedMessage())
963 self.assertEqual(
'oneof_nested_message', m.WhichOneof(
'oneof_field'))
966 m = message_module.TestAllTypes()
969 self.assertIsNone(m.WhichOneof(
'oneof_field'))
970 m.oneof_bytes = b
'bb'
971 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
974 """Assigning a byte string to a string field should result
975 in the value being converted to a Unicode string."""
976 m = message_module.TestAllTypes()
977 m.optional_string =
str(
'')
978 self.assertIsInstance(m.optional_string, str)
981 """It should be possible to use int-valued indices in slices.
983 This didn't used to work in the v2 C++ implementation.
985 m = message_module.TestAllTypes()
988 m.repeated_int32.append(1)
989 sl = m.repeated_int32[
int(0):
int(
len(m.repeated_int32))]
990 self.assertEqual(
len(m.repeated_int32),
len(sl))
993 m.repeated_nested_message.add().bb = 3
994 sl = m.repeated_nested_message[
int(0):
int(
len(m.repeated_nested_message))]
995 self.assertEqual(
len(m.repeated_nested_message),
len(sl))
998 """This didn't use to work in the v2 C++ implementation."""
999 m = message_module.TestAllTypes()
1000 with self.assertRaises(NameError)
as _:
1001 m.repeated_int32.extend(a
for i
in range(10))
1002 with self.assertRaises(NameError)
as _:
1003 m.repeated_nested_enum.extend(
1004 a
for i
in range(10))
1006 FALSY_VALUES = [
None,
False, 0, 0.0, b
'',
u'', bytearray(), [], {},
set()]
1009 """Test no-ops extending repeated int32 fields."""
1010 m = message_module.TestAllTypes()
1011 self.assertSequenceEqual([], m.repeated_int32)
1014 for falsy_value
in MessageTest.FALSY_VALUES:
1015 m.repeated_int32.extend(falsy_value)
1016 self.assertSequenceEqual([], m.repeated_int32)
1018 m.repeated_int32.extend([])
1019 self.assertSequenceEqual([], m.repeated_int32)
1022 """Test no-ops extending repeated float fields."""
1023 m = message_module.TestAllTypes()
1024 self.assertSequenceEqual([], m.repeated_float)
1027 for falsy_value
in MessageTest.FALSY_VALUES:
1028 m.repeated_float.extend(falsy_value)
1029 self.assertSequenceEqual([], m.repeated_float)
1031 m.repeated_float.extend([])
1032 self.assertSequenceEqual([], m.repeated_float)
1035 """Test no-ops extending repeated string fields."""
1036 m = message_module.TestAllTypes()
1037 self.assertSequenceEqual([], m.repeated_string)
1040 for falsy_value
in MessageTest.FALSY_VALUES:
1041 m.repeated_string.extend(falsy_value)
1042 self.assertSequenceEqual([], m.repeated_string)
1044 m.repeated_string.extend([])
1045 self.assertSequenceEqual([], m.repeated_string)
1048 """Test extending repeated int32 fields with python lists."""
1049 m = message_module.TestAllTypes()
1050 self.assertSequenceEqual([], m.repeated_int32)
1051 m.repeated_int32.extend([0])
1052 self.assertSequenceEqual([0], m.repeated_int32)
1053 m.repeated_int32.extend([1, 2])
1054 self.assertSequenceEqual([0, 1, 2], m.repeated_int32)
1055 m.repeated_int32.extend([3, 4])
1056 self.assertSequenceEqual([0, 1, 2, 3, 4], m.repeated_int32)
1059 """Test extending repeated float fields with python lists."""
1060 m = message_module.TestAllTypes()
1061 self.assertSequenceEqual([], m.repeated_float)
1062 m.repeated_float.extend([0.0])
1063 self.assertSequenceEqual([0.0], m.repeated_float)
1064 m.repeated_float.extend([1.0, 2.0])
1065 self.assertSequenceEqual([0.0, 1.0, 2.0], m.repeated_float)
1066 m.repeated_float.extend([3.0, 4.0])
1067 self.assertSequenceEqual([0.0, 1.0, 2.0, 3.0, 4.0], m.repeated_float)
1070 """Test extending repeated string fields with python lists."""
1071 m = message_module.TestAllTypes()
1072 self.assertSequenceEqual([], m.repeated_string)
1073 m.repeated_string.extend([
''])
1074 self.assertSequenceEqual([
''], m.repeated_string)
1075 m.repeated_string.extend([
'11',
'22'])
1076 self.assertSequenceEqual([
'',
'11',
'22'], m.repeated_string)
1077 m.repeated_string.extend([
'33',
'44'])
1078 self.assertSequenceEqual([
'',
'11',
'22',
'33',
'44'], m.repeated_string)
1081 """Test extending repeated string fields with characters from a string."""
1082 m = message_module.TestAllTypes()
1083 self.assertSequenceEqual([], m.repeated_string)
1084 m.repeated_string.extend(
'abc')
1085 self.assertSequenceEqual([
'a',
'b',
'c'], m.repeated_string)
1088 """This iterable object mimics the behavior of numpy.array.
1090 __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1.
1095 self.
_list = values
or []
1102 return bool(self.
_list[0])
1103 raise ValueError(
'Truth value is ambiguous.')
1112 """Test extending repeated int32 fields with iterable."""
1113 m = message_module.TestAllTypes()
1114 self.assertSequenceEqual([], m.repeated_int32)
1116 self.assertSequenceEqual([], m.repeated_int32)
1118 self.assertSequenceEqual([0], m.repeated_int32)
1120 self.assertSequenceEqual([0, 1, 2], m.repeated_int32)
1122 self.assertSequenceEqual([0, 1, 2, 3, 4], m.repeated_int32)
1125 """Test extending repeated float fields with iterable."""
1126 m = message_module.TestAllTypes()
1127 self.assertSequenceEqual([], m.repeated_float)
1129 self.assertSequenceEqual([], m.repeated_float)
1131 self.assertSequenceEqual([0.0], m.repeated_float)
1133 self.assertSequenceEqual([0.0, 1.0, 2.0], m.repeated_float)
1135 self.assertSequenceEqual([0.0, 1.0, 2.0, 3.0, 4.0], m.repeated_float)
1138 """Test extending repeated string fields with iterable."""
1139 m = message_module.TestAllTypes()
1140 self.assertSequenceEqual([], m.repeated_string)
1142 self.assertSequenceEqual([], m.repeated_string)
1144 self.assertSequenceEqual([
''], m.repeated_string)
1146 self.assertSequenceEqual([
'',
'1',
'2'], m.repeated_string)
1148 self.assertSequenceEqual([
'',
'1',
'2',
'3',
'4'], m.repeated_string)
1157 if (api_implementation.Type() !=
'cpp' or
1158 api_implementation.Version() == 2):
1160 m = message_module.TestAllTypes()
1161 with self.assertRaises(pickle.PickleError)
as _:
1162 pickle.dumps(m.repeated_int32, pickle.HIGHEST_PROTOCOL)
1165 """Exercise a scenario that has led to segfaults in the past.
1167 m = message_module.TestAllTypes()
1168 m.repeated_nested_message.sort()
1171 """Using HasField on a repeated field should raise an exception.
1173 m = message_module.TestAllTypes()
1174 with self.assertRaises(ValueError)
as _:
1175 m.HasField(
'repeated_int32')
1178 m = message_module.TestAllTypes()
1179 with self.assertRaises(IndexError)
as _:
1180 m.repeated_int32.pop()
1181 m.repeated_int32.extend(
range(5))
1182 self.assertEqual(4, m.repeated_int32.pop())
1183 self.assertEqual(0, m.repeated_int32.pop(0))
1184 self.assertEqual(2, m.repeated_int32.pop(1))
1185 self.assertEqual([1, 3], m.repeated_int32)
1188 m = message_module.TestAllTypes()
1189 with self.assertRaises(IndexError)
as _:
1190 m.repeated_nested_message.pop()
1191 with self.assertRaises(TypeError)
as _:
1192 m.repeated_nested_message.pop(
'0')
1194 n = m.repeated_nested_message.add()
1196 self.assertEqual(4, m.repeated_nested_message.pop().bb)
1197 self.assertEqual(0, m.repeated_nested_message.pop(0).bb)
1198 self.assertEqual(2, m.repeated_nested_message.pop(1).bb)
1199 self.assertEqual([1, 3], [n.bb
for n
in m.repeated_nested_message])
1202 m = message_module.TestAllTypes()
1204 m.repeated_int32.insert(i, i)
1205 n = m.repeated_nested_message.add()
1207 self.assertSequenceEqual(m.repeated_int32, m.repeated_int32)
1208 self.assertEqual(m.repeated_nested_message, m.repeated_nested_message)
1211 """A case that lead to a segfault when a message detached from its parent
1212 container has itself a child container.
1214 m = message_module.NestedTestAllTypes()
1215 m = m.repeated_child.add()
1217 m = m.repeated_child.add()
1218 self.assertEqual(m.payload.optional_int32, 0)
1221 m = message_module.TestAllTypes()
1222 with self.assertRaises(AttributeError):
1223 m.repeated_int32 = []
1224 m.repeated_int32.append(1)
1225 with self.assertRaises(AttributeError):
1226 m.repeated_int32 = []
1229 m = message_module.TestAllTypes()
1230 self.assertEqual(float,
type(m.optional_float))
1231 self.assertEqual(float,
type(m.optional_double))
1232 self.assertEqual(bool,
type(m.optional_bool))
1233 m.optional_float = 1
1234 m.optional_double = 1
1236 m.repeated_float.append(1)
1237 m.repeated_double.append(1)
1238 m.repeated_bool.append(1)
1239 m.ParseFromString(m.SerializeToString())
1240 self.assertEqual(float,
type(m.optional_float))
1241 self.assertEqual(float,
type(m.optional_double))
1242 self.assertEqual(
'1.0',
str(m.optional_double))
1243 self.assertEqual(bool,
type(m.optional_bool))
1244 self.assertEqual(float,
type(m.repeated_float[0]))
1245 self.assertEqual(float,
type(m.repeated_double[0]))
1246 self.assertEqual(bool,
type(m.repeated_bool[0]))
1247 self.assertEqual(
True, m.repeated_bool[0])
1251 @testing_refleaks.TestCase
1255 message = unittest_pb2.TestAllTypes()
1257 self.assertFalse(message.HasField(
"optional_int32"))
1258 self.assertFalse(message.HasField(
"optional_bool"))
1259 self.assertFalse(message.HasField(
"optional_nested_message"))
1261 with self.assertRaises(ValueError):
1262 message.HasField(
"field_doesnt_exist")
1264 with self.assertRaises(ValueError):
1265 message.HasField(
"repeated_int32")
1266 with self.assertRaises(ValueError):
1267 message.HasField(
"repeated_nested_message")
1269 self.assertEqual(0, message.optional_int32)
1270 self.assertEqual(
False, message.optional_bool)
1271 self.assertEqual(0, message.optional_nested_message.bb)
1274 message.optional_int32 = 0
1275 message.optional_bool =
False
1276 message.optional_nested_message.bb = 0
1277 self.assertTrue(message.HasField(
"optional_int32"))
1278 self.assertTrue(message.HasField(
"optional_bool"))
1279 self.assertTrue(message.HasField(
"optional_nested_message"))
1282 message.optional_int32 = 5
1283 message.optional_bool =
True
1284 message.optional_nested_message.bb = 15
1286 self.assertTrue(message.HasField(
u"optional_int32"))
1287 self.assertTrue(message.HasField(
"optional_bool"))
1288 self.assertTrue(message.HasField(
"optional_nested_message"))
1291 message.ClearField(
"optional_int32")
1292 message.ClearField(
u"optional_bool")
1293 message.ClearField(
"optional_nested_message")
1295 self.assertFalse(message.HasField(
"optional_int32"))
1296 self.assertFalse(message.HasField(
"optional_bool"))
1297 self.assertFalse(message.HasField(
"optional_nested_message"))
1298 self.assertEqual(0, message.optional_int32)
1299 self.assertEqual(
False, message.optional_bool)
1300 self.assertEqual(0, message.optional_nested_message.bb)
1303 """Assigning an invalid enum number is not allowed in proto2."""
1304 m = unittest_pb2.TestAllTypes()
1307 with self.assertRaises(ValueError)
as _:
1308 m.optional_nested_enum = 1234567
1309 self.assertRaises(ValueError, m.repeated_nested_enum.append, 1234567)
1311 m.repeated_nested_enum.append(2)
1312 m.repeated_nested_enum[0] = 2
1313 with self.assertRaises(ValueError):
1314 m.repeated_nested_enum[0] = 123456
1317 m2 = unittest_proto3_arena_pb2.TestAllTypes()
1318 m2.optional_nested_enum = 1234567
1319 m2.repeated_nested_enum.append(7654321)
1320 serialized = m2.SerializeToString()
1322 m3 = unittest_pb2.TestAllTypes()
1323 m3.ParseFromString(serialized)
1324 self.assertFalse(m3.HasField(
'optional_nested_enum'))
1326 self.assertEqual(1, m3.optional_nested_enum)
1327 self.assertEqual(0,
len(m3.repeated_nested_enum))
1329 m2.ParseFromString(m3.SerializeToString())
1330 self.assertEqual(1234567, m2.optional_nested_enum)
1331 self.assertEqual(7654321, m2.repeated_nested_enum[0])
1334 m = map_proto2_unittest_pb2.TestEnumMap()
1335 m.known_map_field[123] = 0
1336 with self.assertRaises(ValueError):
1337 m.unknown_map_field[1] = 123
1340 msg = unittest_pb2.TestAllTypes()
1341 self.assertRaises(AttributeError, getattr, msg,
'Extensions')
1344 msg1 = more_extensions_pb2.TopLevelMessage()
1345 msg2 = more_extensions_pb2.TopLevelMessage()
1347 self.assertEqual(0, msg1.submessage.Extensions[
1348 more_extensions_pb2.optional_int_extension])
1349 self.assertFalse(msg1.HasField(
'submessage'))
1350 msg2.submessage.Extensions[
1351 more_extensions_pb2.optional_int_extension] = 123
1354 msg1.MergeFrom(msg2)
1355 self.assertEqual(123, msg1.submessage.Extensions[
1356 more_extensions_pb2.optional_int_extension])
1359 golden_data = test_util.GoldenFileData(
'golden_message')
1360 golden_message = unittest_pb2.TestAllExtensions()
1361 golden_message.ParseFromString(golden_data)
1362 all_set = unittest_pb2.TestAllExtensions()
1363 test_util.SetAllExtensions(all_set)
1364 self.assertEqual(all_set, golden_message)
1365 self.assertEqual(golden_data, golden_message.SerializeToString())
1366 golden_copy = copy.deepcopy(golden_message)
1367 self.assertEqual(golden_data, golden_copy.SerializeToString())
1370 golden_data = test_util.GoldenFileData(
'golden_packed_fields_message')
1371 golden_message = unittest_pb2.TestPackedExtensions()
1372 golden_message.ParseFromString(golden_data)
1373 all_set = unittest_pb2.TestPackedExtensions()
1374 test_util.SetAllPackedExtensions(all_set)
1375 self.assertEqual(all_set, golden_message)
1376 self.assertEqual(golden_data, all_set.SerializeToString())
1377 golden_copy = copy.deepcopy(golden_message)
1378 self.assertEqual(golden_data, golden_copy.SerializeToString())
1381 golden_message = unittest_pb2.TestRequired(a=1)
1382 pickled_message = pickle.dumps(golden_message)
1384 unpickled_message = pickle.loads(pickled_message)
1385 self.assertEqual(unpickled_message, golden_message)
1386 self.assertEqual(unpickled_message.a, 1)
1395 """Check the merge behavior when a required or optional field appears
1396 multiple times in the input."""
1398 unittest_pb2.TestAllTypes(),
1399 unittest_pb2.TestAllTypes(),
1400 unittest_pb2.TestAllTypes() ]
1401 messages[0].optional_int32 = 1
1402 messages[1].optional_int64 = 2
1403 messages[2].optional_int32 = 3
1404 messages[2].optional_string =
'hello'
1406 merged_message = unittest_pb2.TestAllTypes()
1407 merged_message.optional_int32 = 3
1408 merged_message.optional_int64 = 2
1409 merged_message.optional_string =
'hello'
1411 generator = unittest_pb2.TestParsingMerge.RepeatedFieldsGenerator()
1412 generator.field1.extend(messages)
1413 generator.field2.extend(messages)
1414 generator.field3.extend(messages)
1415 generator.ext1.extend(messages)
1416 generator.ext2.extend(messages)
1417 generator.group1.add().field1.MergeFrom(messages[0])
1418 generator.group1.add().field1.MergeFrom(messages[1])
1419 generator.group1.add().field1.MergeFrom(messages[2])
1420 generator.group2.add().field1.MergeFrom(messages[0])
1421 generator.group2.add().field1.MergeFrom(messages[1])
1422 generator.group2.add().field1.MergeFrom(messages[2])
1424 data = generator.SerializeToString()
1425 parsing_merge = unittest_pb2.TestParsingMerge()
1426 parsing_merge.ParseFromString(data)
1429 self.assertEqual(parsing_merge.required_all_types, merged_message)
1430 self.assertEqual(parsing_merge.optional_all_types, merged_message)
1431 self.assertEqual(parsing_merge.optionalgroup.optional_group_all_types,
1433 self.assertEqual(parsing_merge.Extensions[
1434 unittest_pb2.TestParsingMerge.optional_ext],
1438 self.assertEqual(
len(parsing_merge.repeated_all_types), 3)
1439 self.assertEqual(
len(parsing_merge.repeatedgroup), 3)
1440 self.assertEqual(
len(parsing_merge.Extensions[
1441 unittest_pb2.TestParsingMerge.repeated_ext]), 3)
1444 message = unittest_pb2.TestAllTypes(
1446 optional_fixed32=200,
1447 optional_float=300.5,
1448 optional_bytes=b
'x',
1449 optionalgroup={
'a': 400},
1450 optional_nested_message={
'bb': 500},
1451 optional_foreign_message={},
1452 optional_nested_enum=
'BAZ',
1453 repeatedgroup=[{
'a': 600},
1455 repeated_nested_enum=[
'FOO', unittest_pb2.TestAllTypes.BAR],
1458 self.assertIsInstance(message, unittest_pb2.TestAllTypes)
1459 self.assertEqual(100, message.optional_int32)
1460 self.assertEqual(200, message.optional_fixed32)
1461 self.assertEqual(300.5, message.optional_float)
1462 self.assertEqual(b
'x', message.optional_bytes)
1463 self.assertEqual(400, message.optionalgroup.a)
1464 self.assertIsInstance(message.optional_nested_message,
1465 unittest_pb2.TestAllTypes.NestedMessage)
1466 self.assertEqual(500, message.optional_nested_message.bb)
1467 self.assertTrue(message.HasField(
'optional_foreign_message'))
1468 self.assertEqual(message.optional_foreign_message,
1469 unittest_pb2.ForeignMessage())
1470 self.assertEqual(unittest_pb2.TestAllTypes.BAZ,
1471 message.optional_nested_enum)
1472 self.assertEqual(2,
len(message.repeatedgroup))
1473 self.assertEqual(600, message.repeatedgroup[0].a)
1474 self.assertEqual(700, message.repeatedgroup[1].a)
1475 self.assertEqual(2,
len(message.repeated_nested_enum))
1476 self.assertEqual(unittest_pb2.TestAllTypes.FOO,
1477 message.repeated_nested_enum[0])
1478 self.assertEqual(unittest_pb2.TestAllTypes.BAR,
1479 message.repeated_nested_enum[1])
1480 self.assertEqual(800, message.default_int32)
1481 self.assertEqual(
'y', message.oneof_string)
1482 self.assertFalse(message.HasField(
'optional_int64'))
1483 self.assertEqual(0,
len(message.repeated_float))
1484 self.assertEqual(42, message.default_int64)
1486 message = unittest_pb2.TestAllTypes(optional_nested_enum=
u'BAZ')
1487 self.assertEqual(unittest_pb2.TestAllTypes.BAZ,
1488 message.optional_nested_enum)
1490 with self.assertRaises(ValueError):
1491 unittest_pb2.TestAllTypes(
1492 optional_nested_message={
'INVALID_NESTED_FIELD': 17})
1494 with self.assertRaises(TypeError):
1495 unittest_pb2.TestAllTypes(
1496 optional_nested_message={
'bb':
'INVALID_VALUE_TYPE'})
1498 with self.assertRaises(ValueError):
1499 unittest_pb2.TestAllTypes(optional_nested_enum=
'INVALID_LABEL')
1501 with self.assertRaises(ValueError):
1502 unittest_pb2.TestAllTypes(repeated_nested_enum=
'FOO')
1507 'optional_int32': 100,
1508 u'optional_fixed32': 200,
1510 msg = unittest_pb2.TestAllTypes(**kwargs)
1511 self.assertEqual(100, msg.optional_int32)
1512 self.assertEqual(200, msg.optional_fixed32)
1517 doc = pydoc.html.document(unittest_pb2.TestAllTypes,
'message')
1518 self.assertIn(
'class TestAllTypes', doc)
1519 self.assertIn(
'SerializePartialToString', doc)
1520 self.assertIn(
'repeated_float', doc)
1521 base = unittest_pb2.TestAllTypes.__bases__[0]
1522 self.assertRaises(AttributeError, getattr, base,
'_extensions_by_name')
1526 @testing_refleaks.TestCase
1532 dict_value = dict(dict_value)
1534 for k, v
in map_iter:
1535 self.assertEqual(v, dict_value[k])
1538 self.assertEqual({}, dict_value)
1541 message = unittest_proto3_arena_pb2.TestAllTypes()
1544 with self.assertRaises(ValueError):
1545 message.HasField(
'optional_int32')
1546 with self.assertRaises(ValueError):
1547 message.HasField(
'optional_float')
1548 with self.assertRaises(ValueError):
1549 message.HasField(
'optional_string')
1550 with self.assertRaises(ValueError):
1551 message.HasField(
'optional_bool')
1554 self.assertFalse(message.HasField(
'optional_nested_message'))
1558 with self.assertRaises(ValueError):
1559 message.HasField(
'field_doesnt_exist')
1561 with self.assertRaises(ValueError):
1562 message.HasField(
'repeated_int32')
1563 with self.assertRaises(ValueError):
1564 message.HasField(
'repeated_nested_message')
1567 self.assertEqual(0, message.optional_int32)
1568 self.assertEqual(0, message.optional_float)
1569 self.assertEqual(
'', message.optional_string)
1570 self.assertEqual(
False, message.optional_bool)
1571 self.assertEqual(0, message.optional_nested_message.bb)
1574 message.optional_nested_message.bb = 0
1575 self.assertTrue(message.HasField(
'optional_nested_message'))
1578 message.optional_int32 = 5
1579 message.optional_float = 1.1
1580 message.optional_string =
'abc'
1581 message.optional_bool =
True
1582 message.optional_nested_message.bb = 15
1585 message.ClearField(
'optional_int32')
1586 message.ClearField(
'optional_float')
1587 message.ClearField(
'optional_string')
1588 message.ClearField(
'optional_bool')
1589 message.ClearField(
'optional_nested_message')
1591 self.assertEqual(0, message.optional_int32)
1592 self.assertEqual(0, message.optional_float)
1593 self.assertEqual(
'', message.optional_string)
1594 self.assertEqual(
False, message.optional_bool)
1595 self.assertEqual(0, message.optional_nested_message.bb)
1598 message_proto2 = unittest_pb2.TestAllTypes()
1599 message_proto2.optional_int32 = 0
1600 message_proto2.optional_string =
''
1601 message_proto2.optional_bytes = b
''
1602 self.assertEqual(
len(message_proto2.ListFields()), 3)
1604 message_proto3 = unittest_proto3_arena_pb2.TestAllTypes()
1605 message_proto3.ParseFromString(message_proto2.SerializeToString())
1606 self.assertEqual(
len(message_proto3.ListFields()), 0)
1609 msg = test_proto3_optional_pb2.TestProto3Optional()
1610 self.assertFalse(msg.HasField(
'optional_int32'))
1611 self.assertFalse(msg.HasField(
'optional_float'))
1612 self.assertFalse(msg.HasField(
'optional_string'))
1613 self.assertFalse(msg.HasField(
'optional_nested_message'))
1614 self.assertFalse(msg.optional_nested_message.HasField(
'bb'))
1617 msg.optional_int32 = 1
1618 msg.optional_float = 1.0
1619 msg.optional_string =
'123'
1620 msg.optional_nested_message.bb = 1
1621 self.assertTrue(msg.HasField(
'optional_int32'))
1622 self.assertTrue(msg.HasField(
'optional_float'))
1623 self.assertTrue(msg.HasField(
'optional_string'))
1624 self.assertTrue(msg.HasField(
'optional_nested_message'))
1625 self.assertTrue(msg.optional_nested_message.HasField(
'bb'))
1627 msg.optional_int32 = 0
1628 msg.optional_float = 0.0
1629 msg.optional_string =
''
1630 msg.optional_nested_message.bb = 0
1631 self.assertTrue(msg.HasField(
'optional_int32'))
1632 self.assertTrue(msg.HasField(
'optional_float'))
1633 self.assertTrue(msg.HasField(
'optional_string'))
1634 self.assertTrue(msg.HasField(
'optional_nested_message'))
1635 self.assertTrue(msg.optional_nested_message.HasField(
'bb'))
1638 msg2 = test_proto3_optional_pb2.TestProto3Optional()
1639 msg2.ParseFromString(msg.SerializeToString())
1640 self.assertTrue(msg2.HasField(
'optional_int32'))
1641 self.assertTrue(msg2.HasField(
'optional_float'))
1642 self.assertTrue(msg2.HasField(
'optional_string'))
1643 self.assertTrue(msg2.HasField(
'optional_nested_message'))
1644 self.assertTrue(msg2.optional_nested_message.HasField(
'bb'))
1646 self.assertEqual(msg.WhichOneof(
'_optional_int32'),
'optional_int32')
1649 msg.ClearField(
'optional_int32')
1650 msg.ClearField(
'optional_float')
1651 msg.ClearField(
'optional_string')
1652 msg.ClearField(
'optional_nested_message')
1653 self.assertFalse(msg.HasField(
'optional_int32'))
1654 self.assertFalse(msg.HasField(
'optional_float'))
1655 self.assertFalse(msg.HasField(
'optional_string'))
1656 self.assertFalse(msg.HasField(
'optional_nested_message'))
1657 self.assertFalse(msg.optional_nested_message.HasField(
'bb'))
1659 self.assertEqual(msg.WhichOneof(
'_optional_int32'),
None)
1662 """Assigning an unknown enum value is allowed and preserves the value."""
1663 m = unittest_proto3_arena_pb2.TestAllTypes()
1666 m.optional_nested_enum = 1234567
1667 self.assertEqual(1234567, m.optional_nested_enum)
1668 m.repeated_nested_enum.append(22334455)
1669 self.assertEqual(22334455, m.repeated_nested_enum[0])
1671 m.repeated_nested_enum[0] = 7654321
1672 self.assertEqual(7654321, m.repeated_nested_enum[0])
1673 serialized = m.SerializeToString()
1675 m2 = unittest_proto3_arena_pb2.TestAllTypes()
1676 m2.ParseFromString(serialized)
1677 self.assertEqual(1234567, m2.optional_nested_enum)
1678 self.assertEqual(7654321, m2.repeated_nested_enum[0])
1686 msg = map_unittest_pb2.TestMap()
1689 self.assertFalse(-123
in msg.map_int32_int32)
1690 self.assertFalse(-2**33
in msg.map_int64_int64)
1691 self.assertFalse(123
in msg.map_uint32_uint32)
1692 self.assertFalse(2**33
in msg.map_uint64_uint64)
1693 self.assertFalse(123
in msg.map_int32_double)
1694 self.assertFalse(
False in msg.map_bool_bool)
1695 self.assertFalse(
'abc' in msg.map_string_string)
1696 self.assertFalse(111
in msg.map_int32_bytes)
1697 self.assertFalse(888
in msg.map_int32_enum)
1700 self.assertEqual(0, msg.map_int32_int32[-123])
1701 self.assertEqual(0, msg.map_int64_int64[-2**33])
1702 self.assertEqual(0, msg.map_uint32_uint32[123])
1703 self.assertEqual(0, msg.map_uint64_uint64[2**33])
1704 self.assertEqual(0.0, msg.map_int32_double[123])
1705 self.assertTrue(isinstance(msg.map_int32_double[123], float))
1706 self.assertEqual(
False, msg.map_bool_bool[
False])
1707 self.assertTrue(isinstance(msg.map_bool_bool[
False], bool))
1708 self.assertEqual(
'', msg.map_string_string[
'abc'])
1709 self.assertEqual(b
'', msg.map_int32_bytes[111])
1710 self.assertEqual(0, msg.map_int32_enum[888])
1713 self.assertTrue(-123
in msg.map_int32_int32)
1714 self.assertTrue(-2**33
in msg.map_int64_int64)
1715 self.assertTrue(123
in msg.map_uint32_uint32)
1716 self.assertTrue(2**33
in msg.map_uint64_uint64)
1717 self.assertTrue(123
in msg.map_int32_double)
1718 self.assertTrue(
False in msg.map_bool_bool)
1719 self.assertTrue(
'abc' in msg.map_string_string)
1720 self.assertTrue(111
in msg.map_int32_bytes)
1721 self.assertTrue(888
in msg.map_int32_enum)
1723 self.assertIsInstance(msg.map_string_string[
'abc'], str)
1727 with self.assertRaises(TypeError):
1728 msg.map_string_string[123]
1730 with self.assertRaises(TypeError):
1731 123
in msg.map_string_string
1736 msg = map_unittest_pb2.TestMap()
1738 self.assertIsNone(msg.map_int32_int32.get(5))
1739 self.assertEqual(10, msg.map_int32_int32.get(5, 10))
1740 self.assertEqual(10, msg.map_int32_int32.get(key=5, default=10))
1741 self.assertIsNone(msg.map_int32_int32.get(5))
1743 msg.map_int32_int32[5] = 15
1744 self.assertEqual(15, msg.map_int32_int32.get(5))
1745 self.assertEqual(15, msg.map_int32_int32.get(5))
1746 with self.assertRaises(TypeError):
1747 msg.map_int32_int32.get(
'')
1749 self.assertIsNone(msg.map_int32_foreign_message.get(5))
1750 self.assertEqual(10, msg.map_int32_foreign_message.get(5, 10))
1751 self.assertEqual(10, msg.map_int32_foreign_message.get(key=5, default=10))
1753 submsg = msg.map_int32_foreign_message[5]
1754 self.assertIs(submsg, msg.map_int32_foreign_message.get(5))
1755 with self.assertRaises(TypeError):
1756 msg.map_int32_foreign_message.get(
'')
1759 msg = map_unittest_pb2.TestMap()
1761 self.assertEqual(0,
len(msg.map_int32_int32))
1762 self.assertFalse(5
in msg.map_int32_int32)
1764 msg.map_int32_int32[-123] = -456
1765 msg.map_int64_int64[-2**33] = -2**34
1766 msg.map_uint32_uint32[123] = 456
1767 msg.map_uint64_uint64[2**33] = 2**34
1768 msg.map_int32_float[2] = 1.2
1769 msg.map_int32_double[1] = 3.3
1770 msg.map_string_string[
'abc'] =
'123'
1771 msg.map_bool_bool[
True] =
True
1772 msg.map_int32_enum[888] = 2
1774 msg.map_int32_enum[123] = 456
1776 self.assertEqual([], msg.FindInitializationErrors())
1778 self.assertEqual(1,
len(msg.map_string_string))
1781 with self.assertRaises(TypeError):
1782 msg.map_string_string[123] =
'123'
1786 self.assertEqual(1,
len(msg.map_string_string))
1789 with self.assertRaises(TypeError):
1790 msg.map_string_string[
'123'] = 123
1792 serialized = msg.SerializeToString()
1793 msg2 = map_unittest_pb2.TestMap()
1794 msg2.ParseFromString(serialized)
1797 with self.assertRaises(TypeError):
1798 msg2.map_string_string[123] =
'123'
1801 with self.assertRaises(TypeError):
1802 msg2.map_string_string[
'123'] = 123
1804 self.assertEqual(-456, msg2.map_int32_int32[-123])
1805 self.assertEqual(-2**34, msg2.map_int64_int64[-2**33])
1806 self.assertEqual(456, msg2.map_uint32_uint32[123])
1807 self.assertEqual(2**34, msg2.map_uint64_uint64[2**33])
1808 self.assertAlmostEqual(1.2, msg.map_int32_float[2])
1809 self.assertEqual(3.3, msg.map_int32_double[1])
1810 self.assertEqual(
'123', msg2.map_string_string[
'abc'])
1811 self.assertEqual(
True, msg2.map_bool_bool[
True])
1812 self.assertEqual(2, msg2.map_int32_enum[888])
1813 self.assertEqual(456, msg2.map_int32_enum[123])
1814 self.assertEqual(
'{-123: -456}',
1815 str(msg2.map_int32_int32))
1818 msg = map_unittest_pb2.TestMap()
1819 msg.map_int32_int32[0] = 0
1820 msg.map_string_string[
''] =
''
1821 self.assertEqual(msg.ByteSize(), 12)
1822 self.assertEqual(b
'\n\x04\x08\x00\x10\x00r\x04\n\x00\x12\x00',
1823 msg.SerializeToString())
1826 msg = map_unittest_pb2.TestMap()
1828 unicode_obj =
u'\u1234'
1829 bytes_obj = unicode_obj.encode(
'utf8')
1831 msg.map_string_string[bytes_obj] = bytes_obj
1833 (key, value) = list(msg.map_string_string.items())[0]
1835 self.assertEqual(key, unicode_obj)
1836 self.assertEqual(value, unicode_obj)
1838 self.assertIsInstance(key, str)
1839 self.assertIsInstance(value, str)
1842 msg = map_unittest_pb2.TestMap()
1844 self.assertEqual(0,
len(msg.map_int32_foreign_message))
1845 self.assertFalse(5
in msg.map_int32_foreign_message)
1847 msg.map_int32_foreign_message[123]
1849 msg.map_int32_foreign_message.get_or_create(-456)
1851 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1852 self.assertIn(123, msg.map_int32_foreign_message)
1853 self.assertIn(-456, msg.map_int32_foreign_message)
1854 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1857 with self.assertRaises(TypeError):
1858 msg.map_int32_foreign_message[
'123']
1861 with self.assertRaises(ValueError):
1862 msg.map_int32_foreign_message[999] = msg.map_int32_foreign_message[123]
1866 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1868 serialized = msg.SerializeToString()
1869 msg2 = map_unittest_pb2.TestMap()
1870 msg2.ParseFromString(serialized)
1872 self.assertEqual(2,
len(msg2.map_int32_foreign_message))
1873 self.assertIn(123, msg2.map_int32_foreign_message)
1874 self.assertIn(-456, msg2.map_int32_foreign_message)
1875 self.assertEqual(2,
len(msg2.map_int32_foreign_message))
1876 msg2.map_int32_foreign_message[123].c = 1
1878 self.assertIn(
str(msg2.map_int32_foreign_message),
1879 (
'{-456: , 123: c: 1\n}',
'{123: c: 1\n, -456: }'))
1882 msg = map_unittest_pb2.TestMap()
1883 msg.map_int32_all_types[1].optional_nested_message.bb = 1
1884 del msg.map_int32_all_types[1]
1885 msg.map_int32_all_types[2].optional_nested_message.bb = 2
1886 self.assertEqual(1,
len(msg.map_int32_all_types))
1887 msg.map_int32_all_types[1].optional_nested_message.bb = 1
1888 self.assertEqual(2,
len(msg.map_int32_all_types))
1890 serialized = msg.SerializeToString()
1891 msg2 = map_unittest_pb2.TestMap()
1892 msg2.ParseFromString(serialized)
1896 del msg2.map_int32_all_types[key]
1899 msg = map_unittest_pb2.TestMap()
1900 msg.map_int32_int32[1] = 1
1901 size = msg.ByteSize()
1902 msg.map_int32_int32[1] = 128
1903 self.assertEqual(msg.ByteSize(), size + 1)
1905 msg.map_int32_foreign_message[19].c = 1
1906 size = msg.ByteSize()
1907 msg.map_int32_foreign_message[19].c = 128
1908 self.assertEqual(msg.ByteSize(), size + 1)
1911 msg = map_unittest_pb2.TestMap()
1912 msg.map_int32_int32[12] = 34
1913 msg.map_int32_int32[56] = 78
1914 msg.map_int64_int64[22] = 33
1915 msg.map_int32_foreign_message[111].c = 5
1916 msg.map_int32_foreign_message[222].c = 10
1918 msg2 = map_unittest_pb2.TestMap()
1919 msg2.map_int32_int32[12] = 55
1920 msg2.map_int64_int64[88] = 99
1921 msg2.map_int32_foreign_message[222].c = 15
1922 msg2.map_int32_foreign_message[222].d = 20
1923 old_map_value = msg2.map_int32_foreign_message[222]
1929 expected_msg = map_unittest_pb2.TestMap()
1930 expected_msg.CopyFrom(msg)
1931 expected_msg.map_int64_int64[88] = 99
1932 self.assertEqual(msg2, expected_msg)
1934 self.assertEqual(34, msg2.map_int32_int32[12])
1935 self.assertEqual(78, msg2.map_int32_int32[56])
1936 self.assertEqual(33, msg2.map_int64_int64[22])
1937 self.assertEqual(99, msg2.map_int64_int64[88])
1938 self.assertEqual(5, msg2.map_int32_foreign_message[111].c)
1939 self.assertEqual(10, msg2.map_int32_foreign_message[222].c)
1940 self.assertFalse(msg2.map_int32_foreign_message[222].
HasField(
'd'))
1941 if api_implementation.Type() !=
'cpp':
1949 self.assertEqual(15, old_map_value.c)
1955 for key
in msg2.map_int32_foreign_message:
1956 self.assertFalse(key
in as_dict)
1957 as_dict[key] = msg2.map_int32_foreign_message[key].c
1959 self.assertEqual({111: 5, 222: 10}, as_dict)
1965 del msg2.map_int32_int32[12]
1966 self.assertFalse(12
in msg2.map_int32_int32)
1968 del msg2.map_int32_foreign_message[222]
1969 self.assertFalse(222
in msg2.map_int32_foreign_message)
1970 with self.assertRaises(TypeError):
1971 del msg2.map_int32_foreign_message[
'']
1974 msg = map_unittest_pb2.TestMap()
1975 msg.map_int32_int32[12] = 34
1976 msg.map_int32_int32[56] = 78
1977 msg.map_int64_int64[22] = 33
1978 msg.map_int32_foreign_message[111].c = 5
1979 msg.map_int32_foreign_message[222].c = 10
1981 msg2 = map_unittest_pb2.TestMap()
1982 msg2.map_int32_int32[12] = 55
1983 msg2.map_int64_int64[88] = 99
1984 msg2.map_int32_foreign_message[222].c = 15
1985 msg2.map_int32_foreign_message[222].d = 20
1987 msg2.map_int32_int32.MergeFrom(msg.map_int32_int32)
1988 self.assertEqual(34, msg2.map_int32_int32[12])
1989 self.assertEqual(78, msg2.map_int32_int32[56])
1991 msg2.map_int64_int64.MergeFrom(msg.map_int64_int64)
1992 self.assertEqual(33, msg2.map_int64_int64[22])
1993 self.assertEqual(99, msg2.map_int64_int64[88])
1995 msg2.map_int32_foreign_message.MergeFrom(msg.map_int32_foreign_message)
1999 expected_msg = map_unittest_pb2.TestMap()
2000 expected_msg.CopyFrom(msg)
2001 expected_msg.map_int64_int64[88] = 99
2002 self.assertEqual(msg2, expected_msg)
2005 m1 = map_unittest_pb2.TestMap()
2006 m2 = map_unittest_pb2.TestMap()
2007 self.assertEqual(m1.map_int32_foreign_message,
2008 m1.map_int32_foreign_message)
2009 m2.map_int32_foreign_message[123].c = 10
2011 self.assertEqual(10, m2.map_int32_foreign_message[123].c)
2014 m1 = map_unittest_pb2.TestMap()
2015 m2 = map_unittest_pb2.TestMessageMap()
2016 m2.map_int32_message[123].optional_int32 = 10
2017 m1.map_int32_all_types.MergeFrom(m2.map_int32_message)
2018 self.assertEqual(10, m1.map_int32_all_types[123].optional_int32)
2021 msg = map_unittest_pb2.TestMap()
2022 msg.map_int32_foreign_message[222].c = 123
2023 msg2 = map_unittest_pb2.TestMap()
2024 msg2.map_int32_foreign_message[222].d = 20
2025 msg.MergeFromString(msg2.SerializeToString())
2026 self.assertEqual(msg.map_int32_foreign_message[222].d, 20)
2027 self.assertNotEqual(msg.map_int32_foreign_message[222].c, 123)
2030 with self.assertRaises(AttributeError):
2031 m1.map_int32_all_types.MergeFrom(
2032 {1: unittest_proto3_arena_pb2.TestAllTypes()})
2035 msg = map_unittest_pb2.TestMap()
2036 with self.assertRaisesRegexp(
2038 r'Parameter to MergeFrom\(\) must be instance of same class: expected '
2039 r'.+TestMap got int\.'):
2043 msg = map_unittest_pb2.TestMap()
2044 with self.assertRaisesRegexp(
2046 r'Parameter to [A-Za-z]*From\(\) must be instance of same class: '
2047 r'expected .+TestMap got int\.'):
2051 msg = map_unittest_pb2.TestMap()
2052 msg.map_int32_int32[
int(-123)] =
int(-456)
2053 msg.map_int64_int64[
int(-2**33)] =
int(-2**34)
2054 msg.map_uint32_uint32[
int(123)] =
int(456)
2055 msg.map_uint64_uint64[
int(2**33)] =
int(2**34)
2057 serialized = msg.SerializeToString()
2058 msg2 = map_unittest_pb2.TestMap()
2059 msg2.ParseFromString(serialized)
2061 self.assertEqual(-456, msg2.map_int32_int32[-123])
2062 self.assertEqual(-2**34, msg2.map_int64_int64[-2**33])
2063 self.assertEqual(456, msg2.map_uint32_uint32[123])
2064 self.assertEqual(2**34, msg2.map_uint64_uint64[2**33])
2067 msg = map_unittest_pb2.TestMapSubmessage()
2068 msg.test_map.map_int32_int32[123] = 456
2070 serialized = msg.SerializeToString()
2071 msg2 = map_unittest_pb2.TestMapSubmessage()
2072 msg2.ParseFromString(serialized)
2074 self.assertEqual(msg, msg2)
2078 msg.test_map.map_int32_int32[888] = 999
2079 serialized = msg.SerializeToString()
2080 msg2.ParseFromString(serialized)
2081 self.assertEqual(msg, msg2)
2083 msg.test_map.map_int32_int32.clear()
2084 serialized = msg.SerializeToString()
2085 msg2.ParseFromString(serialized)
2086 self.assertEqual(msg, msg2)
2089 msg = map_unittest_pb2.TestMapSubmessage()
2090 msg.test_map.map_int32_foreign_message[123].c = 5
2092 serialized = msg.SerializeToString()
2093 msg2 = map_unittest_pb2.TestMapSubmessage()
2094 msg2.ParseFromString(serialized)
2096 self.assertEqual(msg, msg2)
2100 msg.test_map.map_int32_foreign_message[888].c = 7
2101 serialized = msg.SerializeToString()
2102 msg2.ParseFromString(serialized)
2103 self.assertEqual(msg, msg2)
2105 msg.test_map.map_int32_foreign_message[888].
MergeFrom(
2106 msg.test_map.map_int32_foreign_message[123])
2107 serialized = msg.SerializeToString()
2108 msg2.ParseFromString(serialized)
2109 self.assertEqual(msg, msg2)
2111 msg.test_map.map_int32_foreign_message.clear()
2112 serialized = msg.SerializeToString()
2113 msg2.ParseFromString(serialized)
2114 self.assertEqual(msg, msg2)
2117 msg = map_unittest_pb2.TestMap()
2119 string_string_iter =
iter(msg.map_string_string)
2120 int32_foreign_iter =
iter(msg.map_int32_foreign_message)
2122 msg.map_string_string[
'abc'] =
'123'
2123 msg.map_int32_foreign_message[5].c = 5
2125 with self.assertRaises(RuntimeError):
2126 for key
in string_string_iter:
2129 with self.assertRaises(RuntimeError):
2130 for key
in int32_foreign_iter:
2134 msg = map_unittest_pb2.TestMap()
2136 submsg = msg.map_int32_foreign_message[111]
2137 self.assertIs(submsg, msg.map_int32_foreign_message[111])
2138 self.assertIsInstance(submsg, unittest_pb2.ForeignMessage)
2142 serialized = msg.SerializeToString()
2143 msg2 = map_unittest_pb2.TestMap()
2144 msg2.ParseFromString(serialized)
2146 self.assertEqual(5, msg2.map_int32_foreign_message[111].c)
2149 with self.assertRaises(ValueError):
2150 msg.map_int32_foreign_message[88] = unittest_pb2.ForeignMessage()
2153 msg = map_unittest_pb2.TestMap()
2155 for k, v
in msg.map_int32_int32.items():
2157 self.assertTrue(
False)
2159 msg.map_int32_int32[2] = 4
2160 msg.map_int32_int32[3] = 6
2161 msg.map_int32_int32[4] = 8
2162 self.assertEqual(3,
len(msg.map_int32_int32))
2164 matching_dict = {2: 4, 3: 6, 4: 8}
2172 msg = map_unittest_pb2.TestMap()
2173 msg.map_string_string[
'local_init_op'] =
''
2174 msg.map_string_string[
'trainable_variables'] =
''
2175 msg.map_string_string[
'variables'] =
''
2176 msg.map_string_string[
'init_op'] =
''
2177 msg.map_string_string[
'summaries'] =
''
2178 items1 = msg.map_string_string.items()
2179 items2 = msg.map_string_string.items()
2180 self.assertEqual(items1, items2)
2183 golden_data = (b
'r\x0c\n\x07init_op\x12\x01d'
2184 b
'r\n\n\x05item1\x12\x01e'
2185 b
'r\n\n\x05item2\x12\x01f'
2186 b
'r\n\n\x05item3\x12\x01g'
2187 b
'r\x0b\n\x05item4\x12\x02QQ'
2188 b
'r\x12\n\rlocal_init_op\x12\x01a'
2189 b
'r\x0e\n\tsummaries\x12\x01e'
2190 b
'r\x18\n\x13trainable_variables\x12\x01b'
2191 b
'r\x0e\n\tvariables\x12\x01c')
2192 msg = map_unittest_pb2.TestMap()
2193 msg.map_string_string[
'local_init_op'] =
'a'
2194 msg.map_string_string[
'trainable_variables'] =
'b'
2195 msg.map_string_string[
'variables'] =
'c'
2196 msg.map_string_string[
'init_op'] =
'd'
2197 msg.map_string_string[
'summaries'] =
'e'
2198 msg.map_string_string[
'item1'] =
'e'
2199 msg.map_string_string[
'item2'] =
'f'
2200 msg.map_string_string[
'item3'] =
'g'
2201 msg.map_string_string[
'item4'] =
'QQ'
2209 self.assertEqual(golden_data, msg.SerializeToString(deterministic=
True))
2213 msg = map_unittest_pb2.TestMap()
2215 msg.map_int32_int32[2] = 4
2216 msg.map_int32_int32[3] = 6
2217 msg.map_int32_int32[4] = 8
2219 it = msg.map_int32_int32.items()
2222 matching_dict = {2: 4, 3: 6, 4: 8}
2226 msg = map_unittest_pb2.TestMap(map_int32_int32={1: 2, 3: 4})
2227 self.assertEqual(2, msg.map_int32_int32[1])
2228 self.assertEqual(4, msg.map_int32_int32[3])
2230 msg = map_unittest_pb2.TestMap(
2231 map_int32_foreign_message={3: unittest_pb2.ForeignMessage(c=5)})
2232 self.assertEqual(5, msg.map_int32_foreign_message[3].c)
2235 msg1 = map_unittest_pb2.TestMap()
2236 msg1.map_int32_int32[1] = 42
2237 msg2 = map_unittest_pb2.TestMap(map_int32_int32=msg1.map_int32_int32)
2238 self.assertEqual(42, msg2.map_int32_int32[1])
2241 msg1 = map_unittest_pb2.TestMap()
2242 msg1.map_string_foreign_message[
'test'].c = 42
2243 msg2 = map_unittest_pb2.TestMap(
2244 map_string_foreign_message=msg1.map_string_foreign_message)
2245 self.assertEqual(42, msg2.map_string_foreign_message[
'test'].c)
2249 with self.assertRaises(TypeError):
2250 map_unittest_pb2.TestMap(map_string_foreign_message=1)
2256 msg = map_unittest_pb2.TestMap()
2257 int32_map = msg.map_int32_int32
2263 msg.ClearField(
'map_int32_int32')
2264 self.assertEqual(b
'', msg.SerializeToString())
2265 matching_dict = {2: 4, 3: 6, 4: 8}
2272 msg = map_unittest_pb2.TestMap()
2273 int32_foreign_message = msg.map_int32_foreign_message
2275 int32_foreign_message[2].c = 5
2277 msg.ClearField(
'map_int32_foreign_message')
2278 self.assertEqual(b
'', msg.SerializeToString())
2279 self.assertTrue(2
in int32_foreign_message.keys())
2285 msg = map_unittest_pb2.TestMap()
2286 msg.map_int32_all_types[2].optional_string =
'bar'
2288 if api_implementation.Type() ==
'cpp':
2291 unused_map = msg.map_int32_all_types
2292 msg_value = msg.map_int32_all_types[2]
2296 msg.map_int32_all_types[3].optional_string =
'foo'
2297 self.assertEqual(msg_value.optional_string,
'bar')
2304 msg = map_unittest_pb2.TestMap()
2306 it =
iter(msg.map_int32_int32)
2308 msg.ClearField(
'map_int32_int32')
2309 with self.assertRaises(RuntimeError):
2313 it =
iter(msg.map_int32_foreign_message)
2314 msg.ClearField(
'map_int32_foreign_message')
2315 with self.assertRaises(RuntimeError):
2320 msg = map_unittest_pb2.TestMap()
2322 self.assertEqual(0,
len(msg.map_int32_int32))
2324 msg.map_int32_int32[4] = 6
2325 self.assertEqual(1,
len(msg.map_int32_int32))
2327 with self.assertRaises(KeyError):
2328 del msg.map_int32_int32[88]
2330 del msg.map_int32_int32[4]
2331 self.assertEqual(0,
len(msg.map_int32_int32))
2333 with self.assertRaises(KeyError):
2334 del msg.map_int32_all_types[32]
2337 msg = map_unittest_pb2.TestMap()
2338 self.assertIsInstance(msg.map_int32_int32, collections.abc.Mapping)
2339 self.assertIsInstance(msg.map_int32_int32, collections.abc.MutableMapping)
2340 self.assertIsInstance(msg.map_int32_foreign_message,
2341 collections.abc.Mapping)
2342 self.assertIsInstance(msg.map_int32_foreign_message,
2343 collections.abc.MutableMapping)
2346 msg = map_unittest_pb2.TestMap()
2347 msg.map_int32_int32[-123] = -456
2348 self.assertEqual(msg.map_int32_int32, msg.map_int32_int32)
2349 self.assertEqual(msg.map_int32_foreign_message,
2350 msg.map_int32_foreign_message)
2351 self.assertNotEqual(msg.map_int32_int32, 0)
2354 msg = map_unittest_pb2.TestMap()
2355 msg.map_string_string[
'abc'] =
'123'
2356 msg.map_int32_int32[35] = 64
2357 msg.map_string_foreign_message[
'foo'].c = 5
2358 self.assertEqual(0,
len(msg.FindInitializationErrors()))
2360 @unittest.skipIf(sys.maxunicode == UCS2_MAXUNICODE,
'Skip for ucs2')
2363 serialized = (b
'r\x03\xed\xa0\x81')
2364 msg = unittest_proto3_arena_pb2.TestAllTypes()
2365 with self.assertRaises(Exception)
as context:
2366 msg.MergeFromString(serialized)
2367 if api_implementation.Type() ==
'python':
2368 self.assertIn(
'optional_string',
str(context.exception))
2370 self.assertIn(
'Error parsing message',
str(context.exception))
2373 serialized = unittest_proto3_arena_pb2.TestAllTypes(
2375 msg2 = unittest_proto3_arena_pb2.TestAllTypes()
2376 msg2.MergeFromString(serialized)
2377 self.assertEqual(msg2.optional_string,
u'😍')
2379 msg = unittest_proto3_arena_pb2.TestAllTypes(
2380 optional_string=
u'\ud001')
2381 self.assertEqual(msg.optional_string,
u'\ud001')
2385 with self.assertRaises(ValueError):
2386 unittest_proto3_arena_pb2.TestAllTypes(
2387 optional_string=
u'\ud801\udc01')
2388 with self.assertRaises(ValueError):
2389 unittest_proto3_arena_pb2.TestAllTypes(
2390 optional_string=b
'\xed\xa0\x81')
2391 with self.assertRaises(ValueError):
2392 unittest_proto3_arena_pb2.TestAllTypes(
2393 optional_string=
u'\ud801')
2394 with self.assertRaises(ValueError):
2395 unittest_proto3_arena_pb2.TestAllTypes(
2396 optional_string=
u'\ud801\ud801')
2399 @testing_refleaks.TestCase
2405 valid_names = (
'Repeated%sContainer' % base_name,
2406 'Repeated%sFieldContainer' % base_name)
2407 self.assertTrue(any(tp_name.endswith(v)
for v
in valid_names),
2408 '%r does end with any of %r' % (tp_name, valid_names))
2410 parts = tp_name.split(
'.')
2411 class_name = parts[-1]
2412 module_name =
'.'.join(parts[:-1])
2413 __import__(module_name, fromlist=[class_name])
2417 pb = unittest_pb2.TestAllTypes()
2421 @testing_refleaks.TestCase
2425 message.repeated_int32.append(1)
2426 message.repeated_int64.append(1)
2427 message.repeated_uint32.append(1)
2428 message.repeated_uint64.append(1)
2429 message.repeated_sint32.append(1)
2430 message.repeated_sint64.append(1)
2431 message.repeated_fixed32.append(1)
2432 message.repeated_fixed64.append(1)
2433 message.repeated_sfixed32.append(1)
2434 message.repeated_sfixed64.append(1)
2435 message.repeated_float.append(1.0)
2436 message.repeated_double.append(1.0)
2437 message.repeated_bool.append(
True)
2438 message.repeated_nested_enum.append(1)
2441 message = packed_field_test_pb2.TestPackedTypes()
2443 golden_data = (b
'\x0A\x01\x01'
2449 b
'\x3A\x04\x01\x00\x00\x00'
2450 b
'\x42\x08\x01\x00\x00\x00\x00\x00\x00\x00'
2451 b
'\x4A\x04\x01\x00\x00\x00'
2452 b
'\x52\x08\x01\x00\x00\x00\x00\x00\x00\x00'
2453 b
'\x5A\x04\x00\x00\x80\x3f'
2454 b
'\x62\x08\x00\x00\x00\x00\x00\x00\xf0\x3f'
2457 self.assertEqual(golden_data, message.SerializeToString())
2460 message = packed_field_test_pb2.TestUnpackedTypes()
2462 golden_data = (b
'\x08\x01'
2468 b
'\x3D\x01\x00\x00\x00'
2469 b
'\x41\x01\x00\x00\x00\x00\x00\x00\x00'
2470 b
'\x4D\x01\x00\x00\x00'
2471 b
'\x51\x01\x00\x00\x00\x00\x00\x00\x00'
2472 b
'\x5D\x00\x00\x80\x3f'
2473 b
'\x61\x00\x00\x00\x00\x00\x00\xf0\x3f'
2476 self.assertEqual(golden_data, message.SerializeToString())
2479 @unittest.skipIf(api_implementation.Type() !=
'cpp',
2480 'explicit tests of the C++ implementation')
2481 @testing_refleaks.TestCase
2497 label: LABEL_OPTIONAL
2506 label: LABEL_OPTIONAL
2513 desc = descriptor_pb2.FileDescriptorProto()
2514 text_format.Parse(file_desc, desc)
2517 pool.FindMessageTypeByName(
'f.msg2'))
2521 self.
p.field.payload =
'c' * (1024 * 1024 * 64 + 1)
2525 from google.protobuf.pyext._message
import SetAllowOversizeProtos
2531 self.assertEqual(
str(e),
'Error parsing message')
2534 from google.protobuf.pyext._message
import SetAllowOversizeProtos
2538 self.assertEqual(self.
p.field.payload, q.field.payload)
2540 if __name__ ==
'__main__':