Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: third_party/protobuf/python/google/protobuf/internal/generator_test.py

Issue 1842653006: Update //third_party/protobuf to version 3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update sync unittest and README.chromium Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #! /usr/bin/python 1 #! /usr/bin/env python
2 # 2 #
3 # Protocol Buffers - Google's data interchange format 3 # Protocol Buffers - Google's data interchange format
4 # Copyright 2008 Google Inc. All rights reserved. 4 # Copyright 2008 Google Inc. All rights reserved.
5 # http://code.google.com/p/protobuf/ 5 # https://developers.google.com/protocol-buffers/
6 # 6 #
7 # Redistribution and use in source and binary forms, with or without 7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are 8 # modification, are permitted provided that the following conditions are
9 # met: 9 # met:
10 # 10 #
11 # * Redistributions of source code must retain the above copyright 11 # * Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer. 12 # notice, this list of conditions and the following disclaimer.
13 # * Redistributions in binary form must reproduce the above 13 # * Redistributions in binary form must reproduce the above
14 # copyright notice, this list of conditions and the following disclaimer 14 # copyright notice, this list of conditions and the following disclaimer
15 # in the documentation and/or other materials provided with the 15 # in the documentation and/or other materials provided with the
(...skipping 12 matching lines...) Expand all
28 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 32
33 # TODO(robinson): Flesh this out considerably. We focused on reflection_test.py 33 # TODO(robinson): Flesh this out considerably. We focused on reflection_test.py
34 # first, since it's testing the subtler code, and since it provides decent 34 # first, since it's testing the subtler code, and since it provides decent
35 # indirect testing of the protocol compiler output. 35 # indirect testing of the protocol compiler output.
36 36
37 """Unittest that directly tests the output of the pure-Python protocol 37 """Unittest that directly tests the output of the pure-Python protocol
38 compiler. See //google/protobuf/reflection_test.py for a test which 38 compiler. See //google/protobuf/internal/reflection_test.py for a test which
39 further ensures that we can use Python protocol message objects as we expect. 39 further ensures that we can use Python protocol message objects as we expect.
40 """ 40 """
41 41
42 __author__ = 'robinson@google.com (Will Robinson)' 42 __author__ = 'robinson@google.com (Will Robinson)'
43 43
44 import unittest 44 try:
45 import unittest2 as unittest
46 except ImportError:
47 import unittest
45 from google.protobuf.internal import test_bad_identifiers_pb2 48 from google.protobuf.internal import test_bad_identifiers_pb2
46 from google.protobuf import unittest_custom_options_pb2 49 from google.protobuf import unittest_custom_options_pb2
47 from google.protobuf import unittest_import_pb2 50 from google.protobuf import unittest_import_pb2
48 from google.protobuf import unittest_import_public_pb2 51 from google.protobuf import unittest_import_public_pb2
49 from google.protobuf import unittest_mset_pb2 52 from google.protobuf import unittest_mset_pb2
53 from google.protobuf import unittest_mset_wire_format_pb2
54 from google.protobuf import unittest_no_generic_services_pb2
50 from google.protobuf import unittest_pb2 55 from google.protobuf import unittest_pb2
51 from google.protobuf import unittest_no_generic_services_pb2
52 from google.protobuf import service 56 from google.protobuf import service
57 from google.protobuf import symbol_database
53 58
54 MAX_EXTENSION = 536870912 59 MAX_EXTENSION = 536870912
55 60
56 61
57 class GeneratorTest(unittest.TestCase): 62 class GeneratorTest(unittest.TestCase):
58 63
59 def testNestedMessageDescriptor(self): 64 def testNestedMessageDescriptor(self):
60 field_name = 'optional_nested_message' 65 field_name = 'optional_nested_message'
61 proto_type = unittest_pb2.TestAllTypes 66 proto_type = unittest_pb2.TestAllTypes
62 self.assertEqual( 67 self.assertEqual(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 139
135 def testIsExtension(self): 140 def testIsExtension(self):
136 self.assertTrue(unittest_pb2.optional_int32_extension.is_extension) 141 self.assertTrue(unittest_pb2.optional_int32_extension.is_extension)
137 self.assertTrue(unittest_pb2.TestRequired.single.is_extension) 142 self.assertTrue(unittest_pb2.TestRequired.single.is_extension)
138 143
139 message_descriptor = unittest_pb2.TestRequired.DESCRIPTOR 144 message_descriptor = unittest_pb2.TestRequired.DESCRIPTOR
140 non_extension_descriptor = message_descriptor.fields_by_name['a'] 145 non_extension_descriptor = message_descriptor.fields_by_name['a']
141 self.assertTrue(not non_extension_descriptor.is_extension) 146 self.assertTrue(not non_extension_descriptor.is_extension)
142 147
143 def testOptions(self): 148 def testOptions(self):
144 proto = unittest_mset_pb2.TestMessageSet() 149 proto = unittest_mset_wire_format_pb2.TestMessageSet()
145 self.assertTrue(proto.DESCRIPTOR.GetOptions().message_set_wire_format) 150 self.assertTrue(proto.DESCRIPTOR.GetOptions().message_set_wire_format)
146 151
147 def testMessageWithCustomOptions(self): 152 def testMessageWithCustomOptions(self):
148 proto = unittest_custom_options_pb2.TestMessageWithCustomOptions() 153 proto = unittest_custom_options_pb2.TestMessageWithCustomOptions()
149 enum_options = proto.DESCRIPTOR.enum_types_by_name['AnEnum'].GetOptions() 154 enum_options = proto.DESCRIPTOR.enum_types_by_name['AnEnum'].GetOptions()
150 self.assertTrue(enum_options is not None) 155 self.assertTrue(enum_options is not None)
151 # TODO(gps): We really should test for the presense of the enum_opt1 156 # TODO(gps): We really should test for the presence of the enum_opt1
152 # extension and for its value to be set to -789. 157 # extension and for its value to be set to -789.
153 158
154 def testNestedTypes(self): 159 def testNestedTypes(self):
155 self.assertEquals( 160 self.assertEqual(
156 set(unittest_pb2.TestAllTypes.DESCRIPTOR.nested_types), 161 set(unittest_pb2.TestAllTypes.DESCRIPTOR.nested_types),
157 set([ 162 set([
158 unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR, 163 unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR,
159 unittest_pb2.TestAllTypes.OptionalGroup.DESCRIPTOR, 164 unittest_pb2.TestAllTypes.OptionalGroup.DESCRIPTOR,
160 unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR, 165 unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR,
161 ])) 166 ]))
162 self.assertEqual(unittest_pb2.TestEmptyMessage.DESCRIPTOR.nested_types, []) 167 self.assertEqual(unittest_pb2.TestEmptyMessage.DESCRIPTOR.nested_types, [])
163 self.assertEqual( 168 self.assertEqual(
164 unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.nested_types, []) 169 unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.nested_types, [])
165 170
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 [(1, MAX_EXTENSION)]) 215 [(1, MAX_EXTENSION)])
211 self.assertEqual( 216 self.assertEqual(
212 unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR.extension_ranges, 217 unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR.extension_ranges,
213 [(42, 43), (4143, 4244), (65536, MAX_EXTENSION)]) 218 [(42, 43), (4143, 4244), (65536, MAX_EXTENSION)])
214 219
215 def testFileDescriptor(self): 220 def testFileDescriptor(self):
216 self.assertEqual(unittest_pb2.DESCRIPTOR.name, 221 self.assertEqual(unittest_pb2.DESCRIPTOR.name,
217 'google/protobuf/unittest.proto') 222 'google/protobuf/unittest.proto')
218 self.assertEqual(unittest_pb2.DESCRIPTOR.package, 'protobuf_unittest') 223 self.assertEqual(unittest_pb2.DESCRIPTOR.package, 'protobuf_unittest')
219 self.assertFalse(unittest_pb2.DESCRIPTOR.serialized_pb is None) 224 self.assertFalse(unittest_pb2.DESCRIPTOR.serialized_pb is None)
225 self.assertEqual(unittest_pb2.DESCRIPTOR.dependencies,
226 [unittest_import_pb2.DESCRIPTOR])
227 self.assertEqual(unittest_import_pb2.DESCRIPTOR.dependencies,
228 [unittest_import_public_pb2.DESCRIPTOR])
220 229
221 def testNoGenericServices(self): 230 def testNoGenericServices(self):
222 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "TestMessage")) 231 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "TestMessage"))
223 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "FOO")) 232 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "FOO"))
224 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "test_extension")) 233 self.assertTrue(hasattr(unittest_no_generic_services_pb2, "test_extension"))
225 234
226 # Make sure unittest_no_generic_services_pb2 has no services subclassing 235 # Make sure unittest_no_generic_services_pb2 has no services subclassing
227 # Proto2 Service class. 236 # Proto2 Service class.
228 if hasattr(unittest_no_generic_services_pb2, "TestService"): 237 if hasattr(unittest_no_generic_services_pb2, "TestService"):
229 self.assertFalse(issubclass(unittest_no_generic_services_pb2.TestService, 238 self.assertFalse(issubclass(unittest_no_generic_services_pb2.TestService,
230 service.Service)) 239 service.Service))
231 240
232 def testMessageTypesByName(self): 241 def testMessageTypesByName(self):
233 file_type = unittest_pb2.DESCRIPTOR 242 file_type = unittest_pb2.DESCRIPTOR
234 self.assertEqual( 243 self.assertEqual(
235 unittest_pb2._TESTALLTYPES, 244 unittest_pb2._TESTALLTYPES,
236 file_type.message_types_by_name[unittest_pb2._TESTALLTYPES.name]) 245 file_type.message_types_by_name[unittest_pb2._TESTALLTYPES.name])
237 246
238 # Nested messages shouldn't be included in the message_types_by_name 247 # Nested messages shouldn't be included in the message_types_by_name
239 # dictionary (like in the C++ API). 248 # dictionary (like in the C++ API).
240 self.assertFalse( 249 self.assertFalse(
241 unittest_pb2._TESTALLTYPES_NESTEDMESSAGE.name in 250 unittest_pb2._TESTALLTYPES_NESTEDMESSAGE.name in
242 file_type.message_types_by_name) 251 file_type.message_types_by_name)
243 252
253 def testEnumTypesByName(self):
254 file_type = unittest_pb2.DESCRIPTOR
255 self.assertEqual(
256 unittest_pb2._FOREIGNENUM,
257 file_type.enum_types_by_name[unittest_pb2._FOREIGNENUM.name])
258
259 def testExtensionsByName(self):
260 file_type = unittest_pb2.DESCRIPTOR
261 self.assertEqual(
262 unittest_pb2.my_extension_string,
263 file_type.extensions_by_name[unittest_pb2.my_extension_string.name])
264
244 def testPublicImports(self): 265 def testPublicImports(self):
245 # Test public imports as embedded message. 266 # Test public imports as embedded message.
246 all_type_proto = unittest_pb2.TestAllTypes() 267 all_type_proto = unittest_pb2.TestAllTypes()
247 self.assertEqual(0, all_type_proto.optional_public_import_message.e) 268 self.assertEqual(0, all_type_proto.optional_public_import_message.e)
248 269
249 # PublicImportMessage is actually defined in unittest_import_public_pb2 270 # PublicImportMessage is actually defined in unittest_import_public_pb2
250 # module, and is public imported by unittest_import_pb2 module. 271 # module, and is public imported by unittest_import_pb2 module.
251 public_import_proto = unittest_import_pb2.PublicImportMessage() 272 public_import_proto = unittest_import_pb2.PublicImportMessage()
252 self.assertEqual(0, public_import_proto.e) 273 self.assertEqual(0, public_import_proto.e)
253 self.assertTrue(unittest_import_public_pb2.PublicImportMessage is 274 self.assertTrue(unittest_import_public_pb2.PublicImportMessage is
254 unittest_import_pb2.PublicImportMessage) 275 unittest_import_pb2.PublicImportMessage)
255 276
256 def testBadIdentifiers(self): 277 def testBadIdentifiers(self):
257 # We're just testing that the code was imported without problems. 278 # We're just testing that the code was imported without problems.
258 message = test_bad_identifiers_pb2.TestBadIdentifiers() 279 message = test_bad_identifiers_pb2.TestBadIdentifiers()
259 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.message], 280 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.message],
260 "foo") 281 "foo")
261 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.descriptor], 282 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.descriptor],
262 "bar") 283 "bar")
263 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.reflection], 284 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.reflection],
264 "baz") 285 "baz")
265 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.service], 286 self.assertEqual(message.Extensions[test_bad_identifiers_pb2.service],
266 "qux") 287 "qux")
267 288
289 def testOneof(self):
290 desc = unittest_pb2.TestAllTypes.DESCRIPTOR
291 self.assertEqual(1, len(desc.oneofs))
292 self.assertEqual('oneof_field', desc.oneofs[0].name)
293 self.assertEqual(0, desc.oneofs[0].index)
294 self.assertIs(desc, desc.oneofs[0].containing_type)
295 self.assertIs(desc.oneofs[0], desc.oneofs_by_name['oneof_field'])
296 nested_names = set(['oneof_uint32', 'oneof_nested_message',
297 'oneof_string', 'oneof_bytes'])
298 self.assertEqual(
299 nested_names,
300 set([field.name for field in desc.oneofs[0].fields]))
301 for field_name, field_desc in desc.fields_by_name.items():
302 if field_name in nested_names:
303 self.assertIs(desc.oneofs[0], field_desc.containing_oneof)
304 else:
305 self.assertIsNone(field_desc.containing_oneof)
306
307
308 class SymbolDatabaseRegistrationTest(unittest.TestCase):
309 """Checks that messages, enums and files are correctly registered."""
310
311 def testGetSymbol(self):
312 self.assertEqual(
313 unittest_pb2.TestAllTypes, symbol_database.Default().GetSymbol(
314 'protobuf_unittest.TestAllTypes'))
315 self.assertEqual(
316 unittest_pb2.TestAllTypes.NestedMessage,
317 symbol_database.Default().GetSymbol(
318 'protobuf_unittest.TestAllTypes.NestedMessage'))
319 with self.assertRaises(KeyError):
320 symbol_database.Default().GetSymbol('protobuf_unittest.NestedMessage')
321 self.assertEqual(
322 unittest_pb2.TestAllTypes.OptionalGroup,
323 symbol_database.Default().GetSymbol(
324 'protobuf_unittest.TestAllTypes.OptionalGroup'))
325 self.assertEqual(
326 unittest_pb2.TestAllTypes.RepeatedGroup,
327 symbol_database.Default().GetSymbol(
328 'protobuf_unittest.TestAllTypes.RepeatedGroup'))
329
330 def testEnums(self):
331 self.assertEqual(
332 'protobuf_unittest.ForeignEnum',
333 symbol_database.Default().pool.FindEnumTypeByName(
334 'protobuf_unittest.ForeignEnum').full_name)
335 self.assertEqual(
336 'protobuf_unittest.TestAllTypes.NestedEnum',
337 symbol_database.Default().pool.FindEnumTypeByName(
338 'protobuf_unittest.TestAllTypes.NestedEnum').full_name)
339
340 def testFindFileByName(self):
341 self.assertEqual(
342 'google/protobuf/unittest.proto',
343 symbol_database.Default().pool.FindFileByName(
344 'google/protobuf/unittest.proto').name)
345
268 if __name__ == '__main__': 346 if __name__ == '__main__':
269 unittest.main() 347 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698