34 """Tests python protocol buffers against the golden message.
36 Note that the golden messages exercise every known field type, thus this
37 test ends up exercising and verifying nearly all of the parsing and
38 serialization code in the whole library.
40 TODO(kenton): Merge with wire_format_test? It doesn't make a whole lot of
41 sense to call this a test of the "message" module, which only declares an
45 __author__ =
'gps@google.com (Gregory P. Smith)'
59 import collections.abc
as collections_abc
62 import collections
as collections_abc
65 import unittest2
as unittest
71 cmp =
lambda x, y: (x > y) - (x < y)
90 UCS2_MAXUNICODE = 65535
104 return isinf(val)
and (val > 0)
106 return isinf(val)
and (val < 0)
109 @_parameterized.named_parameters(
110 (
'_proto2', unittest_pb2),
111 (
'_proto3', unittest_proto3_arena_pb2))
112 @testing_refleaks.TestCase
116 if api_implementation.Type() !=
'python':
117 self.skipTest(
"Skipping testBadUtf8String, currently only the python "
118 "api implementation raises UnicodeDecodeError when a "
119 "string field contains bad utf-8.")
120 bad_utf8_data = test_util.GoldenFileData(
'bad_utf8_string')
121 with self.assertRaises(UnicodeDecodeError)
as context:
122 message_module.TestAllTypes.FromString(bad_utf8_data)
123 self.assertIn(
'TestAllTypes.optional_string',
str(context.exception))
129 if message_module
is unittest_pb2:
130 golden_data = test_util.GoldenFileData(
131 'golden_message_oneof_implemented')
133 golden_data = test_util.GoldenFileData(
'golden_message_proto3')
135 golden_message = message_module.TestAllTypes()
136 golden_message.ParseFromString(golden_data)
137 if message_module
is unittest_pb2:
138 test_util.ExpectAllFieldsSet(self, golden_message)
139 self.assertEqual(golden_data, golden_message.SerializeToString())
140 golden_copy = copy.deepcopy(golden_message)
141 self.assertEqual(golden_data, golden_copy.SerializeToString())
144 golden_data = test_util.GoldenFileData(
'golden_packed_fields_message')
145 golden_message = message_module.TestPackedTypes()
146 parsed_bytes = golden_message.ParseFromString(golden_data)
147 all_set = message_module.TestPackedTypes()
148 test_util.SetAllPackedFields(all_set)
149 self.assertEqual(parsed_bytes,
len(golden_data))
150 self.assertEqual(all_set, golden_message)
151 self.assertEqual(golden_data, all_set.SerializeToString())
152 golden_copy = copy.deepcopy(golden_message)
153 self.assertEqual(golden_data, golden_copy.SerializeToString())
156 msg = message_module.TestAllTypes()
157 self.assertRaises(TypeError, msg.FromString, 0)
158 self.assertRaises(Exception, msg.FromString,
'0')
161 end_tag = encoder.TagBytes(1, 4)
162 if api_implementation.Type() ==
'python':
163 with self.assertRaises(message.DecodeError)
as context:
164 msg.FromString(end_tag)
165 self.assertEqual(
'Unexpected end-group tag.',
str(context.exception))
171 golden_data = (b
'\xe2\x02\nOne string'
172 b
'\xe2\x02\nTwo string'
173 b
'\xe2\x02\nRed string'
174 b
'\xe2\x02\x0bBlue string')
175 golden_message = message_module.TestAllTypes()
176 golden_message.repeated_string.extend([
182 self.assertEqual(golden_data,
183 golden_message.SerializeToString(deterministic=
None))
184 self.assertEqual(golden_data,
185 golden_message.SerializeToString(deterministic=
False))
186 self.assertEqual(golden_data,
187 golden_message.SerializeToString(deterministic=
True))
189 class BadArgError(Exception):
192 class BadArg(object):
194 def __nonzero__(self):
200 with self.assertRaises(BadArgError):
201 golden_message.SerializeToString(deterministic=BadArg())
204 golden_data = test_util.GoldenFileData(
'golden_message')
205 golden_message = message_module.TestAllTypes()
206 golden_message.ParseFromString(golden_data)
207 pickled_message = pickle.dumps(golden_message)
209 unpickled_message = pickle.loads(pickled_message)
210 self.assertEqual(unpickled_message, golden_message)
213 if message_module
is unittest_pb2:
214 golden_data = (b
'\x5D\x00\x00\x80\x7F'
215 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
216 b
'\xCD\x02\x00\x00\x80\x7F'
217 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\x7F')
219 golden_data = (b
'\x5D\x00\x00\x80\x7F'
220 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
221 b
'\xCA\x02\x04\x00\x00\x80\x7F'
222 b
'\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
224 golden_message = message_module.TestAllTypes()
225 golden_message.ParseFromString(golden_data)
226 self.assertTrue(
IsPosInf(golden_message.optional_float))
227 self.assertTrue(
IsPosInf(golden_message.optional_double))
228 self.assertTrue(
IsPosInf(golden_message.repeated_float[0]))
229 self.assertTrue(
IsPosInf(golden_message.repeated_double[0]))
230 self.assertEqual(golden_data, golden_message.SerializeToString())
233 if message_module
is unittest_pb2:
234 golden_data = (b
'\x5D\x00\x00\x80\xFF'
235 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
236 b
'\xCD\x02\x00\x00\x80\xFF'
237 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\xFF')
239 golden_data = (b
'\x5D\x00\x00\x80\xFF'
240 b
'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
241 b
'\xCA\x02\x04\x00\x00\x80\xFF'
242 b
'\xD2\x02\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
244 golden_message = message_module.TestAllTypes()
245 golden_message.ParseFromString(golden_data)
246 self.assertTrue(
IsNegInf(golden_message.optional_float))
247 self.assertTrue(
IsNegInf(golden_message.optional_double))
248 self.assertTrue(
IsNegInf(golden_message.repeated_float[0]))
249 self.assertTrue(
IsNegInf(golden_message.repeated_double[0]))
250 self.assertEqual(golden_data, golden_message.SerializeToString())
253 golden_data = (b
'\x5D\x00\x00\xC0\x7F'
254 b
'\x61\x00\x00\x00\x00\x00\x00\xF8\x7F'
255 b
'\xCD\x02\x00\x00\xC0\x7F'
256 b
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF8\x7F')
257 golden_message = message_module.TestAllTypes()
258 golden_message.ParseFromString(golden_data)
259 self.assertTrue(
isnan(golden_message.optional_float))
260 self.assertTrue(
isnan(golden_message.optional_double))
261 self.assertTrue(
isnan(golden_message.repeated_float[0]))
262 self.assertTrue(
isnan(golden_message.repeated_double[0]))
268 serialized = golden_message.SerializeToString()
269 message = message_module.TestAllTypes()
270 message.ParseFromString(serialized)
271 self.assertTrue(
isnan(message.optional_float))
272 self.assertTrue(
isnan(message.optional_double))
273 self.assertTrue(
isnan(message.repeated_float[0]))
274 self.assertTrue(
isnan(message.repeated_double[0]))
277 golden_data = (b
'\xA2\x06\x04\x00\x00\x80\x7F'
278 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
279 golden_message = message_module.TestPackedTypes()
280 golden_message.ParseFromString(golden_data)
281 self.assertTrue(
IsPosInf(golden_message.packed_float[0]))
282 self.assertTrue(
IsPosInf(golden_message.packed_double[0]))
283 self.assertEqual(golden_data, golden_message.SerializeToString())
286 golden_data = (b
'\xA2\x06\x04\x00\x00\x80\xFF'
287 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
288 golden_message = message_module.TestPackedTypes()
289 golden_message.ParseFromString(golden_data)
290 self.assertTrue(
IsNegInf(golden_message.packed_float[0]))
291 self.assertTrue(
IsNegInf(golden_message.packed_double[0]))
292 self.assertEqual(golden_data, golden_message.SerializeToString())
295 golden_data = (b
'\xA2\x06\x04\x00\x00\xC0\x7F'
296 b
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF8\x7F')
297 golden_message = message_module.TestPackedTypes()
298 golden_message.ParseFromString(golden_data)
299 self.assertTrue(
isnan(golden_message.packed_float[0]))
300 self.assertTrue(
isnan(golden_message.packed_double[0]))
302 serialized = golden_message.SerializeToString()
303 message = message_module.TestPackedTypes()
304 message.ParseFromString(serialized)
305 self.assertTrue(
isnan(message.packed_float[0]))
306 self.assertTrue(
isnan(message.packed_double[0]))
309 message = message_module.TestAllTypes()
312 kMostPosExponentNoSigBits = math.pow(2, 127)
313 message.optional_float = kMostPosExponentNoSigBits
314 message.ParseFromString(message.SerializeToString())
315 self.assertTrue(message.optional_float == kMostPosExponentNoSigBits)
318 kMostPosExponentOneSigBit = 1.5 * math.pow(2, 127)
319 message.optional_float = kMostPosExponentOneSigBit
320 message.ParseFromString(message.SerializeToString())
321 self.assertTrue(message.optional_float == kMostPosExponentOneSigBit)
324 message.optional_float = -kMostPosExponentNoSigBits
325 message.ParseFromString(message.SerializeToString())
326 self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits)
328 message.optional_float = -kMostPosExponentOneSigBit
329 message.ParseFromString(message.SerializeToString())
330 self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit)
333 kMostNegExponentNoSigBits = math.pow(2, -127)
334 message.optional_float = kMostNegExponentNoSigBits
335 message.ParseFromString(message.SerializeToString())
336 self.assertTrue(message.optional_float == kMostNegExponentNoSigBits)
339 kMostNegExponentOneSigBit = 1.5 * math.pow(2, -127)
340 message.optional_float = kMostNegExponentOneSigBit
341 message.ParseFromString(message.SerializeToString())
342 self.assertTrue(message.optional_float == kMostNegExponentOneSigBit)
345 message.optional_float = -kMostNegExponentNoSigBits
346 message.ParseFromString(message.SerializeToString())
347 self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits)
349 message.optional_float = -kMostNegExponentOneSigBit
350 message.ParseFromString(message.SerializeToString())
351 self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit)
354 max_float = float.fromhex(
'0x1.fffffep+127')
355 message.optional_float = max_float
356 self.assertAlmostEqual(message.optional_float, max_float)
357 serialized_data = message.SerializeToString()
358 message.ParseFromString(serialized_data)
359 self.assertAlmostEqual(message.optional_float, max_float)
362 message.optional_float = 3.4028235e+39
363 self.assertEqual(message.optional_float, float(
'inf'))
364 serialized_data = message.SerializeToString()
365 message.ParseFromString(serialized_data)
366 self.assertEqual(message.optional_float, float(
'inf'))
368 message.optional_float = -3.4028235e+39
369 self.assertEqual(message.optional_float, float(
'-inf'))
371 message.optional_float = 1.4028235e-39
372 self.assertAlmostEqual(message.optional_float, 1.4028235e-39)
375 message = message_module.TestAllTypes()
378 kMostPosExponentNoSigBits = math.pow(2, 1023)
379 message.optional_double = kMostPosExponentNoSigBits
380 message.ParseFromString(message.SerializeToString())
381 self.assertTrue(message.optional_double == kMostPosExponentNoSigBits)
384 kMostPosExponentOneSigBit = 1.5 * math.pow(2, 1023)
385 message.optional_double = kMostPosExponentOneSigBit
386 message.ParseFromString(message.SerializeToString())
387 self.assertTrue(message.optional_double == kMostPosExponentOneSigBit)
390 message.optional_double = -kMostPosExponentNoSigBits
391 message.ParseFromString(message.SerializeToString())
392 self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits)
394 message.optional_double = -kMostPosExponentOneSigBit
395 message.ParseFromString(message.SerializeToString())
396 self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit)
399 kMostNegExponentNoSigBits = math.pow(2, -1023)
400 message.optional_double = kMostNegExponentNoSigBits
401 message.ParseFromString(message.SerializeToString())
402 self.assertTrue(message.optional_double == kMostNegExponentNoSigBits)
405 kMostNegExponentOneSigBit = 1.5 * math.pow(2, -1023)
406 message.optional_double = kMostNegExponentOneSigBit
407 message.ParseFromString(message.SerializeToString())
408 self.assertTrue(message.optional_double == kMostNegExponentOneSigBit)
411 message.optional_double = -kMostNegExponentNoSigBits
412 message.ParseFromString(message.SerializeToString())
413 self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits)
415 message.optional_double = -kMostNegExponentOneSigBit
416 message.ParseFromString(message.SerializeToString())
417 self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit)
420 message = message_module.TestAllTypes()
421 message.optional_float = 2.0
422 self.assertEqual(
str(message),
'optional_float: 2.0\n')
425 message = message_module.TestAllTypes()
426 message.optional_double = 0.12345678912345678
427 if sys.version_info >= (3,):
428 self.assertEqual(
str(message),
'optional_double: 0.12345678912345678\n')
430 self.assertEqual(
str(message),
'optional_double: 0.123456789123\n')
433 populated = message_module.TestAllTypes()
434 test_util.SetAllNonLazyFields(populated)
435 empty = message_module.TestEmptyMessage()
436 empty.ParseFromString(populated.SerializeToString())
437 self.assertEqual(
str(empty),
'')
440 msg = message_module.TestAllTypes()
441 msg.repeated_nested_message.append(
442 message_module.TestAllTypes.NestedMessage(bb=1))
443 nested = message_module.TestAllTypes.NestedMessage(bb=2)
444 msg.repeated_nested_message.append(nested)
446 msg.repeated_nested_message.append(1)
449 self.assertEqual(2,
len(msg.repeated_nested_message))
450 self.assertEqual([1, 2],
451 [m.bb
for m
in msg.repeated_nested_message])
454 msg = message_module.TestAllTypes()
455 msg.repeated_nested_message.insert(
456 -1, message_module.TestAllTypes.NestedMessage(bb=1))
457 sub_msg = msg.repeated_nested_message[0]
458 msg.repeated_nested_message.insert(
459 0, message_module.TestAllTypes.NestedMessage(bb=2))
460 msg.repeated_nested_message.insert(
461 99, message_module.TestAllTypes.NestedMessage(bb=3))
462 msg.repeated_nested_message.insert(
463 -2, message_module.TestAllTypes.NestedMessage(bb=-1))
464 msg.repeated_nested_message.insert(
465 -1000, message_module.TestAllTypes.NestedMessage(bb=-1000))
467 msg.repeated_nested_message.insert(1, 999)
470 self.assertEqual(5,
len(msg.repeated_nested_message))
471 self.assertEqual([-1000, 2, -1, 1, 3],
472 [m.bb
for m
in msg.repeated_nested_message])
473 self.assertEqual(
str(msg),
474 'repeated_nested_message {\n'
477 'repeated_nested_message {\n'
480 'repeated_nested_message {\n'
483 'repeated_nested_message {\n'
486 'repeated_nested_message {\n'
489 self.assertEqual(sub_msg.bb, 1)
492 msg = message_module.TestAllTypes()
493 msg.repeated_int32.append(1)
494 msg.repeated_int32.append(3)
495 msg.repeated_nested_message.add(bb=1)
496 msg.repeated_nested_message.add(bb=2)
497 other_msg = message_module.TestAllTypes()
498 other_msg.repeated_nested_message.add(bb=3)
499 other_msg.repeated_nested_message.add(bb=4)
500 other_msg.repeated_int32.append(5)
501 other_msg.repeated_int32.append(7)
503 msg.repeated_int32.MergeFrom(other_msg.repeated_int32)
504 self.assertEqual(4,
len(msg.repeated_int32))
506 msg.repeated_nested_message.MergeFrom(other_msg.repeated_nested_message)
507 self.assertEqual([1, 2, 3, 4],
508 [m.bb
for m
in msg.repeated_nested_message])
511 msg = message_module.TestAllTypes()
513 msg.repeated_nested_message.add(
'wrong')
517 msg.repeated_nested_message.add(value_field=
'wrong')
520 self.assertEqual(
len(msg.repeated_nested_message), 0)
523 msg = message_module.TestAllTypes()
524 msg.repeated_int32.extend([1, 2, 3])
525 self.assertIn(2, msg.repeated_int32)
526 self.assertNotIn(0, msg.repeated_int32)
528 msg.repeated_nested_message.add(bb=1)
529 sub_msg1 = msg.repeated_nested_message[0]
530 sub_msg2 = message_module.TestAllTypes.NestedMessage(bb=2)
531 sub_msg3 = message_module.TestAllTypes.NestedMessage(bb=3)
532 msg.repeated_nested_message.append(sub_msg2)
533 msg.repeated_nested_message.insert(0, sub_msg3)
534 self.assertIn(sub_msg1, msg.repeated_nested_message)
535 self.assertIn(sub_msg2, msg.repeated_nested_message)
536 self.assertIn(sub_msg3, msg.repeated_nested_message)
539 msg = message_module.TestAllTypes()
540 msg.repeated_int32.extend([1, 2, 3])
542 for item
in msg.repeated_int32:
544 self.assertEqual(add, 6)
547 msg = message_module.TestAllTypes()
548 msg.repeated_nested_message.add(bb=1)
549 msg.repeated_nested_message.add(bb=2)
550 msg.repeated_nested_message.add(bb=3)
551 msg.repeated_nested_message.add(bb=4)
553 self.assertEqual([1, 2, 3, 4],
554 [m.bb
for m
in msg.repeated_nested_message])
555 self.assertEqual([4, 3, 2, 1],
556 [m.bb
for m
in reversed(msg.repeated_nested_message)])
557 self.assertEqual([4, 3, 2, 1],
558 [m.bb
for m
in msg.repeated_nested_message[::-1]])
561 """Check some different types with the default comparator."""
562 message = message_module.TestAllTypes()
565 message.repeated_int32.append(1)
566 message.repeated_int32.append(3)
567 message.repeated_int32.append(2)
568 message.repeated_int32.sort()
569 self.assertEqual(message.repeated_int32[0], 1)
570 self.assertEqual(message.repeated_int32[1], 2)
571 self.assertEqual(message.repeated_int32[2], 3)
572 self.assertEqual(
str(message.repeated_int32),
str([1, 2, 3]))
574 message.repeated_float.append(1.1)
575 message.repeated_float.append(1.3)
576 message.repeated_float.append(1.2)
577 message.repeated_float.sort()
578 self.assertAlmostEqual(message.repeated_float[0], 1.1)
579 self.assertAlmostEqual(message.repeated_float[1], 1.2)
580 self.assertAlmostEqual(message.repeated_float[2], 1.3)
582 message.repeated_string.append(
'a')
583 message.repeated_string.append(
'c')
584 message.repeated_string.append(
'b')
585 message.repeated_string.sort()
586 self.assertEqual(message.repeated_string[0],
'a')
587 self.assertEqual(message.repeated_string[1],
'b')
588 self.assertEqual(message.repeated_string[2],
'c')
589 self.assertEqual(
str(message.repeated_string),
str([
u'a',
u'b',
u'c']))
591 message.repeated_bytes.append(b
'a')
592 message.repeated_bytes.append(b
'c')
593 message.repeated_bytes.append(b
'b')
594 message.repeated_bytes.sort()
595 self.assertEqual(message.repeated_bytes[0], b
'a')
596 self.assertEqual(message.repeated_bytes[1], b
'b')
597 self.assertEqual(message.repeated_bytes[2], b
'c')
598 self.assertEqual(
str(message.repeated_bytes),
str([b
'a', b
'b', b
'c']))
601 """Check some different types with custom comparator."""
602 message = message_module.TestAllTypes()
604 message.repeated_int32.append(-3)
605 message.repeated_int32.append(-2)
606 message.repeated_int32.append(-1)
607 message.repeated_int32.sort(key=abs)
608 self.assertEqual(message.repeated_int32[0], -1)
609 self.assertEqual(message.repeated_int32[1], -2)
610 self.assertEqual(message.repeated_int32[2], -3)
612 message.repeated_string.append(
'aaa')
613 message.repeated_string.append(
'bb')
614 message.repeated_string.append(
'c')
615 message.repeated_string.sort(key=len)
616 self.assertEqual(message.repeated_string[0],
'c')
617 self.assertEqual(message.repeated_string[1],
'bb')
618 self.assertEqual(message.repeated_string[2],
'aaa')
621 """Check passing a custom comparator to sort a repeated composite field."""
622 message = message_module.TestAllTypes()
624 message.repeated_nested_message.add().bb = 1
625 message.repeated_nested_message.add().bb = 3
626 message.repeated_nested_message.add().bb = 2
627 message.repeated_nested_message.add().bb = 6
628 message.repeated_nested_message.add().bb = 5
629 message.repeated_nested_message.add().bb = 4
630 message.repeated_nested_message.sort(key=operator.attrgetter(
'bb'))
631 self.assertEqual(message.repeated_nested_message[0].bb, 1)
632 self.assertEqual(message.repeated_nested_message[1].bb, 2)
633 self.assertEqual(message.repeated_nested_message[2].bb, 3)
634 self.assertEqual(message.repeated_nested_message[3].bb, 4)
635 self.assertEqual(message.repeated_nested_message[4].bb, 5)
636 self.assertEqual(message.repeated_nested_message[5].bb, 6)
637 self.assertEqual(
str(message.repeated_nested_message),
638 '[bb: 1\n, bb: 2\n, bb: 3\n, bb: 4\n, bb: 5\n, bb: 6\n]')
641 """Check passing a custom comparator to sort a repeated composite field."""
642 message = message_module.TestAllTypes()
644 message.repeated_nested_message.add().bb = 21
645 message.repeated_nested_message.add().bb = 20
646 message.repeated_nested_message.add().bb = 13
647 message.repeated_nested_message.add().bb = 33
648 message.repeated_nested_message.add().bb = 11
649 message.repeated_nested_message.add().bb = 24
650 message.repeated_nested_message.add().bb = 10
651 message.repeated_nested_message.sort(key=
lambda z: z.bb // 10)
653 [13, 11, 10, 21, 20, 24, 33],
654 [n.bb
for n
in message.repeated_nested_message])
658 pb = message.SerializeToString()
660 message.MergeFromString(pb)
662 [13, 11, 10, 21, 20, 24, 33],
663 [n.bb
for n
in message.repeated_nested_message])
666 """Check sorting a repeated composite field using list.sort() arguments."""
667 message = message_module.TestAllTypes()
669 get_bb = operator.attrgetter(
'bb')
670 cmp_bb =
lambda a, b:
cmp(a.bb, b.bb)
671 message.repeated_nested_message.add().bb = 1
672 message.repeated_nested_message.add().bb = 3
673 message.repeated_nested_message.add().bb = 2
674 message.repeated_nested_message.add().bb = 6
675 message.repeated_nested_message.add().bb = 5
676 message.repeated_nested_message.add().bb = 4
677 message.repeated_nested_message.sort(key=get_bb)
678 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
680 message.repeated_nested_message.sort(key=get_bb, reverse=
True)
681 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
683 if sys.version_info >= (3,):
return
684 message.repeated_nested_message.sort(sort_function=cmp_bb)
685 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
687 message.repeated_nested_message.sort(cmp=cmp_bb, reverse=
True)
688 self.assertEqual([k.bb
for k
in message.repeated_nested_message],
692 """Check sorting a scalar field using list.sort() arguments."""
693 message = message_module.TestAllTypes()
695 message.repeated_int32.append(-3)
696 message.repeated_int32.append(-2)
697 message.repeated_int32.append(-1)
698 message.repeated_int32.sort(key=abs)
699 self.assertEqual(list(message.repeated_int32), [-1, -2, -3])
700 message.repeated_int32.sort(key=abs, reverse=
True)
701 self.assertEqual(list(message.repeated_int32), [-3, -2, -1])
702 if sys.version_info < (3,):
703 abs_cmp =
lambda a, b:
cmp(abs(a), abs(b))
704 message.repeated_int32.sort(sort_function=abs_cmp)
705 self.assertEqual(list(message.repeated_int32), [-1, -2, -3])
706 message.repeated_int32.sort(cmp=abs_cmp, reverse=
True)
707 self.assertEqual(list(message.repeated_int32), [-3, -2, -1])
709 message.repeated_string.append(
'aaa')
710 message.repeated_string.append(
'bb')
711 message.repeated_string.append(
'c')
712 message.repeated_string.sort(key=len)
713 self.assertEqual(list(message.repeated_string), [
'c',
'bb',
'aaa'])
714 message.repeated_string.sort(key=len, reverse=
True)
715 self.assertEqual(list(message.repeated_string), [
'aaa',
'bb',
'c'])
716 if sys.version_info < (3,):
717 len_cmp =
lambda a, b:
cmp(
len(a),
len(b))
718 message.repeated_string.sort(sort_function=len_cmp)
719 self.assertEqual(list(message.repeated_string), [
'c',
'bb',
'aaa'])
720 message.repeated_string.sort(cmp=len_cmp, reverse=
True)
721 self.assertEqual(list(message.repeated_string), [
'aaa',
'bb',
'c'])
724 m1 = message_module.TestAllTypes()
725 m2 = message_module.TestAllTypes()
726 m1.repeated_int32.append(0)
727 m1.repeated_int32.append(1)
728 m1.repeated_int32.append(2)
729 m2.repeated_int32.append(0)
730 m2.repeated_int32.append(1)
731 m2.repeated_int32.append(2)
732 m1.repeated_nested_message.add().bb = 1
733 m1.repeated_nested_message.add().bb = 2
734 m1.repeated_nested_message.add().bb = 3
735 m2.repeated_nested_message.add().bb = 1
736 m2.repeated_nested_message.add().bb = 2
737 m2.repeated_nested_message.add().bb = 3
739 if sys.version_info >= (3,):
return
743 _ = m1.repeated_nested_message < m2.repeated_nested_message
747 self.assertEqual(
cmp(m1, m2), 0)
748 self.assertEqual(
cmp(m1.repeated_int32, m2.repeated_int32), 0)
749 self.assertEqual(
cmp(m1.repeated_int32, [0, 1, 2]), 0)
750 self.assertEqual(
cmp(m1.repeated_nested_message,
751 m2.repeated_nested_message), 0)
752 with self.assertRaises(TypeError):
754 cmp(m1.repeated_nested_message, m2.repeated_nested_message[:])
759 m = message_module.TestAllTypes()
760 self.assertIsInstance(m.repeated_int32, collections_abc.MutableSequence)
761 self.assertIsInstance(m.repeated_nested_message,
762 collections_abc.MutableSequence)
765 m = message_module.TestAllTypes()
766 with self.assertRaises(TypeError):
767 hash(m.repeated_int32)
768 with self.assertRaises(TypeError):
769 hash(m.repeated_nested_message)
772 m = message_module.NestedTestAllTypes()
773 m.payload.repeated_int32.extend([])
774 self.assertTrue(m.HasField(
'payload'))
777 m1 = message_module.TestAllTypes()
778 m2 = message_module.TestAllTypes()
780 nested = m1.optional_nested_message
781 self.assertEqual(0, nested.bb)
782 m2.optional_nested_message.bb = 1
786 self.assertEqual(1, nested.bb)
789 msg1 = message_module.NestedTestAllTypes()
790 msg2 = message_module.NestedTestAllTypes()
791 nested = msg1.child.payload.optional_nested_message
792 self.assertEqual(0, nested.bb)
793 msg2.child.payload.optional_nested_message.bb = 1
795 self.assertEqual(1, nested.bb)
798 self.assertEqual(msg1.payload.repeated_nested_message,
799 msg1.payload.repeated_nested_message)
800 nested = msg2.payload.repeated_nested_message.add()
803 self.assertEqual(1,
len(msg1.payload.repeated_nested_message))
804 self.assertEqual(1, nested.bb)
807 m1 = message_module.TestAllTypes()
808 m2 = message_module.TestAllTypes()
810 self.assertEqual(0, m1.optional_nested_message.bb)
811 m2.optional_nested_message.bb = 1
814 m1.MergeFromString(m2.SerializeToString())
815 self.assertEqual(1, m1.optional_nested_message.bb)
817 @unittest.skipIf(six.PY2,
'memoryview objects are not supported on py2')
819 m2 = message_module.TestAllTypes()
820 m2.optional_string =
'scalar string'
821 m2.repeated_string.append(
'repeated string')
822 m2.optional_bytes = b
'scalar bytes'
823 m2.repeated_bytes.append(b
'repeated bytes')
825 serialized = m2.SerializeToString()
826 memview = memoryview(serialized)
827 m1 = message_module.TestAllTypes.FromString(memview)
829 self.assertEqual(m1.optional_bytes, b
'scalar bytes')
830 self.assertEqual(m1.repeated_bytes, [b
'repeated bytes'])
831 self.assertEqual(m1.optional_string,
'scalar string')
832 self.assertEqual(m1.repeated_string, [
'repeated string'])
835 self.assertIsInstance(m1.optional_bytes, bytes)
836 self.assertIsInstance(m1.repeated_bytes[0], bytes)
837 self.assertIsInstance(m1.optional_string, six.text_type)
838 self.assertIsInstance(m1.repeated_string[0], six.text_type)
840 @unittest.skipIf(six.PY3,
'memoryview is supported by py3')
842 memview = memoryview(b
'')
843 with self.assertRaises(TypeError):
844 message_module.TestAllTypes.FromString(memview)
847 m1 = message_module.TestAllTypes()
849 self.assertEqual(0, m1.optional_nested_message.bb)
850 self.assertFalse(m1.HasField(
'optional_nested_message'))
852 m1.MergeFromString(b
'')
853 self.assertFalse(m1.HasField(
'optional_nested_message'))
856 """Make sure that a nested message object exists.
858 As soon as a nested message attribute is accessed, it will be present in the
859 _fields dict, without being marked as actually being set.
862 self.assertFalse(msg.HasField(attribute))
865 m = message_module.TestAllTypes()
866 self.assertRaises(ValueError, m.WhichOneof,
'no_such_oneof_field')
867 self.assertRaises(Exception, m.WhichOneof, 0)
870 m = message_module.TestAllTypes()
871 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
872 self.assertFalse(m.HasField(
'oneof_uint32'))
876 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
877 self.assertTrue(m.HasField(
'oneof_uint32'))
878 self.assertFalse(m.HasField(
'oneof_string'))
881 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
882 self.assertTrue(m.HasField(
'oneof_string'))
883 self.assertFalse(m.HasField(
'oneof_uint32'))
886 m = message_module.TestAllTypes()
887 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
890 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
891 self.assertTrue(m.HasField(
'oneof_uint32'))
893 m.oneof_string =
u'foo'
894 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
895 self.assertFalse(m.HasField(
'oneof_uint32'))
896 self.assertTrue(m.HasField(
'oneof_string'))
899 m.oneof_nested_message
900 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
901 self.assertTrue(m.HasField(
'oneof_string'))
902 self.assertFalse(m.HasField(
'oneof_nested_message'))
905 m.oneof_nested_message.bb
906 self.assertEqual(
'oneof_string', m.WhichOneof(
'oneof_field'))
907 self.assertTrue(m.HasField(
'oneof_string'))
908 self.assertFalse(m.HasField(
'oneof_nested_message'))
910 m.oneof_nested_message.bb = 11
911 self.assertEqual(
'oneof_nested_message', m.WhichOneof(
'oneof_field'))
912 self.assertFalse(m.HasField(
'oneof_string'))
913 self.assertTrue(m.HasField(
'oneof_nested_message'))
915 m.oneof_bytes = b
'bb'
916 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
917 self.assertFalse(m.HasField(
'oneof_nested_message'))
918 self.assertTrue(m.HasField(
'oneof_bytes'))
921 m = message_module.TestAllTypes()
925 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
926 self.assertEqual(11, m.oneof_uint32)
929 m = message_module.TestAllTypes()
930 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
931 if message_module
is unittest_pb2:
932 self.assertFalse(m.HasField(
'oneof_field'))
935 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
936 if message_module
is unittest_pb2:
937 self.assertTrue(m.HasField(
'oneof_field'))
939 m.oneof_bytes = b
'bb'
940 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
942 m.ClearField(
'oneof_bytes')
943 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
944 if message_module
is unittest_pb2:
945 self.assertFalse(m.HasField(
'oneof_field'))
948 m = message_module.TestAllTypes()
950 m.ClearField(
'oneof_field')
951 if message_module
is unittest_pb2:
952 self.assertFalse(m.HasField(
'oneof_field'))
953 self.assertFalse(m.HasField(
'oneof_uint32'))
954 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
957 m = message_module.TestAllTypes()
959 m.ClearField(
'oneof_uint32')
960 if message_module
is unittest_pb2:
961 self.assertFalse(m.HasField(
'oneof_field'))
962 self.assertFalse(m.HasField(
'oneof_uint32'))
963 self.assertIs(
None, m.WhichOneof(
'oneof_field'))
966 m = message_module.TestAllTypes()
969 m.ClearField(
'oneof_nested_message')
970 self.assertEqual(11, m.oneof_uint32)
971 if message_module
is unittest_pb2:
972 self.assertTrue(m.HasField(
'oneof_field'))
973 self.assertTrue(m.HasField(
'oneof_uint32'))
974 self.assertEqual(
'oneof_uint32', m.WhichOneof(
'oneof_field'))
977 m = message_module.TestAllTypes()
979 m2 = message_module.TestAllTypes()
980 m2.ParseFromString(m.SerializeToString())
981 self.assertEqual(
'oneof_uint32', m2.WhichOneof(
'oneof_field'))
984 m = message_module.TestAllTypes()
986 m2 = message_module.TestAllTypes()
988 self.assertEqual(
'oneof_uint32', m2.WhichOneof(
'oneof_field'))
991 m = message_module.NestedTestAllTypes()
992 m.payload.oneof_uint32 = 11
993 m2 = message_module.NestedTestAllTypes()
994 m2.payload.oneof_bytes = b
'bb'
995 m2.child.payload.oneof_bytes = b
'bb'
997 self.assertEqual(
'oneof_uint32', m2.payload.WhichOneof(
'oneof_field'))
998 self.assertEqual(
'oneof_bytes', m2.child.payload.WhichOneof(
'oneof_field'))
1001 m = message_module.NestedTestAllTypes()
1002 m.payload.oneof_nested_message.bb = 11
1003 m.child.payload.oneof_nested_message.bb = 12
1004 m2 = message_module.NestedTestAllTypes()
1005 m2.payload.oneof_uint32 = 13
1007 self.assertEqual(
'oneof_nested_message',
1008 m2.payload.WhichOneof(
'oneof_field'))
1009 self.assertEqual(
'oneof_nested_message',
1010 m2.child.payload.WhichOneof(
'oneof_field'))
1013 m = message_module.TestAllTypes(
1014 oneof_nested_message=message_module.TestAllTypes.NestedMessage())
1015 self.assertEqual(
'oneof_nested_message', m.WhichOneof(
'oneof_field'))
1018 m = message_module.TestAllTypes()
1021 self.assertIsNone(m.WhichOneof(
'oneof_field'))
1022 m.oneof_bytes = b
'bb'
1023 self.assertEqual(
'oneof_bytes', m.WhichOneof(
'oneof_field'))
1026 """Assigning a byte string to a string field should result
1027 in the value being converted to a Unicode string."""
1028 m = message_module.TestAllTypes()
1029 m.optional_string =
str(
'')
1030 self.assertIsInstance(m.optional_string, six.text_type)
1033 """It should be possible to use long-valued indicies in slices
1035 This didn't used to work in the v2 C++ implementation.
1037 m = message_module.TestAllTypes()
1040 m.repeated_int32.append(1)
1041 sl = m.repeated_int32[
long(0):
long(
len(m.repeated_int32))]
1042 self.assertEqual(
len(m.repeated_int32),
len(sl))
1045 m.repeated_nested_message.add().bb = 3
1046 sl = m.repeated_nested_message[
long(0):
long(
len(m.repeated_nested_message))]
1047 self.assertEqual(
len(m.repeated_nested_message),
len(sl))
1050 """This didn't use to work in the v2 C++ implementation."""
1051 m = message_module.TestAllTypes()
1052 with self.assertRaises(NameError)
as _:
1053 m.repeated_int32.extend(a
for i
in range(10))
1054 with self.assertRaises(NameError)
as _:
1055 m.repeated_nested_enum.extend(
1056 a
for i
in range(10))
1058 FALSY_VALUES = [
None,
False, 0, 0.0, b
'',
u'', bytearray(), [], {},
set()]
1061 """Test no-ops extending repeated int32 fields."""
1062 m = message_module.TestAllTypes()
1063 self.assertSequenceEqual([], m.repeated_int32)
1066 for falsy_value
in MessageTest.FALSY_VALUES:
1067 m.repeated_int32.extend(falsy_value)
1068 self.assertSequenceEqual([], m.repeated_int32)
1070 m.repeated_int32.extend([])
1071 self.assertSequenceEqual([], m.repeated_int32)
1074 """Test no-ops extending repeated float fields."""
1075 m = message_module.TestAllTypes()
1076 self.assertSequenceEqual([], m.repeated_float)
1079 for falsy_value
in MessageTest.FALSY_VALUES:
1080 m.repeated_float.extend(falsy_value)
1081 self.assertSequenceEqual([], m.repeated_float)
1083 m.repeated_float.extend([])
1084 self.assertSequenceEqual([], m.repeated_float)
1087 """Test no-ops extending repeated string fields."""
1088 m = message_module.TestAllTypes()
1089 self.assertSequenceEqual([], m.repeated_string)
1092 for falsy_value
in MessageTest.FALSY_VALUES:
1093 m.repeated_string.extend(falsy_value)
1094 self.assertSequenceEqual([], m.repeated_string)
1096 m.repeated_string.extend([])
1097 self.assertSequenceEqual([], m.repeated_string)
1100 """Test extending repeated int32 fields with python lists."""
1101 m = message_module.TestAllTypes()
1102 self.assertSequenceEqual([], m.repeated_int32)
1103 m.repeated_int32.extend([0])
1104 self.assertSequenceEqual([0], m.repeated_int32)
1105 m.repeated_int32.extend([1, 2])
1106 self.assertSequenceEqual([0, 1, 2], m.repeated_int32)
1107 m.repeated_int32.extend([3, 4])
1108 self.assertSequenceEqual([0, 1, 2, 3, 4], m.repeated_int32)
1111 """Test extending repeated float fields with python lists."""
1112 m = message_module.TestAllTypes()
1113 self.assertSequenceEqual([], m.repeated_float)
1114 m.repeated_float.extend([0.0])
1115 self.assertSequenceEqual([0.0], m.repeated_float)
1116 m.repeated_float.extend([1.0, 2.0])
1117 self.assertSequenceEqual([0.0, 1.0, 2.0], m.repeated_float)
1118 m.repeated_float.extend([3.0, 4.0])
1119 self.assertSequenceEqual([0.0, 1.0, 2.0, 3.0, 4.0], m.repeated_float)
1122 """Test extending repeated string fields with python lists."""
1123 m = message_module.TestAllTypes()
1124 self.assertSequenceEqual([], m.repeated_string)
1125 m.repeated_string.extend([
''])
1126 self.assertSequenceEqual([
''], m.repeated_string)
1127 m.repeated_string.extend([
'11',
'22'])
1128 self.assertSequenceEqual([
'',
'11',
'22'], m.repeated_string)
1129 m.repeated_string.extend([
'33',
'44'])
1130 self.assertSequenceEqual([
'',
'11',
'22',
'33',
'44'], m.repeated_string)
1133 """Test extending repeated string fields with characters from a string."""
1134 m = message_module.TestAllTypes()
1135 self.assertSequenceEqual([], m.repeated_string)
1136 m.repeated_string.extend(
'abc')
1137 self.assertSequenceEqual([
'a',
'b',
'c'], m.repeated_string)
1140 """This iterable object mimics the behavior of numpy.array.
1142 __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1.
1154 return bool(self.
_list[0])
1155 raise ValueError(
'Truth value is ambiguous.')
1164 """Test extending repeated int32 fields with iterable."""
1165 m = message_module.TestAllTypes()
1166 self.assertSequenceEqual([], m.repeated_int32)
1168 self.assertSequenceEqual([], m.repeated_int32)
1170 self.assertSequenceEqual([0], m.repeated_int32)
1172 self.assertSequenceEqual([0, 1, 2], m.repeated_int32)
1174 self.assertSequenceEqual([0, 1, 2, 3, 4], m.repeated_int32)
1177 """Test extending repeated float fields with iterable."""
1178 m = message_module.TestAllTypes()
1179 self.assertSequenceEqual([], m.repeated_float)
1181 self.assertSequenceEqual([], m.repeated_float)
1183 self.assertSequenceEqual([0.0], m.repeated_float)
1185 self.assertSequenceEqual([0.0, 1.0, 2.0], m.repeated_float)
1187 self.assertSequenceEqual([0.0, 1.0, 2.0, 3.0, 4.0], m.repeated_float)
1190 """Test extending repeated string fields with iterable."""
1191 m = message_module.TestAllTypes()
1192 self.assertSequenceEqual([], m.repeated_string)
1194 self.assertSequenceEqual([], m.repeated_string)
1196 self.assertSequenceEqual([
''], m.repeated_string)
1198 self.assertSequenceEqual([
'',
'1',
'2'], m.repeated_string)
1200 self.assertSequenceEqual([
'',
'1',
'2',
'3',
'4'], m.repeated_string)
1209 if (api_implementation.Type() !=
'cpp' or
1210 api_implementation.Version() == 2):
1212 m = message_module.TestAllTypes()
1213 with self.assertRaises(pickle.PickleError)
as _:
1214 pickle.dumps(m.repeated_int32, pickle.HIGHEST_PROTOCOL)
1217 """Exercise a scenario that has led to segfaults in the past.
1219 m = message_module.TestAllTypes()
1220 m.repeated_nested_message.sort()
1223 """Using HasField on a repeated field should raise an exception.
1225 m = message_module.TestAllTypes()
1226 with self.assertRaises(ValueError)
as _:
1227 m.HasField(
'repeated_int32')
1230 m = message_module.TestAllTypes()
1231 with self.assertRaises(IndexError)
as _:
1232 m.repeated_int32.pop()
1233 m.repeated_int32.extend(range(5))
1234 self.assertEqual(4, m.repeated_int32.pop())
1235 self.assertEqual(0, m.repeated_int32.pop(0))
1236 self.assertEqual(2, m.repeated_int32.pop(1))
1237 self.assertEqual([1, 3], m.repeated_int32)
1240 m = message_module.TestAllTypes()
1241 with self.assertRaises(IndexError)
as _:
1242 m.repeated_nested_message.pop()
1243 with self.assertRaises(TypeError)
as _:
1244 m.repeated_nested_message.pop(
'0')
1246 n = m.repeated_nested_message.add()
1248 self.assertEqual(4, m.repeated_nested_message.pop().bb)
1249 self.assertEqual(0, m.repeated_nested_message.pop(0).bb)
1250 self.assertEqual(2, m.repeated_nested_message.pop(1).bb)
1251 self.assertEqual([1, 3], [n.bb
for n
in m.repeated_nested_message])
1254 m = message_module.TestAllTypes()
1256 m.repeated_int32.insert(i, i)
1257 n = m.repeated_nested_message.add()
1259 self.assertSequenceEqual(m.repeated_int32, m.repeated_int32)
1260 self.assertEqual(m.repeated_nested_message, m.repeated_nested_message)
1263 """A case that lead to a segfault when a message detached from its parent
1264 container has itself a child container.
1266 m = message_module.NestedTestAllTypes()
1267 m = m.repeated_child.add()
1269 m = m.repeated_child.add()
1270 self.assertEqual(m.payload.optional_int32, 0)
1273 m = message_module.TestAllTypes()
1274 with self.assertRaises(AttributeError):
1275 m.repeated_int32 = []
1276 m.repeated_int32.append(1)
1277 with self.assertRaises(AttributeError):
1278 m.repeated_int32 = []
1281 m = message_module.TestAllTypes()
1282 self.assertEqual(float, type(m.optional_float))
1283 self.assertEqual(float, type(m.optional_double))
1284 self.assertEqual(bool, type(m.optional_bool))
1285 m.optional_float = 1
1286 m.optional_double = 1
1288 m.repeated_float.append(1)
1289 m.repeated_double.append(1)
1290 m.repeated_bool.append(1)
1291 m.ParseFromString(m.SerializeToString())
1292 self.assertEqual(float, type(m.optional_float))
1293 self.assertEqual(float, type(m.optional_double))
1294 self.assertEqual(
'1.0',
str(m.optional_double))
1295 self.assertEqual(bool, type(m.optional_bool))
1296 self.assertEqual(float, type(m.repeated_float[0]))
1297 self.assertEqual(float, type(m.repeated_double[0]))
1298 self.assertEqual(bool, type(m.repeated_bool[0]))
1299 self.assertEqual(
True, m.repeated_bool[0])
1303 @testing_refleaks.TestCase
1307 message = unittest_pb2.TestAllTypes()
1309 self.assertFalse(message.HasField(
"optional_int32"))
1310 self.assertFalse(message.HasField(
"optional_bool"))
1311 self.assertFalse(message.HasField(
"optional_nested_message"))
1313 with self.assertRaises(ValueError):
1314 message.HasField(
"field_doesnt_exist")
1316 with self.assertRaises(ValueError):
1317 message.HasField(
"repeated_int32")
1318 with self.assertRaises(ValueError):
1319 message.HasField(
"repeated_nested_message")
1321 self.assertEqual(0, message.optional_int32)
1322 self.assertEqual(
False, message.optional_bool)
1323 self.assertEqual(0, message.optional_nested_message.bb)
1326 message.optional_int32 = 0
1327 message.optional_bool =
False
1328 message.optional_nested_message.bb = 0
1329 self.assertTrue(message.HasField(
"optional_int32"))
1330 self.assertTrue(message.HasField(
"optional_bool"))
1331 self.assertTrue(message.HasField(
"optional_nested_message"))
1334 message.optional_int32 = 5
1335 message.optional_bool =
True
1336 message.optional_nested_message.bb = 15
1338 self.assertTrue(message.HasField(
u"optional_int32"))
1339 self.assertTrue(message.HasField(
"optional_bool"))
1340 self.assertTrue(message.HasField(
"optional_nested_message"))
1343 message.ClearField(
"optional_int32")
1344 message.ClearField(
u"optional_bool")
1345 message.ClearField(
"optional_nested_message")
1347 self.assertFalse(message.HasField(
"optional_int32"))
1348 self.assertFalse(message.HasField(
"optional_bool"))
1349 self.assertFalse(message.HasField(
"optional_nested_message"))
1350 self.assertEqual(0, message.optional_int32)
1351 self.assertEqual(
False, message.optional_bool)
1352 self.assertEqual(0, message.optional_nested_message.bb)
1355 """Assigning an invalid enum number is not allowed in proto2."""
1356 m = unittest_pb2.TestAllTypes()
1359 with self.assertRaises(ValueError)
as _:
1360 m.optional_nested_enum = 1234567
1361 self.assertRaises(ValueError, m.repeated_nested_enum.append, 1234567)
1363 m.repeated_nested_enum.append(2)
1364 m.repeated_nested_enum[0] = 2
1365 with self.assertRaises(ValueError):
1366 m.repeated_nested_enum[0] = 123456
1369 m2 = unittest_proto3_arena_pb2.TestAllTypes()
1370 m2.optional_nested_enum = 1234567
1371 m2.repeated_nested_enum.append(7654321)
1372 serialized = m2.SerializeToString()
1374 m3 = unittest_pb2.TestAllTypes()
1375 m3.ParseFromString(serialized)
1376 self.assertFalse(m3.HasField(
'optional_nested_enum'))
1378 self.assertEqual(1, m3.optional_nested_enum)
1379 self.assertEqual(0,
len(m3.repeated_nested_enum))
1381 m2.ParseFromString(m3.SerializeToString())
1382 self.assertEqual(1234567, m2.optional_nested_enum)
1383 self.assertEqual(7654321, m2.repeated_nested_enum[0])
1386 m = map_proto2_unittest_pb2.TestEnumMap()
1387 m.known_map_field[123] = 0
1388 with self.assertRaises(ValueError):
1389 m.unknown_map_field[1] = 123
1392 msg = unittest_pb2.TestAllTypes()
1393 self.assertRaises(AttributeError, getattr, msg,
'Extensions')
1396 msg1 = more_extensions_pb2.TopLevelMessage()
1397 msg2 = more_extensions_pb2.TopLevelMessage()
1399 self.assertEqual(0, msg1.submessage.Extensions[
1400 more_extensions_pb2.optional_int_extension])
1401 self.assertFalse(msg1.HasField(
'submessage'))
1402 msg2.submessage.Extensions[
1403 more_extensions_pb2.optional_int_extension] = 123
1406 msg1.MergeFrom(msg2)
1407 self.assertEqual(123, msg1.submessage.Extensions[
1408 more_extensions_pb2.optional_int_extension])
1411 golden_data = test_util.GoldenFileData(
'golden_message')
1412 golden_message = unittest_pb2.TestAllExtensions()
1413 golden_message.ParseFromString(golden_data)
1414 all_set = unittest_pb2.TestAllExtensions()
1415 test_util.SetAllExtensions(all_set)
1416 self.assertEqual(all_set, golden_message)
1417 self.assertEqual(golden_data, golden_message.SerializeToString())
1418 golden_copy = copy.deepcopy(golden_message)
1419 self.assertEqual(golden_data, golden_copy.SerializeToString())
1422 golden_data = test_util.GoldenFileData(
'golden_packed_fields_message')
1423 golden_message = unittest_pb2.TestPackedExtensions()
1424 golden_message.ParseFromString(golden_data)
1425 all_set = unittest_pb2.TestPackedExtensions()
1426 test_util.SetAllPackedExtensions(all_set)
1427 self.assertEqual(all_set, golden_message)
1428 self.assertEqual(golden_data, all_set.SerializeToString())
1429 golden_copy = copy.deepcopy(golden_message)
1430 self.assertEqual(golden_data, golden_copy.SerializeToString())
1433 golden_message = unittest_pb2.TestRequired(a=1)
1434 pickled_message = pickle.dumps(golden_message)
1436 unpickled_message = pickle.loads(pickled_message)
1437 self.assertEqual(unpickled_message, golden_message)
1438 self.assertEqual(unpickled_message.a, 1)
1440 self.assertRaises(message.EncodeError, unpickled_message.SerializeToString)
1447 """Check the merge behavior when a required or optional field appears
1448 multiple times in the input."""
1450 unittest_pb2.TestAllTypes(),
1451 unittest_pb2.TestAllTypes(),
1452 unittest_pb2.TestAllTypes() ]
1453 messages[0].optional_int32 = 1
1454 messages[1].optional_int64 = 2
1455 messages[2].optional_int32 = 3
1456 messages[2].optional_string =
'hello'
1458 merged_message = unittest_pb2.TestAllTypes()
1459 merged_message.optional_int32 = 3
1460 merged_message.optional_int64 = 2
1461 merged_message.optional_string =
'hello'
1463 generator = unittest_pb2.TestParsingMerge.RepeatedFieldsGenerator()
1464 generator.field1.extend(messages)
1465 generator.field2.extend(messages)
1466 generator.field3.extend(messages)
1467 generator.ext1.extend(messages)
1468 generator.ext2.extend(messages)
1469 generator.group1.add().field1.MergeFrom(messages[0])
1470 generator.group1.add().field1.MergeFrom(messages[1])
1471 generator.group1.add().field1.MergeFrom(messages[2])
1472 generator.group2.add().field1.MergeFrom(messages[0])
1473 generator.group2.add().field1.MergeFrom(messages[1])
1474 generator.group2.add().field1.MergeFrom(messages[2])
1476 data = generator.SerializeToString()
1477 parsing_merge = unittest_pb2.TestParsingMerge()
1478 parsing_merge.ParseFromString(data)
1481 self.assertEqual(parsing_merge.required_all_types, merged_message)
1482 self.assertEqual(parsing_merge.optional_all_types, merged_message)
1483 self.assertEqual(parsing_merge.optionalgroup.optional_group_all_types,
1485 self.assertEqual(parsing_merge.Extensions[
1486 unittest_pb2.TestParsingMerge.optional_ext],
1490 self.assertEqual(
len(parsing_merge.repeated_all_types), 3)
1491 self.assertEqual(
len(parsing_merge.repeatedgroup), 3)
1492 self.assertEqual(
len(parsing_merge.Extensions[
1493 unittest_pb2.TestParsingMerge.repeated_ext]), 3)
1496 message = unittest_pb2.TestAllTypes(
1498 optional_fixed32=200,
1499 optional_float=300.5,
1500 optional_bytes=b
'x',
1501 optionalgroup={
'a': 400},
1502 optional_nested_message={
'bb': 500},
1503 optional_foreign_message={},
1504 optional_nested_enum=
'BAZ',
1505 repeatedgroup=[{
'a': 600},
1507 repeated_nested_enum=[
'FOO', unittest_pb2.TestAllTypes.BAR],
1510 self.assertIsInstance(message, unittest_pb2.TestAllTypes)
1511 self.assertEqual(100, message.optional_int32)
1512 self.assertEqual(200, message.optional_fixed32)
1513 self.assertEqual(300.5, message.optional_float)
1514 self.assertEqual(b
'x', message.optional_bytes)
1515 self.assertEqual(400, message.optionalgroup.a)
1516 self.assertIsInstance(message.optional_nested_message,
1517 unittest_pb2.TestAllTypes.NestedMessage)
1518 self.assertEqual(500, message.optional_nested_message.bb)
1519 self.assertTrue(message.HasField(
'optional_foreign_message'))
1520 self.assertEqual(message.optional_foreign_message,
1521 unittest_pb2.ForeignMessage())
1522 self.assertEqual(unittest_pb2.TestAllTypes.BAZ,
1523 message.optional_nested_enum)
1524 self.assertEqual(2,
len(message.repeatedgroup))
1525 self.assertEqual(600, message.repeatedgroup[0].a)
1526 self.assertEqual(700, message.repeatedgroup[1].a)
1527 self.assertEqual(2,
len(message.repeated_nested_enum))
1528 self.assertEqual(unittest_pb2.TestAllTypes.FOO,
1529 message.repeated_nested_enum[0])
1530 self.assertEqual(unittest_pb2.TestAllTypes.BAR,
1531 message.repeated_nested_enum[1])
1532 self.assertEqual(800, message.default_int32)
1533 self.assertEqual(
'y', message.oneof_string)
1534 self.assertFalse(message.HasField(
'optional_int64'))
1535 self.assertEqual(0,
len(message.repeated_float))
1536 self.assertEqual(42, message.default_int64)
1538 message = unittest_pb2.TestAllTypes(optional_nested_enum=
u'BAZ')
1539 self.assertEqual(unittest_pb2.TestAllTypes.BAZ,
1540 message.optional_nested_enum)
1542 with self.assertRaises(ValueError):
1543 unittest_pb2.TestAllTypes(
1544 optional_nested_message={
'INVALID_NESTED_FIELD': 17})
1546 with self.assertRaises(TypeError):
1547 unittest_pb2.TestAllTypes(
1548 optional_nested_message={
'bb':
'INVALID_VALUE_TYPE'})
1550 with self.assertRaises(ValueError):
1551 unittest_pb2.TestAllTypes(optional_nested_enum=
'INVALID_LABEL')
1553 with self.assertRaises(ValueError):
1554 unittest_pb2.TestAllTypes(repeated_nested_enum=
'FOO')
1559 'optional_int32': 100,
1560 u'optional_fixed32': 200,
1562 msg = unittest_pb2.TestAllTypes(**kwargs)
1563 self.assertEqual(100, msg.optional_int32)
1564 self.assertEqual(200, msg.optional_fixed32)
1569 doc = pydoc.html.document(unittest_pb2.TestAllTypes,
'message')
1570 self.assertIn(
'class TestAllTypes', doc)
1571 self.assertIn(
'SerializePartialToString', doc)
1572 self.assertIn(
'repeated_float', doc)
1573 base = unittest_pb2.TestAllTypes.__bases__[0]
1574 self.assertRaises(AttributeError, getattr, base,
'_extensions_by_name')
1578 @testing_refleaks.TestCase
1584 dict_value = dict(dict_value)
1586 for k, v
in map_iter:
1587 self.assertEqual(v, dict_value[k])
1590 self.assertEqual({}, dict_value)
1593 message = unittest_proto3_arena_pb2.TestAllTypes()
1596 with self.assertRaises(ValueError):
1597 message.HasField(
'optional_int32')
1598 with self.assertRaises(ValueError):
1599 message.HasField(
'optional_float')
1600 with self.assertRaises(ValueError):
1601 message.HasField(
'optional_string')
1602 with self.assertRaises(ValueError):
1603 message.HasField(
'optional_bool')
1606 self.assertFalse(message.HasField(
'optional_nested_message'))
1610 with self.assertRaises(ValueError):
1611 message.HasField(
'field_doesnt_exist')
1613 with self.assertRaises(ValueError):
1614 message.HasField(
'repeated_int32')
1615 with self.assertRaises(ValueError):
1616 message.HasField(
'repeated_nested_message')
1619 self.assertEqual(0, message.optional_int32)
1620 self.assertEqual(0, message.optional_float)
1621 self.assertEqual(
'', message.optional_string)
1622 self.assertEqual(
False, message.optional_bool)
1623 self.assertEqual(0, message.optional_nested_message.bb)
1626 message.optional_nested_message.bb = 0
1627 self.assertTrue(message.HasField(
'optional_nested_message'))
1630 message.optional_int32 = 5
1631 message.optional_float = 1.1
1632 message.optional_string =
'abc'
1633 message.optional_bool =
True
1634 message.optional_nested_message.bb = 15
1637 message.ClearField(
'optional_int32')
1638 message.ClearField(
'optional_float')
1639 message.ClearField(
'optional_string')
1640 message.ClearField(
'optional_bool')
1641 message.ClearField(
'optional_nested_message')
1643 self.assertEqual(0, message.optional_int32)
1644 self.assertEqual(0, message.optional_float)
1645 self.assertEqual(
'', message.optional_string)
1646 self.assertEqual(
False, message.optional_bool)
1647 self.assertEqual(0, message.optional_nested_message.bb)
1650 """Assigning an unknown enum value is allowed and preserves the value."""
1651 m = unittest_proto3_arena_pb2.TestAllTypes()
1654 m.optional_nested_enum = 1234567
1655 self.assertEqual(1234567, m.optional_nested_enum)
1656 m.repeated_nested_enum.append(22334455)
1657 self.assertEqual(22334455, m.repeated_nested_enum[0])
1659 m.repeated_nested_enum[0] = 7654321
1660 self.assertEqual(7654321, m.repeated_nested_enum[0])
1661 serialized = m.SerializeToString()
1663 m2 = unittest_proto3_arena_pb2.TestAllTypes()
1664 m2.ParseFromString(serialized)
1665 self.assertEqual(1234567, m2.optional_nested_enum)
1666 self.assertEqual(7654321, m2.repeated_nested_enum[0])
1674 msg = map_unittest_pb2.TestMap()
1677 self.assertFalse(-123
in msg.map_int32_int32)
1678 self.assertFalse(-2**33
in msg.map_int64_int64)
1679 self.assertFalse(123
in msg.map_uint32_uint32)
1680 self.assertFalse(2**33
in msg.map_uint64_uint64)
1681 self.assertFalse(123
in msg.map_int32_double)
1682 self.assertFalse(
False in msg.map_bool_bool)
1683 self.assertFalse(
'abc' in msg.map_string_string)
1684 self.assertFalse(111
in msg.map_int32_bytes)
1685 self.assertFalse(888
in msg.map_int32_enum)
1688 self.assertEqual(0, msg.map_int32_int32[-123])
1689 self.assertEqual(0, msg.map_int64_int64[-2**33])
1690 self.assertEqual(0, msg.map_uint32_uint32[123])
1691 self.assertEqual(0, msg.map_uint64_uint64[2**33])
1692 self.assertEqual(0.0, msg.map_int32_double[123])
1693 self.assertTrue(isinstance(msg.map_int32_double[123], float))
1694 self.assertEqual(
False, msg.map_bool_bool[
False])
1695 self.assertTrue(isinstance(msg.map_bool_bool[
False], bool))
1696 self.assertEqual(
'', msg.map_string_string[
'abc'])
1697 self.assertEqual(b
'', msg.map_int32_bytes[111])
1698 self.assertEqual(0, msg.map_int32_enum[888])
1701 self.assertTrue(-123
in msg.map_int32_int32)
1702 self.assertTrue(-2**33
in msg.map_int64_int64)
1703 self.assertTrue(123
in msg.map_uint32_uint32)
1704 self.assertTrue(2**33
in msg.map_uint64_uint64)
1705 self.assertTrue(123
in msg.map_int32_double)
1706 self.assertTrue(
False in msg.map_bool_bool)
1707 self.assertTrue(
'abc' in msg.map_string_string)
1708 self.assertTrue(111
in msg.map_int32_bytes)
1709 self.assertTrue(888
in msg.map_int32_enum)
1711 self.assertIsInstance(msg.map_string_string[
'abc'], six.text_type)
1715 with self.assertRaises(TypeError):
1716 msg.map_string_string[123]
1718 with self.assertRaises(TypeError):
1719 123
in msg.map_string_string
1724 msg = map_unittest_pb2.TestMap()
1726 self.assertIsNone(msg.map_int32_int32.get(5))
1727 self.assertEqual(10, msg.map_int32_int32.get(5, 10))
1728 self.assertEqual(10, msg.map_int32_int32.get(key=5, default=10))
1729 self.assertIsNone(msg.map_int32_int32.get(5))
1731 msg.map_int32_int32[5] = 15
1732 self.assertEqual(15, msg.map_int32_int32.get(5))
1733 self.assertEqual(15, msg.map_int32_int32.get(5))
1734 with self.assertRaises(TypeError):
1735 msg.map_int32_int32.get(
'')
1737 self.assertIsNone(msg.map_int32_foreign_message.get(5))
1738 self.assertEqual(10, msg.map_int32_foreign_message.get(5, 10))
1739 self.assertEqual(10, msg.map_int32_foreign_message.get(key=5, default=10))
1741 submsg = msg.map_int32_foreign_message[5]
1742 self.assertIs(submsg, msg.map_int32_foreign_message.get(5))
1743 with self.assertRaises(TypeError):
1744 msg.map_int32_foreign_message.get(
'')
1747 msg = map_unittest_pb2.TestMap()
1749 self.assertEqual(0,
len(msg.map_int32_int32))
1750 self.assertFalse(5
in msg.map_int32_int32)
1752 msg.map_int32_int32[-123] = -456
1753 msg.map_int64_int64[-2**33] = -2**34
1754 msg.map_uint32_uint32[123] = 456
1755 msg.map_uint64_uint64[2**33] = 2**34
1756 msg.map_int32_float[2] = 1.2
1757 msg.map_int32_double[1] = 3.3
1758 msg.map_string_string[
'abc'] =
'123'
1759 msg.map_bool_bool[
True] =
True
1760 msg.map_int32_enum[888] = 2
1762 msg.map_int32_enum[123] = 456
1764 self.assertEqual([], msg.FindInitializationErrors())
1766 self.assertEqual(1,
len(msg.map_string_string))
1769 with self.assertRaises(TypeError):
1770 msg.map_string_string[123] =
'123'
1774 self.assertEqual(1,
len(msg.map_string_string))
1777 with self.assertRaises(TypeError):
1778 msg.map_string_string[
'123'] = 123
1780 serialized = msg.SerializeToString()
1781 msg2 = map_unittest_pb2.TestMap()
1782 msg2.ParseFromString(serialized)
1785 with self.assertRaises(TypeError):
1786 msg2.map_string_string[123] =
'123'
1789 with self.assertRaises(TypeError):
1790 msg2.map_string_string[
'123'] = 123
1792 self.assertEqual(-456, msg2.map_int32_int32[-123])
1793 self.assertEqual(-2**34, msg2.map_int64_int64[-2**33])
1794 self.assertEqual(456, msg2.map_uint32_uint32[123])
1795 self.assertEqual(2**34, msg2.map_uint64_uint64[2**33])
1796 self.assertAlmostEqual(1.2, msg.map_int32_float[2])
1797 self.assertEqual(3.3, msg.map_int32_double[1])
1798 self.assertEqual(
'123', msg2.map_string_string[
'abc'])
1799 self.assertEqual(
True, msg2.map_bool_bool[
True])
1800 self.assertEqual(2, msg2.map_int32_enum[888])
1801 self.assertEqual(456, msg2.map_int32_enum[123])
1802 self.assertEqual(
'{-123: -456}',
1803 str(msg2.map_int32_int32))
1806 msg = map_unittest_pb2.TestMap()
1807 msg.map_int32_int32[0] = 0
1808 msg.map_string_string[
''] =
''
1809 self.assertEqual(msg.ByteSize(), 12)
1810 self.assertEqual(b
'\n\x04\x08\x00\x10\x00r\x04\n\x00\x12\x00',
1811 msg.SerializeToString())
1814 msg = map_unittest_pb2.TestMap()
1816 unicode_obj =
u'\u1234'
1817 bytes_obj = unicode_obj.encode(
'utf8')
1819 msg.map_string_string[bytes_obj] = bytes_obj
1821 (key, value) = list(msg.map_string_string.items())[0]
1823 self.assertEqual(key, unicode_obj)
1824 self.assertEqual(value, unicode_obj)
1826 self.assertIsInstance(key, six.text_type)
1827 self.assertIsInstance(value, six.text_type)
1830 msg = map_unittest_pb2.TestMap()
1832 self.assertEqual(0,
len(msg.map_int32_foreign_message))
1833 self.assertFalse(5
in msg.map_int32_foreign_message)
1835 msg.map_int32_foreign_message[123]
1837 msg.map_int32_foreign_message.get_or_create(-456)
1839 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1840 self.assertIn(123, msg.map_int32_foreign_message)
1841 self.assertIn(-456, msg.map_int32_foreign_message)
1842 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1845 with self.assertRaises(TypeError):
1846 msg.map_int32_foreign_message[
'123']
1849 with self.assertRaises(ValueError):
1850 msg.map_int32_foreign_message[999] = msg.map_int32_foreign_message[123]
1854 self.assertEqual(2,
len(msg.map_int32_foreign_message))
1856 serialized = msg.SerializeToString()
1857 msg2 = map_unittest_pb2.TestMap()
1858 msg2.ParseFromString(serialized)
1860 self.assertEqual(2,
len(msg2.map_int32_foreign_message))
1861 self.assertIn(123, msg2.map_int32_foreign_message)
1862 self.assertIn(-456, msg2.map_int32_foreign_message)
1863 self.assertEqual(2,
len(msg2.map_int32_foreign_message))
1864 msg2.map_int32_foreign_message[123].c = 1
1866 self.assertIn(
str(msg2.map_int32_foreign_message),
1867 (
'{-456: , 123: c: 1\n}',
'{123: c: 1\n, -456: }'))
1870 msg = map_unittest_pb2.TestMap()
1871 msg.map_int32_all_types[1].optional_nested_message.bb = 1
1872 del msg.map_int32_all_types[1]
1873 msg.map_int32_all_types[2].optional_nested_message.bb = 2
1874 self.assertEqual(1,
len(msg.map_int32_all_types))
1875 msg.map_int32_all_types[1].optional_nested_message.bb = 1
1876 self.assertEqual(2,
len(msg.map_int32_all_types))
1878 serialized = msg.SerializeToString()
1879 msg2 = map_unittest_pb2.TestMap()
1880 msg2.ParseFromString(serialized)
1884 del msg2.map_int32_all_types[key]
1887 msg = map_unittest_pb2.TestMap()
1888 msg.map_int32_int32[1] = 1
1889 size = msg.ByteSize()
1890 msg.map_int32_int32[1] = 128
1891 self.assertEqual(msg.ByteSize(), size + 1)
1893 msg.map_int32_foreign_message[19].c = 1
1894 size = msg.ByteSize()
1895 msg.map_int32_foreign_message[19].c = 128
1896 self.assertEqual(msg.ByteSize(), size + 1)
1899 msg = map_unittest_pb2.TestMap()
1900 msg.map_int32_int32[12] = 34
1901 msg.map_int32_int32[56] = 78
1902 msg.map_int64_int64[22] = 33
1903 msg.map_int32_foreign_message[111].c = 5
1904 msg.map_int32_foreign_message[222].c = 10
1906 msg2 = map_unittest_pb2.TestMap()
1907 msg2.map_int32_int32[12] = 55
1908 msg2.map_int64_int64[88] = 99
1909 msg2.map_int32_foreign_message[222].c = 15
1910 msg2.map_int32_foreign_message[222].d = 20
1911 old_map_value = msg2.map_int32_foreign_message[222]
1917 expected_msg = map_unittest_pb2.TestMap()
1918 expected_msg.CopyFrom(msg)
1919 expected_msg.map_int64_int64[88] = 99
1920 self.assertEqual(msg2, expected_msg)
1922 self.assertEqual(34, msg2.map_int32_int32[12])
1923 self.assertEqual(78, msg2.map_int32_int32[56])
1924 self.assertEqual(33, msg2.map_int64_int64[22])
1925 self.assertEqual(99, msg2.map_int64_int64[88])
1926 self.assertEqual(5, msg2.map_int32_foreign_message[111].c)
1927 self.assertEqual(10, msg2.map_int32_foreign_message[222].c)
1928 self.assertFalse(msg2.map_int32_foreign_message[222].
HasField(
'd'))
1929 if api_implementation.Type() !=
'cpp':
1937 self.assertEqual(15, old_map_value.c)
1943 for key
in msg2.map_int32_foreign_message:
1944 self.assertFalse(key
in as_dict)
1945 as_dict[key] = msg2.map_int32_foreign_message[key].c
1947 self.assertEqual({111: 5, 222: 10}, as_dict)
1953 del msg2.map_int32_int32[12]
1954 self.assertFalse(12
in msg2.map_int32_int32)
1956 del msg2.map_int32_foreign_message[222]
1957 self.assertFalse(222
in msg2.map_int32_foreign_message)
1958 with self.assertRaises(TypeError):
1959 del msg2.map_int32_foreign_message[
'']
1962 msg = map_unittest_pb2.TestMap()
1963 msg.map_int32_int32[12] = 34
1964 msg.map_int32_int32[56] = 78
1965 msg.map_int64_int64[22] = 33
1966 msg.map_int32_foreign_message[111].c = 5
1967 msg.map_int32_foreign_message[222].c = 10
1969 msg2 = map_unittest_pb2.TestMap()
1970 msg2.map_int32_int32[12] = 55
1971 msg2.map_int64_int64[88] = 99
1972 msg2.map_int32_foreign_message[222].c = 15
1973 msg2.map_int32_foreign_message[222].d = 20
1975 msg2.map_int32_int32.MergeFrom(msg.map_int32_int32)
1976 self.assertEqual(34, msg2.map_int32_int32[12])
1977 self.assertEqual(78, msg2.map_int32_int32[56])
1979 msg2.map_int64_int64.MergeFrom(msg.map_int64_int64)
1980 self.assertEqual(33, msg2.map_int64_int64[22])
1981 self.assertEqual(99, msg2.map_int64_int64[88])
1983 msg2.map_int32_foreign_message.MergeFrom(msg.map_int32_foreign_message)
1987 expected_msg = map_unittest_pb2.TestMap()
1988 expected_msg.CopyFrom(msg)
1989 expected_msg.map_int64_int64[88] = 99
1990 self.assertEqual(msg2, expected_msg)
1993 m1 = map_unittest_pb2.TestMap()
1994 m2 = map_unittest_pb2.TestMap()
1995 self.assertEqual(m1.map_int32_foreign_message,
1996 m1.map_int32_foreign_message)
1997 m2.map_int32_foreign_message[123].c = 10
1999 self.assertEqual(10, m2.map_int32_foreign_message[123].c)
2002 msg = map_unittest_pb2.TestMap()
2003 with self.assertRaisesRegexp(
2005 r'Parameter to MergeFrom\(\) must be instance of same class: expected '
2006 r'.*TestMap got int\.'):
2010 msg = map_unittest_pb2.TestMap()
2011 with self.assertRaisesRegexp(
2013 r'Parameter to [A-Za-z]*From\(\) must be instance of same class: '
2014 r'expected .*TestMap got int\.'):
2018 msg = map_unittest_pb2.TestMap()
2019 msg.map_int32_int32[
long(-123)] =
long(-456)
2020 msg.map_int64_int64[
long(-2**33)] =
long(-2**34)
2021 msg.map_uint32_uint32[
long(123)] =
long(456)
2022 msg.map_uint64_uint64[
long(2**33)] =
long(2**34)
2024 serialized = msg.SerializeToString()
2025 msg2 = map_unittest_pb2.TestMap()
2026 msg2.ParseFromString(serialized)
2028 self.assertEqual(-456, msg2.map_int32_int32[-123])
2029 self.assertEqual(-2**34, msg2.map_int64_int64[-2**33])
2030 self.assertEqual(456, msg2.map_uint32_uint32[123])
2031 self.assertEqual(2**34, msg2.map_uint64_uint64[2**33])
2034 msg = map_unittest_pb2.TestMapSubmessage()
2035 msg.test_map.map_int32_int32[123] = 456
2037 serialized = msg.SerializeToString()
2038 msg2 = map_unittest_pb2.TestMapSubmessage()
2039 msg2.ParseFromString(serialized)
2041 self.assertEqual(msg, msg2)
2045 msg.test_map.map_int32_int32[888] = 999
2046 serialized = msg.SerializeToString()
2047 msg2.ParseFromString(serialized)
2048 self.assertEqual(msg, msg2)
2050 msg.test_map.map_int32_int32.clear()
2051 serialized = msg.SerializeToString()
2052 msg2.ParseFromString(serialized)
2053 self.assertEqual(msg, msg2)
2056 msg = map_unittest_pb2.TestMapSubmessage()
2057 msg.test_map.map_int32_foreign_message[123].c = 5
2059 serialized = msg.SerializeToString()
2060 msg2 = map_unittest_pb2.TestMapSubmessage()
2061 msg2.ParseFromString(serialized)
2063 self.assertEqual(msg, msg2)
2067 msg.test_map.map_int32_foreign_message[888].c = 7
2068 serialized = msg.SerializeToString()
2069 msg2.ParseFromString(serialized)
2070 self.assertEqual(msg, msg2)
2072 msg.test_map.map_int32_foreign_message[888].
MergeFrom(
2073 msg.test_map.map_int32_foreign_message[123])
2074 serialized = msg.SerializeToString()
2075 msg2.ParseFromString(serialized)
2076 self.assertEqual(msg, msg2)
2078 msg.test_map.map_int32_foreign_message.clear()
2079 serialized = msg.SerializeToString()
2080 msg2.ParseFromString(serialized)
2081 self.assertEqual(msg, msg2)
2084 msg = map_unittest_pb2.TestMap()
2086 string_string_iter = iter(msg.map_string_string)
2087 int32_foreign_iter = iter(msg.map_int32_foreign_message)
2089 msg.map_string_string[
'abc'] =
'123'
2090 msg.map_int32_foreign_message[5].c = 5
2092 with self.assertRaises(RuntimeError):
2093 for key
in string_string_iter:
2096 with self.assertRaises(RuntimeError):
2097 for key
in int32_foreign_iter:
2101 msg = map_unittest_pb2.TestMap()
2103 submsg = msg.map_int32_foreign_message[111]
2104 self.assertIs(submsg, msg.map_int32_foreign_message[111])
2105 self.assertIsInstance(submsg, unittest_pb2.ForeignMessage)
2109 serialized = msg.SerializeToString()
2110 msg2 = map_unittest_pb2.TestMap()
2111 msg2.ParseFromString(serialized)
2113 self.assertEqual(5, msg2.map_int32_foreign_message[111].c)
2116 with self.assertRaises(ValueError):
2117 msg.map_int32_foreign_message[88] = unittest_pb2.ForeignMessage()
2120 msg = map_unittest_pb2.TestMap()
2122 for k, v
in msg.map_int32_int32.items():
2124 self.assertTrue(
False)
2126 msg.map_int32_int32[2] = 4
2127 msg.map_int32_int32[3] = 6
2128 msg.map_int32_int32[4] = 8
2129 self.assertEqual(3,
len(msg.map_int32_int32))
2131 matching_dict = {2: 4, 3: 6, 4: 8}
2135 if sys.version_info < (3,):
2136 msg = map_unittest_pb2.TestMap()
2137 msg.map_int32_int32[2] = 4
2138 msg.map_int32_int32[3] = 6
2139 msg.map_int32_int32[4] = 8
2140 msg.map_int32_int32[5] = 10
2141 map_int32 = msg.map_int32_int32
2142 self.assertEqual(4,
len(map_int32))
2143 msg2 = map_unittest_pb2.TestMap()
2144 msg2.ParseFromString(msg.SerializeToString())
2146 def CheckItems(seq, iterator):
2147 self.assertEqual(
next(iterator), seq[0])
2148 self.assertEqual(list(iterator), seq[1:])
2150 CheckItems(map_int32.items(), map_int32.iteritems())
2151 CheckItems(map_int32.keys(), map_int32.iterkeys())
2152 CheckItems(map_int32.values(), map_int32.itervalues())
2154 self.assertEqual(6, map_int32.get(3))
2155 self.assertEqual(
None, map_int32.get(999))
2156 self.assertEqual(6, map_int32.pop(3))
2157 self.assertEqual(0, map_int32.pop(3))
2158 self.assertEqual(3,
len(map_int32))
2159 key, value = map_int32.popitem()
2160 self.assertEqual(2 * key, value)
2161 self.assertEqual(2,
len(map_int32))
2163 self.assertEqual(0,
len(map_int32))
2165 with self.assertRaises(KeyError):
2168 self.assertEqual(0, map_int32.setdefault(2))
2169 self.assertEqual(1,
len(map_int32))
2171 map_int32.update(msg2.map_int32_int32)
2172 self.assertEqual(4,
len(map_int32))
2174 with self.assertRaises(TypeError):
2175 map_int32.update(msg2.map_int32_int32,
2176 msg2.map_int32_int32)
2177 with self.assertRaises(TypeError):
2179 with self.assertRaises(TypeError):
2180 map_int32.update(value=12)
2187 msg = map_unittest_pb2.TestMap()
2188 msg.map_string_string[
'local_init_op'] =
''
2189 msg.map_string_string[
'trainable_variables'] =
''
2190 msg.map_string_string[
'variables'] =
''
2191 msg.map_string_string[
'init_op'] =
''
2192 msg.map_string_string[
'summaries'] =
''
2193 items1 = msg.map_string_string.items()
2194 items2 = msg.map_string_string.items()
2195 self.assertEqual(items1, items2)
2198 golden_data = (b
'r\x0c\n\x07init_op\x12\x01d'
2199 b
'r\n\n\x05item1\x12\x01e'
2200 b
'r\n\n\x05item2\x12\x01f'
2201 b
'r\n\n\x05item3\x12\x01g'
2202 b
'r\x0b\n\x05item4\x12\x02QQ'
2203 b
'r\x12\n\rlocal_init_op\x12\x01a'
2204 b
'r\x0e\n\tsummaries\x12\x01e'
2205 b
'r\x18\n\x13trainable_variables\x12\x01b'
2206 b
'r\x0e\n\tvariables\x12\x01c')
2207 msg = map_unittest_pb2.TestMap()
2208 msg.map_string_string[
'local_init_op'] =
'a'
2209 msg.map_string_string[
'trainable_variables'] =
'b'
2210 msg.map_string_string[
'variables'] =
'c'
2211 msg.map_string_string[
'init_op'] =
'd'
2212 msg.map_string_string[
'summaries'] =
'e'
2213 msg.map_string_string[
'item1'] =
'e'
2214 msg.map_string_string[
'item2'] =
'f'
2215 msg.map_string_string[
'item3'] =
'g'
2216 msg.map_string_string[
'item4'] =
'QQ'
2224 self.assertEqual(golden_data, msg.SerializeToString(deterministic=
True))
2228 msg = map_unittest_pb2.TestMap()
2230 msg.map_int32_int32[2] = 4
2231 msg.map_int32_int32[3] = 6
2232 msg.map_int32_int32[4] = 8
2234 it = msg.map_int32_int32.items()
2237 matching_dict = {2: 4, 3: 6, 4: 8}
2241 msg = map_unittest_pb2.TestMap(map_int32_int32={1: 2, 3: 4})
2242 self.assertEqual(2, msg.map_int32_int32[1])
2243 self.assertEqual(4, msg.map_int32_int32[3])
2245 msg = map_unittest_pb2.TestMap(
2246 map_int32_foreign_message={3: unittest_pb2.ForeignMessage(c=5)})
2247 self.assertEqual(5, msg.map_int32_foreign_message[3].c)
2250 msg1 = map_unittest_pb2.TestMap()
2251 msg1.map_int32_int32[1] = 42
2252 msg2 = map_unittest_pb2.TestMap(map_int32_int32=msg1.map_int32_int32)
2253 self.assertEqual(42, msg2.map_int32_int32[1])
2256 msg1 = map_unittest_pb2.TestMap()
2257 msg1.map_string_foreign_message[
'test'].c = 42
2258 msg2 = map_unittest_pb2.TestMap(
2259 map_string_foreign_message=msg1.map_string_foreign_message)
2260 self.assertEqual(42, msg2.map_string_foreign_message[
'test'].c)
2264 with self.assertRaises(TypeError):
2265 map_unittest_pb2.TestMap(map_string_foreign_message=1)
2271 msg = map_unittest_pb2.TestMap()
2272 int32_map = msg.map_int32_int32
2278 msg.ClearField(
'map_int32_int32')
2279 self.assertEqual(b
'', msg.SerializeToString())
2280 matching_dict = {2: 4, 3: 6, 4: 8}
2287 msg = map_unittest_pb2.TestMap()
2288 int32_foreign_message = msg.map_int32_foreign_message
2290 int32_foreign_message[2].c = 5
2292 msg.ClearField(
'map_int32_foreign_message')
2293 self.assertEqual(b
'', msg.SerializeToString())
2294 self.assertTrue(2
in int32_foreign_message.keys())
2300 msg = map_unittest_pb2.TestMap()
2301 msg.map_int32_all_types[2].optional_string =
'bar'
2303 if api_implementation.Type() ==
'cpp':
2306 unused_map = msg.map_int32_all_types
2307 msg_value = msg.map_int32_all_types[2]
2311 msg.map_int32_all_types[3].optional_string =
'foo'
2312 self.assertEqual(msg_value.optional_string,
'bar')
2319 msg = map_unittest_pb2.TestMap()
2321 it = iter(msg.map_int32_int32)
2323 msg.ClearField(
'map_int32_int32')
2324 with self.assertRaises(RuntimeError):
2328 it = iter(msg.map_int32_foreign_message)
2329 msg.ClearField(
'map_int32_foreign_message')
2330 with self.assertRaises(RuntimeError):
2335 msg = map_unittest_pb2.TestMap()
2337 self.assertEqual(0,
len(msg.map_int32_int32))
2339 msg.map_int32_int32[4] = 6
2340 self.assertEqual(1,
len(msg.map_int32_int32))
2342 with self.assertRaises(KeyError):
2343 del msg.map_int32_int32[88]
2345 del msg.map_int32_int32[4]
2346 self.assertEqual(0,
len(msg.map_int32_int32))
2348 with self.assertRaises(KeyError):
2349 del msg.map_int32_all_types[32]
2352 msg = map_unittest_pb2.TestMap()
2353 self.assertIsInstance(msg.map_int32_int32, collections_abc.Mapping)
2354 self.assertIsInstance(msg.map_int32_int32, collections_abc.MutableMapping)
2355 self.assertIsInstance(msg.map_int32_foreign_message, collections_abc.Mapping)
2356 self.assertIsInstance(msg.map_int32_foreign_message,
2357 collections_abc.MutableMapping)
2360 msg = map_unittest_pb2.TestMap()
2361 msg.map_int32_int32[-123] = -456
2362 self.assertEqual(msg.map_int32_int32, msg.map_int32_int32)
2363 self.assertEqual(msg.map_int32_foreign_message,
2364 msg.map_int32_foreign_message)
2365 self.assertNotEqual(msg.map_int32_int32, 0)
2368 msg = map_unittest_pb2.TestMap()
2369 msg.map_string_string[
'abc'] =
'123'
2370 msg.map_int32_int32[35] = 64
2371 msg.map_string_foreign_message[
'foo'].c = 5
2372 self.assertEqual(0,
len(msg.FindInitializationErrors()))
2374 @unittest.skipIf(sys.maxunicode == UCS2_MAXUNICODE,
'Skip for ucs2')
2377 serialized = (b
'r\x03\xed\xa0\x81')
2378 msg = unittest_proto3_arena_pb2.TestAllTypes()
2379 with self.assertRaises(Exception)
as context:
2380 msg.MergeFromString(serialized)
2381 if api_implementation.Type() ==
'python':
2382 self.assertIn(
'optional_string',
str(context.exception))
2384 self.assertIn(
'Error parsing message',
str(context.exception))
2387 serialized = unittest_proto3_arena_pb2.TestAllTypes(
2389 msg2 = unittest_proto3_arena_pb2.TestAllTypes()
2390 msg2.MergeFromString(serialized)
2391 self.assertEqual(msg2.optional_string,
u'😍')
2393 msg = unittest_proto3_arena_pb2.TestAllTypes(
2394 optional_string=
u'\ud001')
2395 self.assertEqual(msg.optional_string,
u'\ud001')
2397 @unittest.skipIf(six.PY2,
'Surrogates are acceptable in python2')
2411 with self.assertRaises(ValueError):
2412 unittest_proto3_arena_pb2.TestAllTypes(
2413 optional_string=
u'\ud801\udc01')
2414 with self.assertRaises(ValueError):
2415 unittest_proto3_arena_pb2.TestAllTypes(
2416 optional_string=b
'\xed\xa0\x81')
2417 with self.assertRaises(ValueError):
2418 unittest_proto3_arena_pb2.TestAllTypes(
2419 optional_string=
u'\ud801')
2420 with self.assertRaises(ValueError):
2421 unittest_proto3_arena_pb2.TestAllTypes(
2422 optional_string=
u'\ud801\ud801')
2424 @unittest.skipIf(six.PY3
or sys.maxunicode == UCS2_MAXUNICODE,
2425 'Surrogates are rejected at setters in Python3')
2429 msg = unittest_proto3_arena_pb2.TestAllTypes(
2430 optional_string=
u'\ud801\udc01')
2434 if api_implementation.Type() ==
'python':
2435 self.assertEqual(msg.optional_string,
u'\ud801\udc01')
2437 self.assertEqual(msg.optional_string,
u'\U00010401')
2438 serialized = msg.SerializeToString()
2439 msg2 = unittest_proto3_arena_pb2.TestAllTypes()
2440 msg2.MergeFromString(serialized)
2441 self.assertEqual(msg2.optional_string,
u'\U00010401')
2444 msg = unittest_proto3_arena_pb2.TestAllTypes(
2445 optional_string=b
'\xed\xa0\x81')
2446 unittest_proto3_arena_pb2.TestAllTypes(
2447 optional_string=
u'\ud801')
2448 unittest_proto3_arena_pb2.TestAllTypes(
2449 optional_string=
u'\ud801\ud801')
2452 @testing_refleaks.TestCase
2457 tp_name =
str(type(msg)).split(
"'")[1]
2458 valid_names = (
'Repeated%sContainer' % base_name,
2459 'Repeated%sFieldContainer' % base_name)
2460 self.assertTrue(any(tp_name.endswith(v)
for v
in valid_names),
2461 '%r does end with any of %r' % (tp_name, valid_names))
2463 parts = tp_name.split(
'.')
2464 class_name = parts[-1]
2465 module_name =
'.'.join(parts[:-1])
2466 __import__(module_name, fromlist=[class_name])
2470 pb = unittest_pb2.TestAllTypes()
2474 @testing_refleaks.TestCase
2478 message.repeated_int32.append(1)
2479 message.repeated_int64.append(1)
2480 message.repeated_uint32.append(1)
2481 message.repeated_uint64.append(1)
2482 message.repeated_sint32.append(1)
2483 message.repeated_sint64.append(1)
2484 message.repeated_fixed32.append(1)
2485 message.repeated_fixed64.append(1)
2486 message.repeated_sfixed32.append(1)
2487 message.repeated_sfixed64.append(1)
2488 message.repeated_float.append(1.0)
2489 message.repeated_double.append(1.0)
2490 message.repeated_bool.append(
True)
2491 message.repeated_nested_enum.append(1)
2494 message = packed_field_test_pb2.TestPackedTypes()
2496 golden_data = (b
'\x0A\x01\x01'
2502 b
'\x3A\x04\x01\x00\x00\x00'
2503 b
'\x42\x08\x01\x00\x00\x00\x00\x00\x00\x00'
2504 b
'\x4A\x04\x01\x00\x00\x00'
2505 b
'\x52\x08\x01\x00\x00\x00\x00\x00\x00\x00'
2506 b
'\x5A\x04\x00\x00\x80\x3f'
2507 b
'\x62\x08\x00\x00\x00\x00\x00\x00\xf0\x3f'
2510 self.assertEqual(golden_data, message.SerializeToString())
2513 message = packed_field_test_pb2.TestUnpackedTypes()
2515 golden_data = (b
'\x08\x01'
2521 b
'\x3D\x01\x00\x00\x00'
2522 b
'\x41\x01\x00\x00\x00\x00\x00\x00\x00'
2523 b
'\x4D\x01\x00\x00\x00'
2524 b
'\x51\x01\x00\x00\x00\x00\x00\x00\x00'
2525 b
'\x5D\x00\x00\x80\x3f'
2526 b
'\x61\x00\x00\x00\x00\x00\x00\xf0\x3f'
2529 self.assertEqual(golden_data, message.SerializeToString())
2532 @unittest.skipIf(api_implementation.Type() !=
'cpp' or
2533 sys.version_info < (2, 7),
2534 'explicit tests of the C++ implementation for PY27 and above')
2535 @testing_refleaks.TestCase
2551 label: LABEL_OPTIONAL
2560 label: LABEL_OPTIONAL
2567 desc = descriptor_pb2.FileDescriptorProto()
2568 text_format.Parse(file_desc, desc)
2571 pool.FindMessageTypeByName(
'f.msg2'))
2575 self.
p.field.payload =
'c' * (1024 * 1024 * 64 + 1)
2579 from google.protobuf.pyext._message
import SetAllowOversizeProtos
2584 except message.DecodeError
as e:
2585 self.assertEqual(
str(e),
'Error parsing message')
2588 from google.protobuf.pyext._message
import SetAllowOversizeProtos
2592 self.assertEqual(self.
p.field.payload, q.field.payload)
2594 if __name__ ==
'__main__':