protobuf/python/google/protobuf/internal/test_util.py
Go to the documentation of this file.
1 # Protocol Buffers - Google's data interchange format
2 # Copyright 2008 Google Inc. All rights reserved.
3 # https://developers.google.com/protocol-buffers/
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
7 # met:
8 #
9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # * Redistributions in binary form must reproduce the above
12 # copyright notice, this list of conditions and the following disclaimer
13 # in the documentation and/or other materials provided with the
14 # distribution.
15 # * Neither the name of Google Inc. nor the names of its
16 # contributors may be used to endorse or promote products derived from
17 # this software without specific prior written permission.
18 #
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 """Utilities for Python proto2 tests.
32 
33 This is intentionally modeled on C++ code in
34 //google/protobuf/test_util.*.
35 """
36 
37 __author__ = 'robinson@google.com (Will Robinson)'
38 
39 import numbers
40 import operator
41 import os.path
42 
43 from google.protobuf import unittest_import_pb2
44 from google.protobuf import unittest_pb2
45 
46 try:
47  long # Python 2
48 except NameError:
49  long = int # Python 3
50 
51 
52 # Tests whether the given TestAllTypes message is proto2 or not.
53 # This is used to gate several fields/features that only exist
54 # for the proto2 version of the message.
55 def IsProto2(message):
56  return message.DESCRIPTOR.syntax == "proto2"
57 
58 
59 def SetAllNonLazyFields(message):
60  """Sets every non-lazy field in the message to a unique value.
61 
62  Args:
63  message: A TestAllTypes instance.
64  """
65 
66  #
67  # Optional fields.
68  #
69 
70  message.optional_int32 = 101
71  message.optional_int64 = 102
72  message.optional_uint32 = 103
73  message.optional_uint64 = 104
74  message.optional_sint32 = 105
75  message.optional_sint64 = 106
76  message.optional_fixed32 = 107
77  message.optional_fixed64 = 108
78  message.optional_sfixed32 = 109
79  message.optional_sfixed64 = 110
80  message.optional_float = 111
81  message.optional_double = 112
82  message.optional_bool = True
83  message.optional_string = u'115'
84  message.optional_bytes = b'116'
85 
86  if IsProto2(message):
87  message.optionalgroup.a = 117
88  message.optional_nested_message.bb = 118
89  message.optional_foreign_message.c = 119
90  message.optional_import_message.d = 120
91  message.optional_public_import_message.e = 126
92 
93  message.optional_nested_enum = unittest_pb2.TestAllTypes.BAZ
94  message.optional_foreign_enum = unittest_pb2.FOREIGN_BAZ
95  if IsProto2(message):
96  message.optional_import_enum = unittest_import_pb2.IMPORT_BAZ
97 
98  message.optional_string_piece = u'124'
99  message.optional_cord = u'125'
100 
101  #
102  # Repeated fields.
103  #
104 
105  message.repeated_int32.append(201)
106  message.repeated_int64.append(202)
107  message.repeated_uint32.append(203)
108  message.repeated_uint64.append(204)
109  message.repeated_sint32.append(205)
110  message.repeated_sint64.append(206)
111  message.repeated_fixed32.append(207)
112  message.repeated_fixed64.append(208)
113  message.repeated_sfixed32.append(209)
114  message.repeated_sfixed64.append(210)
115  message.repeated_float.append(211)
116  message.repeated_double.append(212)
117  message.repeated_bool.append(True)
118  message.repeated_string.append(u'215')
119  message.repeated_bytes.append(b'216')
120 
121  if IsProto2(message):
122  message.repeatedgroup.add().a = 217
123  message.repeated_nested_message.add().bb = 218
124  message.repeated_foreign_message.add().c = 219
125  message.repeated_import_message.add().d = 220
126  message.repeated_lazy_message.add().bb = 227
127 
128  message.repeated_nested_enum.append(unittest_pb2.TestAllTypes.BAR)
129  message.repeated_foreign_enum.append(unittest_pb2.FOREIGN_BAR)
130  if IsProto2(message):
131  message.repeated_import_enum.append(unittest_import_pb2.IMPORT_BAR)
132 
133  message.repeated_string_piece.append(u'224')
134  message.repeated_cord.append(u'225')
135 
136  # Add a second one of each field and set value by index.
137  message.repeated_int32.append(0)
138  message.repeated_int64.append(0)
139  message.repeated_uint32.append(0)
140  message.repeated_uint64.append(0)
141  message.repeated_sint32.append(0)
142  message.repeated_sint64.append(0)
143  message.repeated_fixed32.append(0)
144  message.repeated_fixed64.append(0)
145  message.repeated_sfixed32.append(0)
146  message.repeated_sfixed64.append(0)
147  message.repeated_float.append(0)
148  message.repeated_double.append(0)
149  message.repeated_bool.append(True)
150  message.repeated_string.append(u'0')
151  message.repeated_bytes.append(b'0')
152  message.repeated_int32[1] = 301
153  message.repeated_int64[1] = 302
154  message.repeated_uint32[1] = 303
155  message.repeated_uint64[1] = 304
156  message.repeated_sint32[1] = 305
157  message.repeated_sint64[1] = 306
158  message.repeated_fixed32[1] = 307
159  message.repeated_fixed64[1] = 308
160  message.repeated_sfixed32[1] = 309
161  message.repeated_sfixed64[1] = 310
162  message.repeated_float[1] = 311
163  message.repeated_double[1] = 312
164  message.repeated_bool[1] = False
165  message.repeated_string[1] = u'315'
166  message.repeated_bytes[1] = b'316'
167 
168  if IsProto2(message):
169  message.repeatedgroup.add().a = 317
170  message.repeated_nested_message.add().bb = 318
171  message.repeated_foreign_message.add().c = 319
172  message.repeated_import_message.add().d = 320
173  message.repeated_lazy_message.add().bb = 327
174 
175  message.repeated_nested_enum.append(unittest_pb2.TestAllTypes.BAR)
176  message.repeated_nested_enum[1] = unittest_pb2.TestAllTypes.BAZ
177  message.repeated_foreign_enum.append(unittest_pb2.FOREIGN_BAZ)
178  if IsProto2(message):
179  message.repeated_import_enum.append(unittest_import_pb2.IMPORT_BAZ)
180 
181  message.repeated_string_piece.append(u'324')
182  message.repeated_cord.append(u'325')
183 
184  #
185  # Fields that have defaults.
186  #
187 
188  if IsProto2(message):
189  message.default_int32 = 401
190  message.default_int64 = 402
191  message.default_uint32 = 403
192  message.default_uint64 = 404
193  message.default_sint32 = 405
194  message.default_sint64 = 406
195  message.default_fixed32 = 407
196  message.default_fixed64 = 408
197  message.default_sfixed32 = 409
198  message.default_sfixed64 = 410
199  message.default_float = 411
200  message.default_double = 412
201  message.default_bool = False
202  message.default_string = '415'
203  message.default_bytes = b'416'
204 
205  message.default_nested_enum = unittest_pb2.TestAllTypes.FOO
206  message.default_foreign_enum = unittest_pb2.FOREIGN_FOO
207  message.default_import_enum = unittest_import_pb2.IMPORT_FOO
208 
209  message.default_string_piece = '424'
210  message.default_cord = '425'
211 
212  message.oneof_uint32 = 601
213  message.oneof_nested_message.bb = 602
214  message.oneof_string = '603'
215  message.oneof_bytes = b'604'
216 
217 
218 def SetAllFields(message):
219  SetAllNonLazyFields(message)
220  message.optional_lazy_message.bb = 127
221 
222 
223 def SetAllExtensions(message):
224  """Sets every extension in the message to a unique value.
225 
226  Args:
227  message: A unittest_pb2.TestAllExtensions instance.
228  """
229 
230  extensions = message.Extensions
231  pb2 = unittest_pb2
232  import_pb2 = unittest_import_pb2
233 
234  #
235  # Optional fields.
236  #
237 
238  extensions[pb2.optional_int32_extension] = 101
239  extensions[pb2.optional_int64_extension] = 102
240  extensions[pb2.optional_uint32_extension] = 103
241  extensions[pb2.optional_uint64_extension] = 104
242  extensions[pb2.optional_sint32_extension] = 105
243  extensions[pb2.optional_sint64_extension] = 106
244  extensions[pb2.optional_fixed32_extension] = 107
245  extensions[pb2.optional_fixed64_extension] = 108
246  extensions[pb2.optional_sfixed32_extension] = 109
247  extensions[pb2.optional_sfixed64_extension] = 110
248  extensions[pb2.optional_float_extension] = 111
249  extensions[pb2.optional_double_extension] = 112
250  extensions[pb2.optional_bool_extension] = True
251  extensions[pb2.optional_string_extension] = u'115'
252  extensions[pb2.optional_bytes_extension] = b'116'
253 
254  extensions[pb2.optionalgroup_extension].a = 117
255  extensions[pb2.optional_nested_message_extension].bb = 118
256  extensions[pb2.optional_foreign_message_extension].c = 119
257  extensions[pb2.optional_import_message_extension].d = 120
258  extensions[pb2.optional_public_import_message_extension].e = 126
259  extensions[pb2.optional_lazy_message_extension].bb = 127
260 
261  extensions[pb2.optional_nested_enum_extension] = pb2.TestAllTypes.BAZ
262  extensions[pb2.optional_nested_enum_extension] = pb2.TestAllTypes.BAZ
263  extensions[pb2.optional_foreign_enum_extension] = pb2.FOREIGN_BAZ
264  extensions[pb2.optional_import_enum_extension] = import_pb2.IMPORT_BAZ
265 
266  extensions[pb2.optional_string_piece_extension] = u'124'
267  extensions[pb2.optional_cord_extension] = u'125'
268 
269  #
270  # Repeated fields.
271  #
272 
273  extensions[pb2.repeated_int32_extension].append(201)
274  extensions[pb2.repeated_int64_extension].append(202)
275  extensions[pb2.repeated_uint32_extension].append(203)
276  extensions[pb2.repeated_uint64_extension].append(204)
277  extensions[pb2.repeated_sint32_extension].append(205)
278  extensions[pb2.repeated_sint64_extension].append(206)
279  extensions[pb2.repeated_fixed32_extension].append(207)
280  extensions[pb2.repeated_fixed64_extension].append(208)
281  extensions[pb2.repeated_sfixed32_extension].append(209)
282  extensions[pb2.repeated_sfixed64_extension].append(210)
283  extensions[pb2.repeated_float_extension].append(211)
284  extensions[pb2.repeated_double_extension].append(212)
285  extensions[pb2.repeated_bool_extension].append(True)
286  extensions[pb2.repeated_string_extension].append(u'215')
287  extensions[pb2.repeated_bytes_extension].append(b'216')
288 
289  extensions[pb2.repeatedgroup_extension].add().a = 217
290  extensions[pb2.repeated_nested_message_extension].add().bb = 218
291  extensions[pb2.repeated_foreign_message_extension].add().c = 219
292  extensions[pb2.repeated_import_message_extension].add().d = 220
293  extensions[pb2.repeated_lazy_message_extension].add().bb = 227
294 
295  extensions[pb2.repeated_nested_enum_extension].append(pb2.TestAllTypes.BAR)
296  extensions[pb2.repeated_foreign_enum_extension].append(pb2.FOREIGN_BAR)
297  extensions[pb2.repeated_import_enum_extension].append(import_pb2.IMPORT_BAR)
298 
299  extensions[pb2.repeated_string_piece_extension].append(u'224')
300  extensions[pb2.repeated_cord_extension].append(u'225')
301 
302  # Append a second one of each field.
303  extensions[pb2.repeated_int32_extension].append(301)
304  extensions[pb2.repeated_int64_extension].append(302)
305  extensions[pb2.repeated_uint32_extension].append(303)
306  extensions[pb2.repeated_uint64_extension].append(304)
307  extensions[pb2.repeated_sint32_extension].append(305)
308  extensions[pb2.repeated_sint64_extension].append(306)
309  extensions[pb2.repeated_fixed32_extension].append(307)
310  extensions[pb2.repeated_fixed64_extension].append(308)
311  extensions[pb2.repeated_sfixed32_extension].append(309)
312  extensions[pb2.repeated_sfixed64_extension].append(310)
313  extensions[pb2.repeated_float_extension].append(311)
314  extensions[pb2.repeated_double_extension].append(312)
315  extensions[pb2.repeated_bool_extension].append(False)
316  extensions[pb2.repeated_string_extension].append(u'315')
317  extensions[pb2.repeated_bytes_extension].append(b'316')
318 
319  extensions[pb2.repeatedgroup_extension].add().a = 317
320  extensions[pb2.repeated_nested_message_extension].add().bb = 318
321  extensions[pb2.repeated_foreign_message_extension].add().c = 319
322  extensions[pb2.repeated_import_message_extension].add().d = 320
323  extensions[pb2.repeated_lazy_message_extension].add().bb = 327
324 
325  extensions[pb2.repeated_nested_enum_extension].append(pb2.TestAllTypes.BAZ)
326  extensions[pb2.repeated_foreign_enum_extension].append(pb2.FOREIGN_BAZ)
327  extensions[pb2.repeated_import_enum_extension].append(import_pb2.IMPORT_BAZ)
328 
329  extensions[pb2.repeated_string_piece_extension].append(u'324')
330  extensions[pb2.repeated_cord_extension].append(u'325')
331 
332  #
333  # Fields with defaults.
334  #
335 
336  extensions[pb2.default_int32_extension] = 401
337  extensions[pb2.default_int64_extension] = 402
338  extensions[pb2.default_uint32_extension] = 403
339  extensions[pb2.default_uint64_extension] = 404
340  extensions[pb2.default_sint32_extension] = 405
341  extensions[pb2.default_sint64_extension] = 406
342  extensions[pb2.default_fixed32_extension] = 407
343  extensions[pb2.default_fixed64_extension] = 408
344  extensions[pb2.default_sfixed32_extension] = 409
345  extensions[pb2.default_sfixed64_extension] = 410
346  extensions[pb2.default_float_extension] = 411
347  extensions[pb2.default_double_extension] = 412
348  extensions[pb2.default_bool_extension] = False
349  extensions[pb2.default_string_extension] = u'415'
350  extensions[pb2.default_bytes_extension] = b'416'
351 
352  extensions[pb2.default_nested_enum_extension] = pb2.TestAllTypes.FOO
353  extensions[pb2.default_foreign_enum_extension] = pb2.FOREIGN_FOO
354  extensions[pb2.default_import_enum_extension] = import_pb2.IMPORT_FOO
355 
356  extensions[pb2.default_string_piece_extension] = u'424'
357  extensions[pb2.default_cord_extension] = '425'
358 
359  extensions[pb2.oneof_uint32_extension] = 601
360  extensions[pb2.oneof_nested_message_extension].bb = 602
361  extensions[pb2.oneof_string_extension] = u'603'
362  extensions[pb2.oneof_bytes_extension] = b'604'
363 
364 
365 def SetAllFieldsAndExtensions(message):
366  """Sets every field and extension in the message to a unique value.
367 
368  Args:
369  message: A unittest_pb2.TestAllExtensions message.
370  """
371  message.my_int = 1
372  message.my_string = 'foo'
373  message.my_float = 1.0
374  message.Extensions[unittest_pb2.my_extension_int] = 23
375  message.Extensions[unittest_pb2.my_extension_string] = 'bar'
376 
377 
379  """Ensures that serialized is the serialization we expect for a message
380  filled with SetAllFieldsAndExtensions(). (Specifically, ensures that the
381  serialization is in canonical, tag-number order).
382  """
383  my_extension_int = unittest_pb2.my_extension_int
384  my_extension_string = unittest_pb2.my_extension_string
385  expected_strings = []
386  message = unittest_pb2.TestFieldOrderings()
387  message.my_int = 1 # Field 1.
388  expected_strings.append(message.SerializeToString())
389  message.Clear()
390  message.Extensions[my_extension_int] = 23 # Field 5.
391  expected_strings.append(message.SerializeToString())
392  message.Clear()
393  message.my_string = 'foo' # Field 11.
394  expected_strings.append(message.SerializeToString())
395  message.Clear()
396  message.Extensions[my_extension_string] = 'bar' # Field 50.
397  expected_strings.append(message.SerializeToString())
398  message.Clear()
399  message.my_float = 1.0
400  expected_strings.append(message.SerializeToString())
401  message.Clear()
402  expected = b''.join(expected_strings)
403 
404  if expected != serialized:
405  raise ValueError('Expected %r, found %r' % (expected, serialized))
406 
407 
408 def ExpectAllFieldsSet(test_case, message):
409  """Check all fields for correct values have after Set*Fields() is called."""
410  test_case.assertTrue(message.HasField('optional_int32'))
411  test_case.assertTrue(message.HasField('optional_int64'))
412  test_case.assertTrue(message.HasField('optional_uint32'))
413  test_case.assertTrue(message.HasField('optional_uint64'))
414  test_case.assertTrue(message.HasField('optional_sint32'))
415  test_case.assertTrue(message.HasField('optional_sint64'))
416  test_case.assertTrue(message.HasField('optional_fixed32'))
417  test_case.assertTrue(message.HasField('optional_fixed64'))
418  test_case.assertTrue(message.HasField('optional_sfixed32'))
419  test_case.assertTrue(message.HasField('optional_sfixed64'))
420  test_case.assertTrue(message.HasField('optional_float'))
421  test_case.assertTrue(message.HasField('optional_double'))
422  test_case.assertTrue(message.HasField('optional_bool'))
423  test_case.assertTrue(message.HasField('optional_string'))
424  test_case.assertTrue(message.HasField('optional_bytes'))
425 
426  if IsProto2(message):
427  test_case.assertTrue(message.HasField('optionalgroup'))
428  test_case.assertTrue(message.HasField('optional_nested_message'))
429  test_case.assertTrue(message.HasField('optional_foreign_message'))
430  test_case.assertTrue(message.HasField('optional_import_message'))
431 
432  test_case.assertTrue(message.optionalgroup.HasField('a'))
433  test_case.assertTrue(message.optional_nested_message.HasField('bb'))
434  test_case.assertTrue(message.optional_foreign_message.HasField('c'))
435  test_case.assertTrue(message.optional_import_message.HasField('d'))
436 
437  test_case.assertTrue(message.HasField('optional_nested_enum'))
438  test_case.assertTrue(message.HasField('optional_foreign_enum'))
439  if IsProto2(message):
440  test_case.assertTrue(message.HasField('optional_import_enum'))
441 
442  test_case.assertTrue(message.HasField('optional_string_piece'))
443  test_case.assertTrue(message.HasField('optional_cord'))
444 
445  test_case.assertEqual(101, message.optional_int32)
446  test_case.assertEqual(102, message.optional_int64)
447  test_case.assertEqual(103, message.optional_uint32)
448  test_case.assertEqual(104, message.optional_uint64)
449  test_case.assertEqual(105, message.optional_sint32)
450  test_case.assertEqual(106, message.optional_sint64)
451  test_case.assertEqual(107, message.optional_fixed32)
452  test_case.assertEqual(108, message.optional_fixed64)
453  test_case.assertEqual(109, message.optional_sfixed32)
454  test_case.assertEqual(110, message.optional_sfixed64)
455  test_case.assertEqual(111, message.optional_float)
456  test_case.assertEqual(112, message.optional_double)
457  test_case.assertEqual(True, message.optional_bool)
458  test_case.assertEqual('115', message.optional_string)
459  test_case.assertEqual(b'116', message.optional_bytes)
460 
461  if IsProto2(message):
462  test_case.assertEqual(117, message.optionalgroup.a)
463  test_case.assertEqual(118, message.optional_nested_message.bb)
464  test_case.assertEqual(119, message.optional_foreign_message.c)
465  test_case.assertEqual(120, message.optional_import_message.d)
466  test_case.assertEqual(126, message.optional_public_import_message.e)
467  test_case.assertEqual(127, message.optional_lazy_message.bb)
468 
469  test_case.assertEqual(unittest_pb2.TestAllTypes.BAZ,
470  message.optional_nested_enum)
471  test_case.assertEqual(unittest_pb2.FOREIGN_BAZ,
472  message.optional_foreign_enum)
473  if IsProto2(message):
474  test_case.assertEqual(unittest_import_pb2.IMPORT_BAZ,
475  message.optional_import_enum)
476 
477  # -----------------------------------------------------------------
478 
479  test_case.assertEqual(2, len(message.repeated_int32))
480  test_case.assertEqual(2, len(message.repeated_int64))
481  test_case.assertEqual(2, len(message.repeated_uint32))
482  test_case.assertEqual(2, len(message.repeated_uint64))
483  test_case.assertEqual(2, len(message.repeated_sint32))
484  test_case.assertEqual(2, len(message.repeated_sint64))
485  test_case.assertEqual(2, len(message.repeated_fixed32))
486  test_case.assertEqual(2, len(message.repeated_fixed64))
487  test_case.assertEqual(2, len(message.repeated_sfixed32))
488  test_case.assertEqual(2, len(message.repeated_sfixed64))
489  test_case.assertEqual(2, len(message.repeated_float))
490  test_case.assertEqual(2, len(message.repeated_double))
491  test_case.assertEqual(2, len(message.repeated_bool))
492  test_case.assertEqual(2, len(message.repeated_string))
493  test_case.assertEqual(2, len(message.repeated_bytes))
494 
495  if IsProto2(message):
496  test_case.assertEqual(2, len(message.repeatedgroup))
497  test_case.assertEqual(2, len(message.repeated_nested_message))
498  test_case.assertEqual(2, len(message.repeated_foreign_message))
499  test_case.assertEqual(2, len(message.repeated_import_message))
500  test_case.assertEqual(2, len(message.repeated_nested_enum))
501  test_case.assertEqual(2, len(message.repeated_foreign_enum))
502  if IsProto2(message):
503  test_case.assertEqual(2, len(message.repeated_import_enum))
504 
505  test_case.assertEqual(2, len(message.repeated_string_piece))
506  test_case.assertEqual(2, len(message.repeated_cord))
507 
508  test_case.assertEqual(201, message.repeated_int32[0])
509  test_case.assertEqual(202, message.repeated_int64[0])
510  test_case.assertEqual(203, message.repeated_uint32[0])
511  test_case.assertEqual(204, message.repeated_uint64[0])
512  test_case.assertEqual(205, message.repeated_sint32[0])
513  test_case.assertEqual(206, message.repeated_sint64[0])
514  test_case.assertEqual(207, message.repeated_fixed32[0])
515  test_case.assertEqual(208, message.repeated_fixed64[0])
516  test_case.assertEqual(209, message.repeated_sfixed32[0])
517  test_case.assertEqual(210, message.repeated_sfixed64[0])
518  test_case.assertEqual(211, message.repeated_float[0])
519  test_case.assertEqual(212, message.repeated_double[0])
520  test_case.assertEqual(True, message.repeated_bool[0])
521  test_case.assertEqual('215', message.repeated_string[0])
522  test_case.assertEqual(b'216', message.repeated_bytes[0])
523 
524  if IsProto2(message):
525  test_case.assertEqual(217, message.repeatedgroup[0].a)
526  test_case.assertEqual(218, message.repeated_nested_message[0].bb)
527  test_case.assertEqual(219, message.repeated_foreign_message[0].c)
528  test_case.assertEqual(220, message.repeated_import_message[0].d)
529  test_case.assertEqual(227, message.repeated_lazy_message[0].bb)
530 
531  test_case.assertEqual(unittest_pb2.TestAllTypes.BAR,
532  message.repeated_nested_enum[0])
533  test_case.assertEqual(unittest_pb2.FOREIGN_BAR,
534  message.repeated_foreign_enum[0])
535  if IsProto2(message):
536  test_case.assertEqual(unittest_import_pb2.IMPORT_BAR,
537  message.repeated_import_enum[0])
538 
539  test_case.assertEqual(301, message.repeated_int32[1])
540  test_case.assertEqual(302, message.repeated_int64[1])
541  test_case.assertEqual(303, message.repeated_uint32[1])
542  test_case.assertEqual(304, message.repeated_uint64[1])
543  test_case.assertEqual(305, message.repeated_sint32[1])
544  test_case.assertEqual(306, message.repeated_sint64[1])
545  test_case.assertEqual(307, message.repeated_fixed32[1])
546  test_case.assertEqual(308, message.repeated_fixed64[1])
547  test_case.assertEqual(309, message.repeated_sfixed32[1])
548  test_case.assertEqual(310, message.repeated_sfixed64[1])
549  test_case.assertEqual(311, message.repeated_float[1])
550  test_case.assertEqual(312, message.repeated_double[1])
551  test_case.assertEqual(False, message.repeated_bool[1])
552  test_case.assertEqual('315', message.repeated_string[1])
553  test_case.assertEqual(b'316', message.repeated_bytes[1])
554 
555  if IsProto2(message):
556  test_case.assertEqual(317, message.repeatedgroup[1].a)
557  test_case.assertEqual(318, message.repeated_nested_message[1].bb)
558  test_case.assertEqual(319, message.repeated_foreign_message[1].c)
559  test_case.assertEqual(320, message.repeated_import_message[1].d)
560  test_case.assertEqual(327, message.repeated_lazy_message[1].bb)
561 
562  test_case.assertEqual(unittest_pb2.TestAllTypes.BAZ,
563  message.repeated_nested_enum[1])
564  test_case.assertEqual(unittest_pb2.FOREIGN_BAZ,
565  message.repeated_foreign_enum[1])
566  if IsProto2(message):
567  test_case.assertEqual(unittest_import_pb2.IMPORT_BAZ,
568  message.repeated_import_enum[1])
569 
570  # -----------------------------------------------------------------
571 
572  if IsProto2(message):
573  test_case.assertTrue(message.HasField('default_int32'))
574  test_case.assertTrue(message.HasField('default_int64'))
575  test_case.assertTrue(message.HasField('default_uint32'))
576  test_case.assertTrue(message.HasField('default_uint64'))
577  test_case.assertTrue(message.HasField('default_sint32'))
578  test_case.assertTrue(message.HasField('default_sint64'))
579  test_case.assertTrue(message.HasField('default_fixed32'))
580  test_case.assertTrue(message.HasField('default_fixed64'))
581  test_case.assertTrue(message.HasField('default_sfixed32'))
582  test_case.assertTrue(message.HasField('default_sfixed64'))
583  test_case.assertTrue(message.HasField('default_float'))
584  test_case.assertTrue(message.HasField('default_double'))
585  test_case.assertTrue(message.HasField('default_bool'))
586  test_case.assertTrue(message.HasField('default_string'))
587  test_case.assertTrue(message.HasField('default_bytes'))
588 
589  test_case.assertTrue(message.HasField('default_nested_enum'))
590  test_case.assertTrue(message.HasField('default_foreign_enum'))
591  test_case.assertTrue(message.HasField('default_import_enum'))
592 
593  test_case.assertEqual(401, message.default_int32)
594  test_case.assertEqual(402, message.default_int64)
595  test_case.assertEqual(403, message.default_uint32)
596  test_case.assertEqual(404, message.default_uint64)
597  test_case.assertEqual(405, message.default_sint32)
598  test_case.assertEqual(406, message.default_sint64)
599  test_case.assertEqual(407, message.default_fixed32)
600  test_case.assertEqual(408, message.default_fixed64)
601  test_case.assertEqual(409, message.default_sfixed32)
602  test_case.assertEqual(410, message.default_sfixed64)
603  test_case.assertEqual(411, message.default_float)
604  test_case.assertEqual(412, message.default_double)
605  test_case.assertEqual(False, message.default_bool)
606  test_case.assertEqual('415', message.default_string)
607  test_case.assertEqual(b'416', message.default_bytes)
608 
609  test_case.assertEqual(unittest_pb2.TestAllTypes.FOO,
610  message.default_nested_enum)
611  test_case.assertEqual(unittest_pb2.FOREIGN_FOO,
612  message.default_foreign_enum)
613  test_case.assertEqual(unittest_import_pb2.IMPORT_FOO,
614  message.default_import_enum)
615 
616 
617 def GoldenFile(filename):
618  """Finds the given golden file and returns a file object representing it."""
619 
620  # Search up the directory tree looking for the C++ protobuf source code.
621  path = '.'
622  while os.path.exists(path):
623  if os.path.exists(os.path.join(path, 'src/google/protobuf')):
624  # Found it. Load the golden file from the testdata directory.
625  full_path = os.path.join(path, 'src/google/protobuf/testdata', filename)
626  return open(full_path, 'rb')
627  path = os.path.join(path, '..')
628 
629  # Search internally.
630  path = '.'
631  full_path = os.path.join(path, 'third_party/py/google/protobuf/testdata',
632  filename)
633  if os.path.exists(full_path):
634  # Found it. Load the golden file from the testdata directory.
635  return open(full_path, 'rb')
636 
637  raise RuntimeError(
638  'Could not find golden files. This test must be run from within the '
639  'protobuf source package so that it can read test data files from the '
640  'C++ source tree.')
641 
642 
643 def GoldenFileData(filename):
644  """Finds the given golden file and returns its contents."""
645  with GoldenFile(filename) as f:
646  return f.read()
647 
648 
649 def SetAllPackedFields(message):
650  """Sets every field in the message to a unique value.
651 
652  Args:
653  message: A TestPackedTypes instance.
654  """
655  message.packed_int32.extend([601, 701])
656  message.packed_int64.extend([602, 702])
657  message.packed_uint32.extend([603, 703])
658  message.packed_uint64.extend([604, 704])
659  message.packed_sint32.extend([605, 705])
660  message.packed_sint64.extend([606, 706])
661  message.packed_fixed32.extend([607, 707])
662  message.packed_fixed64.extend([608, 708])
663  message.packed_sfixed32.extend([609, 709])
664  message.packed_sfixed64.extend([610, 710])
665  message.packed_float.extend([611.0, 711.0])
666  message.packed_double.extend([612.0, 712.0])
667  message.packed_bool.extend([True, False])
668  message.packed_enum.extend([unittest_pb2.FOREIGN_BAR,
669  unittest_pb2.FOREIGN_BAZ])
670 
671 
672 def SetAllPackedExtensions(message):
673  """Sets every extension in the message to a unique value.
674 
675  Args:
676  message: A unittest_pb2.TestPackedExtensions instance.
677  """
678  extensions = message.Extensions
679  pb2 = unittest_pb2
680 
681  extensions[pb2.packed_int32_extension].extend([601, 701])
682  extensions[pb2.packed_int64_extension].extend([602, 702])
683  extensions[pb2.packed_uint32_extension].extend([603, 703])
684  extensions[pb2.packed_uint64_extension].extend([604, 704])
685  extensions[pb2.packed_sint32_extension].extend([605, 705])
686  extensions[pb2.packed_sint64_extension].extend([606, 706])
687  extensions[pb2.packed_fixed32_extension].extend([607, 707])
688  extensions[pb2.packed_fixed64_extension].extend([608, 708])
689  extensions[pb2.packed_sfixed32_extension].extend([609, 709])
690  extensions[pb2.packed_sfixed64_extension].extend([610, 710])
691  extensions[pb2.packed_float_extension].extend([611.0, 711.0])
692  extensions[pb2.packed_double_extension].extend([612.0, 712.0])
693  extensions[pb2.packed_bool_extension].extend([True, False])
694  extensions[pb2.packed_enum_extension].extend([unittest_pb2.FOREIGN_BAR,
695  unittest_pb2.FOREIGN_BAZ])
696 
697 
698 def SetAllUnpackedFields(message):
699  """Sets every field in the message to a unique value.
700 
701  Args:
702  message: A unittest_pb2.TestUnpackedTypes instance.
703  """
704  message.unpacked_int32.extend([601, 701])
705  message.unpacked_int64.extend([602, 702])
706  message.unpacked_uint32.extend([603, 703])
707  message.unpacked_uint64.extend([604, 704])
708  message.unpacked_sint32.extend([605, 705])
709  message.unpacked_sint64.extend([606, 706])
710  message.unpacked_fixed32.extend([607, 707])
711  message.unpacked_fixed64.extend([608, 708])
712  message.unpacked_sfixed32.extend([609, 709])
713  message.unpacked_sfixed64.extend([610, 710])
714  message.unpacked_float.extend([611.0, 711.0])
715  message.unpacked_double.extend([612.0, 712.0])
716  message.unpacked_bool.extend([True, False])
717  message.unpacked_enum.extend([unittest_pb2.FOREIGN_BAR,
718  unittest_pb2.FOREIGN_BAZ])
719 
720 
721 class NonStandardInteger(numbers.Integral):
722  """An integer object that does not subclass int.
723 
724  This is used to verify that both C++ and regular proto systems can handle
725  integer others than int and long and that they handle them in predictable
726  ways.
727 
728  NonStandardInteger is the minimal legal specification for a custom Integral.
729  As such, it does not support 0 < x < 5 and it is not hashable.
730 
731  Note: This is added here instead of relying on numpy or a similar library
732  with custom integers to limit dependencies.
733  """
734 
735  def __init__(self, val, error_string_on_conversion=None):
736  assert isinstance(val, numbers.Integral)
737  if isinstance(val, NonStandardInteger):
738  val = val.val
739  self.val = val
740  self.error_string_on_conversion = error_string_on_conversion
741 
742  def __long__(self):
744  raise RuntimeError(self.error_string_on_conversion)
745  return long(self.val)
746 
747  def __abs__(self):
748  return NonStandardInteger(operator.abs(self.val))
749 
750  def __add__(self, y):
751  return NonStandardInteger(operator.add(self.val, y))
752 
753  def __div__(self, y):
754  return NonStandardInteger(operator.div(self.val, y))
755 
756  def __eq__(self, y):
757  return operator.eq(self.val, y)
758 
759  def __floordiv__(self, y):
760  return NonStandardInteger(operator.floordiv(self.val, y))
761 
762  def __truediv__(self, y):
763  return NonStandardInteger(operator.truediv(self.val, y))
764 
765  def __invert__(self):
766  return NonStandardInteger(operator.invert(self.val))
767 
768  def __mod__(self, y):
769  return NonStandardInteger(operator.mod(self.val, y))
770 
771  def __mul__(self, y):
772  return NonStandardInteger(operator.mul(self.val, y))
773 
774  def __neg__(self):
775  return NonStandardInteger(operator.neg(self.val))
776 
777  def __pos__(self):
778  return NonStandardInteger(operator.pos(self.val))
779 
780  def __pow__(self, y):
781  return NonStandardInteger(operator.pow(self.val, y))
782 
783  def __trunc__(self):
784  return int(self.val)
785 
786  def __radd__(self, y):
787  return NonStandardInteger(operator.add(y, self.val))
788 
789  def __rdiv__(self, y):
790  return NonStandardInteger(operator.div(y, self.val))
791 
792  def __rmod__(self, y):
793  return NonStandardInteger(operator.mod(y, self.val))
794 
795  def __rmul__(self, y):
796  return NonStandardInteger(operator.mul(y, self.val))
797 
798  def __rpow__(self, y):
799  return NonStandardInteger(operator.pow(y, self.val))
800 
801  def __rfloordiv__(self, y):
802  return NonStandardInteger(operator.floordiv(y, self.val))
803 
804  def __rtruediv__(self, y):
805  return NonStandardInteger(operator.truediv(y, self.val))
806 
807  def __lshift__(self, y):
808  return NonStandardInteger(operator.lshift(self.val, y))
809 
810  def __rshift__(self, y):
811  return NonStandardInteger(operator.rshift(self.val, y))
812 
813  def __rlshift__(self, y):
814  return NonStandardInteger(operator.lshift(y, self.val))
815 
816  def __rrshift__(self, y):
817  return NonStandardInteger(operator.rshift(y, self.val))
818 
819  def __le__(self, y):
820  if isinstance(y, NonStandardInteger):
821  y = y.val
822  return operator.le(self.val, y)
823 
824  def __lt__(self, y):
825  if isinstance(y, NonStandardInteger):
826  y = y.val
827  return operator.lt(self.val, y)
828 
829  def __and__(self, y):
830  return NonStandardInteger(operator.and_(self.val, y))
831 
832  def __or__(self, y):
833  return NonStandardInteger(operator.or_(self.val, y))
834 
835  def __xor__(self, y):
836  return NonStandardInteger(operator.xor(self.val, y))
837 
838  def __rand__(self, y):
839  return NonStandardInteger(operator.and_(y, self.val))
840 
841  def __ror__(self, y):
842  return NonStandardInteger(operator.or_(y, self.val))
843 
844  def __rxor__(self, y):
845  return NonStandardInteger(operator.xor(y, self.val))
846 
847  def __bool__(self):
848  return self.val
849 
850  def __nonzero__(self):
851  return self.val
852 
853  def __ceil__(self):
854  return self
855 
856  def __floor__(self):
857  return self
858 
859  def __int__(self):
861  raise RuntimeError(self.error_string_on_conversion)
862  return int(self.val)
863 
864  def __round__(self):
865  return self
866 
867  def __repr__(self):
868  return 'NonStandardInteger(%s)' % self.val
google::protobuf.internal.test_util.NonStandardInteger.__rtruediv__
def __rtruediv__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:804
google::protobuf.internal.test_util.NonStandardInteger.error_string_on_conversion
error_string_on_conversion
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:740
google::protobuf.internal.test_util.NonStandardInteger.__init__
def __init__(self, val, error_string_on_conversion=None)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:735
google::protobuf.internal.test_util.SetAllPackedExtensions
def SetAllPackedExtensions(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:672
google::protobuf.internal.test_util.NonStandardInteger.__add__
def __add__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:750
google::protobuf.internal.test_util.NonStandardInteger.__rfloordiv__
def __rfloordiv__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:801
google::protobuf.internal.test_util.NonStandardInteger.__invert__
def __invert__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:765
google::protobuf.internal.test_util.NonStandardInteger.__pos__
def __pos__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:777
google::protobuf.internal.test_util.SetAllExtensions
def SetAllExtensions(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:223
google::protobuf.internal.test_util.NonStandardInteger.__rdiv__
def __rdiv__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:789
google::protobuf.internal.test_util.SetAllNonLazyFields
def SetAllNonLazyFields(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:59
google::protobuf.internal.test_util.NonStandardInteger.__rxor__
def __rxor__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:844
google::protobuf
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
google::protobuf.internal.test_util.SetAllFields
def SetAllFields(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:218
google::protobuf.internal.test_util.GoldenFile
def GoldenFile(filename)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:617
google::protobuf.internal.test_util.NonStandardInteger.__repr__
def __repr__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:867
google::protobuf.internal.test_util.NonStandardInteger.__rmul__
def __rmul__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:795
google::protobuf.internal.test_util.NonStandardInteger.__long__
def __long__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:742
google::protobuf.internal.test_util.NonStandardInteger.__div__
def __div__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:753
google::protobuf.internal.test_util.SetAllFieldsAndExtensions
def SetAllFieldsAndExtensions(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:365
google::protobuf.internal.test_util.SetAllUnpackedFields
def SetAllUnpackedFields(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:698
google::protobuf.internal.test_util.ExpectAllFieldsAndExtensionsInOrder
def ExpectAllFieldsAndExtensionsInOrder(serialized)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:378
google::protobuf.internal.test_util.IsProto2
def IsProto2(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:55
google::protobuf.internal.test_util.NonStandardInteger.__and__
def __and__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:829
xds_interop_client.int
int
Definition: xds_interop_client.py:113
google::protobuf.internal.test_util.NonStandardInteger.__trunc__
def __trunc__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:783
google::protobuf.internal.test_util.NonStandardInteger.__or__
def __or__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:832
google::protobuf.internal.test_util.NonStandardInteger.__round__
def __round__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:864
google::protobuf.internal.test_util.NonStandardInteger.__lt__
def __lt__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:824
google::protobuf.internal.test_util.NonStandardInteger.__mul__
def __mul__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:771
google::protobuf.internal.test_util.NonStandardInteger.__le__
def __le__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:819
google::protobuf.internal.test_util.NonStandardInteger.__abs__
def __abs__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:747
google::protobuf.internal.test_util.NonStandardInteger.__lshift__
def __lshift__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:807
google::protobuf.internal.test_util.NonStandardInteger.__floordiv__
def __floordiv__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:759
google::protobuf.internal.test_util.NonStandardInteger.__nonzero__
def __nonzero__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:850
google::protobuf.internal.test_util.NonStandardInteger.__rmod__
def __rmod__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:792
google::protobuf.internal.test_util.GoldenFileData
def GoldenFileData(filename)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:643
google::protobuf.internal.test_util.SetAllPackedFields
def SetAllPackedFields(message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:649
add
static void add(const char *beg, const char *end, char ***ss, size_t *ns)
Definition: debug/trace.cc:96
google::protobuf.internal.test_util.NonStandardInteger.__xor__
def __xor__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:835
google::protobuf.internal.test_util.NonStandardInteger
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:721
google::protobuf.internal.test_util.NonStandardInteger.__rpow__
def __rpow__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:798
google::protobuf.internal.test_util.NonStandardInteger.__int__
def __int__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:859
google::protobuf.internal.test_util.NonStandardInteger.__pow__
def __pow__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:780
google::protobuf.internal.test_util.long
long
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:49
google::protobuf.internal.test_util.NonStandardInteger.__mod__
def __mod__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:768
google::protobuf.internal.test_util.NonStandardInteger.__rshift__
def __rshift__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:810
google::protobuf.internal.test_util.NonStandardInteger.__floor__
def __floor__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:856
open
#define open
Definition: test-fs.c:46
google::protobuf.internal.test_util.NonStandardInteger.__ceil__
def __ceil__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:853
google::protobuf.internal.test_util.NonStandardInteger.__neg__
def __neg__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:774
google::protobuf.internal.test_util.NonStandardInteger.__rand__
def __rand__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:838
google::protobuf.internal.test_util.NonStandardInteger.__ror__
def __ror__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:841
google::protobuf.internal.test_util.ExpectAllFieldsSet
def ExpectAllFieldsSet(test_case, message)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:408
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46
google::protobuf.internal.test_util.NonStandardInteger.__truediv__
def __truediv__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:762
google::protobuf.internal.test_util.NonStandardInteger.__radd__
def __radd__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:786
google::protobuf.internal.test_util.NonStandardInteger.val
val
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:739
google::protobuf.internal.test_util.NonStandardInteger.__bool__
def __bool__(self)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:847
google::protobuf.internal.test_util.NonStandardInteger.__rlshift__
def __rlshift__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:813
google::protobuf.internal.test_util.NonStandardInteger.__rrshift__
def __rrshift__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:816
google::protobuf.internal.test_util.NonStandardInteger.__eq__
def __eq__(self, y)
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/test_util.py:756


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:31