1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#! /usr/bin/python 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Protocol Buffers - Google's data interchange format 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2008 Google Inc. All rights reserved. 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# http://code.google.com/p/protobuf/ 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met: 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions of source code must retain the above copyright 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer. 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Redistributions in binary form must reproduce the above 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution. 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# * Neither the name of Google Inc. nor the names of its 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission. 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# TODO(robinson): Flesh this out considerably. We focused on reflection_test.py 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# first, since it's testing the subtler code, and since it provides decent 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# indirect testing of the protocol compiler output. 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Unittest that directly tests the output of the pure-Python protocol 38d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillecompiler. See //google/protobuf/reflection_test.py for a test which 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefurther ensures that we can use Python protocol message objects as we expect. 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville""" 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'robinson@google.com (Will Robinson)' 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport unittest 45d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillefrom google.protobuf import unittest_import_pb2 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import unittest_mset_pb2 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillefrom google.protobuf import unittest_pb2 48d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savillefrom google.protobuf import unittest_no_generic_services_pb2 49d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 50d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 51d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink SavilleMAX_EXTENSION = 536870912 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass GeneratorTest(unittest.TestCase): 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testNestedMessageDescriptor(self): 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field_name = 'optional_nested_message' 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto_type = unittest_pb2.TestAllTypes 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual( 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto_type.NestedMessage.DESCRIPTOR, 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto_type.DESCRIPTOR.fields_by_name[field_name].message_type) 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testEnums(self): 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # We test only module-level enums here. 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # TODO(robinson): Examine descriptors directly to check 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville # enum descriptor output. 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(4, unittest_pb2.FOREIGN_FOO) 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(5, unittest_pb2.FOREIGN_BAR) 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(6, unittest_pb2.FOREIGN_BAZ) 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_pb2.TestAllTypes() 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, proto.FOO) 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(1, unittest_pb2.TestAllTypes.FOO) 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, proto.BAR) 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(2, unittest_pb2.TestAllTypes.BAR) 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, proto.BAZ) 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(3, unittest_pb2.TestAllTypes.BAZ) 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 79d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testExtremeDefaultValues(self): 80d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville message = unittest_pb2.TestExtremeDefaultValues() 81d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 82d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Python pre-2.6 does not have isinf() or isnan() functions, so we have 83d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # to provide our own. 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def isnan(val): 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # NaN is never equal to itself. 86d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return val != val 87d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def isinf(val): 88d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # Infinity times zero equals NaN. 89d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return not isnan(val) and isnan(val * 0) 90d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 91d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isinf(message.inf_double)) 92d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(message.inf_double > 0) 93d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isinf(message.neg_inf_double)) 94d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(message.neg_inf_double < 0) 95d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isnan(message.nan_double)) 96d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 97d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isinf(message.inf_float)) 98d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(message.inf_float > 0) 99d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isinf(message.neg_inf_float)) 100d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(message.neg_inf_float < 0) 101d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(isnan(message.nan_float)) 102d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 103d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testHasDefaultValues(self): 104d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville desc = unittest_pb2.TestAllTypes.DESCRIPTOR 105d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 106d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville expected_has_default_by_name = { 107d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'optional_int32': False, 108d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'repeated_int32': False, 109d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'optional_nested_message': False, 110d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'default_int32': True, 111d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 112d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 113d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville has_default_by_name = dict( 114d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [(f.name, f.has_default_value) 115d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville for f in desc.fields 116d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville if f.name in expected_has_default_by_name]) 117d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(expected_has_default_by_name, has_default_by_name) 118d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testContainingTypeBehaviorForExtensions(self): 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optional_int32_extension.containing_type, 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllExtensions.DESCRIPTOR) 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.single.containing_type, 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestAllExtensions.DESCRIPTOR) 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testExtensionScope(self): 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.optional_int32_extension.extension_scope, 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville None) 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertEqual(unittest_pb2.TestRequired.single.extension_scope, 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest_pb2.TestRequired.DESCRIPTOR) 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testIsExtension(self): 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(unittest_pb2.optional_int32_extension.is_extension) 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(unittest_pb2.TestRequired.single.is_extension) 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message_descriptor = unittest_pb2.TestRequired.DESCRIPTOR 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville non_extension_descriptor = message_descriptor.fields_by_name['a'] 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(not non_extension_descriptor.is_extension) 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville def testOptions(self): 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville proto = unittest_mset_pb2.TestMessageSet() 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville self.assertTrue(proto.DESCRIPTOR.GetOptions().message_set_wire_format) 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 143d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testNestedTypes(self): 144d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEquals( 145d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville set(unittest_pb2.TestAllTypes.DESCRIPTOR.nested_types), 146d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville set([ 147d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR, 148d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.OptionalGroup.DESCRIPTOR, 149d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR, 150d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville ])) 151d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(unittest_pb2.TestEmptyMessage.DESCRIPTOR.nested_types, []) 152d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 153d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.nested_types, []) 154d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 155d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testContainingType(self): 156d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue( 157d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestEmptyMessage.DESCRIPTOR.containing_type is None) 158d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue( 159d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR.containing_type is None) 160d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 161d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.containing_type, 162d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR) 163d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 164d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.containing_type, 165d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR) 166d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 167d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR.containing_type, 168d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR) 169d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 170d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testContainingTypeInEnumDescriptor(self): 171d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(unittest_pb2._FOREIGNENUM.containing_type is None) 172d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(unittest_pb2._TESTALLTYPES_NESTEDENUM.containing_type, 173d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR) 174d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 175d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testPackage(self): 176d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 177d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR.file.package, 178d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'protobuf_unittest') 179d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville desc = unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR 180d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(desc.file.package, 'protobuf_unittest') 181d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 182d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_import_pb2.ImportMessage.DESCRIPTOR.file.package, 183d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'protobuf_unittest_import') 184d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 185d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 186d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2._FOREIGNENUM.file.package, 'protobuf_unittest') 187d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 188d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2._TESTALLTYPES_NESTEDENUM.file.package, 189d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'protobuf_unittest') 190d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 191d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_import_pb2._IMPORTENUM.file.package, 192d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'protobuf_unittest_import') 193d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 194d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testExtensionRange(self): 195d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 196d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllTypes.DESCRIPTOR.extension_ranges, []) 197d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 198d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestAllExtensions.DESCRIPTOR.extension_ranges, 199d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [(1, MAX_EXTENSION)]) 200d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual( 201d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR.extension_ranges, 202d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville [(42, 43), (4143, 4244), (65536, MAX_EXTENSION)]) 203d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 204d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testFileDescriptor(self): 205d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(unittest_pb2.DESCRIPTOR.name, 206d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 'google/protobuf/unittest.proto') 207d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertEqual(unittest_pb2.DESCRIPTOR.package, 'protobuf_unittest') 208d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertFalse(unittest_pb2.DESCRIPTOR.serialized_pb is None) 209d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 210d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville def testNoGenericServices(self): 211d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # unittest_no_generic_services.proto should contain defs for everything 212d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville # except services. 213d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(hasattr(unittest_no_generic_services_pb2, "TestMessage")) 214d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(hasattr(unittest_no_generic_services_pb2, "FOO")) 215d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertTrue(hasattr(unittest_no_generic_services_pb2, "test_extension")) 216d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville self.assertFalse(hasattr(unittest_no_generic_services_pb2, "TestService")) 217d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__': 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville unittest.main() 221