1a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#! /usr/bin/python 2a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# 3a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# Protocol Buffers - Google's data interchange format 4a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# Copyright 2008 Google Inc. All rights reserved. 5afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson# https://developers.google.com/protocol-buffers/ 6a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# 7a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# Redistribution and use in source and binary forms, with or without 8a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# modification, are permitted provided that the following conditions are 9a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# met: 10a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# 11a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# * Redistributions of source code must retain the above copyright 12a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# notice, this list of conditions and the following disclaimer. 13a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# * Redistributions in binary form must reproduce the above 14a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# copyright notice, this list of conditions and the following disclaimer 15a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# in the documentation and/or other materials provided with the 16a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# distribution. 17a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# * Neither the name of Google Inc. nor the names of its 18a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# contributors may be used to endorse or promote products derived from 19a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# this software without specific prior written permission. 20a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# 21a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 33a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson"""Tests for google.protobuf.descriptor_pool.""" 34a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 35a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson__author__ = 'matthewtoia@google.com (Matt Toia)' 36a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 37a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport os 38a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonimport unittest 39a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 40a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.apputils import basetest 41a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import unittest_pb2 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import descriptor_pb2 43a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf.internal import api_implementation 44a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf.internal import descriptor_pool_test1_pb2 45a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf.internal import descriptor_pool_test2_pb2 46a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf.internal import factory_test1_pb2 47a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf.internal import factory_test2_pb2 48a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import descriptor 49a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import descriptor_database 50a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonfrom google.protobuf import descriptor_pool 51a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 52a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 53a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass DescriptorPoolTest(basetest.TestCase): 54a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def setUp(self): 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool = descriptor_pool.DescriptorPool() 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString( 58a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson factory_test1_pb2.DESCRIPTOR.serialized_pb) 59a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString( 60a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson factory_test2_pb2.DESCRIPTOR.serialized_pb) 61a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.Add(self.factory_test1_fd) 62a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.Add(self.factory_test2_fd) 63a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindFileByName(self): 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name1 = 'google/protobuf/internal/factory_test1.proto' 66a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc1 = self.pool.FindFileByName(name1) 67a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(file_desc1, descriptor.FileDescriptor) 68a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(name1, file_desc1.name) 69a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal', file_desc1.package) 70a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIn('Factory1Message', file_desc1.message_types_by_name) 71a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 72a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson name2 = 'google/protobuf/internal/factory_test2.proto' 73a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc2 = self.pool.FindFileByName(name2) 74a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(file_desc2, descriptor.FileDescriptor) 75a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(name2, file_desc2.name) 76a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal', file_desc2.package) 77a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIn('Factory2Message', file_desc2.message_types_by_name) 78a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 79a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindFileByNameFailure(self): 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.FindFileByName('Does not exist') 82a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindFileContainingSymbol(self): 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc1 = self.pool.FindFileContainingSymbol( 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory1Message') 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(file_desc1, descriptor.FileDescriptor) 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google/protobuf/internal/factory_test1.proto', 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc1.name) 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal', file_desc1.package) 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIn('Factory1Message', file_desc1.message_types_by_name) 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 92a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc2 = self.pool.FindFileContainingSymbol( 93a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory2Message') 94a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(file_desc2, descriptor.FileDescriptor) 95a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google/protobuf/internal/factory_test2.proto', 96a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc2.name) 97a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal', file_desc2.package) 98a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIn('Factory2Message', file_desc2.message_types_by_name) 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 100a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindFileContainingSymbolFailure(self): 101a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 102a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.FindFileContainingSymbol('Does not exist') 103a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 104a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindMessageTypeByName(self): 105a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg1 = self.pool.FindMessageTypeByName( 106a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory1Message') 107a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(msg1, descriptor.Descriptor) 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('Factory1Message', msg1.name) 109a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal.Factory1Message', 110a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg1.full_name) 111a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(None, msg1.containing_type) 112a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 113a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_msg1 = msg1.nested_types[0] 114a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('NestedFactory1Message', nested_msg1.name) 115a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(msg1, nested_msg1.containing_type) 116a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 117a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum1 = msg1.enum_types[0] 118a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('NestedFactory1Enum', nested_enum1.name) 119a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(msg1, nested_enum1.containing_type) 120a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 121a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(nested_msg1, msg1.fields_by_name[ 122a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'nested_factory_1_message'].message_type) 123a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(nested_enum1, msg1.fields_by_name[ 124a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'nested_factory_1_enum'].enum_type) 125a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 126a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2 = self.pool.FindMessageTypeByName( 127a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory2Message') 128a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(msg2, descriptor.Descriptor) 129a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('Factory2Message', msg2.name) 130a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('google.protobuf.python.internal.Factory2Message', 131a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2.full_name) 132a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsNone(msg2.containing_type) 133a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 134a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_msg2 = msg2.nested_types[0] 135a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('NestedFactory2Message', nested_msg2.name) 136a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(msg2, nested_msg2.containing_type) 137a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 138a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum2 = msg2.enum_types[0] 139a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals('NestedFactory2Enum', nested_enum2.name) 140a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(msg2, nested_enum2.containing_type) 141a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 142a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(nested_msg2, msg2.fields_by_name[ 143a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'nested_factory_2_message'].message_type) 144a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(nested_enum2, msg2.fields_by_name[ 145a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'nested_factory_2_enum'].enum_type) 146a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 147a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue(msg2.fields_by_name['int_with_default'].has_default_value) 148a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 149a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1776, msg2.fields_by_name['int_with_default'].default_value) 150a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 151a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue( 152a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2.fields_by_name['double_with_default'].has_default_value) 153a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 154a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 9.99, msg2.fields_by_name['double_with_default'].default_value) 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue( 157a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2.fields_by_name['string_with_default'].has_default_value) 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'hello world', msg2.fields_by_name['string_with_default'].default_value) 160a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 161a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue(msg2.fields_by_name['bool_with_default'].has_default_value) 162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertFalse(msg2.fields_by_name['bool_with_default'].default_value) 163a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue(msg2.fields_by_name['enum_with_default'].has_default_value) 165a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1, msg2.fields_by_name['enum_with_default'].default_value) 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg3 = self.pool.FindMessageTypeByName( 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory2Message.NestedFactory2Message') 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(nested_msg2, msg3) 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertTrue(msg2.fields_by_name['bytes_with_default'].has_default_value) 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson b'a\xfb\x00c', 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2.fields_by_name['bytes_with_default'].default_value) 176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 177a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1, len(msg2.oneofs)) 178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(1, len(msg2.oneofs_by_name)) 179a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(2, len(msg2.oneofs[0].fields)) 180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for name in ['oneof_int', 'oneof_string']: 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEqual(msg2.oneofs[0], 182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2.fields_by_name[name].containing_oneof) 183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIn(msg2.fields_by_name[name], msg2.oneofs[0].fields) 184a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 185a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindMessageTypeByNameFailure(self): 186a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.FindMessageTypeByName('Does not exist') 188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindEnumTypeByName(self): 190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum1 = self.pool.FindEnumTypeByName( 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory1Enum') 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(enum1, descriptor.EnumDescriptor) 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(0, enum1.values_by_name['FACTORY_1_VALUE_0'].number) 194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(1, enum1.values_by_name['FACTORY_1_VALUE_1'].number) 195a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum1 = self.pool.FindEnumTypeByName( 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory1Message.NestedFactory1Enum') 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(nested_enum1, descriptor.EnumDescriptor) 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 0, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_0'].number) 201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_1'].number) 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum2 = self.pool.FindEnumTypeByName( 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory2Enum') 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(enum2, descriptor.EnumDescriptor) 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(0, enum2.values_by_name['FACTORY_2_VALUE_0'].number) 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals(1, enum2.values_by_name['FACTORY_2_VALUE_1'].number) 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson nested_enum2 = self.pool.FindEnumTypeByName( 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal.Factory2Message.NestedFactory2Enum') 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertIsInstance(nested_enum2, descriptor.EnumDescriptor) 213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 0, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_0'].number) 215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 1, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_1'].number) 217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFindEnumTypeByNameFailure(self): 219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.FindEnumTypeByName('Does not exist') 221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testUserDefinedDB(self): 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson db = descriptor_database.DescriptorDatabase() 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool = descriptor_pool.DescriptorPool(db) 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson db.Add(self.factory_test1_fd) 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson db.Add(self.factory_test2_fd) 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.testFindMessageTypeByName() 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testComplexNesting(self): 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test1_desc = descriptor_pb2.FileDescriptorProto.FromString( 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor_pool_test1_pb2.DESCRIPTOR.serialized_pb) 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test2_desc = descriptor_pb2.FileDescriptorProto.FromString( 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson descriptor_pool_test2_pb2.DESCRIPTOR.serialized_pb) 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.Add(test1_desc) 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.pool.Add(test2_desc) 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson TEST1_FILE.CheckFile(self, self.pool) 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson TEST2_FILE.CheckFile(self, self.pool) 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass ProtoFile(object): 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, name, package, messages, dependencies=None): 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.name = name 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.package = package 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.messages = messages 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.dependencies = dependencies or [] 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 249a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckFile(self, test, pool): 250a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson file_desc = pool.FindFileByName(self.name) 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEquals(self.name, file_desc.name) 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEquals(self.package, file_desc.package) 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson dependencies_names = [f.name for f in file_desc.dependencies] 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.dependencies, dependencies_names) 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for name, msg_type in self.messages.items(): 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg_type.CheckType(test, None, name, file_desc) 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 258a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass EnumType(object): 260a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, values): 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.values = values 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckType(self, test, msg_desc, name, file_desc): 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_desc = msg_desc.enum_types_by_name[name] 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, enum_desc.name) 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_enum_full_name = '.'.join([msg_desc.full_name, name]) 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_enum_full_name, enum_desc.full_name) 269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(msg_desc, enum_desc.containing_type) 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(file_desc, enum_desc.file) 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for index, (value, number) in enumerate(self.values): 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson value_desc = enum_desc.values_by_name[value] 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(value, value_desc.name) 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(index, value_desc.index) 275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(number, value_desc.number) 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(enum_desc, value_desc.type) 277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertIn(value, msg_desc.enum_values_by_name) 278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 280a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass MessageType(object): 281a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, type_dict, field_list, is_extendable=False, 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson extensions=None): 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.type_dict = type_dict 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.field_list = field_list 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.is_extendable = is_extendable 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.extensions = extensions or [] 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckType(self, test, containing_type_desc, name, file_desc): 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson if containing_type_desc is None: 291a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson desc = file_desc.message_types_by_name[name] 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_full_name = '.'.join([file_desc.package, name]) 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson else: 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson desc = containing_type_desc.nested_types_by_name[name] 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_full_name = '.'.join([containing_type_desc.full_name, name]) 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, desc.name) 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_full_name, desc.full_name) 299a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(containing_type_desc, desc.containing_type) 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(desc.file, file_desc) 301a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.is_extendable, desc.is_extendable) 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for name, subtype in self.type_dict.items(): 303a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson subtype.CheckType(test, desc, name, file_desc) 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for index, (name, field) in enumerate(self.field_list): 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.CheckField(test, desc, name, index) 307a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 308a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson for index, (name, field) in enumerate(self.extensions): 309a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field.CheckField(test, desc, name, index) 310a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 312a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass EnumField(object): 313a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 314a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, number, type_name, default_value): 315a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.number = number 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.type_name = type_name 317a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.default_value = default_value 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckField(self, test, msg_desc, name, index): 320a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc = msg_desc.fields_by_name[name] 321a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum_desc = msg_desc.enum_types_by_name[self.type_name] 322a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, field_desc.name) 323a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_field_full_name = '.'.join([msg_desc.full_name, name]) 324a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_field_full_name, field_desc.full_name) 325a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(index, field_desc.index) 326a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.number, field_desc.number) 327a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.TYPE_ENUM, field_desc.type) 328a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_ENUM, 329a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc.cpp_type) 330a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertTrue(field_desc.has_default_value) 331a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(enum_desc.values_by_name[self.default_value].index, 332a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc.default_value) 333a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(msg_desc, field_desc.containing_type) 334a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(enum_desc, field_desc.enum_type) 335a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 336a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 337a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass MessageField(object): 338a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 339a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, number, type_name): 340a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.number = number 341a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.type_name = type_name 342a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 343a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckField(self, test, msg_desc, name, index): 344a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc = msg_desc.fields_by_name[name] 345a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_type_desc = msg_desc.nested_types_by_name[self.type_name] 346a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, field_desc.name) 347a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_field_full_name = '.'.join([msg_desc.full_name, name]) 348a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_field_full_name, field_desc.full_name) 349a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(index, field_desc.index) 350a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.number, field_desc.number) 351a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.TYPE_MESSAGE, field_desc.type) 352a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_MESSAGE, 353a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc.cpp_type) 354a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertFalse(field_desc.has_default_value) 355a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(msg_desc, field_desc.containing_type) 356a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(field_type_desc, field_desc.message_type) 357a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 358a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 359a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass StringField(object): 360a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 361a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, number, default_value): 362a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.number = number 363a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.default_value = default_value 364a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 365a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckField(self, test, msg_desc, name, index): 366a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc = msg_desc.fields_by_name[name] 367a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, field_desc.name) 368a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_field_full_name = '.'.join([msg_desc.full_name, name]) 369a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_field_full_name, field_desc.full_name) 370a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(index, field_desc.index) 371a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.number, field_desc.number) 372a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.TYPE_STRING, field_desc.type) 373a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_STRING, 374a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc.cpp_type) 375a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertTrue(field_desc.has_default_value) 376a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.default_value, field_desc.default_value) 377a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 378a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 379a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass ExtensionField(object): 380a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 381a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def __init__(self, number, extended_type): 382a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.number = number 383a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.extended_type = extended_type 384a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 385a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def CheckField(self, test, msg_desc, name, index): 386a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc = msg_desc.extensions_by_name[name] 387a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(name, field_desc.name) 388a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson expected_field_full_name = '.'.join([msg_desc.full_name, name]) 389a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(expected_field_full_name, field_desc.full_name) 390a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.number, field_desc.number) 391a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(index, field_desc.index) 392a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.TYPE_MESSAGE, field_desc.type) 393a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(descriptor.FieldDescriptor.CPPTYPE_MESSAGE, 394a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson field_desc.cpp_type) 395a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertFalse(field_desc.has_default_value) 396a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertTrue(field_desc.is_extension) 397a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(msg_desc, field_desc.extension_scope) 398a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(msg_desc, field_desc.message_type) 399a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson test.assertEqual(self.extended_type, field_desc.containing_type.name) 400a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 401a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 402a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonclass AddDescriptorTest(basetest.TestCase): 403a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 404a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def _TestMessage(self, prefix): 405a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool = descriptor_pool.DescriptorPool() 406a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.AddDescriptor(unittest_pb2.TestAllTypes.DESCRIPTOR) 407a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 408a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'protobuf_unittest.TestAllTypes', 409a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindMessageTypeByName( 410a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes').full_name) 411a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 412a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # AddDescriptor is not recursive. 413a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 414a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindMessageTypeByName( 415a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes.NestedMessage') 416a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 417a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.AddDescriptor(unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR) 418a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 419a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'protobuf_unittest.TestAllTypes.NestedMessage', 420a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindMessageTypeByName( 421a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes.NestedMessage').full_name) 422a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 423a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Files are implicitly also indexed when messages are added. 424a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 425a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto', 426a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileByName( 427a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto').name) 428a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 429a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 430a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto', 431a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileContainingSymbol( 432a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes.NestedMessage').name) 433a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 434a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testMessage(self): 435a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self._TestMessage('') 436a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self._TestMessage('.') 437a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 438a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def _TestEnum(self, prefix): 439a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool = descriptor_pool.DescriptorPool() 440a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.AddEnumDescriptor(unittest_pb2.ForeignEnum.DESCRIPTOR) 441a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 442a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'protobuf_unittest.ForeignEnum', 443a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindEnumTypeByName( 444a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.ForeignEnum').full_name) 445a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 446a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # AddEnumDescriptor is not recursive. 447a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 448a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindEnumTypeByName( 449a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.ForeignEnum.NestedEnum') 450a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 451a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.AddEnumDescriptor(unittest_pb2.TestAllTypes.NestedEnum.DESCRIPTOR) 452a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 453a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'protobuf_unittest.TestAllTypes.NestedEnum', 454a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindEnumTypeByName( 455a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes.NestedEnum').full_name) 456a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 457a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # Files are implicitly also indexed when enums are added. 458a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 459a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto', 460a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileByName( 461a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto').name) 462a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 463a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 464a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto', 465a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileContainingSymbol( 466a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson prefix + 'protobuf_unittest.TestAllTypes.NestedEnum').name) 467a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 468a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testEnum(self): 469a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self._TestEnum('') 470a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self._TestEnum('.') 471a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 472a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson def testFile(self): 473a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool = descriptor_pool.DescriptorPool() 474a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.AddFileDescriptor(unittest_pb2.DESCRIPTOR) 475a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson self.assertEquals( 476a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto', 477a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileByName( 478a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/unittest.proto').name) 479a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 480a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # AddFileDescriptor is not recursive; messages and enums within files must 481a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson # be explicitly registered. 482a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson with self.assertRaises(KeyError): 483a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson pool.FindFileContainingSymbol( 484a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'protobuf_unittest.TestAllTypes') 485a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 486a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 487a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonTEST1_FILE = ProtoFile( 488a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/internal/descriptor_pool_test1.proto', 489a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal', 490a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 491a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DescriptorPoolTest1': MessageType({ 492a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('ALPHA', 1), ('BETA', 2)]), 493a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedMessage': MessageType({ 494a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('EPSILON', 5), ('ZETA', 6)]), 495a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DeepNestedMessage': MessageType({ 496a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('ETA', 7), ('THETA', 8)]), 497a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 498a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'ETA')), 499a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'theta')), 500a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]), 501a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 502a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'ZETA')), 503a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'beta')), 504a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('deep_nested_message', MessageField(3, 'DeepNestedMessage')), 505a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]) 506a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 507a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'BETA')), 508a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_message', MessageField(2, 'NestedMessage')), 509a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ], is_extendable=True), 510a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 511a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DescriptorPoolTest2': MessageType({ 512a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('GAMMA', 3), ('DELTA', 4)]), 513a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedMessage': MessageType({ 514a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('IOTA', 9), ('KAPPA', 10)]), 515a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DeepNestedMessage': MessageType({ 516a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('LAMBDA', 11), ('MU', 12)]), 517a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 518a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'MU')), 519a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'lambda')), 520a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]), 521a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 522a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'IOTA')), 523a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'delta')), 524a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('deep_nested_message', MessageField(3, 'DeepNestedMessage')), 525a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]) 526a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 527a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'GAMMA')), 528a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_message', MessageField(2, 'NestedMessage')), 529a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]), 530a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }) 531a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 532a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 533a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff DavidsonTEST2_FILE = ProtoFile( 534a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google/protobuf/internal/descriptor_pool_test2.proto', 535a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'google.protobuf.python.internal', 536a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 537a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DescriptorPoolTest3': MessageType({ 538a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('NU', 13), ('XI', 14)]), 539a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedMessage': MessageType({ 540a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('OMICRON', 15), ('PI', 16)]), 541a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'DeepNestedMessage': MessageType({ 542a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 'NestedEnum': EnumType([('RHO', 17), ('SIGMA', 18)]), 543a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 544a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'RHO')), 545a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'sigma')), 546a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]), 547a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 548a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'PI')), 549a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_field', StringField(2, 'nu')), 550a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('deep_nested_message', MessageField(3, 'DeepNestedMessage')), 551a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]) 552a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, [ 553a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_enum', EnumField(1, 'NestedEnum', 'XI')), 554a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('nested_message', MessageField(2, 'NestedMessage')), 555a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ], extensions=[ 556a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ('descriptor_pool_test', 557a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ExtensionField(1001, 'DescriptorPoolTest1')), 558a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ]), 559a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }, 560a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson dependencies=['google/protobuf/internal/descriptor_pool_test1.proto']) 561a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 562a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 563a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonif __name__ == '__main__': 564a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson basetest.main() 565