protobuf/python/google/protobuf/internal/message_test.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 # Protocol Buffers - Google's data interchange format
3 # Copyright 2008 Google Inc. All rights reserved.
4 # https://developers.google.com/protocol-buffers/
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met:
9 #
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # * Redistributions in binary form must reproduce the above
13 # copyright notice, this list of conditions and the following disclaimer
14 # in the documentation and/or other materials provided with the
15 # distribution.
16 # * Neither the name of Google Inc. nor the names of its
17 # contributors may be used to endorse or promote products derived from
18 # this software without specific prior written permission.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 
32 """Tests python protocol buffers against the golden message.
33 
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.
37 
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
40 abstract interface.
41 """
42 
43 __author__ = 'gps@google.com (Gregory P. Smith)'
44 
45 import collections
46 import copy
47 import math
48 import operator
49 import pickle
50 import pydoc
51 import sys
52 import unittest
53 import warnings
54 
55 cmp = lambda x, y: (x > y) - (x < y)
56 
57 from google.protobuf import map_proto2_unittest_pb2
58 from google.protobuf import map_unittest_pb2
59 from google.protobuf import unittest_pb2
60 from google.protobuf import unittest_proto3_arena_pb2
61 from google.protobuf import descriptor_pb2
62 from google.protobuf import descriptor_pool
63 from google.protobuf import message_factory
64 from google.protobuf import text_format
65 from google.protobuf.internal import api_implementation
66 from google.protobuf.internal import encoder
67 from google.protobuf.internal import more_extensions_pb2
68 from google.protobuf.internal import packed_field_test_pb2
69 from google.protobuf.internal import test_util
70 from google.protobuf.internal import test_proto3_optional_pb2
71 from google.protobuf.internal import testing_refleaks
72 from google.protobuf import message
73 from google.protobuf.internal import _parameterized
74 
75 UCS2_MAXUNICODE = 65535
76 
77 
78 warnings.simplefilter('error', DeprecationWarning)
79 
80 
81 @_parameterized.named_parameters(
82  ('_proto2', unittest_pb2),
83  ('_proto3', unittest_proto3_arena_pb2))
84 @testing_refleaks.TestCase
85 class MessageTest(unittest.TestCase):
86 
87  def testBadUtf8String(self, message_module):
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))
96 
97  def testGoldenMessage(self, message_module):
98  # Proto3 doesn't have the "default_foo" members or foreign enums,
99  # and doesn't preserve unknown fields, so for proto3 we use a golden
100  # message that doesn't have these fields set.
101  if message_module is unittest_pb2:
102  golden_data = test_util.GoldenFileData(
103  'golden_message_oneof_implemented')
104  else:
105  golden_data = test_util.GoldenFileData('golden_message_proto3')
106 
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())
114 
115  def testGoldenPackedMessage(self, message_module):
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())
126 
127  def testParseErrors(self, message_module):
128  msg = message_module.TestAllTypes()
129  self.assertRaises(TypeError, msg.FromString, 0)
130  self.assertRaises(Exception, msg.FromString, '0')
131  # TODO(jieluo): Fix cpp extension to raise error instead of warning.
132  # b/27494216
133  end_tag = encoder.TagBytes(1, 4)
134  if api_implementation.Type() == 'python':
135  with self.assertRaises(message.DecodeError) as context:
136  msg.FromString(end_tag)
137  self.assertEqual('Unexpected end-group tag.', str(context.exception))
138 
139  # Field number 0 is illegal.
140  self.assertRaises(message.DecodeError, msg.FromString, b'\3\4')
141 
142  def testDeterminismParameters(self, message_module):
143  # This message is always deterministically serialized, even if determinism
144  # is disabled, so we can use it to verify that all the determinism
145  # parameters work correctly.
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([
152  'One string',
153  'Two string',
154  'Red string',
155  'Blue string',
156  ])
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))
163 
164  class BadArgError(Exception):
165  pass
166 
167  class BadArg(object):
168 
169  def __nonzero__(self):
170  raise BadArgError()
171 
172  def __bool__(self):
173  raise BadArgError()
174 
175  with self.assertRaises(BadArgError):
176  golden_message.SerializeToString(deterministic=BadArg())
177 
178  def testPickleSupport(self, message_module):
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)
183 
184  unpickled_message = pickle.loads(pickled_message)
185  self.assertEqual(unpickled_message, golden_message)
186 
187  def testPickleNestedMessage(self, message_module):
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)
192 
193  def testPickleNestedNestedMessage(self, message_module):
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)
199 
200  def testPositiveInfinity(self, message_module):
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')
206  else:
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')
211 
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())
219 
220  def testNegativeInfinity(self, message_module):
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')
226  else:
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')
231 
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())
239 
240  def testNotANumber(self, message_module):
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]))
251 
252  # The protocol buffer may serialize to any one of multiple different
253  # representations of a NaN. Rather than verify a specific representation,
254  # verify the serialized string can be converted into a correctly
255  # behaving protocol buffer.
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]))
263 
264  def testPositiveInfinityPacked(self, message_module):
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())
272 
273  def testNegativeInfinityPacked(self, message_module):
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())
281 
282  def testNotANumberPacked(self, message_module):
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]))
289 
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]))
295 
296  def testExtremeFloatValues(self, message_module):
297  message = message_module.TestAllTypes()
298 
299  # Most positive exponent, no significand bits set.
300  kMostPosExponentNoSigBits = math.pow(2, 127)
301  message.optional_float = kMostPosExponentNoSigBits
302  message.ParseFromString(message.SerializeToString())
303  self.assertTrue(message.optional_float == kMostPosExponentNoSigBits)
304 
305  # Most positive exponent, one significand bit set.
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)
310 
311  # Repeat last two cases with values of same magnitude, but negative.
312  message.optional_float = -kMostPosExponentNoSigBits
313  message.ParseFromString(message.SerializeToString())
314  self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits)
315 
316  message.optional_float = -kMostPosExponentOneSigBit
317  message.ParseFromString(message.SerializeToString())
318  self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit)
319 
320  # Most negative exponent, no significand bits set.
321  kMostNegExponentNoSigBits = math.pow(2, -127)
322  message.optional_float = kMostNegExponentNoSigBits
323  message.ParseFromString(message.SerializeToString())
324  self.assertTrue(message.optional_float == kMostNegExponentNoSigBits)
325 
326  # Most negative exponent, one significand bit set.
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)
331 
332  # Repeat last two cases with values of the same magnitude, but negative.
333  message.optional_float = -kMostNegExponentNoSigBits
334  message.ParseFromString(message.SerializeToString())
335  self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits)
336 
337  message.optional_float = -kMostNegExponentOneSigBit
338  message.ParseFromString(message.SerializeToString())
339  self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit)
340 
341  # Max 4 bytes float value
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)
348 
349  # Test set double to float field.
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'))
355 
356  message.optional_float = -3.4028235e+39
357  self.assertEqual(message.optional_float, float('-inf'))
358 
359  message.optional_float = 1.4028235e-39
360  self.assertAlmostEqual(message.optional_float, 1.4028235e-39)
361 
362  def testExtremeDoubleValues(self, message_module):
363  message = message_module.TestAllTypes()
364 
365  # Most positive exponent, no significand bits set.
366  kMostPosExponentNoSigBits = math.pow(2, 1023)
367  message.optional_double = kMostPosExponentNoSigBits
368  message.ParseFromString(message.SerializeToString())
369  self.assertTrue(message.optional_double == kMostPosExponentNoSigBits)
370 
371  # Most positive exponent, one significand bit set.
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)
376 
377  # Repeat last two cases with values of same magnitude, but negative.
378  message.optional_double = -kMostPosExponentNoSigBits
379  message.ParseFromString(message.SerializeToString())
380  self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits)
381 
382  message.optional_double = -kMostPosExponentOneSigBit
383  message.ParseFromString(message.SerializeToString())
384  self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit)
385 
386  # Most negative exponent, no significand bits set.
387  kMostNegExponentNoSigBits = math.pow(2, -1023)
388  message.optional_double = kMostNegExponentNoSigBits
389  message.ParseFromString(message.SerializeToString())
390  self.assertTrue(message.optional_double == kMostNegExponentNoSigBits)
391 
392  # Most negative exponent, one significand bit set.
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)
397 
398  # Repeat last two cases with values of the same magnitude, but negative.
399  message.optional_double = -kMostNegExponentNoSigBits
400  message.ParseFromString(message.SerializeToString())
401  self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits)
402 
403  message.optional_double = -kMostNegExponentOneSigBit
404  message.ParseFromString(message.SerializeToString())
405  self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit)
406 
407  def testFloatPrinting(self, message_module):
408  message = message_module.TestAllTypes()
409  message.optional_float = 2.0
410  self.assertEqual(str(message), 'optional_float: 2.0\n')
411 
412  def testHighPrecisionFloatPrinting(self, message_module):
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)
418 
419  def testHighPrecisionDoublePrinting(self, message_module):
420  msg = message_module.TestAllTypes()
421  msg.optional_double = 0.12345678912345678
422  self.assertEqual(str(msg), 'optional_double: 0.12345678912345678\n')
423 
424  def testUnknownFieldPrinting(self, message_module):
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), '')
430 
431  def testAppendRepeatedCompositeField(self, message_module):
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)
437  try:
438  msg.repeated_nested_message.append(1)
439  except TypeError:
440  pass
441  self.assertEqual(2, len(msg.repeated_nested_message))
442  self.assertEqual([1, 2],
443  [m.bb for m in msg.repeated_nested_message])
444 
445  def testInsertRepeatedCompositeField(self, message_module):
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))
458  try:
459  msg.repeated_nested_message.insert(1, 999)
460  except TypeError:
461  pass
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'
467  ' bb: -1000\n'
468  '}\n'
469  'repeated_nested_message {\n'
470  ' bb: 2\n'
471  '}\n'
472  'repeated_nested_message {\n'
473  ' bb: -1\n'
474  '}\n'
475  'repeated_nested_message {\n'
476  ' bb: 1\n'
477  '}\n'
478  'repeated_nested_message {\n'
479  ' bb: 3\n'
480  '}\n')
481  self.assertEqual(sub_msg.bb, 1)
482 
483  def testMergeFromRepeatedField(self, message_module):
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)
494 
495  msg.repeated_int32.MergeFrom(other_msg.repeated_int32)
496  self.assertEqual(4, len(msg.repeated_int32))
497 
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])
501 
502  def testAddWrongRepeatedNestedField(self, message_module):
503  msg = message_module.TestAllTypes()
504  try:
505  msg.repeated_nested_message.add('wrong')
506  except TypeError:
507  pass
508  try:
509  msg.repeated_nested_message.add(value_field='wrong')
510  except ValueError:
511  pass
512  self.assertEqual(len(msg.repeated_nested_message), 0)
513 
514  def testRepeatedContains(self, message_module):
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)
519 
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)
529 
530  def testRepeatedScalarIterable(self, message_module):
531  msg = message_module.TestAllTypes()
532  msg.repeated_int32.extend([1, 2, 3])
533  add = 0
534  for item in msg.repeated_int32:
535  add += item
536  self.assertEqual(add, 6)
537 
538  def testRepeatedNestedFieldIteration(self, message_module):
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)
544 
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]])
551 
553  """Check some different types with the default comparator."""
554  message = message_module.TestAllTypes()
555 
556  # TODO(mattp): would testing more scalar types strengthen test?
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]))
565 
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)
573 
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']))
582 
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']))
591 
593  """Check some different types with custom comparator."""
594  message = message_module.TestAllTypes()
595 
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)
603 
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')
611 
613  """Check passing a custom comparator to sort a repeated composite field."""
614  message = message_module.TestAllTypes()
615 
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]')
631 
632  def testSortingRepeatedCompositeFieldsStable(self, message_module):
633  """Check passing a custom comparator to sort a repeated composite field."""
634  message = message_module.TestAllTypes()
635 
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)
644  self.assertEqual(
645  [13, 11, 10, 21, 20, 24, 33],
646  [n.bb for n in message.repeated_nested_message])
647 
648  # Make sure that for the C++ implementation, the underlying fields
649  # are actually reordered.
650  pb = message.SerializeToString()
651  message.Clear()
652  message.MergeFromString(pb)
653  self.assertEqual(
654  [13, 11, 10, 21, 20, 24, 33],
655  [n.bb for n in message.repeated_nested_message])
656 
657  def testRepeatedCompositeFieldSortArguments(self, message_module):
658  """Check sorting a repeated composite field using list.sort() arguments."""
659  message = message_module.TestAllTypes()
660 
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],
670  [1, 2, 3, 4, 5, 6])
671  message.repeated_nested_message.sort(key=get_bb, reverse=True)
672  self.assertEqual([k.bb for k in message.repeated_nested_message],
673  [6, 5, 4, 3, 2, 1])
674 
675  def testRepeatedScalarFieldSortArguments(self, message_module):
676  """Check sorting a scalar field using list.sort() arguments."""
677  message = message_module.TestAllTypes()
678 
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])
686 
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'])
694 
695  def testRepeatedFieldsComparable(self, message_module):
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
710 
711  def testRepeatedFieldsAreSequences(self, message_module):
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)
716 
717  def testRepeatedFieldsNotHashable(self, message_module):
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)
723 
724  def testRepeatedFieldInsideNestedMessage(self, message_module):
725  m = message_module.NestedTestAllTypes()
726  m.payload.repeated_int32.extend([])
727  self.assertTrue(m.HasField('payload'))
728 
729  def testMergeFrom(self, message_module):
730  m1 = message_module.TestAllTypes()
731  m2 = message_module.TestAllTypes()
732  # Cpp extension will lazily create a sub message which is immutable.
733  nested = m1.optional_nested_message
734  self.assertEqual(0, nested.bb)
735  m2.optional_nested_message.bb = 1
736  # Make sure cmessage pointing to a mutable message after merge instead of
737  # the lazily created message.
738  m1.MergeFrom(m2)
739  self.assertEqual(1, nested.bb)
740 
741  # Test more nested sub message.
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
747  msg1.MergeFrom(msg2)
748  self.assertEqual(1, nested.bb)
749 
750  # Test repeated field.
751  self.assertEqual(msg1.payload.repeated_nested_message,
752  msg1.payload.repeated_nested_message)
753  nested = msg2.payload.repeated_nested_message.add()
754  nested.bb = 1
755  msg1.MergeFrom(msg2)
756  self.assertEqual(1, len(msg1.payload.repeated_nested_message))
757  self.assertEqual(1, nested.bb)
758 
759  def testMergeFromString(self, message_module):
760  m1 = message_module.TestAllTypes()
761  m2 = message_module.TestAllTypes()
762  # Cpp extension will lazily create a sub message which is immutable.
763  self.assertEqual(0, m1.optional_nested_message.bb)
764  m2.optional_nested_message.bb = 1
765  # Make sure cmessage pointing to a mutable message after merge instead of
766  # the lazily created message.
767  m1.MergeFromString(m2.SerializeToString())
768  self.assertEqual(1, m1.optional_nested_message.bb)
769 
770  def testMergeFromStringUsingMemoryView(self, message_module):
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')
776 
777  serialized = m2.SerializeToString()
778  memview = memoryview(serialized)
779  m1 = message_module.TestAllTypes.FromString(memview)
780 
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'])
785  # Make sure that the memoryview was correctly converted to bytes, and
786  # that a sub-sliced memoryview is not being used.
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)
791 
792  def testMergeFromEmpty(self, message_module):
793  m1 = message_module.TestAllTypes()
794  # Cpp extension will lazily create a sub message which is immutable.
795  self.assertEqual(0, m1.optional_nested_message.bb)
796  self.assertFalse(m1.HasField('optional_nested_message'))
797  # Make sure the sub message is still immutable after merge from empty.
798  m1.MergeFromString(b'') # field state should not change
799  self.assertFalse(m1.HasField('optional_nested_message'))
800 
801  def ensureNestedMessageExists(self, msg, attribute):
802  """Make sure that a nested message object exists.
803 
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.
806  """
807  getattr(msg, attribute)
808  self.assertFalse(msg.HasField(attribute))
809 
810  def testOneofGetCaseNonexistingField(self, message_module):
811  m = message_module.TestAllTypes()
812  self.assertRaises(ValueError, m.WhichOneof, 'no_such_oneof_field')
813  self.assertRaises(Exception, m.WhichOneof, 0)
814 
815  def testOneofDefaultValues(self, message_module):
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'))
820 
821  # Oneof is set even when setting it to a default value.
822  m.oneof_uint32 = 0
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'))
827 
828  m.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'))
832 
833  def testOneofSemantics(self, message_module):
834  m = message_module.TestAllTypes()
835  self.assertIs(None, m.WhichOneof('oneof_field'))
836 
837  m.oneof_uint32 = 11
838  self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
839  self.assertTrue(m.HasField('oneof_uint32'))
840 
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'))
845 
846  # Read nested message accessor without accessing submessage.
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'))
851 
852  # Read accessor of nested message without accessing submessage.
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'))
857 
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'))
862 
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'))
867 
868  def testOneofCompositeFieldReadAccess(self, message_module):
869  m = message_module.TestAllTypes()
870  m.oneof_uint32 = 11
871 
872  self.ensureNestedMessageExists(m, 'oneof_nested_message')
873  self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
874  self.assertEqual(11, m.oneof_uint32)
875 
876  def testOneofWhichOneof(self, message_module):
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'))
881 
882  m.oneof_uint32 = 11
883  self.assertEqual('oneof_uint32', m.WhichOneof('oneof_field'))
884  if message_module is unittest_pb2:
885  self.assertTrue(m.HasField('oneof_field'))
886 
887  m.oneof_bytes = b'bb'
888  self.assertEqual('oneof_bytes', m.WhichOneof('oneof_field'))
889 
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'))
894 
895  def testOneofClearField(self, message_module):
896  m = message_module.TestAllTypes()
897  m.oneof_uint32 = 11
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'))
903 
904  def testOneofClearSetField(self, message_module):
905  m = message_module.TestAllTypes()
906  m.oneof_uint32 = 11
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'))
912 
913  def testOneofClearUnsetField(self, message_module):
914  m = message_module.TestAllTypes()
915  m.oneof_uint32 = 11
916  self.ensureNestedMessageExists(m, 'oneof_nested_message')
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'))
923 
924  def testOneofDeserialize(self, message_module):
925  m = message_module.TestAllTypes()
926  m.oneof_uint32 = 11
927  m2 = message_module.TestAllTypes()
928  m2.ParseFromString(m.SerializeToString())
929  self.assertEqual('oneof_uint32', m2.WhichOneof('oneof_field'))
930 
931  def testOneofCopyFrom(self, message_module):
932  m = message_module.TestAllTypes()
933  m.oneof_uint32 = 11
934  m2 = message_module.TestAllTypes()
935  m2.CopyFrom(m)
936  self.assertEqual('oneof_uint32', m2.WhichOneof('oneof_field'))
937 
938  def testOneofNestedMergeFrom(self, message_module):
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'
944  m2.MergeFrom(m)
945  self.assertEqual('oneof_uint32', m2.payload.WhichOneof('oneof_field'))
946  self.assertEqual('oneof_bytes', m2.child.payload.WhichOneof('oneof_field'))
947 
948  def testOneofMessageMergeFrom(self, message_module):
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
954  m2.MergeFrom(m)
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'))
959 
960  def testOneofNestedMessageInit(self, message_module):
961  m = message_module.TestAllTypes(
962  oneof_nested_message=message_module.TestAllTypes.NestedMessage())
963  self.assertEqual('oneof_nested_message', m.WhichOneof('oneof_field'))
964 
965  def testOneofClear(self, message_module):
966  m = message_module.TestAllTypes()
967  m.oneof_uint32 = 11
968  m.Clear()
969  self.assertIsNone(m.WhichOneof('oneof_field'))
970  m.oneof_bytes = b'bb'
971  self.assertEqual('oneof_bytes', m.WhichOneof('oneof_field'))
972 
973  def testAssignByteStringToUnicodeField(self, message_module):
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)
979 
980  def testLongValuedSlice(self, message_module):
981  """It should be possible to use int-valued indices in slices.
982 
983  This didn't used to work in the v2 C++ implementation.
984  """
985  m = message_module.TestAllTypes()
986 
987  # Repeated scalar
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))
991 
992  # Repeated composite
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))
996 
997  def testExtendShouldNotSwallowExceptions(self, message_module):
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)) # pylint: disable=undefined-variable
1002  with self.assertRaises(NameError) as _:
1003  m.repeated_nested_enum.extend(
1004  a for i in range(10)) # pylint: disable=undefined-variable
1005 
1006  FALSY_VALUES = [None, False, 0, 0.0, b'', u'', bytearray(), [], {}, set()]
1007 
1008  def testExtendInt32WithNothing(self, message_module):
1009  """Test no-ops extending repeated int32 fields."""
1010  m = message_module.TestAllTypes()
1011  self.assertSequenceEqual([], m.repeated_int32)
1012 
1013  # TODO(ptucker): Deprecate this behavior. b/18413862
1014  for falsy_value in MessageTest.FALSY_VALUES:
1015  m.repeated_int32.extend(falsy_value)
1016  self.assertSequenceEqual([], m.repeated_int32)
1017 
1018  m.repeated_int32.extend([])
1019  self.assertSequenceEqual([], m.repeated_int32)
1020 
1021  def testExtendFloatWithNothing(self, message_module):
1022  """Test no-ops extending repeated float fields."""
1023  m = message_module.TestAllTypes()
1024  self.assertSequenceEqual([], m.repeated_float)
1025 
1026  # TODO(ptucker): Deprecate this behavior. b/18413862
1027  for falsy_value in MessageTest.FALSY_VALUES:
1028  m.repeated_float.extend(falsy_value)
1029  self.assertSequenceEqual([], m.repeated_float)
1030 
1031  m.repeated_float.extend([])
1032  self.assertSequenceEqual([], m.repeated_float)
1033 
1034  def testExtendStringWithNothing(self, message_module):
1035  """Test no-ops extending repeated string fields."""
1036  m = message_module.TestAllTypes()
1037  self.assertSequenceEqual([], m.repeated_string)
1038 
1039  # TODO(ptucker): Deprecate this behavior. b/18413862
1040  for falsy_value in MessageTest.FALSY_VALUES:
1041  m.repeated_string.extend(falsy_value)
1042  self.assertSequenceEqual([], m.repeated_string)
1043 
1044  m.repeated_string.extend([])
1045  self.assertSequenceEqual([], m.repeated_string)
1046 
1047  def testExtendInt32WithPythonList(self, message_module):
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)
1057 
1058  def testExtendFloatWithPythonList(self, message_module):
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)
1068 
1069  def testExtendStringWithPythonList(self, message_module):
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)
1079 
1080  def testExtendStringWithString(self, message_module):
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)
1086 
1087  class TestIterable(object):
1088  """This iterable object mimics the behavior of numpy.array.
1089 
1090  __nonzero__ fails for length > 1, and returns bool(item[0]) for length == 1.
1091 
1092  """
1093 
1094  def __init__(self, values=None):
1095  self._list = values or []
1096 
1097  def __nonzero__(self):
1098  size = len(self._list)
1099  if size == 0:
1100  return False
1101  if size == 1:
1102  return bool(self._list[0])
1103  raise ValueError('Truth value is ambiguous.')
1104 
1105  def __len__(self):
1106  return len(self._list)
1107 
1108  def __iter__(self):
1109  return self._list.__iter__()
1110 
1111  def testExtendInt32WithIterable(self, message_module):
1112  """Test extending repeated int32 fields with iterable."""
1113  m = message_module.TestAllTypes()
1114  self.assertSequenceEqual([], m.repeated_int32)
1115  m.repeated_int32.extend(MessageTest.TestIterable([]))
1116  self.assertSequenceEqual([], m.repeated_int32)
1117  m.repeated_int32.extend(MessageTest.TestIterable([0]))
1118  self.assertSequenceEqual([0], m.repeated_int32)
1119  m.repeated_int32.extend(MessageTest.TestIterable([1, 2]))
1120  self.assertSequenceEqual([0, 1, 2], m.repeated_int32)
1121  m.repeated_int32.extend(MessageTest.TestIterable([3, 4]))
1122  self.assertSequenceEqual([0, 1, 2, 3, 4], m.repeated_int32)
1123 
1124  def testExtendFloatWithIterable(self, message_module):
1125  """Test extending repeated float fields with iterable."""
1126  m = message_module.TestAllTypes()
1127  self.assertSequenceEqual([], m.repeated_float)
1128  m.repeated_float.extend(MessageTest.TestIterable([]))
1129  self.assertSequenceEqual([], m.repeated_float)
1130  m.repeated_float.extend(MessageTest.TestIterable([0.0]))
1131  self.assertSequenceEqual([0.0], m.repeated_float)
1132  m.repeated_float.extend(MessageTest.TestIterable([1.0, 2.0]))
1133  self.assertSequenceEqual([0.0, 1.0, 2.0], m.repeated_float)
1134  m.repeated_float.extend(MessageTest.TestIterable([3.0, 4.0]))
1135  self.assertSequenceEqual([0.0, 1.0, 2.0, 3.0, 4.0], m.repeated_float)
1136 
1137  def testExtendStringWithIterable(self, message_module):
1138  """Test extending repeated string fields with iterable."""
1139  m = message_module.TestAllTypes()
1140  self.assertSequenceEqual([], m.repeated_string)
1141  m.repeated_string.extend(MessageTest.TestIterable([]))
1142  self.assertSequenceEqual([], m.repeated_string)
1143  m.repeated_string.extend(MessageTest.TestIterable(['']))
1144  self.assertSequenceEqual([''], m.repeated_string)
1145  m.repeated_string.extend(MessageTest.TestIterable(['1', '2']))
1146  self.assertSequenceEqual(['', '1', '2'], m.repeated_string)
1147  m.repeated_string.extend(MessageTest.TestIterable(['3', '4']))
1148  self.assertSequenceEqual(['', '1', '2', '3', '4'], m.repeated_string)
1149 
1150  def testPickleRepeatedScalarContainer(self, message_module):
1151  # TODO(tibell): The pure-Python implementation support pickling of
1152  # scalar containers in *some* cases. For now the cpp2 version
1153  # throws an exception to avoid a segfault. Investigate if we
1154  # want to support pickling of these fields.
1155  #
1156  # For more information see: https://b2.corp.google.com/u/0/issues/18677897
1157  if (api_implementation.Type() != 'cpp' or
1158  api_implementation.Version() == 2):
1159  return
1160  m = message_module.TestAllTypes()
1161  with self.assertRaises(pickle.PickleError) as _:
1162  pickle.dumps(m.repeated_int32, pickle.HIGHEST_PROTOCOL)
1163 
1164  def testSortEmptyRepeatedCompositeContainer(self, message_module):
1165  """Exercise a scenario that has led to segfaults in the past.
1166  """
1167  m = message_module.TestAllTypes()
1168  m.repeated_nested_message.sort()
1169 
1170  def testHasFieldOnRepeatedField(self, message_module):
1171  """Using HasField on a repeated field should raise an exception.
1172  """
1173  m = message_module.TestAllTypes()
1174  with self.assertRaises(ValueError) as _:
1175  m.HasField('repeated_int32')
1176 
1177  def testRepeatedScalarFieldPop(self, message_module):
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)
1186 
1187  def testRepeatedCompositeFieldPop(self, message_module):
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')
1193  for i in range(5):
1194  n = m.repeated_nested_message.add()
1195  n.bb = i
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])
1200 
1201  def testRepeatedCompareWithSelf(self, message_module):
1202  m = message_module.TestAllTypes()
1203  for i in range(5):
1204  m.repeated_int32.insert(i, i)
1205  n = m.repeated_nested_message.add()
1206  n.bb = i
1207  self.assertSequenceEqual(m.repeated_int32, m.repeated_int32)
1208  self.assertEqual(m.repeated_nested_message, m.repeated_nested_message)
1209 
1210  def testReleasedNestedMessages(self, message_module):
1211  """A case that lead to a segfault when a message detached from its parent
1212  container has itself a child container.
1213  """
1214  m = message_module.NestedTestAllTypes()
1215  m = m.repeated_child.add()
1216  m = m.child
1217  m = m.repeated_child.add()
1218  self.assertEqual(m.payload.optional_int32, 0)
1219 
1220  def testSetRepeatedComposite(self, message_module):
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 = []
1227 
1228  def testReturningType(self, message_module):
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
1235  m.optional_bool = 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])
1248 
1249 
1250 # Class to test proto2-only features (required, extensions, etc.)
1251 @testing_refleaks.TestCase
1252 class Proto2Test(unittest.TestCase):
1253 
1255  message = unittest_pb2.TestAllTypes()
1256 
1257  self.assertFalse(message.HasField("optional_int32"))
1258  self.assertFalse(message.HasField("optional_bool"))
1259  self.assertFalse(message.HasField("optional_nested_message"))
1260 
1261  with self.assertRaises(ValueError):
1262  message.HasField("field_doesnt_exist")
1263 
1264  with self.assertRaises(ValueError):
1265  message.HasField("repeated_int32")
1266  with self.assertRaises(ValueError):
1267  message.HasField("repeated_nested_message")
1268 
1269  self.assertEqual(0, message.optional_int32)
1270  self.assertEqual(False, message.optional_bool)
1271  self.assertEqual(0, message.optional_nested_message.bb)
1272 
1273  # Fields are set even when setting the values to default values.
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"))
1280 
1281  # Set the fields to non-default values.
1282  message.optional_int32 = 5
1283  message.optional_bool = True
1284  message.optional_nested_message.bb = 15
1285 
1286  self.assertTrue(message.HasField(u"optional_int32"))
1287  self.assertTrue(message.HasField("optional_bool"))
1288  self.assertTrue(message.HasField("optional_nested_message"))
1289 
1290  # Clearing the fields unsets them and resets their value to default.
1291  message.ClearField("optional_int32")
1292  message.ClearField(u"optional_bool")
1293  message.ClearField("optional_nested_message")
1294 
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)
1301 
1303  """Assigning an invalid enum number is not allowed in proto2."""
1304  m = unittest_pb2.TestAllTypes()
1305 
1306  # Proto2 can not assign unknown enum.
1307  with self.assertRaises(ValueError) as _:
1308  m.optional_nested_enum = 1234567
1309  self.assertRaises(ValueError, m.repeated_nested_enum.append, 1234567)
1310  # Assignment is a different code path than append for the C++ impl.
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
1315 
1316  # Unknown enum value can be parsed but is ignored.
1317  m2 = unittest_proto3_arena_pb2.TestAllTypes()
1318  m2.optional_nested_enum = 1234567
1319  m2.repeated_nested_enum.append(7654321)
1320  serialized = m2.SerializeToString()
1321 
1322  m3 = unittest_pb2.TestAllTypes()
1323  m3.ParseFromString(serialized)
1324  self.assertFalse(m3.HasField('optional_nested_enum'))
1325  # 1 is the default value for optional_nested_enum.
1326  self.assertEqual(1, m3.optional_nested_enum)
1327  self.assertEqual(0, len(m3.repeated_nested_enum))
1328  m2.Clear()
1329  m2.ParseFromString(m3.SerializeToString())
1330  self.assertEqual(1234567, m2.optional_nested_enum)
1331  self.assertEqual(7654321, m2.repeated_nested_enum[0])
1332 
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
1338 
1340  msg = unittest_pb2.TestAllTypes()
1341  self.assertRaises(AttributeError, getattr, msg, 'Extensions')
1342 
1344  msg1 = more_extensions_pb2.TopLevelMessage()
1345  msg2 = more_extensions_pb2.TopLevelMessage()
1346  # Cpp extension will lazily create a sub message which is immutable.
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
1352  # Make sure cmessage and extensions pointing to a mutable message
1353  # after merge instead of the lazily created message.
1354  msg1.MergeFrom(msg2)
1355  self.assertEqual(123, msg1.submessage.Extensions[
1356  more_extensions_pb2.optional_int_extension])
1357 
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())
1368 
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())
1379 
1381  golden_message = unittest_pb2.TestRequired(a=1)
1382  pickled_message = pickle.dumps(golden_message)
1383 
1384  unpickled_message = pickle.loads(pickled_message)
1385  self.assertEqual(unpickled_message, golden_message)
1386  self.assertEqual(unpickled_message.a, 1)
1387  # This is still an incomplete proto - so serializing should fail
1388  self.assertRaises(message.EncodeError, unpickled_message.SerializeToString)
1389 
1390 
1391  # TODO(haberman): this isn't really a proto2-specific test except that this
1392  # message has a required field in it. Should probably be factored out so
1393  # that we can test the other parts with proto3.
1394  def testParsingMerge(self):
1395  """Check the merge behavior when a required or optional field appears
1396  multiple times in the input."""
1397  messages = [
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'
1405 
1406  merged_message = unittest_pb2.TestAllTypes()
1407  merged_message.optional_int32 = 3
1408  merged_message.optional_int64 = 2
1409  merged_message.optional_string = 'hello'
1410 
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])
1423 
1424  data = generator.SerializeToString()
1425  parsing_merge = unittest_pb2.TestParsingMerge()
1426  parsing_merge.ParseFromString(data)
1427 
1428  # Required and optional fields should be merged.
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,
1432  merged_message)
1433  self.assertEqual(parsing_merge.Extensions[
1434  unittest_pb2.TestParsingMerge.optional_ext],
1435  merged_message)
1436 
1437  # Repeated fields should not be merged.
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)
1442 
1443  def testPythonicInit(self):
1444  message = unittest_pb2.TestAllTypes(
1445  optional_int32=100,
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},
1454  {'a': 700}],
1455  repeated_nested_enum=['FOO', unittest_pb2.TestAllTypes.BAR],
1456  default_int32=800,
1457  oneof_string='y')
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)
1485 
1486  message = unittest_pb2.TestAllTypes(optional_nested_enum=u'BAZ')
1487  self.assertEqual(unittest_pb2.TestAllTypes.BAZ,
1488  message.optional_nested_enum)
1489 
1490  with self.assertRaises(ValueError):
1491  unittest_pb2.TestAllTypes(
1492  optional_nested_message={'INVALID_NESTED_FIELD': 17})
1493 
1494  with self.assertRaises(TypeError):
1495  unittest_pb2.TestAllTypes(
1496  optional_nested_message={'bb': 'INVALID_VALUE_TYPE'})
1497 
1498  with self.assertRaises(ValueError):
1499  unittest_pb2.TestAllTypes(optional_nested_enum='INVALID_LABEL')
1500 
1501  with self.assertRaises(ValueError):
1502  unittest_pb2.TestAllTypes(repeated_nested_enum='FOO')
1503 
1505  # Both string/unicode field name keys should work.
1506  kwargs = {
1507  'optional_int32': 100,
1508  u'optional_fixed32': 200,
1509  }
1510  msg = unittest_pb2.TestAllTypes(**kwargs)
1511  self.assertEqual(100, msg.optional_int32)
1512  self.assertEqual(200, msg.optional_fixed32)
1513 
1514 
1516  # Also used by the interactive help() function.
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')
1523 
1524 
1525 # Class to test proto3-only features/behavior (updated field presence & enums)
1526 @testing_refleaks.TestCase
1527 class Proto3Test(unittest.TestCase):
1528 
1529  # Utility method for comparing equality with a map.
1530  def assertMapIterEquals(self, map_iter, dict_value):
1531  # Avoid mutating caller's copy.
1532  dict_value = dict(dict_value)
1533 
1534  for k, v in map_iter:
1535  self.assertEqual(v, dict_value[k])
1536  del dict_value[k]
1537 
1538  self.assertEqual({}, dict_value)
1539 
1541  message = unittest_proto3_arena_pb2.TestAllTypes()
1542 
1543  # We can't test presence of non-repeated, non-submessage fields.
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')
1552 
1553  # But we can still test presence of submessage fields.
1554  self.assertFalse(message.HasField('optional_nested_message'))
1555 
1556  # As with proto2, we can't test presence of fields that don't exist, or
1557  # repeated fields.
1558  with self.assertRaises(ValueError):
1559  message.HasField('field_doesnt_exist')
1560 
1561  with self.assertRaises(ValueError):
1562  message.HasField('repeated_int32')
1563  with self.assertRaises(ValueError):
1564  message.HasField('repeated_nested_message')
1565 
1566  # Fields should default to their type-specific default.
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)
1572 
1573  # Setting a submessage should still return proper presence information.
1574  message.optional_nested_message.bb = 0
1575  self.assertTrue(message.HasField('optional_nested_message'))
1576 
1577  # Set the fields to non-default values.
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
1583 
1584  # Clearing the fields unsets them and resets their value to default.
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')
1590 
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)
1596 
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)
1603 
1604  message_proto3 = unittest_proto3_arena_pb2.TestAllTypes()
1605  message_proto3.ParseFromString(message_proto2.SerializeToString())
1606  self.assertEqual(len(message_proto3.ListFields()), 0)
1607 
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'))
1615 
1616  # Set fields.
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'))
1626  # Set to default value does not clear the fields
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'))
1636 
1637  # Test serialize
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'))
1645 
1646  self.assertEqual(msg.WhichOneof('_optional_int32'), 'optional_int32')
1647 
1648  # Clear these fields.
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'))
1658 
1659  self.assertEqual(msg.WhichOneof('_optional_int32'), None)
1660 
1662  """Assigning an unknown enum value is allowed and preserves the value."""
1663  m = unittest_proto3_arena_pb2.TestAllTypes()
1664 
1665  # Proto3 can assign unknown enums.
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])
1670  # Assignment is a different code path than append for the C++ impl.
1671  m.repeated_nested_enum[0] = 7654321
1672  self.assertEqual(7654321, m.repeated_nested_enum[0])
1673  serialized = m.SerializeToString()
1674 
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])
1679 
1680  # Map isn't really a proto3-only feature. But there is no proto2 equivalent
1681  # of google/protobuf/map_unittest.proto right now, so it's not easy to
1682  # test both with the same test like we do for the other proto2/proto3 tests.
1683  # (google/protobuf/map_proto2_unittest.proto is very different in the set
1684  # of messages and fields it contains).
1686  msg = map_unittest_pb2.TestMap()
1687 
1688  # Scalars start out unset.
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)
1698 
1699  # Accessing an unset key returns the default.
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])
1711 
1712  # It also sets the value in the map
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)
1722 
1723  self.assertIsInstance(msg.map_string_string['abc'], str)
1724 
1725  # Accessing an unset key still throws TypeError if the type of the key
1726  # is incorrect.
1727  with self.assertRaises(TypeError):
1728  msg.map_string_string[123]
1729 
1730  with self.assertRaises(TypeError):
1731  123 in msg.map_string_string
1732 
1733  def testMapGet(self):
1734  # Need to test that get() properly returns the default, even though the dict
1735  # has defaultdict-like semantics.
1736  msg = map_unittest_pb2.TestMap()
1737 
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))
1742 
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('')
1748 
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))
1752 
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('')
1757 
1758  def testScalarMap(self):
1759  msg = map_unittest_pb2.TestMap()
1760 
1761  self.assertEqual(0, len(msg.map_int32_int32))
1762  self.assertFalse(5 in msg.map_int32_int32)
1763 
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
1773  # Unknown numeric enum is supported in proto3.
1774  msg.map_int32_enum[123] = 456
1775 
1776  self.assertEqual([], msg.FindInitializationErrors())
1777 
1778  self.assertEqual(1, len(msg.map_string_string))
1779 
1780  # Bad key.
1781  with self.assertRaises(TypeError):
1782  msg.map_string_string[123] = '123'
1783 
1784  # Verify that trying to assign a bad key doesn't actually add a member to
1785  # the map.
1786  self.assertEqual(1, len(msg.map_string_string))
1787 
1788  # Bad value.
1789  with self.assertRaises(TypeError):
1790  msg.map_string_string['123'] = 123
1791 
1792  serialized = msg.SerializeToString()
1793  msg2 = map_unittest_pb2.TestMap()
1794  msg2.ParseFromString(serialized)
1795 
1796  # Bad key.
1797  with self.assertRaises(TypeError):
1798  msg2.map_string_string[123] = '123'
1799 
1800  # Bad value.
1801  with self.assertRaises(TypeError):
1802  msg2.map_string_string['123'] = 123
1803 
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))
1816 
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())
1824 
1826  msg = map_unittest_pb2.TestMap()
1827 
1828  unicode_obj = u'\u1234'
1829  bytes_obj = unicode_obj.encode('utf8')
1830 
1831  msg.map_string_string[bytes_obj] = bytes_obj
1832 
1833  (key, value) = list(msg.map_string_string.items())[0]
1834 
1835  self.assertEqual(key, unicode_obj)
1836  self.assertEqual(value, unicode_obj)
1837 
1838  self.assertIsInstance(key, str)
1839  self.assertIsInstance(value, str)
1840 
1841  def testMessageMap(self):
1842  msg = map_unittest_pb2.TestMap()
1843 
1844  self.assertEqual(0, len(msg.map_int32_foreign_message))
1845  self.assertFalse(5 in msg.map_int32_foreign_message)
1846 
1847  msg.map_int32_foreign_message[123]
1848  # get_or_create() is an alias for getitem.
1849  msg.map_int32_foreign_message.get_or_create(-456)
1850 
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))
1855 
1856  # Bad key.
1857  with self.assertRaises(TypeError):
1858  msg.map_int32_foreign_message['123']
1859 
1860  # Can't assign directly to submessage.
1861  with self.assertRaises(ValueError):
1862  msg.map_int32_foreign_message[999] = msg.map_int32_foreign_message[123]
1863 
1864  # Verify that trying to assign a bad key doesn't actually add a member to
1865  # the map.
1866  self.assertEqual(2, len(msg.map_int32_foreign_message))
1867 
1868  serialized = msg.SerializeToString()
1869  msg2 = map_unittest_pb2.TestMap()
1870  msg2.ParseFromString(serialized)
1871 
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
1877  # TODO(jieluo): Fix text format for message map.
1878  self.assertIn(str(msg2.map_int32_foreign_message),
1879  ('{-456: , 123: c: 1\n}', '{123: c: 1\n, -456: }'))
1880 
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))
1889 
1890  serialized = msg.SerializeToString()
1891  msg2 = map_unittest_pb2.TestMap()
1892  msg2.ParseFromString(serialized)
1893  keys = [1, 2]
1894  # The loop triggers PyErr_Occurred() in c extension.
1895  for key in keys:
1896  del msg2.map_int32_all_types[key]
1897 
1898  def testMapByteSize(self):
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)
1904 
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)
1909 
1910  def testMergeFrom(self):
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
1917 
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]
1924 
1925  msg2.MergeFrom(msg)
1926  # Compare with expected message instead of call
1927  # msg2.map_int32_foreign_message[222] to make sure MergeFrom does not
1928  # sync with repeated field and there is no duplicated keys.
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)
1933 
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':
1942  # During the call to MergeFrom(), the C++ implementation will have
1943  # deallocated the underlying message, but this is very difficult to detect
1944  # properly. The line below is likely to cause a segmentation fault.
1945  # With the Python implementation, old_map_value is just 'detached' from
1946  # the main message. Using it will not crash of course, but since it still
1947  # have a reference to the parent message I'm sure we can find interesting
1948  # ways to cause inconsistencies.
1949  self.assertEqual(15, old_map_value.c)
1950 
1951  # Verify that there is only one entry per key, even though the MergeFrom
1952  # may have internally created multiple entries for a single key in the
1953  # list representation.
1954  as_dict = {}
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
1958 
1959  self.assertEqual({111: 5, 222: 10}, as_dict)
1960 
1961  # Special case: test that delete of item really removes the item, even if
1962  # there might have physically been duplicate keys due to the previous merge.
1963  # This is only a special case for the C++ implementation which stores the
1964  # map as an array.
1965  del msg2.map_int32_int32[12]
1966  self.assertFalse(12 in msg2.map_int32_int32)
1967 
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['']
1972 
1973  def testMapMergeFrom(self):
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
1980 
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
1986 
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])
1990 
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])
1994 
1995  msg2.map_int32_foreign_message.MergeFrom(msg.map_int32_foreign_message)
1996  # Compare with expected message instead of call
1997  # msg.map_int32_foreign_message[222] to make sure MergeFrom does not
1998  # sync with repeated field and no duplicated keys.
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)
2003 
2004  # Test when cpp extension cache a map.
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
2010  m1.MergeFrom(m2)
2011  self.assertEqual(10, m2.map_int32_foreign_message[123].c)
2012 
2013  # Test merge maps within different message types.
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)
2019 
2020  # Test overwrite message value map
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)
2028 
2029  # Merge a dict to map field is not accepted
2030  with self.assertRaises(AttributeError):
2031  m1.map_int32_all_types.MergeFrom(
2032  {1: unittest_proto3_arena_pb2.TestAllTypes()})
2033 
2035  msg = map_unittest_pb2.TestMap()
2036  with self.assertRaisesRegexp(
2037  TypeError,
2038  r'Parameter to MergeFrom\(\) must be instance of same class: expected '
2039  r'.+TestMap got int\.'):
2040  msg.MergeFrom(1)
2041 
2043  msg = map_unittest_pb2.TestMap()
2044  with self.assertRaisesRegexp(
2045  TypeError,
2046  r'Parameter to [A-Za-z]*From\(\) must be instance of same class: '
2047  r'expected .+TestMap got int\.'):
2048  msg.CopyFrom(1)
2049 
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)
2056 
2057  serialized = msg.SerializeToString()
2058  msg2 = map_unittest_pb2.TestMap()
2059  msg2.ParseFromString(serialized)
2060 
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])
2065 
2067  msg = map_unittest_pb2.TestMapSubmessage()
2068  msg.test_map.map_int32_int32[123] = 456
2069 
2070  serialized = msg.SerializeToString()
2071  msg2 = map_unittest_pb2.TestMapSubmessage()
2072  msg2.ParseFromString(serialized)
2073 
2074  self.assertEqual(msg, msg2)
2075 
2076  # Now test that various mutations of the map properly invalidate the
2077  # cached size of the submessage.
2078  msg.test_map.map_int32_int32[888] = 999
2079  serialized = msg.SerializeToString()
2080  msg2.ParseFromString(serialized)
2081  self.assertEqual(msg, msg2)
2082 
2083  msg.test_map.map_int32_int32.clear()
2084  serialized = msg.SerializeToString()
2085  msg2.ParseFromString(serialized)
2086  self.assertEqual(msg, msg2)
2087 
2089  msg = map_unittest_pb2.TestMapSubmessage()
2090  msg.test_map.map_int32_foreign_message[123].c = 5
2091 
2092  serialized = msg.SerializeToString()
2093  msg2 = map_unittest_pb2.TestMapSubmessage()
2094  msg2.ParseFromString(serialized)
2095 
2096  self.assertEqual(msg, msg2)
2097 
2098  # Now test that various mutations of the map properly invalidate the
2099  # cached size of the submessage.
2100  msg.test_map.map_int32_foreign_message[888].c = 7
2101  serialized = msg.SerializeToString()
2102  msg2.ParseFromString(serialized)
2103  self.assertEqual(msg, msg2)
2104 
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)
2110 
2111  msg.test_map.map_int32_foreign_message.clear()
2112  serialized = msg.SerializeToString()
2113  msg2.ParseFromString(serialized)
2114  self.assertEqual(msg, msg2)
2115 
2117  msg = map_unittest_pb2.TestMap()
2118 
2119  string_string_iter = iter(msg.map_string_string)
2120  int32_foreign_iter = iter(msg.map_int32_foreign_message)
2121 
2122  msg.map_string_string['abc'] = '123'
2123  msg.map_int32_foreign_message[5].c = 5
2124 
2125  with self.assertRaises(RuntimeError):
2126  for key in string_string_iter:
2127  pass
2128 
2129  with self.assertRaises(RuntimeError):
2130  for key in int32_foreign_iter:
2131  pass
2132 
2134  msg = map_unittest_pb2.TestMap()
2135 
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)
2139 
2140  submsg.c = 5
2141 
2142  serialized = msg.SerializeToString()
2143  msg2 = map_unittest_pb2.TestMap()
2144  msg2.ParseFromString(serialized)
2145 
2146  self.assertEqual(5, msg2.map_int32_foreign_message[111].c)
2147 
2148  # Doesn't allow direct submessage assignment.
2149  with self.assertRaises(ValueError):
2150  msg.map_int32_foreign_message[88] = unittest_pb2.ForeignMessage()
2151 
2152  def testMapIteration(self):
2153  msg = map_unittest_pb2.TestMap()
2154 
2155  for k, v in msg.map_int32_int32.items():
2156  # Should not be reached.
2157  self.assertTrue(False)
2158 
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))
2163 
2164  matching_dict = {2: 4, 3: 6, 4: 8}
2165  self.assertMapIterEquals(msg.map_int32_int32.items(), matching_dict)
2166 
2167  def testMapItems(self):
2168  # Map items used to have strange behaviors when use c extension. Because
2169  # [] may reorder the map and invalidate any exsting iterators.
2170  # TODO(jieluo): Check if [] reordering the map is a bug or intended
2171  # behavior.
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)
2181 
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'
2202 
2203  # If deterministic serialization is not working correctly, this will be
2204  # "flaky" depending on the exact python dict hash seed.
2205  #
2206  # Fortunately, there are enough items in this map that it is extremely
2207  # unlikely to ever hit the "right" in-order combination, so the test
2208  # itself should fail reliably.
2209  self.assertEqual(golden_data, msg.SerializeToString(deterministic=True))
2210 
2212  # Iterator needs to work even if message and map are deleted.
2213  msg = map_unittest_pb2.TestMap()
2214 
2215  msg.map_int32_int32[2] = 4
2216  msg.map_int32_int32[3] = 6
2217  msg.map_int32_int32[4] = 8
2218 
2219  it = msg.map_int32_int32.items()
2220  del msg
2221 
2222  matching_dict = {2: 4, 3: 6, 4: 8}
2223  self.assertMapIterEquals(it, matching_dict)
2224 
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])
2229 
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)
2233 
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])
2239 
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)
2246 
2248  # Should raise a TypeError when given a non-iterable.
2249  with self.assertRaises(TypeError):
2250  map_unittest_pb2.TestMap(map_string_foreign_message=1)
2251 
2253  # Map needs to work even if field is cleared.
2254  # For the C++ implementation this tests the correctness of
2255  # MapContainer::Release()
2256  msg = map_unittest_pb2.TestMap()
2257  int32_map = msg.map_int32_int32
2258 
2259  int32_map[2] = 4
2260  int32_map[3] = 6
2261  int32_map[4] = 8
2262 
2263  msg.ClearField('map_int32_int32')
2264  self.assertEqual(b'', msg.SerializeToString())
2265  matching_dict = {2: 4, 3: 6, 4: 8}
2266  self.assertMapIterEquals(int32_map.items(), matching_dict)
2267 
2269  # Map needs to work even if field is cleared.
2270  # For the C++ implementation this tests the correctness of
2271  # MapContainer::Release()
2272  msg = map_unittest_pb2.TestMap()
2273  int32_foreign_message = msg.map_int32_foreign_message
2274 
2275  int32_foreign_message[2].c = 5
2276 
2277  msg.ClearField('map_int32_foreign_message')
2278  self.assertEqual(b'', msg.SerializeToString())
2279  self.assertTrue(2 in int32_foreign_message.keys())
2280 
2282  # Message map item needs to work even if it is cleared.
2283  # For the C++ implementation this tests the correctness of
2284  # MapContainer::Release()
2285  msg = map_unittest_pb2.TestMap()
2286  msg.map_int32_all_types[2].optional_string = 'bar'
2287 
2288  if api_implementation.Type() == 'cpp':
2289  # Need to keep the map reference because of b/27942626.
2290  # TODO(jieluo): Remove it.
2291  unused_map = msg.map_int32_all_types # pylint: disable=unused-variable
2292  msg_value = msg.map_int32_all_types[2]
2293  msg.Clear()
2294 
2295  # Reset to trigger sync between repeated field and map in c++.
2296  msg.map_int32_all_types[3].optional_string = 'foo'
2297  self.assertEqual(msg_value.optional_string, 'bar')
2298 
2300  # Map iterator is invalidated when field is cleared.
2301  # But this case does need to not crash the interpreter.
2302  # For the C++ implementation this tests the correctness of
2303  # ScalarMapContainer::Release()
2304  msg = map_unittest_pb2.TestMap()
2305 
2306  it = iter(msg.map_int32_int32)
2307 
2308  msg.ClearField('map_int32_int32')
2309  with self.assertRaises(RuntimeError):
2310  for _ in it:
2311  pass
2312 
2313  it = iter(msg.map_int32_foreign_message)
2314  msg.ClearField('map_int32_foreign_message')
2315  with self.assertRaises(RuntimeError):
2316  for _ in it:
2317  pass
2318 
2319  def testMapDelete(self):
2320  msg = map_unittest_pb2.TestMap()
2321 
2322  self.assertEqual(0, len(msg.map_int32_int32))
2323 
2324  msg.map_int32_int32[4] = 6
2325  self.assertEqual(1, len(msg.map_int32_int32))
2326 
2327  with self.assertRaises(KeyError):
2328  del msg.map_int32_int32[88]
2329 
2330  del msg.map_int32_int32[4]
2331  self.assertEqual(0, len(msg.map_int32_int32))
2332 
2333  with self.assertRaises(KeyError):
2334  del msg.map_int32_all_types[32]
2335 
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)
2344 
2345  def testMapsCompare(self):
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)
2352 
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()))
2359 
2360  @unittest.skipIf(sys.maxunicode == UCS2_MAXUNICODE, 'Skip for ucs2')
2362  # Test u'\ud801' is rejected at parser in both python2 and python3.
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))
2369  else:
2370  self.assertIn('Error parsing message', str(context.exception))
2371 
2372  # Test optional_string=u'😍' is accepted.
2373  serialized = unittest_proto3_arena_pb2.TestAllTypes(
2374  optional_string=u'😍').SerializeToString()
2375  msg2 = unittest_proto3_arena_pb2.TestAllTypes()
2376  msg2.MergeFromString(serialized)
2377  self.assertEqual(msg2.optional_string, u'😍')
2378 
2379  msg = unittest_proto3_arena_pb2.TestAllTypes(
2380  optional_string=u'\ud001')
2381  self.assertEqual(msg.optional_string, u'\ud001')
2382 
2384  # Surrogates are rejected at setters in Python3.
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')
2397 
2398 
2399 @testing_refleaks.TestCase
2400 class ValidTypeNamesTest(unittest.TestCase):
2401 
2402  def assertImportFromName(self, msg, base_name):
2403  # Parse <type 'module.class_name'> to extra 'some.name' as a string.
2404  tp_name = str(type(msg)).split("'")[1]
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))
2409 
2410  parts = tp_name.split('.')
2411  class_name = parts[-1]
2412  module_name = '.'.join(parts[:-1])
2413  __import__(module_name, fromlist=[class_name])
2414 
2416  # If import doesn't work, pickling won't work either.
2417  pb = unittest_pb2.TestAllTypes()
2418  self.assertImportFromName(pb.repeated_int32, 'Scalar')
2419  self.assertImportFromName(pb.repeated_nested_message, 'Composite')
2420 
2421 @testing_refleaks.TestCase
2422 class PackedFieldTest(unittest.TestCase):
2423 
2424  def setMessage(self, message):
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)
2439 
2440  def testPackedFields(self):
2441  message = packed_field_test_pb2.TestPackedTypes()
2442  self.setMessage(message)
2443  golden_data = (b'\x0A\x01\x01'
2444  b'\x12\x01\x01'
2445  b'\x1A\x01\x01'
2446  b'\x22\x01\x01'
2447  b'\x2A\x01\x02'
2448  b'\x32\x01\x02'
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'
2455  b'\x6A\x01\x01'
2456  b'\x72\x01\x01')
2457  self.assertEqual(golden_data, message.SerializeToString())
2458 
2460  message = packed_field_test_pb2.TestUnpackedTypes()
2461  self.setMessage(message)
2462  golden_data = (b'\x08\x01'
2463  b'\x10\x01'
2464  b'\x18\x01'
2465  b'\x20\x01'
2466  b'\x28\x02'
2467  b'\x30\x02'
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'
2474  b'\x68\x01'
2475  b'\x70\x01')
2476  self.assertEqual(golden_data, message.SerializeToString())
2477 
2478 
2479 @unittest.skipIf(api_implementation.Type() != 'cpp',
2480  'explicit tests of the C++ implementation')
2481 @testing_refleaks.TestCase
2482 class OversizeProtosTest(unittest.TestCase):
2483 
2484  @classmethod
2485  def setUpClass(cls):
2486  # At the moment, reference cycles between DescriptorPool and Message classes
2487  # are not detected and these objects are never freed.
2488  # To avoid errors with ReferenceLeakChecker, we create the class only once.
2489  file_desc = """
2490  name: "f/f.msg2"
2491  package: "f"
2492  message_type {
2493  name: "msg1"
2494  field {
2495  name: "payload"
2496  number: 1
2497  label: LABEL_OPTIONAL
2498  type: TYPE_STRING
2499  }
2500  }
2501  message_type {
2502  name: "msg2"
2503  field {
2504  name: "field"
2505  number: 1
2506  label: LABEL_OPTIONAL
2507  type: TYPE_MESSAGE
2508  type_name: "msg1"
2509  }
2510  }
2511  """
2513  desc = descriptor_pb2.FileDescriptorProto()
2514  text_format.Parse(file_desc, desc)
2515  pool.Add(desc)
2516  cls.proto_cls = message_factory.MessageFactory(pool).GetPrototype(
2517  pool.FindMessageTypeByName('f.msg2'))
2518 
2519  def setUp(self):
2520  self.p = self.proto_cls()
2521  self.p.field.payload = 'c' * (1024 * 1024 * 64 + 1)
2522  self.p_serialized = self.p.SerializeToString()
2523 
2525  from google.protobuf.pyext._message import SetAllowOversizeProtos
2526  SetAllowOversizeProtos(False)
2527  q = self.proto_cls()
2528  try:
2529  q.ParseFromString(self.p_serialized)
2530  except message.DecodeError as e:
2531  self.assertEqual(str(e), 'Error parsing message')
2532 
2534  from google.protobuf.pyext._message import SetAllowOversizeProtos
2536  q = self.proto_cls()
2537  q.ParseFromString(self.p_serialized)
2538  self.assertEqual(self.p.field.payload, q.field.payload)
2539 
2540 if __name__ == '__main__':
2541  unittest.main()
google::protobuf.internal.message_test.Proto3Test.testProto3Optional
def testProto3Optional(self)
Definition: protobuf/python/google/protobuf/internal/message_test.py:1608
xds_interop_client.str
str
Definition: xds_interop_client.py:487
google::protobuf.internal.message_test.MessageTest.testOneofWhichOneof
def testOneofWhichOneof(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:928
google::protobuf.internal.message_test.MessageTest.testPositiveInfinityPacked
def testPositiveInfinityPacked(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:276
google::protobuf::hash
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/hash.h:51
google::protobuf.internal.message_test.MessageTest.TestIterable.__init__
def __init__(self, values=None)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1146
google::protobuf.internal.message_test.MessageTest.testRepeatedFieldsNotHashable
def testRepeatedFieldsNotHashable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:764
google::protobuf.internal.message_test.Proto3Test.testMapGet
def testMapGet(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1721
google::protobuf.internal.message_test.MessageTest.testRepeatedFieldsComparable
def testRepeatedFieldsComparable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:723
google::protobuf.internal.message_test.OversizeProtosTest.proto_cls
proto_cls
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2577
google::protobuf.internal.message_test.OversizeProtosTest.p
p
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2581
google::protobuf.internal.message_test.MessageTest.testOneofClearField
def testOneofClearField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:947
google::protobuf.internal.message_test.Proto3Test.assertMapIterEquals
def assertMapIterEquals(self, map_iter, dict_value)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1582
google::protobuf.internal.message_test.MessageTest.testPositiveInfinity
def testPositiveInfinity(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:212
google::protobuf.internal.message_test.MessageTest.testOneofNestedMessageInit
def testOneofNestedMessageInit(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1012
google::protobuf.message.EncodeError
Definition: bloaty/third_party/protobuf/python/google/protobuf/message.py:41
google::protobuf.internal.python_message.MergeFrom
MergeFrom
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/python_message.py:1339
capstone.range
range
Definition: third_party/bloaty/third_party/capstone/bindings/python/capstone/__init__.py:6
google::protobuf.internal.message_test.MessageTest.testGoldenPackedMessage
def testGoldenPackedMessage(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:143
google::protobuf.internal.message_test.MessageTest.testOneofClearUnsetField
def testOneofClearUnsetField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:965
google::protobuf.internal.message_test.Proto3Test.testMessageMapValidAfterFieldCleared
def testMessageMapValidAfterFieldCleared(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2290
google::protobuf.internal.message_test.Proto3Test.testMapFieldRaisesCorrectError
def testMapFieldRaisesCorrectError(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2269
google::protobuf.internal.message_test.MessageTest.testOneofNestedMergeFrom
def testOneofNestedMergeFrom(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:990
google::protobuf.internal.message_test.ValidTypeNamesTest.assertImportFromName
def assertImportFromName(self, msg, base_name)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2462
google::protobuf.internal.message_test.Proto3Test
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1579
google::protobuf.internal.message_test.MessageTest.TestIterable._list
_list
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1147
google::protobuf.internal.message_test.Proto3Test.testModifyMapWhileIterating
def testModifyMapWhileIterating(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2090
google::protobuf.internal.message_test.MessageTest.testNotANumberPacked
def testNotANumberPacked(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:294
google::protobuf.internal.message_test.MessageTest.testInsertRepeatedCompositeField
def testInsertRepeatedCompositeField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:453
google::protobuf.internal.message_test.Proto3Test.testMapsCompare
def testMapsCompare(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2366
google::protobuf.internal.message_test.OversizeProtosTest.testAssertOversizeProto
def testAssertOversizeProto(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2585
google::protobuf
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
google::protobuf.internal.message_test.Proto3Test.testMapConstruction
def testMapConstruction(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2247
google::protobuf.internal.message_test.MessageTest.testExtendStringWithPythonList
def testExtendStringWithPythonList(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1121
google::protobuf.internal.message_test.MessageTest.testUnknownFieldPrinting
def testUnknownFieldPrinting(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:432
cpp.ast.reversed
def reversed(seq)
Definition: bloaty/third_party/googletest/googlemock/scripts/generator/cpp/ast.py:52
google::protobuf.internal.message_test.MessageTest.testRepeatedScalarIterable
def testRepeatedScalarIterable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:538
google::protobuf.internal.message_test.Proto2Test.testPythonicInitWithDict
def testPythonicInitWithDict(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1556
google::protobuf.internal.message_test.Proto3Test.testMapIterInvalidatedByClearField
def testMapIterInvalidatedByClearField(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2321
google::protobuf.internal.message_test.MessageTest.testOneofDefaultValues
def testOneofDefaultValues(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:869
google::protobuf.internal.message_test.MessageTest.testPickleNestedMessage
def testPickleNestedMessage(self, message_module)
Definition: protobuf/python/google/protobuf/internal/message_test.py:187
google::protobuf.internal.message_test.MessageTest.testDeterminismParameters
def testDeterminismParameters(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:167
google::protobuf.internal.message_test.Proto3Test.testMergeFrom
def testMergeFrom(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1898
google::protobuf.internal.message_test.MessageTest.testOneofMessageMergeFrom
def testOneofMessageMergeFrom(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1000
google::protobuf.internal.message_test.MessageTest.testOneofClearSetField
def testOneofClearSetField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:956
google::protobuf.internal.message_test.Proto3Test.testMessageMap
def testMessageMap(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1829
google::protobuf.internal.message_test.Proto3Test.testMapDeterministicSerialization
def testMapDeterministicSerialization(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2204
google::protobuf.internal.message_test.PackedFieldTest
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2482
google::protobuf.internal.message_test.MessageTest.testRepeatedCompareWithSelf
def testRepeatedCompareWithSelf(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1253
google::protobuf.internal.message_test.MessageTest.testOneofDeserialize
def testOneofDeserialize(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:976
google::protobuf.internal.message_test.Proto3Test.testMapIteration
def testMapIteration(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2126
google::protobuf.internal.message_test.MessageTest.testGoldenMessage
def testGoldenMessage(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:125
google::protobuf.internal.message_test.MessageTest.testRepeatedFieldInsideNestedMessage
def testRepeatedFieldInsideNestedMessage(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:771
google::protobuf.internal.message_test.MessageTest.testReleasedNestedMessages
def testReleasedNestedMessages(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1262
google::protobuf.internal.message_test.MessageTest.testSortingRepeatedScalarFieldsCustomComparator
def testSortingRepeatedScalarFieldsCustomComparator(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:600
google::protobuf.internal.message_test.MessageTest.testPickleSupport
def testPickleSupport(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:203
google::protobuf.internal.message_test.MessageTest.testAssignByteStringToUnicodeField
def testAssignByteStringToUnicodeField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1025
google::protobuf.internal.message_test.MessageTest.testExtendShouldNotSwallowExceptions
def testExtendShouldNotSwallowExceptions(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1049
google::protobuf.internal.message_test.MessageTest.testParseErrors
def testParseErrors(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:155
google::protobuf.internal.message_test.MessageTest.testExtendFloatWithIterable
def testExtendFloatWithIterable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1176
google::protobuf.internal.message_test.MessageTest.testOneofSemantics
def testOneofSemantics(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:885
google::protobuf.internal.message_test.PackedFieldTest.testPackedFields
def testPackedFields(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2500
google::protobuf.internal.message_test.MessageTest.TestIterable.__nonzero__
def __nonzero__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1149
google::protobuf.internal.message_test.Proto2Test.testParsingMerge
def testParsingMerge(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1446
google::protobuf.internal
Definition: third_party/bloaty/third_party/protobuf/python/google/protobuf/internal/__init__.py:1
google::protobuf.internal.message_test.MessageTest.testOneofGetCaseNonexistingField
def testOneofGetCaseNonexistingField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:864
xds_interop_client.int
int
Definition: xds_interop_client.py:113
google::protobuf.internal.message_test.MessageTest.testNotANumber
def testNotANumber(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:252
google::protobuf.internal.message_test.MessageTest.testExtendInt32WithIterable
def testExtendInt32WithIterable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1163
google::protobuf.internal.message_test.Proto2Test.testFieldPresence
def testFieldPresence(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1306
google::protobuf.internal.message_test.Proto3Test.testMapItems
def testMapItems(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2189
google::protobuf.internal.message_test.MessageTest.testMergeFromEmpty
def testMergeFromEmpty(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:846
google::protobuf.internal.message_test.Proto3Test.testMergeFromBadType
def testMergeFromBadType(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2008
google::protobuf.internal.message_test.MessageTest.testHighPrecisionFloatPrinting
def testHighPrecisionFloatPrinting(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:424
google::protobuf.internal.message_test.Proto2Test.testAssignInvalidEnum
def testAssignInvalidEnum(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1354
google::protobuf.internal.message_test.MessageTest.testLongValuedSlice
def testLongValuedSlice(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1032
google::protobuf.internal.message_test.ValidTypeNamesTest.testTypeNamesCanBeImported
def testTypeNamesCanBeImported(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2475
google::protobuf.internal.message_test.MessageTest.TestIterable.__len__
def __len__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1157
google::protobuf.internal.message_test.Proto3Test.testStrictUtf8Check
def testStrictUtf8Check(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2382
google::protobuf.internal.message_test.Proto3Test.testFieldPresence
def testFieldPresence(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1592
google::protobuf.internal.message_test.Proto3Test.testIntegerMapWithLongs
def testIntegerMapWithLongs(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2024
google::protobuf.internal.message_test.PackedFieldTest.setMessage
def setMessage(self, message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2484
google::protobuf.internal.message_test.Proto2Test.testUnknownEnumMap
def testUnknownEnumMap(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1385
google::protobuf.internal.message_test.MessageTest.testSortingRepeatedCompositeFieldsStable
def testSortingRepeatedCompositeFieldsStable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:640
google::protobuf.internal.message_test.MessageTest.testPickleRepeatedScalarContainer
def testPickleRepeatedScalarContainer(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1202
google::protobuf.internal.message_test.OversizeProtosTest.p_serialized
p_serialized
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2583
google::protobuf.internal.message_test.Proto3Test.testMapAssignmentCausesPresence
def testMapAssignmentCausesPresence(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2040
google::protobuf.internal.message_test.MessageTest.testSortEmptyRepeatedCompositeContainer
def testSortEmptyRepeatedCompositeContainer(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1216
google::protobuf.internal.message_test.Proto3Test.testSubmessageMap
def testSubmessageMap(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2107
google::protobuf.internal.message_test.Proto3Test.testScalarMapDefaults
def testScalarMapDefaults(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1673
google::protobuf.internal.message_test.OversizeProtosTest.setUp
def setUp(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2580
google::protobuf.internal.message_test.MessageTest.testNegativeInfinity
def testNegativeInfinity(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:232
google::protobuf.internal.message_test.Proto3Test.testMapMessageFieldConstruction
def testMapMessageFieldConstruction(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2262
google::protobuf.internal.message_test.ValidTypeNamesTest
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2460
google::protobuf::python::cmessage::SetAllowOversizeProtos
PyObject * SetAllowOversizeProtos(PyObject *m, PyObject *arg)
Definition: bloaty/third_party/protobuf/python/google/protobuf/pyext/message.cc:1914
google::protobuf.internal.message_test.Proto3Test.testCopyFromBadType
def testCopyFromBadType(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2016
google::protobuf.internal.message_test.MessageTest.testRepeatedScalarFieldPop
def testRepeatedScalarFieldPop(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1229
google::protobuf.internal.message_test.Proto3Test.testNestedMessageMapItemDelete
def testNestedMessageMapItemDelete(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1869
google::protobuf.internal.message_test.Proto3Test.testMapsAreMapping
def testMapsAreMapping(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2358
google::protobuf.internal.message_test.OversizeProtosTest
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2543
google::protobuf.internal.message_test.Proto3Test.testStringUnicodeConversionInMap
def testStringUnicodeConversionInMap(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1813
google::protobuf.message.DecodeError
Definition: bloaty/third_party/protobuf/python/google/protobuf/message.py:40
google::protobuf.internal.message_test.MessageTest.TestIterable.__iter__
def __iter__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1160
google::protobuf.internal.message_test.MessageTest.testRepeatedContains
def testRepeatedContains(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:522
google::protobuf.internal.message_test.MessageTest.testAppendRepeatedCompositeField
def testAppendRepeatedCompositeField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:439
google::protobuf.internal.message_test.MessageTest.testNegativeInfinityPacked
def testNegativeInfinityPacked(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:285
google::protobuf.internal.message_test.Proto2Test.test_documentation
def test_documentation(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1567
google::protobuf.internal.message_test.Proto3Test.testMapMergeFrom
def testMapMergeFrom(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1961
google::protobuf.internal.message_test.Proto3Test.testMessageMapItemValidAfterTopMessageCleared
def testMessageMapItemValidAfterTopMessageCleared(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2303
google::protobuf.internal.message_test.MessageTest.testSetRepeatedComposite
def testSetRepeatedComposite(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1272
google::protobuf.internal.message_test.MessageTest.testReturningType
def testReturningType(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1280
google::protobuf.internal.message_test.Proto3Test.testProto3ParserDropDefaultScalar
def testProto3ParserDropDefaultScalar(self)
Definition: protobuf/python/google/protobuf/internal/message_test.py:1597
google::protobuf.internal.message_test.Proto3Test.testMapScalarFieldConstruction
def testMapScalarFieldConstruction(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2256
google::protobuf.internal.message_test.MessageTest.testSortingRepeatedScalarFieldsDefaultComparator
def testSortingRepeatedScalarFieldsDefaultComparator(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:560
google::protobuf.internal.message_test.Proto2Test.testGoldenExtensions
def testGoldenExtensions(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1410
google::protobuf.internal.message_test.MessageTest.testExtendInt32WithNothing
def testExtendInt32WithNothing(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1060
google::protobuf.internal.message_test.MessageTest.testMergeFrom
def testMergeFrom(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:776
google::protobuf.internal.message_test.MessageTest.testExtendFloatWithPythonList
def testExtendFloatWithPythonList(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1110
google::protobuf.internal.message_test.MessageTest.testExtendStringWithNothing
def testExtendStringWithNothing(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1086
google::protobuf.internal.message_test.Proto2Test.testPythonicInit
def testPythonicInit(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1495
google::protobuf.internal.message_test.MessageTest.testBadUtf8String
def testBadUtf8String(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:115
google::protobuf.descriptor_pool.DescriptorPool
Definition: bloaty/third_party/protobuf/python/google/protobuf/descriptor_pool.py:118
google::protobuf.internal.message_test.Proto2Test.testGoldenPackedExtensions
def testGoldenPackedExtensions(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1421
google::protobuf.internal.message_test.Proto3Test.testAssignUnknownEnum
def testAssignUnknownEnum(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1649
google::protobuf.internal.message_test.MessageTest.testAddWrongRepeatedNestedField
def testAddWrongRepeatedNestedField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:510
cpp.gmock_class.set
set
Definition: bloaty/third_party/googletest/googlemock/scripts/generator/cpp/gmock_class.py:44
google::protobuf.internal.message_test.MessageTest.testExtendFloatWithNothing
def testExtendFloatWithNothing(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1073
google::protobuf.internal.message_test.MessageTest.testMergeFromString
def testMergeFromString(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:806
google::protobuf.internal.message_test.Proto3Test.testMapByteSize
def testMapByteSize(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1886
google::protobuf.internal.message_test.MessageTest.testExtendStringWithIterable
def testExtendStringWithIterable(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1189
google::protobuf.internal.message_test.MessageTest.testExtendStringWithString
def testExtendStringWithString(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1132
google::protobuf.internal.message_test.MessageTest.testOneofCopyFrom
def testOneofCopyFrom(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:983
google::protobuf.internal.message_test.MessageTest.testOneofCompositeFieldReadAccess
def testOneofCompositeFieldReadAccess(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:920
google::protobuf.internal.message_test.OversizeProtosTest.testSucceedOversizeProto
def testSucceedOversizeProto(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2594
google::protobuf.internal.message_test.OversizeProtosTest.setUpClass
def setUpClass(cls)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2546
google::protobuf.internal.message_test.MessageTest.testMergeFromRepeatedField
def testMergeFromRepeatedField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:491
google::protobuf.internal.message_test.Proto3Test.testMapIterationClearMessage
def testMapIterationClearMessage(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2233
google::protobuf.internal.message_test.Proto2Test
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1304
google::protobuf.internal.python_message.SerializeToString
SerializeToString
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/python_message.py:1080
iter
Definition: test_winkernel.cpp:47
google::protobuf.internal.message_test.MessageTest.testExtremeFloatValues
def testExtremeFloatValues(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:308
google::protobuf.internal.message_test.MessageTest.testExtendInt32WithPythonList
def testExtendInt32WithPythonList(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1099
google::protobuf.internal.message_test.MessageTest.testRepeatedCompositeFieldSortArguments
def testRepeatedCompositeFieldSortArguments(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:665
google::protobuf.internal.message_test.Proto2Test.testExtensionsErrors
def testExtensionsErrors(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1391
google::protobuf.internal.message_test.MessageTest.testHasFieldOnRepeatedField
def testHasFieldOnRepeatedField(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1222
google::protobuf.internal.message_test.Proto2Test.testMergeFromExtensions
def testMergeFromExtensions(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1395
google::protobuf.internal.message_test.MessageTest.testHighPrecisionDoublePrinting
def testHighPrecisionDoublePrinting(self, message_module)
Definition: protobuf/python/google/protobuf/internal/message_test.py:419
google::protobuf.internal.message_test.MessageTest.testExtremeDoubleValues
def testExtremeDoubleValues(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:374
google::protobuf.internal.message_test.Proto3Test.testMapEntryAlwaysSerialized
def testMapEntryAlwaysSerialized(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1805
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
google::protobuf.internal.message_test.Proto3Test.testMapFindInitializationErrorsSmokeTest
def testMapFindInitializationErrorsSmokeTest(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2374
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
google::protobuf.internal.python_message.HasField
HasField
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/python_message.py:864
google::protobuf.internal.message_test.Proto3Test.testScalarMap
def testScalarMap(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1746
google::protobuf.internal.message_test.MessageTest.testRepeatedNestedFieldIteration
def testRepeatedNestedFieldIteration(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:546
google::protobuf.internal.message_test.Proto2Test.testPickleIncompleteProto
def testPickleIncompleteProto(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1432
google::protobuf.internal.message_test.Proto3Test.testMapValidAfterFieldCleared
def testMapValidAfterFieldCleared(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2274
split
static void split(const char *s, char ***ss, size_t *ns)
Definition: debug/trace.cc:111
google::protobuf.internal.message_test.MessageTest.testOneofClear
def testOneofClear(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1017
google::protobuf.internal.message_test.MessageTest.testMergeFromStringUsingMemoryView
def testMergeFromStringUsingMemoryView(self, message_module)
Definition: protobuf/python/google/protobuf/internal/message_test.py:770
google::protobuf.internal.message_test.MessageTest.testPickleNestedNestedMessage
def testPickleNestedNestedMessage(self, message_module)
Definition: protobuf/python/google/protobuf/internal/message_test.py:193
google::protobuf.internal.message_test.MessageTest.testSortingRepeatedCompositeFieldsCustomComparator
def testSortingRepeatedCompositeFieldsCustomComparator(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:620
google::protobuf.internal.message_test.MessageTest.testFloatPrinting
def testFloatPrinting(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:419
google::protobuf.internal.message_test.MessageTest.testRepeatedScalarFieldSortArguments
def testRepeatedScalarFieldSortArguments(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:691
google::protobuf.internal.message_test.MessageTest.ensureNestedMessageExists
def ensureNestedMessageExists(self, msg, attribute)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:855
google::protobuf.message_factory.MessageFactory
Definition: bloaty/third_party/protobuf/python/google/protobuf/message_factory.py:56
google::protobuf.internal.message_test.Proto3Test.testSurrogatesInPython3
def testSurrogatesInPython3(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2405
google::protobuf.internal.message_test.MessageTest.testRepeatedCompositeFieldPop
def testRepeatedCompositeFieldPop(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1239
google::protobuf.internal.message_test.MessageTest.TestIterable
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:1139
google::protobuf.internal.message_test.Proto3Test.testMapDelete
def testMapDelete(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2341
google::protobuf.internal.message_test.PackedFieldTest.testUnpackedFields
def testUnpackedFields(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2519
google::protobuf.internal.message_test.Proto3Test.testMapAssignmentCausesPresenceForSubmessages
def testMapAssignmentCausesPresenceForSubmessages(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:2062
google::protobuf.internal.message_test.MessageTest.testRepeatedFieldsAreSequences
def testRepeatedFieldsAreSequences(self, message_module)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/message_test.py:758


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:26